@api-client/ui 0.0.4 → 0.0.5
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/dist/amf/lib/AmfParameters.js +0 -4
- package/dist/amf/lib/AmfParameters.js.map +1 -1
- package/dist/amf/lib/navigation-layout/EndpointsTree.js +0 -2
- package/dist/amf/lib/navigation-layout/EndpointsTree.js.map +1 -1
- package/dist/amf/lib/navigation-layout/NaturalTree.js +0 -2
- package/dist/amf/lib/navigation-layout/NaturalTree.js.map +1 -1
- package/dist/amf/store/AmfGraphStore.js +0 -2
- package/dist/amf/store/AmfGraphStore.js.map +1 -1
- package/dist/amf/store/AmfStore.js +0 -7
- package/dist/amf/store/AmfStore.js.map +1 -1
- package/dist/bindings/base/HttpClientStoreBindings.js +4 -1
- package/dist/bindings/base/HttpClientStoreBindings.js.map +1 -1
- package/dist/bindings/base/PlatformBindings.js +6 -10
- package/dist/bindings/base/PlatformBindings.js.map +1 -1
- package/dist/bindings/base/ProxyBindings.js +9 -6
- package/dist/bindings/base/ProxyBindings.js.map +1 -1
- package/dist/bindings/base/SharedWorkerThread.js +4 -1
- package/dist/bindings/base/SharedWorkerThread.js.map +1 -1
- package/dist/bindings/base/StoreBindings.js +162 -170
- package/dist/bindings/base/StoreBindings.js.map +1 -1
- package/dist/bindings/web/WebConfigurationBindings.js +22 -24
- package/dist/bindings/web/WebConfigurationBindings.js.map +1 -1
- package/dist/bindings/web/WebFileBindings.js +7 -4
- package/dist/bindings/web/WebFileBindings.js.map +1 -1
- package/dist/bindings/web/WebHttpClientStoreBindings.js +19 -21
- package/dist/bindings/web/WebHttpClientStoreBindings.js.map +1 -1
- package/dist/bindings/web/WebNavigationBindings.js +4 -1
- package/dist/bindings/web/WebNavigationBindings.js.map +1 -1
- package/dist/bindings/web/WebProxyBindings.js +5 -6
- package/dist/bindings/web/WebProxyBindings.js.map +1 -1
- package/dist/bindings/web/WebStoreBindings.js +39 -44
- package/dist/bindings/web/WebStoreBindings.js.map +1 -1
- package/dist/contextual-menu/ContextualMenu.js +10 -19
- package/dist/contextual-menu/ContextualMenu.js.map +1 -1
- package/dist/contextual-menu/ContextualMenuElement.js +4 -32
- package/dist/contextual-menu/ContextualMenuElement.js.map +1 -1
- package/dist/contextual-menu/MenuItem.js +0 -12
- package/dist/contextual-menu/MenuItem.js.map +1 -1
- package/dist/define/amf/api-annotation-document.js +1 -1
- package/dist/define/amf/api-annotation-document.js.map +1 -1
- package/dist/define/amf/api-authorization-editor.js +1 -1
- package/dist/define/amf/api-authorization-editor.js.map +1 -1
- package/dist/define/amf/api-channel-document.js +1 -1
- package/dist/define/amf/api-channel-document.js.map +1 -1
- package/dist/define/amf/api-documentation-document.js +1 -1
- package/dist/define/amf/api-documentation-document.js.map +1 -1
- package/dist/define/amf/api-documentation.js +1 -1
- package/dist/define/amf/api-documentation.js.map +1 -1
- package/dist/define/amf/api-navigation.js +1 -1
- package/dist/define/amf/api-navigation.js.map +1 -1
- package/dist/define/amf/api-operation-document.js +1 -1
- package/dist/define/amf/api-operation-document.js.map +1 -1
- package/dist/define/amf/api-parameter-document.js +1 -1
- package/dist/define/amf/api-parameter-document.js.map +1 -1
- package/dist/define/amf/api-parametrized-security-scheme.js +1 -1
- package/dist/define/amf/api-parametrized-security-scheme.js.map +1 -1
- package/dist/define/amf/api-payload-document.js +1 -1
- package/dist/define/amf/api-payload-document.js.map +1 -1
- package/dist/define/amf/api-request-document.js +1 -1
- package/dist/define/amf/api-request-document.js.map +1 -1
- package/dist/define/amf/api-request-editor.js +1 -1
- package/dist/define/amf/api-request-editor.js.map +1 -1
- package/dist/define/amf/api-request.js +1 -1
- package/dist/define/amf/api-request.js.map +1 -1
- package/dist/define/amf/api-resource-document.js +1 -1
- package/dist/define/amf/api-resource-document.js.map +1 -1
- package/dist/define/amf/api-response-document.js +1 -1
- package/dist/define/amf/api-response-document.js.map +1 -1
- package/dist/define/amf/api-schema-document.js +1 -1
- package/dist/define/amf/api-schema-document.js.map +1 -1
- package/dist/define/amf/api-security-document.js +1 -1
- package/dist/define/amf/api-security-document.js.map +1 -1
- package/dist/define/amf/api-security-requirement-document.js +1 -1
- package/dist/define/amf/api-security-requirement-document.js.map +1 -1
- package/dist/define/amf/api-server-picker.js +1 -1
- package/dist/define/amf/api-server-picker.js.map +1 -1
- package/dist/define/amf/api-summary.js +1 -1
- package/dist/define/amf/api-summary.js.map +1 -1
- package/dist/define/amf/authorization/amf-apikey-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-apikey-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-basic-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-basic-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-bearer-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-bearer-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-oauth2-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-oauth2-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-oidc-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-oidc-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-passthrough-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-passthrough-authorization.js.map +1 -1
- package/dist/define/amf/authorization/amf-ramlcustom-authorization.js +1 -1
- package/dist/define/amf/authorization/amf-ramlcustom-authorization.js.map +1 -1
- package/dist/define/authorization/apikey-authorization.js +1 -1
- package/dist/define/authorization/apikey-authorization.js.map +1 -1
- package/dist/define/authorization/basic-authorization.js +1 -1
- package/dist/define/authorization/basic-authorization.js.map +1 -1
- package/dist/define/authorization/bearer-authorization.js +1 -1
- package/dist/define/authorization/bearer-authorization.js.map +1 -1
- package/dist/define/authorization/cc-authorization.js +1 -1
- package/dist/define/authorization/cc-authorization.js.map +1 -1
- package/dist/define/authorization/ntlm-authorization.js +1 -1
- package/dist/define/authorization/ntlm-authorization.js.map +1 -1
- package/dist/define/authorization/oauth2-authorization.js +1 -1
- package/dist/define/authorization/oauth2-authorization.js.map +1 -1
- package/dist/define/authorization/oidc-authorization.js +1 -1
- package/dist/define/authorization/oidc-authorization.js.map +1 -1
- package/dist/define/contextual-menu/contextual-menu.js +1 -1
- package/dist/define/contextual-menu/contextual-menu.js.map +1 -1
- package/dist/define/dialog/confirm-delete-dialog.js +1 -1
- package/dist/define/dialog/confirm-delete-dialog.js.map +1 -1
- package/dist/define/dialog/rename-dialog.js +1 -1
- package/dist/define/dialog/rename-dialog.js.map +1 -1
- package/dist/define/files/share-file.js +1 -1
- package/dist/define/files/share-file.js.map +1 -1
- package/dist/define/har/har-viewer.js +1 -1
- package/dist/define/har/har-viewer.js.map +1 -1
- package/dist/define/highlight/marked-highlight.js +1 -1
- package/dist/define/highlight/marked-highlight.js.map +1 -1
- package/dist/define/highlight/prism-highlight.js +1 -1
- package/dist/define/highlight/prism-highlight.js.map +1 -1
- package/dist/define/http/http-assertions.js +1 -1
- package/dist/define/http/http-assertions.js.map +1 -1
- package/dist/define/http/http-body-editor.js +1 -1
- package/dist/define/http/http-body-editor.js.map +1 -1
- package/dist/define/http/http-body-multipart-editor.js +1 -1
- package/dist/define/http/http-body-multipart-editor.js.map +1 -1
- package/dist/define/http/http-body-text-editor.js +1 -1
- package/dist/define/http/http-body-text-editor.js.map +1 -1
- package/dist/define/http/http-body-urlencoded-editor.js +1 -1
- package/dist/define/http/http-body-urlencoded-editor.js.map +1 -1
- package/dist/define/http/http-headers-form.js +1 -1
- package/dist/define/http/http-headers-form.js.map +1 -1
- package/dist/define/http/http-log-body.js +1 -1
- package/dist/define/http/http-log-body.js.map +1 -1
- package/dist/define/http/http-log-headers.js +1 -1
- package/dist/define/http/http-log-headers.js.map +1 -1
- package/dist/define/http/http-log-timings.js +1 -1
- package/dist/define/http/http-log-timings.js.map +1 -1
- package/dist/define/http/http-request-config.js +1 -1
- package/dist/define/http/http-request-config.js.map +1 -1
- package/dist/define/http/http-request-editor.js +1 -1
- package/dist/define/http/http-request-editor.js.map +1 -1
- package/dist/define/http/http-request-log.js +1 -1
- package/dist/define/http/http-request-log.js.map +1 -1
- package/dist/define/http/http-snippets.js +1 -1
- package/dist/define/http/http-snippets.js.map +1 -1
- package/dist/define/http/http-url-input.js +1 -1
- package/dist/define/http/http-url-input.js.map +1 -1
- package/dist/define/http/http-url-params-form.js +1 -1
- package/dist/define/http/http-url-params-form.js.map +1 -1
- package/dist/define/http-project/http-project-request-history.js +1 -1
- package/dist/define/http-project/http-project-request-history.js.map +1 -1
- package/dist/define/http-project/http-project-request.js +2 -2
- package/dist/define/http-project/http-project-request.js.map +1 -1
- package/dist/define/http-project/project-navigation.js +1 -1
- package/dist/define/http-project/project-navigation.js.map +1 -1
- package/dist/define/http-project/project-run-report.js +1 -1
- package/dist/define/http-project/project-run-report.js.map +1 -1
- package/dist/define/http-project/project-runner.js +2 -2
- package/dist/define/http-project/project-runner.js.map +1 -1
- package/dist/define/layout/split-view.js +1 -1
- package/dist/define/layout/split-view.js.map +1 -1
- package/dist/define/schema-design/schema-design-navigation.js +1 -1
- package/dist/define/schema-design/schema-design-navigation.js.map +1 -1
- package/dist/define/schema-design/schema-namespace-selector.js +1 -1
- package/dist/define/schema-design/schema-namespace-selector.js.map +1 -1
- package/dist/define/ui/ui-button.js +1 -1
- package/dist/define/ui/ui-button.js.map +1 -1
- package/dist/define/ui/ui-chip.js +1 -1
- package/dist/define/ui/ui-chip.js.map +1 -1
- package/dist/define/ui/ui-collapse.js +1 -1
- package/dist/define/ui/ui-collapse.js.map +1 -1
- package/dist/define/ui/ui-dialog.js +1 -1
- package/dist/define/ui/ui-dialog.js.map +1 -1
- package/dist/define/ui/ui-dropdown-list.js +1 -1
- package/dist/define/ui/ui-dropdown-list.js.map +1 -1
- package/dist/define/ui/ui-icon-button.js +1 -1
- package/dist/define/ui/ui-icon-button.js.map +1 -1
- package/dist/define/ui/ui-icon.js +1 -1
- package/dist/define/ui/ui-icon.js.map +1 -1
- package/dist/define/ui/ui-list-item.js +1 -1
- package/dist/define/ui/ui-list-item.js.map +1 -1
- package/dist/define/ui/ui-list.js +1 -1
- package/dist/define/ui/ui-list.js.map +1 -1
- package/dist/define/ui/ui-listbox.js +1 -1
- package/dist/define/ui/ui-listbox.js.map +1 -1
- package/dist/define/ui/ui-progress.js +1 -1
- package/dist/define/ui/ui-progress.js.map +1 -1
- package/dist/define/ui/ui-segmented-button-set.js +1 -1
- package/dist/define/ui/ui-segmented-button-set.js.map +1 -1
- package/dist/define/ui/ui-segmented-button.js +1 -1
- package/dist/define/ui/ui-segmented-button.js.map +1 -1
- package/dist/define/ui/ui-snackbar.js +1 -1
- package/dist/define/ui/ui-snackbar.js.map +1 -1
- package/dist/define/ui/ui-tab.js +1 -1
- package/dist/define/ui/ui-tab.js.map +1 -1
- package/dist/define/ui/ui-tabs.js +1 -1
- package/dist/define/ui/ui-tabs.js.map +1 -1
- package/dist/directives/data-attr.js +0 -1
- package/dist/directives/data-attr.js.map +1 -1
- package/dist/elements/ApiElement.js +0 -7
- package/dist/elements/ApiElement.js.map +1 -1
- package/dist/elements/amf/ApiAnnotationDocument.element.js +0 -2
- package/dist/elements/amf/ApiAnnotationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiAuthorizationEditor.element.js +0 -32
- package/dist/elements/amf/ApiAuthorizationEditor.element.js.map +1 -1
- package/dist/elements/amf/ApiDocumentation.element.js +0 -91
- package/dist/elements/amf/ApiDocumentation.element.js.map +1 -1
- package/dist/elements/amf/ApiDocumentationBase.js +0 -9
- package/dist/elements/amf/ApiDocumentationBase.js.map +1 -1
- package/dist/elements/amf/ApiDocumentationDocument.element.js +0 -1
- package/dist/elements/amf/ApiDocumentationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiNavigation.element.js +0 -97
- package/dist/elements/amf/ApiNavigation.element.js.map +1 -1
- package/dist/elements/amf/ApiOperationDocument.element.js +0 -76
- package/dist/elements/amf/ApiOperationDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiParameterDocument.element.js +0 -3
- package/dist/elements/amf/ApiParameterDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js +0 -1
- package/dist/elements/amf/ApiParametrizedSecurityScheme.element.js.map +1 -1
- package/dist/elements/amf/ApiPayloadDocument.element.js +0 -1
- package/dist/elements/amf/ApiPayloadDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiRequest.element.js +0 -78
- package/dist/elements/amf/ApiRequest.element.js.map +1 -1
- package/dist/elements/amf/ApiRequestDocument.element.js +0 -38
- package/dist/elements/amf/ApiRequestDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiRequestEditor.element.js +0 -118
- package/dist/elements/amf/ApiRequestEditor.element.js.map +1 -1
- package/dist/elements/amf/ApiResourceDocument.element.js +0 -75
- package/dist/elements/amf/ApiResourceDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiResponseDocument.element.js +0 -17
- package/dist/elements/amf/ApiResponseDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSchemaDocument.element.js +0 -28
- package/dist/elements/amf/ApiSchemaDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSecurityDocument.element.js +0 -28
- package/dist/elements/amf/ApiSecurityDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiSecurityRequirementDocument.element.js +0 -1
- package/dist/elements/amf/ApiSecurityRequirementDocument.element.js.map +1 -1
- package/dist/elements/amf/ApiServerPicker.element.js +2 -65
- package/dist/elements/amf/ApiServerPicker.element.js.map +1 -1
- package/dist/elements/amf/ApiSummary.element.js +0 -26
- package/dist/elements/amf/ApiSummary.element.js.map +1 -1
- package/dist/elements/amf/authorization/AmfApiKey.js +0 -5
- package/dist/elements/amf/authorization/AmfApiKey.js.map +1 -1
- package/dist/elements/amf/authorization/AmfBasic.js +0 -4
- package/dist/elements/amf/authorization/AmfBasic.js.map +1 -1
- package/dist/elements/amf/authorization/AmfBearer.js +0 -4
- package/dist/elements/amf/authorization/AmfBearer.js.map +1 -1
- package/dist/elements/amf/authorization/AmfOauth2.js +0 -13
- package/dist/elements/amf/authorization/AmfOauth2.js.map +1 -1
- package/dist/elements/amf/authorization/AmfOidc.js +0 -4
- package/dist/elements/amf/authorization/AmfOidc.js.map +1 -1
- package/dist/elements/amf/authorization/AmfPassThrough.js +0 -6
- package/dist/elements/amf/authorization/AmfPassThrough.js.map +1 -1
- package/dist/elements/amf/authorization/AmfRamlCustom.js +0 -6
- package/dist/elements/amf/authorization/AmfRamlCustom.js.map +1 -1
- package/dist/elements/authorization/OAuth2Authorize.js +0 -14
- package/dist/elements/authorization/OAuth2Authorize.js.map +1 -1
- package/dist/elements/authorization/OidcAuthorize.js +0 -14
- package/dist/elements/authorization/OidcAuthorize.js.map +1 -1
- package/dist/elements/authorization/ui/ApiKeyAuthorization.js +0 -2
- package/dist/elements/authorization/ui/ApiKeyAuthorization.js.map +1 -1
- package/dist/elements/authorization/ui/Authorization.js +18 -32
- package/dist/elements/authorization/ui/Authorization.js.map +1 -1
- package/dist/elements/authorization/ui/CcAuthorization.js +1 -3
- package/dist/elements/authorization/ui/CcAuthorization.js.map +1 -1
- package/dist/elements/authorization/ui/OAuth2Authorization.js +21 -50
- package/dist/elements/authorization/ui/OAuth2Authorization.js.map +1 -1
- package/dist/elements/authorization/ui/OidcAuthorization.js +4 -6
- package/dist/elements/authorization/ui/OidcAuthorization.js.map +1 -1
- package/dist/elements/code/HttpSnippets.js +9 -8
- package/dist/elements/code/HttpSnippets.js.map +1 -1
- package/dist/elements/dialog/ConfirmDelete.js +0 -12
- package/dist/elements/dialog/ConfirmDelete.js.map +1 -1
- package/dist/elements/dialog/Rename.js +0 -6
- package/dist/elements/dialog/Rename.js.map +1 -1
- package/dist/elements/environment/EnvironmentEditor.js +8 -11
- package/dist/elements/environment/EnvironmentEditor.js.map +1 -1
- package/dist/elements/environment/ServerEditor.js +7 -45
- package/dist/elements/environment/ServerEditor.js.map +1 -1
- package/dist/elements/environment/VariablesEditor.js +7 -12
- package/dist/elements/environment/VariablesEditor.js.map +1 -1
- package/dist/elements/files/ShareFile.js +19 -57
- package/dist/elements/files/ShareFile.js.map +1 -1
- package/dist/elements/har/HarViewer.js +6 -7
- package/dist/elements/har/HarViewer.js.map +1 -1
- package/dist/elements/highlight/MarkedHighlight.js +4 -56
- package/dist/elements/highlight/MarkedHighlight.js.map +1 -1
- package/dist/elements/highlight/PrismHighlight.js +9 -18
- package/dist/elements/highlight/PrismHighlight.js.map +1 -1
- package/dist/elements/highlight/PrismHighlighter.js +4 -6
- package/dist/elements/highlight/PrismHighlighter.js.map +1 -1
- package/dist/elements/http/BodyEditor.js +21 -33
- package/dist/elements/http/BodyEditor.js.map +1 -1
- package/dist/elements/http/BodyMultipartEditor.js +17 -18
- package/dist/elements/http/BodyMultipartEditor.js.map +1 -1
- package/dist/elements/http/BodyTextEditor.js +2 -15
- package/dist/elements/http/BodyTextEditor.js.map +1 -1
- package/dist/elements/http/BodyUrlEncodedEditor.js +20 -21
- package/dist/elements/http/BodyUrlEncodedEditor.js.map +1 -1
- package/dist/elements/http/HeadersForm.js +16 -17
- package/dist/elements/http/HeadersForm.js.map +1 -1
- package/dist/elements/http/HttpAssertions.js +8 -6
- package/dist/elements/http/HttpAssertions.js.map +1 -1
- package/dist/elements/http/LogBody.js +10 -21
- package/dist/elements/http/LogBody.js.map +1 -1
- package/dist/elements/http/LogHeaders.js +4 -23
- package/dist/elements/http/LogHeaders.js.map +1 -1
- package/dist/elements/http/LogTimings.js +11 -13
- package/dist/elements/http/LogTimings.js.map +1 -1
- package/dist/elements/http/RequestConfigElement.js +7 -4
- package/dist/elements/http/RequestConfigElement.js.map +1 -1
- package/dist/elements/http/RequestEditor.js +54 -88
- package/dist/elements/http/RequestEditor.js.map +1 -1
- package/dist/elements/http/RequestLog.js +9 -14
- package/dist/elements/http/RequestLog.js.map +1 -1
- package/dist/elements/http/UrlInput.js +15 -25
- package/dist/elements/http/UrlInput.js.map +1 -1
- package/dist/elements/http/UrlParamsForm.js +16 -13
- package/dist/elements/http/UrlParamsForm.js.map +1 -1
- package/dist/elements/layout/LayoutManager.js +16 -24
- package/dist/elements/layout/LayoutManager.js.map +1 -1
- package/dist/elements/layout/LayoutPanelElement.js +17 -23
- package/dist/elements/layout/LayoutPanelElement.js.map +1 -1
- package/dist/elements/layout/SplitItem.js +4 -12
- package/dist/elements/layout/SplitItem.js.map +1 -1
- package/dist/elements/layout/SplitLayout.js +18 -24
- package/dist/elements/layout/SplitLayout.js.map +1 -1
- package/dist/elements/layout/SplitPanel.js +10 -16
- package/dist/elements/layout/SplitPanel.js.map +1 -1
- package/dist/elements/layout/SplitView.js +17 -26
- package/dist/elements/layout/SplitView.js.map +1 -1
- package/dist/elements/navigation/AppNavigationElement.js +8 -47
- package/dist/elements/navigation/AppNavigationElement.js.map +1 -1
- package/dist/elements/navigation/AppNavigationItemElement.js +19 -24
- package/dist/elements/navigation/AppNavigationItemElement.js.map +1 -1
- package/dist/elements/project/HttpProjectRequest.js +0 -38
- package/dist/elements/project/HttpProjectRequest.js.map +1 -1
- package/dist/elements/project/HttpProjectRequestHistory.js +9 -35
- package/dist/elements/project/HttpProjectRequestHistory.js.map +1 -1
- package/dist/elements/project/ProjectNavigation.js +0 -4
- package/dist/elements/project/ProjectNavigation.js.map +1 -1
- package/dist/elements/project/ProjectRunReport.js +4 -15
- package/dist/elements/project/ProjectRunReport.js.map +1 -1
- package/dist/elements/project/ProjectRunner.js +2 -47
- package/dist/elements/project/ProjectRunner.js.map +1 -1
- package/dist/elements/schema-design/AssociationFormElement.js +0 -13
- package/dist/elements/schema-design/AssociationFormElement.js.map +1 -1
- package/dist/elements/schema-design/DataEntityEditorElement.js +0 -22
- package/dist/elements/schema-design/DataEntityEditorElement.js.map +1 -1
- package/dist/elements/schema-design/DataModelVisualizationElement.js +0 -16
- package/dist/elements/schema-design/DataModelVisualizationElement.js.map +1 -1
- package/dist/elements/schema-design/DataSchemaDocument.js +0 -36
- package/dist/elements/schema-design/DataSchemaDocument.js.map +1 -1
- package/dist/elements/schema-design/EntityFormElement.js +0 -18
- package/dist/elements/schema-design/EntityFormElement.js.map +1 -1
- package/dist/elements/schema-design/PropertyFormElement.js +0 -12
- package/dist/elements/schema-design/PropertyFormElement.js.map +1 -1
- package/dist/elements/schema-design/SchemaDesignNavigation.js +0 -9
- package/dist/elements/schema-design/SchemaDesignNavigation.js.map +1 -1
- package/dist/elements/schema-design/SchemaNamespaceSelector.js +0 -9
- package/dist/elements/schema-design/SchemaNamespaceSelector.js.map +1 -1
- package/dist/elements/user/UserAvatarElement.js +0 -9
- package/dist/elements/user/UserAvatarElement.js.map +1 -1
- package/dist/events/http-client/models/CertificatesEvents.js +2 -2
- package/dist/events/http-client/models/CertificatesEvents.js.map +1 -1
- package/dist/http-client/idb/Base.js +5 -10
- package/dist/http-client/idb/Base.js.map +1 -1
- package/dist/http-client/idb/LegacyMockedStore.js +0 -1
- package/dist/http-client/idb/LegacyMockedStore.js.map +1 -1
- package/dist/http-client/idb/MockedStore.js +3 -1
- package/dist/http-client/idb/MockedStore.js.map +1 -1
- package/dist/http-client/store/DataImportProcessor.js +0 -3
- package/dist/http-client/store/DataImportProcessor.js.map +1 -1
- package/dist/http-client/store/HttpClientIdbDatabase.js +8 -7
- package/dist/http-client/store/HttpClientIdbDatabase.js.map +1 -1
- package/dist/http-client/store/IdbThread.js +23 -20
- package/dist/http-client/store/IdbThread.js.map +1 -1
- package/dist/http-client/store/idb/IdbProjectUi.js +4 -1
- package/dist/http-client/store/idb/IdbProjectUi.js.map +1 -1
- package/dist/http-client/store/idb/IdbStore.js +0 -2
- package/dist/http-client/store/idb/IdbStore.js.map +1 -1
- package/dist/http-client/store/idb/IdbUrlHistory.js +4 -1
- package/dist/http-client/store/idb/IdbUrlHistory.js.map +1 -1
- package/dist/http-client/store/idb/IdbWsHistory.js +4 -1
- package/dist/http-client/store/idb/IdbWsHistory.js.map +1 -1
- package/dist/lib/chart/HttpHistoryChart.js +7 -8
- package/dist/lib/chart/HttpHistoryChart.js.map +1 -1
- package/dist/mixins/FileDropMixin.js +0 -1
- package/dist/mixins/FileDropMixin.js.map +1 -1
- package/dist/mixins/RenderableMixin.js +11 -15
- package/dist/mixins/RenderableMixin.js.map +1 -1
- package/dist/pages/ApplicationScreen.js +34 -55
- package/dist/pages/ApplicationScreen.js.map +1 -1
- package/dist/pages/api-client/ApiClient.screen.js +11 -20
- package/dist/pages/api-client/ApiClient.screen.js.map +1 -1
- package/dist/pages/api-client/Authenticate.screen.js +4 -6
- package/dist/pages/api-client/Authenticate.screen.js.map +1 -1
- package/dist/pages/api-client/StoreConfig.screen.js +21 -37
- package/dist/pages/api-client/StoreConfig.screen.js.map +1 -1
- package/dist/pages/api-client/Telemetry.screen.js +1 -2
- package/dist/pages/api-client/Telemetry.screen.js.map +1 -1
- package/dist/pages/api-client/pages/Files.page.js +6 -27
- package/dist/pages/api-client/pages/Files.page.js.map +1 -1
- package/dist/pages/api-client/pages/Settings.page.js +2 -4
- package/dist/pages/api-client/pages/Settings.page.js.map +1 -1
- package/dist/pages/api-client/pages/Trash.page.js +2 -13
- package/dist/pages/api-client/pages/Trash.page.js.map +1 -1
- package/dist/pages/demo/DemoPage.js +13 -13
- package/dist/pages/demo/DemoPage.js.map +1 -1
- package/dist/pages/http-project/HttpProject.screen.js +25 -35
- package/dist/pages/http-project/HttpProject.screen.js.map +1 -1
- package/dist/pages/schema-design/SchemaDesigner.screen.js +14 -27
- package/dist/pages/schema-design/SchemaDesigner.screen.js.map +1 -1
- package/dist/store/HttpStore.js +0 -3
- package/dist/store/HttpStore.js.map +1 -1
- package/dist/store/UserCache.js +5 -5
- package/dist/store/UserCache.js.map +1 -1
- package/dist/ui/UiElement.js +4 -5
- package/dist/ui/UiElement.js.map +1 -1
- package/dist/ui/button/SegmentedButton.js +9 -11
- package/dist/ui/button/SegmentedButton.js.map +1 -1
- package/dist/ui/button/SegmentedButtonsSet.js +6 -7
- package/dist/ui/button/SegmentedButtonsSet.js.map +1 -1
- package/dist/ui/button/UiButton.js +17 -39
- package/dist/ui/button/UiButton.js.map +1 -1
- package/dist/ui/button/UiIconButton.js +9 -35
- package/dist/ui/button/UiIconButton.js.map +1 -1
- package/dist/ui/chip/UiChip.js +9 -49
- package/dist/ui/chip/UiChip.js.map +1 -1
- package/dist/ui/collapse/UiCollapse.js +15 -20
- package/dist/ui/collapse/UiCollapse.js.map +1 -1
- package/dist/ui/controllers/ActionController.js +143 -144
- package/dist/ui/controllers/ActionController.js.map +1 -1
- package/dist/ui/controllers/RadioSelectionController.js +0 -1
- package/dist/ui/controllers/RadioSelectionController.js.map +1 -1
- package/dist/ui/date/DateTime.js +3 -3
- package/dist/ui/date/DateTime.js.map +1 -1
- package/dist/ui/dialog/UiDialog.js +14 -38
- package/dist/ui/dialog/UiDialog.js.map +1 -1
- package/dist/ui/effects/ripple.js +20 -18
- package/dist/ui/effects/ripple.js.map +1 -1
- package/dist/ui/effects/rippleDirective.js +6 -7
- package/dist/ui/effects/rippleDirective.js.map +1 -1
- package/dist/ui/icons/UiIcon.js +4 -3
- package/dist/ui/icons/UiIcon.js.map +1 -1
- package/dist/ui/input/CheckboxElement.js +12 -10
- package/dist/ui/input/CheckboxElement.js.map +1 -1
- package/dist/ui/input/CheckedElement.js +2 -13
- package/dist/ui/input/CheckedElement.js.map +1 -1
- package/dist/ui/input/Input.js +169 -234
- package/dist/ui/input/Input.js.map +1 -1
- package/dist/ui/input/RadioElement.js +13 -11
- package/dist/ui/input/RadioElement.js.map +1 -1
- package/dist/ui/input/SwitchElement.js +0 -18
- package/dist/ui/input/SwitchElement.js.map +1 -1
- package/dist/ui/input/TextAreaElement.js +0 -15
- package/dist/ui/input/TextAreaElement.js.map +1 -1
- package/dist/ui/list/DividerElement.js +5 -10
- package/dist/ui/list/DividerElement.js.map +1 -1
- package/dist/ui/list/UiDropdownList.js +7 -48
- package/dist/ui/list/UiDropdownList.js.map +1 -1
- package/dist/ui/list/UiList.js +3 -15
- package/dist/ui/list/UiList.js.map +1 -1
- package/dist/ui/list/UiListItem.js +4 -17
- package/dist/ui/list/UiListItem.js.map +1 -1
- package/dist/ui/list/UiListbox.js +0 -1
- package/dist/ui/list/UiListbox.js.map +1 -1
- package/dist/ui/notification/SnackNotifications.js +1 -2
- package/dist/ui/notification/SnackNotifications.js.map +1 -1
- package/dist/ui/notification/Snackbar.js +27 -51
- package/dist/ui/notification/Snackbar.js.map +1 -1
- package/dist/ui/progress/Range.js +24 -23
- package/dist/ui/progress/Range.js.map +1 -1
- package/dist/ui/progress/UiProgress.js +0 -11
- package/dist/ui/progress/UiProgress.js.map +1 -1
- package/dist/ui/table/DataTable.js +7 -12
- package/dist/ui/table/DataTable.js.map +1 -1
- package/dist/ui/tabs/UiTab.js +24 -25
- package/dist/ui/tabs/UiTab.js.map +1 -1
- package/dist/ui/tabs/UiTabs.js +21 -35
- package/dist/ui/tabs/UiTabs.js.map +1 -1
- package/dist/visualization/elements/VizWorkspaceElement.js +12 -21
- package/dist/visualization/elements/VizWorkspaceElement.js.map +1 -1
- package/dist/visualization/lib/AssociationAnchors.js +16 -28
- package/dist/visualization/lib/AssociationAnchors.js.map +1 -1
- package/dist/visualization/lib/Point.js +0 -2
- package/dist/visualization/lib/Point.js.map +1 -1
- package/dist/visualization/lib/SelectionManager.js +10 -11
- package/dist/visualization/lib/SelectionManager.js.map +1 -1
- package/dist/visualization/lib/WorkspaceAlignment.js +0 -1
- package/dist/visualization/lib/WorkspaceAlignment.js.map +1 -1
- package/dist/visualization/lib/WorkspaceDebugging.js +5 -8
- package/dist/visualization/lib/WorkspaceDebugging.js.map +1 -1
- package/dist/visualization/lib/WorkspaceEdges.js +17 -19
- package/dist/visualization/lib/WorkspaceEdges.js.map +1 -1
- package/dist/visualization/lib/WorkspaceGestures.js +0 -3
- package/dist/visualization/lib/WorkspaceGestures.js.map +1 -1
- package/dist/visualization/lib/WorkspaceSizing.js +4 -6
- package/dist/visualization/lib/WorkspaceSizing.js.map +1 -1
- package/dist/visualization/lib/lines/RectilinearLine.js +8 -34
- package/dist/visualization/lib/lines/RectilinearLine.js.map +1 -1
- package/dist/visualization/lib/tips/RectilinearTip.js +0 -1
- package/dist/visualization/lib/tips/RectilinearTip.js.map +1 -1
- package/dist/visualization/lib/tips/TipArtist.js +0 -3
- package/dist/visualization/lib/tips/TipArtist.js.map +1 -1
- package/dist/visualization/plugin/dnd/DragAndDropPlugin.js +3 -5
- package/dist/visualization/plugin/dnd/DragAndDropPlugin.js.map +1 -1
- package/dist/visualization/plugin/group-selection/GroupSelection.js +19 -19
- package/dist/visualization/plugin/group-selection/GroupSelection.js.map +1 -1
- package/dist/visualization/plugin/positioning/WorkspaceLayout.js +21 -38
- package/dist/visualization/plugin/positioning/WorkspaceLayout.js.map +1 -1
- package/package.json +3 -2
- package/tsconfig.json +2 -2
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"HarViewer.js","sourceRoot":"","sources":["../../../src/elements/har/HarViewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult } from 'lit';\nimport { ClassInfo, classMap } from 'lit/directives/class-map.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { property } from 'lit/decorators.js';\n// eslint-disable-next-line import/no-unresolved\nimport { Har, Page, Entry, Request, Response, Header, QueryString, Timings } from 'har-format';\nimport { DataCalculator } from '@api-client/core/build/browser.js';\nimport ApiElement from '../ApiElement.js';\nimport '../../define/ui/ui-tab.js';\nimport '../../define/ui/ui-tabs.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-divider.js';\nimport { UiListSelection } from '../../ui/list/UiList.js';\nimport UiTabs, { TabSelectionDetail } from '../../ui/tabs/UiTabs.js';\nimport { SortableEntry, sortEntires } from './HarUtils.js';\n\nexport enum HarTab {\n request = 'request',\n response = 'response',\n requestContent = 'request-content',\n responseContent = 'response-content',\n cookies = 'cookies',\n}\n\nexport interface RenderedPage {\n page: Page;\n entries: RenderedEntry[];\n totalTime: number;\n}\n\nexport interface RenderedEntry extends SortableEntry {\n requestTime: string;\n visualTimings?: RenderedEntryTimings;\n requestFormattedDate: string;\n\n requestSizes: EntrySizing;\n responseSizes: EntrySizing;\n}\n\nexport interface RenderedEntryTimings {\n total: number;\n totalValue: number;\n delay?: number;\n blocked?: number;\n connect?: number;\n dns?: number;\n ssl?: number;\n send?: number;\n receive?: number;\n wait?: number;\n}\n\nexport interface EntrySizing {\n headers: string;\n headersComputed: boolean;\n body: string;\n bodyComputed: boolean;\n sum: string;\n sumComputed: boolean;\n}\n\n/** used when generating keys for entires */\nlet nextId = 0;\n\n/**\n * An element that renders the UI for HAR data.\n */\nexport default class HarViewer extends ApiElement {\n protected harInternal?: Har;\n\n protected ignorePagesInternal?: boolean;\n\n /** \n * The HAR object to render.\n */\n @property({ type: Object })\n get har(): Har | undefined {\n return this.harInternal;\n }\n\n set har(value: Har | undefined) {\n const old = this.harInternal;\n if (old === value) {\n return;\n }\n this.harInternal = value;\n this.processHar();\n }\n\n /** \n * When set it ignores pages matching and renders all requests in a single table.\n */\n @property({ type: Boolean })\n get ignorePages(): boolean | undefined {\n return this.ignorePagesInternal;\n }\n\n set ignorePages(value: boolean | undefined) {\n const old = this.ignorePagesInternal;\n if (old === value) {\n return;\n }\n this.ignorePagesInternal = value;\n this.processHar();\n }\n\n entries?: RenderedEntry[];\n\n pages?: RenderedPage[];\n\n openedPages: string[] = [];\n \n openedEntries: string[] = [];\n\n protected selectedTabs = new Map<string, HarTab>();\n\n /**\n * Called when the `har` or `ignorePages` changed.\n */\n processHar(): void {\n this.entries = undefined;\n this.pages = undefined;\n const { har, ignorePages } = this;\n if (!har || !har.log) {\n this.requestUpdate();\n return;\n }\n const { log } = har;\n const { pages, entries, } = log;\n if (!entries || !entries.length) {\n this.requestUpdate();\n return;\n }\n const items = sortEntires(entries);\n if (ignorePages || !pages || !pages.length) {\n this.computeEntriesOnly(items);\n } else {\n this.computePages(pages, items);\n }\n }\n\n /**\n * Performs computations to render entries only.\n * @param entries The list of entries to process.\n */\n computeEntriesOnly(entries: SortableEntry[]): void {\n const totalTime = this.computeTotalTime(entries[0], entries[entries.length - 1]);\n this.entries = this.computeRenderedEntries(entries, totalTime);\n this.openedEntries = [];\n this.requestUpdate();\n }\n\n /**\n * Performs computations to render entries by page.\n * @param pages The list of pages to process.\n * @param entries The list of entries to process.\n */\n computePages(pages: Page[], entries: SortableEntry[]): void {\n const result: RenderedPage[] = [];\n const opened: string[] = [];\n pages.forEach((page) => {\n opened.push(page.id);\n const items = entries.filter((entry) => entry.pageref === page.id);\n const totalTime = this.computeTotalTime(items[0], items[items.length - 1])\n const item: RenderedPage = ({\n page,\n entries: this.computeRenderedEntries(items, totalTime),\n totalTime,\n });\n result.push(item);\n });\n this.pages = result;\n this.openedPages = opened;\n this.openedEntries = [];\n this.requestUpdate();\n }\n\n /**\n * @param entries The entries to perform computations on.\n * @param totalTime The total time of all entries rendered in the group\n */\n computeRenderedEntries(entries: SortableEntry[], totalTime: number): RenderedEntry[] {\n const result: RenderedEntry[] = [];\n if (!Array.isArray(entries) || !entries.length) {\n return result;\n }\n // This expects entires to be sorted by time (as required by the spec).\n const [startEntry] = entries;\n const startTime = startEntry.timestamp;\n entries.forEach((entry) => {\n const d = new Date(entry.timestamp);\n const visualTimings = this.computeVisualTimes(entry.timings, entry.timestamp - startTime, totalTime);\n const numType: \"numeric\" | \"2-digit\" = 'numeric';\n const options: Intl.DateTimeFormatOptions = ({\n hour: numType,\n minute: numType,\n second: numType,\n fractionalSecondDigits: 3,\n });\n const format = new Intl.DateTimeFormat(undefined, options);\n const requestTime = format.format(d);\n const format2 = new Intl.DateTimeFormat(undefined , {\n timeStyle: 'medium',\n dateStyle: 'medium',\n });\n const requestFormattedDate = format2.format(d);\n const requestSizes = this.computeEntrySizeInfo(entry.request);\n const responseSizes = this.computeEntrySizeInfo(entry.response);\n const id = String(nextId++);\n const item: RenderedEntry = {\n requestTime,\n requestFormattedDate,\n requestSizes,\n responseSizes,\n ...entry,\n id,\n };\n if (visualTimings) {\n item.visualTimings = visualTimings;\n }\n result.push(item);\n });\n return result;\n }\n\n protected computeEntrySizeInfo(info: Request|Response): EntrySizing {\n const result: EntrySizing = ({\n headersComputed: false,\n bodyComputed: false,\n body: '',\n headers: '',\n sum: '',\n sumComputed: false,\n });\n\n let { headersSize=0, bodySize=0 } = info;\n const { headers } = info;\n if (headersSize < 1) {\n const parts: string[] = [];\n (headers || []).forEach((header) => {\n const key = header.name;\n if (key && key.trim() !== '') {\n let value;\n if (Array.isArray(header.value)) {\n value = header.value.join(',');\n } else {\n value = header.value;\n }\n let line = '';\n line += `${key}: `;\n if (typeof value !== 'undefined') {\n value = value.split('\\n').join(' ');\n line += value;\n }\n parts.push(line);\n }\n });\n const hdrStr = parts.join('\\n');\n headersSize = DataCalculator.stringSize(hdrStr);\n result.headersComputed = true;\n }\n if (bodySize < 1) {\n const typedRequest = (info as Request);\n const typedResponse = (info as Response);\n if (typedResponse.content) {\n if (typedResponse.content.size) {\n bodySize = typedResponse.content.size;\n } else if (typedResponse.content.text) {\n bodySize = DataCalculator.stringSize(typedResponse.content.text);\n result.bodyComputed = true;\n }\n } else if (typedRequest.postData && typedRequest.postData.text) {\n bodySize = DataCalculator.stringSize(typedRequest.postData.text);\n result.bodyComputed = true;\n }\n }\n if (bodySize < 0) {\n bodySize = 0;\n }\n result.body = DataCalculator.bytesToSize(bodySize);\n result.headers = DataCalculator.bytesToSize(headersSize);\n result.sum = DataCalculator.bytesToSize(headersSize + bodySize);\n result.sumComputed = result.bodyComputed || result.headersComputed;\n return result;\n }\n\n /**\n * @param code The status code to test for classes.\n * @returns List of classes to be set on the status code\n */\n computeStatusClasses(code: number): ClassInfo {\n const classes = {\n 'status-code': true,\n error: code >= 500 || code === 0,\n warning: code >= 400 && code < 500,\n info: code >= 300 && code < 400,\n };\n return classes;\n }\n\n /**\n * Computes the total time of page requests.\n * @param first The earliest entry in the range\n * @param last The latest entry in the range\n * @returns The total time of the page. Used to build the timeline.\n */\n computeTotalTime(first: Entry, last: Entry): number {\n if (first === last) {\n return this.sumTimings(last.timings);\n }\n const startTime = new Date(first.startedDateTime).getTime();\n const endTime = new Date(last.startedDateTime).getTime();\n const lastDuration = this.sumTimings(last.timings);\n return endTime - startTime + lastDuration;\n }\n\n /**\n * @param timings The entry's timings object.\n * @param delay The timestamp when the first request started.\n * @param total The number of milliseconds all entries took.\n */\n computeVisualTimes(timings: Timings, delay: number, total: number): RenderedEntryTimings|undefined {\n if (!timings) {\n return undefined;\n }\n const timingsSum = this.sumTimings(timings);\n const totalPercent = timingsSum / total * 100;\n const result: RenderedEntryTimings = ({\n total: totalPercent,\n totalValue: timingsSum,\n });\n if (delay) {\n result.delay = delay / total * 100;\n }\n if (typeof timings.blocked === 'number' && timings.blocked > 0) {\n result.blocked = timings.blocked / timingsSum * 100;\n }\n if (typeof timings.connect === 'number' && timings.connect > 0) {\n result.connect = timings.connect / timingsSum * 100;\n }\n if (typeof timings.dns === 'number' && timings.dns > 0) {\n result.dns = timings.dns / timingsSum * 100;\n }\n if (typeof timings.receive === 'number' && timings.receive > 0) {\n result.receive = timings.receive / timingsSum * 100;\n }\n if (typeof timings.send === 'number' && timings.send > 0) {\n result.send = timings.send / timingsSum * 100;\n }\n if (typeof timings.ssl === 'number' && timings.ssl > 0) {\n result.ssl = timings.ssl / timingsSum * 100;\n }\n if (typeof timings.wait === 'number' && timings.wait > 0) {\n result.wait = timings.wait / timingsSum * 100;\n }\n return result;\n }\n\n /**\n * Sums all timing values.\n * @param timings The timings object to compute\n * @returns The total time, excluding -1s\n */\n protected sumTimings(timings: Timings): number {\n let result = 0;\n if (!timings) {\n return result;\n }\n if (typeof timings.blocked === 'number' && timings.blocked > 0) {\n result += timings.blocked;\n }\n if (typeof timings.connect === 'number' && timings.connect > 0) {\n result += timings.connect;\n }\n if (typeof timings.dns === 'number' && timings.dns > 0) {\n result += timings.dns;\n }\n if (typeof timings.receive === 'number' && timings.receive > 0) {\n result += timings.receive;\n }\n if (typeof timings.send === 'number' && timings.send > 0) {\n result += timings.send;\n }\n if (typeof timings.ssl === 'number' && timings.ssl > 0) {\n result += timings.ssl;\n }\n if (typeof timings.wait === 'number' && timings.wait > 0) {\n result += timings.wait;\n }\n return result;\n }\n\n /**\n * A handler for the page label click to toggle the page entries.\n */\n protected pageClickHandler(e: Event): void {\n const node = (e.currentTarget as HTMLElement);\n const id = node.dataset.page;\n if (id) {\n this.togglePage(id);\n }\n }\n\n /**\n * A handler for the page label keydown to toggle the page entries on space key.\n */\n protected pageKeydownHandler(e: KeyboardEvent): void {\n if (e.code !== 'Space') {\n return;\n }\n const node = (e.target as HTMLElement);\n const id = node.dataset.page;\n if (id) {\n this.togglePage(id);\n }\n }\n\n /**\n * Toggles the visibility of the page entries.\n * @param id The id of the page.\n */\n protected togglePage(id: string): void {\n const allOpened = this.openedPages;\n const index = allOpened.indexOf(id);\n if (index === -1) {\n allOpened.push(id);\n } else {\n allOpened.splice(index, 1);\n }\n this.requestUpdate();\n }\n\n /**\n * Handler for the list item selection event.\n */\n protected handleEntrySelection(e: CustomEvent<UiListSelection>): void {\n const { item } = e.detail;\n const { entry } = item.dataset;\n if (!entry) {\n return;\n }\n const { openedEntries = [] } = this;\n if (openedEntries.includes(entry)) {\n const index = openedEntries.indexOf(entry);\n openedEntries.splice(index, 1);\n } else {\n openedEntries.push(entry);\n }\n this.openedEntries = openedEntries;\n this.requestUpdate();\n }\n\n /**\n * Handler for the list item selection event.\n */\n protected handleDetailsTabSelection(e: CustomEvent<TabSelectionDetail>): void {\n const { select } = e.detail;\n const { entry } = (e.target as UiTabs).dataset;\n if (!select || !entry) {\n return;\n }\n this.selectedTabs.set(entry, select as HarTab);\n this.requestUpdate();\n }\n\n override render(): TemplateResult {\n const { pages } = this;\n if (Array.isArray(pages) && pages.length) {\n return this.renderPages(pages);\n }\n const { entries } = this;\n if (Array.isArray(entries) && entries.length) {\n return this.renderEntries(entries);\n }\n return html``;\n }\n\n /**\n * @returns Template for the pages table\n */\n protected renderPages(pages: RenderedPage[]): TemplateResult {\n return html`\n <div class=\"pages\">\n ${pages.map((info) => this.renderPage(info))}\n </div>\n `;\n }\n\n /**\n * @returns Template for a single page\n */\n protected renderPage(info: RenderedPage): TemplateResult {\n const allOpened = this.openedPages;\n const opened = allOpened.includes(info.page.id);\n return html`\n <section class=\"page\">\n ${this.renderPageHeader(info.page, info.totalTime)}\n <div class=\"page-content\" ?hidden=\"${!opened}\">\n <div class=\"page-entries\">\n ${this.renderEntriesList(info.entries)}\n </div>\n </div>\n </section>\n `;\n }\n\n /**\n * @returns Template for the pages table\n */\n protected renderPageHeader(page: Page, totalTime: number): TemplateResult {\n return html`\n <div class=\"page-header\" @click=\"${this.pageClickHandler}\" @keydown=\"${this.pageKeydownHandler}\" tabindex=\"0\" data-page=\"${page.id}\">\n <span class=\"label\">${page.title || 'Unknown page'}</span>\n ${this.renderLoadingTime(totalTime)}\n </div>\n `;\n }\n\n /**\n * @returns Template for the entries table\n */\n protected renderEntries(entries: RenderedEntry[]): TemplateResult {\n return html`\n <section class=\"entries-list\">\n ${this.renderEntriesList(entries)}\n </section>\n `;\n }\n\n /**\n * @returns The template for the entries list\n */\n protected renderEntriesList(entries: RenderedEntry[]): TemplateResult {\n return html`\n <ui-list \n @select=\"${this.handleEntrySelection}\" \n aria-label=\"Select a list item to see details\"\n role=\"list\"\n >\n ${entries.map((item) => this.renderEntry(item))}\n </ui-list>\n `;\n }\n\n /**\n * @returns The template for a single entry\n */\n protected renderEntry(entry: RenderedEntry): TemplateResult {\n const { request, response, timings, visualTimings, id, responseSizes } = entry;\n const allSelected = this.openedEntries;\n const selected = allSelected.includes(`${id}`);\n return html`\n <ui-list-item class=\"entry-item\" data-entry=\"${id}\">\n <div class=\"time\">\n ${entry.requestTime}\n </div>\n <div class=\"entry-body\">\n <div class=\"entry-detail-line\">\n ${this.renderStatusLabel(response.status, response.statusText)}\n ${this.renderLoadingTime(entry.time)}\n ${this.renderResponseSize(responseSizes)}\n </div>\n <div class=\"entry-location\" title=\"${request.url}\">${request.method} ${request.url}</div>\n </div>\n <div class=\"entry-timings\">\n ${this.timingsTemplate(timings, visualTimings, selected)}</div>\n </div>\n </ui-list-item>\n ${selected ? this.entryDetails(entry) : ''}\n <ui-divider type=\"inset\"></ui-divider>\n `;\n }\n\n /**\n * @param status The response status code\n * @param statusText The response reason part of the status.\n * @returns The template for the status message\n */\n protected renderStatusLabel(status: number, statusText = ''): TemplateResult {\n const codeClasses = this.computeStatusClasses(status);\n return html`\n <span class=\"${classMap(codeClasses)}\">${status}</span>\n <span class=\"message\">${statusText}</span>\n `;\n }\n\n /**\n * @param value The response loading time\n * @returns Template for the loading time message\n */\n protected renderLoadingTime(value: number): TemplateResult | string {\n if (Number.isNaN(value)) {\n return '';\n }\n const roundedValue = Math.round(value || 0);\n return html`<span class=\"loading-time-label\">Time: ${roundedValue} ms</span>`;\n }\n\n /**\n * @returns Template for the response size\n */\n protected renderResponseSize(sizing: EntrySizing): TemplateResult | string {\n return html`<span class=\"response-size-label\">Size: ${sizing.sum}</span>`;\n }\n\n /**\n * @param timings The entry's timings\n * @param visualTimings The computed visual timings for the template\n * @param fullWidth When set then it renders the timeline in the whole available space.\n * @returns The template for the timings timeline\n */\n protected timingsTemplate(timings: Timings, visualTimings?: RenderedEntryTimings, fullWidth = false): TemplateResult | string {\n if (!visualTimings) {\n return '';\n }\n const { total, delay, blocked, connect, dns, receive, send, ssl, wait, } = visualTimings;\n const styles = {\n width: fullWidth ? '100%' : `${total}%`,\n };\n return html`\n ${fullWidth ? '' : this.timingTemplate(delay, 'delay')}\n <div class=\"entry-timings-value\" style=\"${styleMap(styles)}\">\n ${this.timingTemplate(blocked, 'blocked', 'Blocked', timings)}\n ${this.timingTemplate(dns, 'dns', 'DNS', timings)}\n ${this.timingTemplate(connect, 'connect', 'Connecting', timings)}\n ${this.timingTemplate(ssl, 'ssl', 'SSL negotiation', timings)}\n ${this.timingTemplate(send, 'send', 'Sending', timings)}\n ${this.timingTemplate(wait, 'wait', 'Waiting', timings)}\n ${this.timingTemplate(receive, 'receive', 'Receiving', timings)}\n </div>\n `;\n }\n\n /**\n * @param width\n * @param type Added to the class name.\n * @param label The label to use in the title attribute\n * @param timings The entry's timings object\n * @returns The template for a timing timeline item\n */\n protected timingTemplate(width: number | undefined, type: keyof RenderedEntryTimings | keyof Timings, label?: string, timings?: Timings): TemplateResult | string {\n if (!width) {\n return '';\n }\n const styles = {\n width: `${width}%`,\n };\n const classes = {\n 'timing-entry': true,\n [type]: true,\n };\n const time = timings && timings[type as keyof Timings];\n const title = typeof time === 'number' ? `${label}: ${Math.round(time)}ms` : undefined;\n return html`\n <div class=\"${classMap(classes)}\" style=\"${styleMap(styles)}\" title=\"${ifDefined(title)}\"></div>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for an entry details.\n */\n protected entryDetails(entry: RenderedEntry): TemplateResult {\n const { id } = entry;\n const selectedTab = this.selectedTabs.get(String(id)) || HarTab.request;\n return html`\n <section class=\"entry-details\">\n ${this.entryDetailsTabsTemplate(entry, selectedTab)}\n <div class=\"details-content\" tabindex=\"0\">\n ${this.entryDetailsContentTemplate(entry, selectedTab)}\n </div>\n </section>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @param selected The index of the selected tab\n * @returns The template for entry details content tabs.\n */\n protected entryDetailsTabsTemplate(entry: RenderedEntry, selected: string): TemplateResult {\n const { id, request, response } = entry;\n const { postData, cookies: requestCookies } = request;\n const { content, cookies: responseCookies } = response;\n const hashRequestContent = !!postData && !!postData.text;\n const hashResponseContent = !!content && !!content.text;\n const hasRequestCookies = Array.isArray(requestCookies) && !!requestCookies.length;\n const hasResponseCookies = Array.isArray(responseCookies) && !!responseCookies.length;\n const hasCookies = hasRequestCookies || hasResponseCookies;\n return html`\n <ui-tabs \n priority=\"secondary\" \n selectedAttribute=\"data-selected\" \n .selected=\"${selected}\" \n @select=\"${this.handleDetailsTabSelection}\" \n data-entry=\"${id}\"\n >\n <ui-tab data-selected=\"${HarTab.request}\">Request</ui-tab>\n <ui-tab data-selected=\"${HarTab.response}\">Response</ui-tab>\n <ui-tab data-selected=\"${HarTab.requestContent}\" ?hidden=\"${!hashRequestContent}\">Request content</ui-tab>\n <ui-tab data-selected=\"${HarTab.responseContent}\" ?hidden=\"${!hashResponseContent}\">Response content</ui-tab>\n <ui-tab data-selected=\"${HarTab.cookies}\" ?hidden=\"${!hasCookies}\">Cookies</ui-tab>\n </ui-tabs>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @param selected The index of the selected tab\n * @returns The template for entry details content.\n */\n protected entryDetailsContentTemplate(entry: RenderedEntry, selected?: HarTab): TemplateResult | string {\n switch (selected) {\n case HarTab.request: return this.entryDetailsRequestTemplate(entry);\n case HarTab.response: return this.entryDetailsResponseTemplate(entry);\n case HarTab.requestContent: return this.entryDetailsRequestBodyTemplate(entry);\n case HarTab.responseContent: return this.entryDetailsResponseBodyTemplate(entry);\n case HarTab.cookies: return this.entryDetailsCookiesTemplate(entry);\n default: return '';\n }\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for entry's request content.\n */\n protected entryDetailsRequestTemplate(entry: RenderedEntry): TemplateResult {\n const { request, requestFormattedDate, serverIPAddress, requestSizes } = entry;\n const { headers, url, method, httpVersion, queryString } = request;\n return html`\n <div class=\"entry-details-title\">Request on ${requestFormattedDate}</div>\n <dl class=\"details-list\">\n <dt>General</dt>\n <dd>\n ${this.definitionTemplate('URL', url)}\n ${this.definitionTemplate('HTTP version', httpVersion)}\n ${this.definitionTemplate('Operation', method)}\n ${this.definitionTemplate('Remote Address', serverIPAddress)}\n </dd>\n ${this.headersTemplate(headers)}\n ${this.queryParamsTemplate(queryString)}\n ${this.sizesTemplate(requestSizes)}\n </dl>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for entry's response content.\n */\n protected entryDetailsResponseTemplate(entry: RenderedEntry): TemplateResult {\n const { response, responseSizes } = entry;\n const { headers } = response;\n return html`\n <dl class=\"details-list\">\n ${this.headersTemplate(headers)}\n ${this.sizesTemplate(responseSizes)}\n </dl>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for entry's request body preview.\n */\n protected entryDetailsRequestBodyTemplate(entry: RenderedEntry): TemplateResult {\n const { request } = entry;\n const { postData } = request;\n if (!postData || !postData.text) {\n return html`<p>No request body data.</p>`;\n }\n return html`\n <pre><code class=\"body-preview\">${postData.text}</code></pre>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for entry's response body preview.\n */\n protected entryDetailsResponseBodyTemplate(entry: RenderedEntry): TemplateResult {\n const { response } = entry;\n const { content } = response;\n if (!content || !content.text) {\n return html`<p>No request body data.</p>`;\n }\n return html`\n <pre><code class=\"body-preview\">${content.text}</code></pre>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for entry's cookies.\n */\n protected entryDetailsCookiesTemplate(entry: RenderedEntry): TemplateResult {\n const { request, response } = entry;\n const { cookies: requestCookies } = request;\n const { cookies: responseCookies } = response;\n const hasRequestCookies = Array.isArray(requestCookies) && !!requestCookies.length;\n const hasResponseCookies = Array.isArray(responseCookies) && !!responseCookies.length;\n\n return html`\n <dl class=\"details-list\">\n <dt>Request cookies</dt>\n <dd>\n ${hasRequestCookies ? requestCookies.map((item) => this.definitionTemplate(item.name, item.value)) : \n html`No cookies recorded.`}\n </dd>\n\n <dt>Response cookies</dt>\n <dd>\n ${hasResponseCookies ? responseCookies.map((item) => this.definitionTemplate(item.name, item.value)) : \n html`No cookies recorded.`}\n </dd>\n </dl>\n `;\n }\n\n /**\n * @param term Definition label\n * @param value Definition value\n * @returns The template for the definition.\n */\n protected definitionTemplate(term: string, value?: string): TemplateResult | string {\n if (!value) {\n return '';\n }\n return html`\n <p class=\"definition\">\n <dfn>${term}:</dfn> ${value}\n </p>\n `;\n }\n\n /**\n * @returns The template for the list of headers.\n */\n protected headersTemplate(headers: Header[]): TemplateResult | string {\n return html`\n <dt>Headers</dt>\n <dd>\n ${Array.isArray(headers) && headers.length ? \n headers.map((item) => this.definitionTemplate(item.name, item.value)) : \n html`No headers recorded.`}\n </dd>\n `;\n }\n\n /**\n * @returns The template for the query parameters.\n */\n protected queryParamsTemplate(params: QueryString[]): TemplateResult | string {\n if (!Array.isArray(params) || !params.length) {\n return '';\n }\n return html`\n <dt>Query parameters</dt>\n <dd>\n ${params.map((item) => this.definitionTemplate(item.name, item.value))}\n </dd>\n `;\n }\n\n /**\n * @returns The template for sizes information\n */\n protected sizesTemplate(sizes: EntrySizing): TemplateResult {\n return html`\n <dt>Size</dt>\n <dd>\n ${this.definitionTemplate('Headers', sizes.headers)}\n ${this.definitionTemplate('Body', sizes.body)}\n ${this.definitionTemplate('Total', sizes.sum)}\n </dd>`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"HarViewer.js","sourceRoot":"","sources":["../../../src/elements/har/HarViewer.ts"],"names":[],"mappings":"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","sourcesContent":["import { html, TemplateResult } from 'lit';\nimport { ClassInfo, classMap } from 'lit/directives/class-map.js';\nimport { styleMap } from 'lit/directives/style-map.js';\nimport { ifDefined } from 'lit/directives/if-defined.js';\nimport { property } from 'lit/decorators.js';\n// eslint-disable-next-line import/no-unresolved\nimport { Har, Page, Entry, Request, Response, Header, QueryString, Timings } from 'har-format';\nimport { DataCalculator } from '@api-client/core/build/browser.js';\nimport ApiElement from '../ApiElement.js';\nimport '../../define/ui/ui-tab.js';\nimport '../../define/ui/ui-tabs.js';\nimport '../../define/ui/ui-list.js';\nimport '../../define/ui/ui-list-item.js';\nimport '../../define/ui/ui-divider.js';\nimport { UiListSelection } from '../../ui/list/UiList.js';\nimport UiTabs, { TabSelectionDetail } from '../../ui/tabs/UiTabs.js';\nimport { SortableEntry, sortEntires } from './HarUtils.js';\n\nexport enum HarTab {\n request = 'request',\n response = 'response',\n requestContent = 'request-content',\n responseContent = 'response-content',\n cookies = 'cookies',\n}\n\nexport interface RenderedPage {\n page: Page;\n entries: RenderedEntry[];\n totalTime: number;\n}\n\nexport interface RenderedEntry extends SortableEntry {\n requestTime: string;\n visualTimings?: RenderedEntryTimings;\n requestFormattedDate: string;\n\n requestSizes: EntrySizing;\n responseSizes: EntrySizing;\n}\n\nexport interface RenderedEntryTimings {\n total: number;\n totalValue: number;\n delay?: number;\n blocked?: number;\n connect?: number;\n dns?: number;\n ssl?: number;\n send?: number;\n receive?: number;\n wait?: number;\n}\n\nexport interface EntrySizing {\n headers: string;\n headersComputed: boolean;\n body: string;\n bodyComputed: boolean;\n sum: string;\n sumComputed: boolean;\n}\n\n/** used when generating keys for entires */\nlet nextId = 0;\n\n/**\n * An element that renders the UI for HAR data.\n */\nexport default class HarViewer extends ApiElement {\n protected harInternal?: Har;\n\n protected ignorePagesInternal?: boolean;\n\n /** \n * The HAR object to render.\n */\n @property({ type: Object })\n get har(): Har | undefined {\n return this.harInternal;\n }\n\n set har(value: Har | undefined) {\n const old = this.harInternal;\n if (old === value) {\n return;\n }\n this.harInternal = value;\n this.processHar();\n }\n\n /** \n * When set it ignores pages matching and renders all requests in a single table.\n */\n @property({ type: Boolean })\n get ignorePages(): boolean | undefined {\n return this.ignorePagesInternal;\n }\n\n set ignorePages(value: boolean | undefined) {\n const old = this.ignorePagesInternal;\n if (old === value) {\n return;\n }\n this.ignorePagesInternal = value;\n this.processHar();\n }\n\n entries?: RenderedEntry[];\n\n pages?: RenderedPage[];\n\n openedPages: string[] = [];\n \n openedEntries: string[] = [];\n\n protected selectedTabs = new Map<string, HarTab>();\n\n /**\n * Called when the `har` or `ignorePages` changed.\n */\n processHar(): void {\n this.entries = undefined;\n this.pages = undefined;\n const { har, ignorePages } = this;\n if (!har || !har.log) {\n this.requestUpdate();\n return;\n }\n const { log } = har;\n const { pages, entries, } = log;\n if (!entries || !entries.length) {\n this.requestUpdate();\n return;\n }\n const items = sortEntires(entries);\n if (ignorePages || !pages || !pages.length) {\n this.computeEntriesOnly(items);\n } else {\n this.computePages(pages, items);\n }\n }\n\n /**\n * Performs computations to render entries only.\n * @param entries The list of entries to process.\n */\n computeEntriesOnly(entries: SortableEntry[]): void {\n const totalTime = this.computeTotalTime(entries[0], entries[entries.length - 1]);\n this.entries = this.computeRenderedEntries(entries, totalTime);\n this.openedEntries = [];\n this.requestUpdate();\n }\n\n /**\n * Performs computations to render entries by page.\n * @param pages The list of pages to process.\n * @param entries The list of entries to process.\n */\n computePages(pages: Page[], entries: SortableEntry[]): void {\n const result: RenderedPage[] = [];\n const opened: string[] = [];\n pages.forEach((page) => {\n opened.push(page.id);\n const items = entries.filter((entry) => entry.pageref === page.id);\n const totalTime = this.computeTotalTime(items[0], items[items.length - 1])\n const item: RenderedPage = ({\n page,\n entries: this.computeRenderedEntries(items, totalTime),\n totalTime,\n });\n result.push(item);\n });\n this.pages = result;\n this.openedPages = opened;\n this.openedEntries = [];\n this.requestUpdate();\n }\n\n /**\n * @param entries The entries to perform computations on.\n * @param totalTime The total time of all entries rendered in the group\n */\n computeRenderedEntries(entries: SortableEntry[], totalTime: number): RenderedEntry[] {\n const result: RenderedEntry[] = [];\n if (!Array.isArray(entries) || !entries.length) {\n return result;\n }\n // This expects entires to be sorted by time (as required by the spec).\n const [startEntry] = entries;\n const startTime = startEntry.timestamp;\n entries.forEach((entry) => {\n const d = new Date(entry.timestamp);\n const visualTimings = this.computeVisualTimes(entry.timings, entry.timestamp - startTime, totalTime);\n const numType: \"numeric\" | \"2-digit\" = 'numeric';\n const options: Intl.DateTimeFormatOptions = ({\n hour: numType,\n minute: numType,\n second: numType,\n fractionalSecondDigits: 3,\n });\n const format = new Intl.DateTimeFormat(undefined, options);\n const requestTime = format.format(d);\n const format2 = new Intl.DateTimeFormat(undefined , {\n timeStyle: 'medium',\n dateStyle: 'medium',\n });\n const requestFormattedDate = format2.format(d);\n const requestSizes = this.computeEntrySizeInfo(entry.request);\n const responseSizes = this.computeEntrySizeInfo(entry.response);\n const id = String(nextId++);\n const item: RenderedEntry = {\n requestTime,\n requestFormattedDate,\n requestSizes,\n responseSizes,\n ...entry,\n id,\n };\n if (visualTimings) {\n item.visualTimings = visualTimings;\n }\n result.push(item);\n });\n return result;\n }\n\n protected computeEntrySizeInfo(info: Request|Response): EntrySizing {\n const result: EntrySizing = ({\n headersComputed: false,\n bodyComputed: false,\n body: '',\n headers: '',\n sum: '',\n sumComputed: false,\n });\n\n let { headersSize=0, bodySize=0 } = info;\n const { headers } = info;\n if (headersSize < 1) {\n const parts: string[] = [];\n (headers || []).forEach((header) => {\n const key = header.name;\n if (key && key.trim() !== '') {\n let value;\n if (Array.isArray(header.value)) {\n value = header.value.join(',');\n } else {\n value = header.value;\n }\n let line = '';\n line += `${key}: `;\n if (typeof value !== 'undefined') {\n value = value.split('\\n').join(' ');\n line += value;\n }\n parts.push(line);\n }\n });\n const hdrStr = parts.join('\\n');\n headersSize = DataCalculator.stringSize(hdrStr);\n result.headersComputed = true;\n }\n if (bodySize < 1) {\n const typedRequest = (info as Request);\n const typedResponse = (info as Response);\n if (typedResponse.content) {\n if (typedResponse.content.size) {\n bodySize = typedResponse.content.size;\n } else if (typedResponse.content.text) {\n bodySize = DataCalculator.stringSize(typedResponse.content.text);\n result.bodyComputed = true;\n }\n } else if (typedRequest.postData && typedRequest.postData.text) {\n bodySize = DataCalculator.stringSize(typedRequest.postData.text);\n result.bodyComputed = true;\n }\n }\n if (bodySize < 0) {\n bodySize = 0;\n }\n result.body = DataCalculator.bytesToSize(bodySize);\n result.headers = DataCalculator.bytesToSize(headersSize);\n result.sum = DataCalculator.bytesToSize(headersSize + bodySize);\n result.sumComputed = result.bodyComputed || result.headersComputed;\n return result;\n }\n\n /**\n * @param code The status code to test for classes.\n * @returns List of classes to be set on the status code\n */\n computeStatusClasses(code: number): ClassInfo {\n const classes = {\n 'status-code': true,\n error: code >= 500 || code === 0,\n warning: code >= 400 && code < 500,\n info: code >= 300 && code < 400,\n };\n return classes;\n }\n\n /**\n * Computes the total time of page requests.\n * @param first The earliest entry in the range\n * @param last The latest entry in the range\n * @returns The total time of the page. Used to build the timeline.\n */\n computeTotalTime(first: Entry, last: Entry): number {\n if (first === last) {\n return this.sumTimings(last.timings);\n }\n const startTime = new Date(first.startedDateTime).getTime();\n const endTime = new Date(last.startedDateTime).getTime();\n const lastDuration = this.sumTimings(last.timings);\n return endTime - startTime + lastDuration;\n }\n\n /**\n * @param timings The entry's timings object.\n * @param delay The timestamp when the first request started.\n * @param total The number of milliseconds all entries took.\n */\n computeVisualTimes(timings: Timings, delay: number, total: number): RenderedEntryTimings|undefined {\n if (!timings) {\n return undefined;\n }\n const timingsSum = this.sumTimings(timings);\n const totalPercent = timingsSum / total * 100;\n const result: RenderedEntryTimings = ({\n total: totalPercent,\n totalValue: timingsSum,\n });\n if (delay) {\n result.delay = delay / total * 100;\n }\n if (typeof timings.blocked === 'number' && timings.blocked > 0) {\n result.blocked = timings.blocked / timingsSum * 100;\n }\n if (typeof timings.connect === 'number' && timings.connect > 0) {\n result.connect = timings.connect / timingsSum * 100;\n }\n if (typeof timings.dns === 'number' && timings.dns > 0) {\n result.dns = timings.dns / timingsSum * 100;\n }\n if (typeof timings.receive === 'number' && timings.receive > 0) {\n result.receive = timings.receive / timingsSum * 100;\n }\n if (typeof timings.send === 'number' && timings.send > 0) {\n result.send = timings.send / timingsSum * 100;\n }\n if (typeof timings.ssl === 'number' && timings.ssl > 0) {\n result.ssl = timings.ssl / timingsSum * 100;\n }\n if (typeof timings.wait === 'number' && timings.wait > 0) {\n result.wait = timings.wait / timingsSum * 100;\n }\n return result;\n }\n\n /**\n * Sums all timing values.\n * @param timings The timings object to compute\n * @returns The total time, excluding -1s\n */\n protected sumTimings(timings: Timings): number {\n let result = 0;\n if (!timings) {\n return result;\n }\n if (typeof timings.blocked === 'number' && timings.blocked > 0) {\n result += timings.blocked;\n }\n if (typeof timings.connect === 'number' && timings.connect > 0) {\n result += timings.connect;\n }\n if (typeof timings.dns === 'number' && timings.dns > 0) {\n result += timings.dns;\n }\n if (typeof timings.receive === 'number' && timings.receive > 0) {\n result += timings.receive;\n }\n if (typeof timings.send === 'number' && timings.send > 0) {\n result += timings.send;\n }\n if (typeof timings.ssl === 'number' && timings.ssl > 0) {\n result += timings.ssl;\n }\n if (typeof timings.wait === 'number' && timings.wait > 0) {\n result += timings.wait;\n }\n return result;\n }\n\n /**\n * A handler for the page label click to toggle the page entries.\n */\n protected pageClickHandler(e: Event): void {\n const node = (e.currentTarget as HTMLElement);\n const id = node.dataset.page;\n if (id) {\n this.togglePage(id);\n }\n }\n\n /**\n * A handler for the page label keydown to toggle the page entries on space key.\n */\n protected pageKeydownHandler(e: KeyboardEvent): void {\n if (e.code !== 'Space') {\n return;\n }\n const node = (e.target as HTMLElement);\n const id = node.dataset.page;\n if (id) {\n this.togglePage(id);\n }\n }\n\n /**\n * Toggles the visibility of the page entries.\n * @param id The id of the page.\n */\n protected togglePage(id: string): void {\n const allOpened = this.openedPages;\n const index = allOpened.indexOf(id);\n if (index === -1) {\n allOpened.push(id);\n } else {\n allOpened.splice(index, 1);\n }\n this.requestUpdate();\n }\n\n /**\n * Handler for the list item selection event.\n */\n protected handleEntrySelection(e: CustomEvent<UiListSelection>): void {\n const { item } = e.detail;\n const { entry } = item.dataset;\n if (!entry) {\n return;\n }\n const { openedEntries = [] } = this;\n if (openedEntries.includes(entry)) {\n const index = openedEntries.indexOf(entry);\n openedEntries.splice(index, 1);\n } else {\n openedEntries.push(entry);\n }\n this.openedEntries = openedEntries;\n this.requestUpdate();\n }\n\n /**\n * Handler for the list item selection event.\n */\n protected handleDetailsTabSelection(e: CustomEvent<TabSelectionDetail>): void {\n const { select } = e.detail;\n const { entry } = (e.target as UiTabs).dataset;\n if (!select || !entry) {\n return;\n }\n this.selectedTabs.set(entry, select as HarTab);\n this.requestUpdate();\n }\n\n override render(): TemplateResult {\n const { pages } = this;\n if (Array.isArray(pages) && pages.length) {\n return this.renderPages(pages);\n }\n const { entries } = this;\n if (Array.isArray(entries) && entries.length) {\n return this.renderEntries(entries);\n }\n return html``;\n }\n\n /**\n * @returns Template for the pages table\n */\n protected renderPages(pages: RenderedPage[]): TemplateResult {\n return html`\n <div class=\"pages\">\n ${pages.map((info) => this.renderPage(info))}\n </div>\n `;\n }\n\n /**\n * @returns Template for a single page\n */\n protected renderPage(info: RenderedPage): TemplateResult {\n const allOpened = this.openedPages;\n const opened = allOpened.includes(info.page.id);\n return html`\n <section class=\"page\">\n ${this.renderPageHeader(info.page, info.totalTime)}\n <div class=\"page-content\" ?hidden=\"${!opened}\">\n <div class=\"page-entries\">\n ${this.renderEntriesList(info.entries)}\n </div>\n </div>\n </section>\n `;\n }\n\n /**\n * @returns Template for the pages table\n */\n protected renderPageHeader(page: Page, totalTime: number): TemplateResult {\n return html`\n <div class=\"page-header\" @click=\"${this.pageClickHandler}\" @keydown=\"${this.pageKeydownHandler}\" tabindex=\"0\" data-page=\"${page.id}\">\n <span class=\"label\">${page.title || 'Unknown page'}</span>\n ${this.renderLoadingTime(totalTime)}\n </div>\n `;\n }\n\n /**\n * @returns Template for the entries table\n */\n protected renderEntries(entries: RenderedEntry[]): TemplateResult {\n return html`\n <section class=\"entries-list\">\n ${this.renderEntriesList(entries)}\n </section>\n `;\n }\n\n /**\n * @returns The template for the entries list\n */\n protected renderEntriesList(entries: RenderedEntry[]): TemplateResult {\n return html`\n <ui-list \n @select=\"${this.handleEntrySelection}\" \n aria-label=\"Select a list item to see details\"\n role=\"list\"\n >\n ${entries.map((item) => this.renderEntry(item))}\n </ui-list>\n `;\n }\n\n /**\n * @returns The template for a single entry\n */\n protected renderEntry(entry: RenderedEntry): TemplateResult {\n const { request, response, timings, visualTimings, id, responseSizes } = entry;\n const allSelected = this.openedEntries;\n const selected = allSelected.includes(`${id}`);\n return html`\n <ui-list-item class=\"entry-item\" data-entry=\"${id}\">\n <div class=\"time\">\n ${entry.requestTime}\n </div>\n <div class=\"entry-body\">\n <div class=\"entry-detail-line\">\n ${this.renderStatusLabel(response.status, response.statusText)}\n ${this.renderLoadingTime(entry.time)}\n ${this.renderResponseSize(responseSizes)}\n </div>\n <div class=\"entry-location\" title=\"${request.url}\">${request.method} ${request.url}</div>\n </div>\n <div class=\"entry-timings\">\n ${this.timingsTemplate(timings, visualTimings, selected)}</div>\n </div>\n </ui-list-item>\n ${selected ? this.entryDetails(entry) : ''}\n <ui-divider type=\"inset\"></ui-divider>\n `;\n }\n\n /**\n * @param status The response status code\n * @param statusText The response reason part of the status.\n * @returns The template for the status message\n */\n protected renderStatusLabel(status: number, statusText = ''): TemplateResult {\n const codeClasses = this.computeStatusClasses(status);\n return html`\n <span class=\"${classMap(codeClasses)}\">${status}</span>\n <span class=\"message\">${statusText}</span>\n `;\n }\n\n /**\n * @param value The response loading time\n * @returns Template for the loading time message\n */\n protected renderLoadingTime(value: number): TemplateResult | string {\n if (Number.isNaN(value)) {\n return '';\n }\n const roundedValue = Math.round(value || 0);\n return html`<span class=\"loading-time-label\">Time: ${roundedValue} ms</span>`;\n }\n\n /**\n * @returns Template for the response size\n */\n protected renderResponseSize(sizing: EntrySizing): TemplateResult | string {\n return html`<span class=\"response-size-label\">Size: ${sizing.sum}</span>`;\n }\n\n /**\n * @param timings The entry's timings\n * @param visualTimings The computed visual timings for the template\n * @param fullWidth When set then it renders the timeline in the whole available space.\n * @returns The template for the timings timeline\n */\n protected timingsTemplate(timings: Timings, visualTimings?: RenderedEntryTimings, fullWidth = false): TemplateResult | string {\n if (!visualTimings) {\n return '';\n }\n const { total, delay, blocked, connect, dns, receive, send, ssl, wait, } = visualTimings;\n const styles = {\n width: fullWidth ? '100%' : `${total}%`,\n };\n return html`\n ${fullWidth ? '' : this.timingTemplate(delay, 'delay')}\n <div class=\"entry-timings-value\" style=\"${styleMap(styles)}\">\n ${this.timingTemplate(blocked, 'blocked', 'Blocked', timings)}\n ${this.timingTemplate(dns, 'dns', 'DNS', timings)}\n ${this.timingTemplate(connect, 'connect', 'Connecting', timings)}\n ${this.timingTemplate(ssl, 'ssl', 'SSL negotiation', timings)}\n ${this.timingTemplate(send, 'send', 'Sending', timings)}\n ${this.timingTemplate(wait, 'wait', 'Waiting', timings)}\n ${this.timingTemplate(receive, 'receive', 'Receiving', timings)}\n </div>\n `;\n }\n\n /**\n * @param width\n * @param type Added to the class name.\n * @param label The label to use in the title attribute\n * @param timings The entry's timings object\n * @returns The template for a timing timeline item\n */\n protected timingTemplate(width: number | undefined, type: keyof RenderedEntryTimings | keyof Timings, label?: string, timings?: Timings): TemplateResult | string {\n if (!width) {\n return '';\n }\n const styles = {\n width: `${width}%`,\n };\n const classes = {\n 'timing-entry': true,\n [type]: true,\n };\n const time = timings && timings[type as keyof Timings];\n const title = typeof time === 'number' ? `${label}: ${Math.round(time)}ms` : undefined;\n return html`\n <div class=\"${classMap(classes)}\" style=\"${styleMap(styles)}\" title=\"${ifDefined(title)}\"></div>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for an entry details.\n */\n protected entryDetails(entry: RenderedEntry): TemplateResult {\n const { id } = entry;\n const selectedTab = this.selectedTabs.get(String(id)) || HarTab.request;\n return html`\n <section class=\"entry-details\">\n ${this.entryDetailsTabsTemplate(entry, selectedTab)}\n <div class=\"details-content\" tabindex=\"0\">\n ${this.entryDetailsContentTemplate(entry, selectedTab)}\n </div>\n </section>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @param selected The index of the selected tab\n * @returns The template for entry details content tabs.\n */\n protected entryDetailsTabsTemplate(entry: RenderedEntry, selected: string): TemplateResult {\n const { id, request, response } = entry;\n const { postData, cookies: requestCookies } = request;\n const { content, cookies: responseCookies } = response;\n const hashRequestContent = !!postData && !!postData.text;\n const hashResponseContent = !!content && !!content.text;\n const hasRequestCookies = Array.isArray(requestCookies) && !!requestCookies.length;\n const hasResponseCookies = Array.isArray(responseCookies) && !!responseCookies.length;\n const hasCookies = hasRequestCookies || hasResponseCookies;\n return html`\n <ui-tabs \n priority=\"secondary\" \n selectedAttribute=\"data-selected\" \n .selected=\"${selected}\" \n @select=\"${this.handleDetailsTabSelection}\" \n data-entry=\"${id}\"\n >\n <ui-tab data-selected=\"${HarTab.request}\">Request</ui-tab>\n <ui-tab data-selected=\"${HarTab.response}\">Response</ui-tab>\n <ui-tab data-selected=\"${HarTab.requestContent}\" ?hidden=\"${!hashRequestContent}\">Request content</ui-tab>\n <ui-tab data-selected=\"${HarTab.responseContent}\" ?hidden=\"${!hashResponseContent}\">Response content</ui-tab>\n <ui-tab data-selected=\"${HarTab.cookies}\" ?hidden=\"${!hasCookies}\">Cookies</ui-tab>\n </ui-tabs>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @param selected The index of the selected tab\n * @returns The template for entry details content.\n */\n protected entryDetailsContentTemplate(entry: RenderedEntry, selected?: HarTab): TemplateResult | string {\n switch (selected) {\n case HarTab.request: return this.entryDetailsRequestTemplate(entry);\n case HarTab.response: return this.entryDetailsResponseTemplate(entry);\n case HarTab.requestContent: return this.entryDetailsRequestBodyTemplate(entry);\n case HarTab.responseContent: return this.entryDetailsResponseBodyTemplate(entry);\n case HarTab.cookies: return this.entryDetailsCookiesTemplate(entry);\n default: return '';\n }\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for entry's request content.\n */\n protected entryDetailsRequestTemplate(entry: RenderedEntry): TemplateResult {\n const { request, requestFormattedDate, serverIPAddress, requestSizes } = entry;\n const { headers, url, method, httpVersion, queryString } = request;\n return html`\n <div class=\"entry-details-title\">Request on ${requestFormattedDate}</div>\n <dl class=\"details-list\">\n <dt>General</dt>\n <dd>\n ${this.definitionTemplate('URL', url)}\n ${this.definitionTemplate('HTTP version', httpVersion)}\n ${this.definitionTemplate('Operation', method)}\n ${this.definitionTemplate('Remote Address', serverIPAddress)}\n </dd>\n ${this.headersTemplate(headers)}\n ${this.queryParamsTemplate(queryString)}\n ${this.sizesTemplate(requestSizes)}\n </dl>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for entry's response content.\n */\n protected entryDetailsResponseTemplate(entry: RenderedEntry): TemplateResult {\n const { response, responseSizes } = entry;\n const { headers } = response;\n return html`\n <dl class=\"details-list\">\n ${this.headersTemplate(headers)}\n ${this.sizesTemplate(responseSizes)}\n </dl>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for entry's request body preview.\n */\n protected entryDetailsRequestBodyTemplate(entry: RenderedEntry): TemplateResult {\n const { request } = entry;\n const { postData } = request;\n if (!postData || !postData.text) {\n return html`<p>No request body data.</p>`;\n }\n return html`\n <pre><code class=\"body-preview\">${postData.text}</code></pre>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for entry's response body preview.\n */\n protected entryDetailsResponseBodyTemplate(entry: RenderedEntry): TemplateResult {\n const { response } = entry;\n const { content } = response;\n if (!content || !content.text) {\n return html`<p>No request body data.</p>`;\n }\n return html`\n <pre><code class=\"body-preview\">${content.text}</code></pre>\n `;\n }\n\n /**\n * @param entry The entry to render\n * @returns The template for entry's cookies.\n */\n protected entryDetailsCookiesTemplate(entry: RenderedEntry): TemplateResult {\n const { request, response } = entry;\n const { cookies: requestCookies } = request;\n const { cookies: responseCookies } = response;\n const hasRequestCookies = Array.isArray(requestCookies) && !!requestCookies.length;\n const hasResponseCookies = Array.isArray(responseCookies) && !!responseCookies.length;\n\n return html`\n <dl class=\"details-list\">\n <dt>Request cookies</dt>\n <dd>\n ${hasRequestCookies ? requestCookies.map((item) => this.definitionTemplate(item.name, item.value)) : \n html`No cookies recorded.`}\n </dd>\n\n <dt>Response cookies</dt>\n <dd>\n ${hasResponseCookies ? responseCookies.map((item) => this.definitionTemplate(item.name, item.value)) : \n html`No cookies recorded.`}\n </dd>\n </dl>\n `;\n }\n\n /**\n * @param term Definition label\n * @param value Definition value\n * @returns The template for the definition.\n */\n protected definitionTemplate(term: string, value?: string): TemplateResult | string {\n if (!value) {\n return '';\n }\n return html`\n <p class=\"definition\">\n <dfn>${term}:</dfn> ${value}\n </p>\n `;\n }\n\n /**\n * @returns The template for the list of headers.\n */\n protected headersTemplate(headers: Header[]): TemplateResult | string {\n return html`\n <dt>Headers</dt>\n <dd>\n ${Array.isArray(headers) && headers.length ? \n headers.map((item) => this.definitionTemplate(item.name, item.value)) : \n html`No headers recorded.`}\n </dd>\n `;\n }\n\n /**\n * @returns The template for the query parameters.\n */\n protected queryParamsTemplate(params: QueryString[]): TemplateResult | string {\n if (!Array.isArray(params) || !params.length) {\n return '';\n }\n return html`\n <dt>Query parameters</dt>\n <dd>\n ${params.map((item) => this.definitionTemplate(item.name, item.value))}\n </dd>\n `;\n }\n\n /**\n * @returns The template for sizes information\n */\n protected sizesTemplate(sizes: EntrySizing): TemplateResult {\n return html`\n <dt>Size</dt>\n <dd>\n ${this.definitionTemplate('Headers', sizes.headers)}\n ${this.definitionTemplate('Body', sizes.body)}\n ${this.definitionTemplate('Total', sizes.sum)}\n </dd>`;\n }\n}\n"]}
|
|
@@ -84,60 +84,10 @@ as you would a regular DOM element:
|
|
|
84
84
|
@fires markedloaderror - An event dispatched when an error ocurred when downloading the script content. The detail has the original error.
|
|
85
85
|
*/
|
|
86
86
|
export default class MarkedHighlight extends LitElement {
|
|
87
|
-
|
|
88
|
-
|
|
89
|
-
|
|
90
|
-
|
|
91
|
-
markdown;
|
|
92
|
-
/**
|
|
93
|
-
* Enable GFM line breaks (regular newlines instead of two spaces for
|
|
94
|
-
* breaks)
|
|
95
|
-
* @attribute
|
|
96
|
-
*/
|
|
97
|
-
breaks;
|
|
98
|
-
/**
|
|
99
|
-
* Conform to obscure parts of markdown.pl as much as possible. Don't fix
|
|
100
|
-
* any of the original markdown bugs or poor behavior.
|
|
101
|
-
* @attribute
|
|
102
|
-
*/
|
|
103
|
-
pedantic;
|
|
104
|
-
/**
|
|
105
|
-
* Function used to customize a renderer based on the [API specified in the
|
|
106
|
-
* Marked
|
|
107
|
-
* library](https://github.com/chjj/marked#overriding-renderer-methods).
|
|
108
|
-
* It takes one argument: a marked renderer object, which is mutated by the
|
|
109
|
-
* function.
|
|
110
|
-
*/
|
|
111
|
-
renderer;
|
|
112
|
-
/**
|
|
113
|
-
* Sanitize the output. Ignore any HTML that has been input.
|
|
114
|
-
* @attribute
|
|
115
|
-
*/
|
|
116
|
-
sanitize;
|
|
117
|
-
/**
|
|
118
|
-
* Function used to customize a sanitize behavior.
|
|
119
|
-
* It takes one argument: element String without text Contents.
|
|
120
|
-
*
|
|
121
|
-
* e.g. `<div>` `<a href="/">` `</p>'.
|
|
122
|
-
* Note: To enable this function, must set `sanitize` to true.
|
|
123
|
-
* WARNING: If you are using this option to un-trusted text, you must to
|
|
124
|
-
* prevent XSS Attacks.
|
|
125
|
-
*/
|
|
126
|
-
sanitizer;
|
|
127
|
-
/**
|
|
128
|
-
* If true, disables the default sanitization of any markdown received by
|
|
129
|
-
* a request and allows fetched un-sanitized markdown
|
|
130
|
-
*
|
|
131
|
-
* e.g. fetching markdown via `src` that has HTML.
|
|
132
|
-
* Note: this value overrides `sanitize` if a request is made.
|
|
133
|
-
* @attribute
|
|
134
|
-
*/
|
|
135
|
-
disableRemoteSanitization;
|
|
136
|
-
/**
|
|
137
|
-
* Use "smart" typographic punctuation for things like quotes and dashes.
|
|
138
|
-
* @attribute
|
|
139
|
-
*/
|
|
140
|
-
smartypants;
|
|
87
|
+
constructor() {
|
|
88
|
+
super(...arguments);
|
|
89
|
+
this.attachedValue = false;
|
|
90
|
+
}
|
|
141
91
|
/**
|
|
142
92
|
* @returns A reference to the output element.
|
|
143
93
|
*/
|
|
@@ -156,8 +106,6 @@ export default class MarkedHighlight extends LitElement {
|
|
|
156
106
|
this.renderMarkdown();
|
|
157
107
|
}
|
|
158
108
|
}
|
|
159
|
-
markdownElement;
|
|
160
|
-
attachedValue = false;
|
|
161
109
|
firstUpdated() {
|
|
162
110
|
if (this.markdown) {
|
|
163
111
|
this.renderMarkdown();
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"MarkedHighlight.js","sourceRoot":"","sources":["../../../src/elements/highlight/MarkedHighlight.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/adjacent-overload-signatures */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable class-methods-use-this */\nimport { html, LitElement, TemplateResult, PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport sanitizer from 'dompurify';\nimport { marked } from 'marked';\nimport { PrismHighlighter } from './PrismHighlighter.js';\n\n/**\nElement wrapper for the [marked](https://github.com/chjj/marked) library.\n\n`<marked-highlight>` accepts Markdown source and renders it to a child\nelement with the class `markdown-html`. This child element can be styled\nas you would a normal DOM element. If you do not provide a child element\nwith the `markdown-html` class, the Markdown source will still be rendered,\nbut to a shadow DOM child that cannot be styled.\n\n### Markdown Content\n\nThe Markdown source can be specified several ways:\n\n#### Use the `markdown` attribute to bind markdown\n\n```html\n<marked-highlight markdown=\"`Markdown` is _awesome_!\">\n <div slot=\"markdown-html\"></div>\n</marked-highlight>\n```\n#### Use `<script type=\"text/markdown\">` element child to inline markdown\n\n```html\n<marked-highlight>\n <div slot=\"markdown-html\"></div>\n <script type=\"text/markdown\">\n Check out my markdown!\n We can even embed elements without fear of the HTML parser mucking up their\n textual representation:\n </script>\n</marked-highlight>\n```\n#### Use `<script type=\"text/markdown\" src=\"URL\">` element child to specify remote markdown\n\n```html\n<marked-highlight>\n <div slot=\"markdown-html\"></div>\n <script type=\"text/markdown\" src=\"../guidelines.md\"></script>\n</marked-highlight>\n```\n\nNote that the `<script type=\"text/markdown\">` approach is *static*. Changes to\nthe script content will *not* update the rendered markdown!\n\nThough, you can data bind to the `src` attribute to change the markdown.\n\n```html\n<marked-highlight>\n <div slot=\"markdown-html\"></div>\n <script type=\"text/markdown\" src$=\"[[source]]\"></script>\n</marked-highlight>\n<script>\n ...\n this.source = '../guidelines.md';\n</script>\n```\n\n### Styling\n\nIf you are using a child with the `markdown-html` class, you can style it\nas you would a regular DOM element:\n\n```css\n[slot=\"markdown-html\"] p {\n color: red;\n}\n[slot=\"markdown-html\"] td:first-child {\n padding-left: 24px;\n}\n```\n\n@fires markedrendercomplete - Event dispatched when the element renders the output.\n@fires markedloaded - Event dispatched when the element loads the script from the URL.\n@fires markedloaderror - An event dispatched when an error ocurred when downloading the script content. The detail has the original error.\n */\nexport default class MarkedHighlight extends LitElement {\n /**\n * The markdown source to be rendered by this element.\n * @attribute\n */\n @property({ type: String }) markdown?: string;\n\n /**\n * Enable GFM line breaks (regular newlines instead of two spaces for\n * breaks)\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) breaks?: boolean;\n\n /**\n * Conform to obscure parts of markdown.pl as much as possible. Don't fix\n * any of the original markdown bugs or poor behavior.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) pedantic?: boolean;\n\n /**\n * Function used to customize a renderer based on the [API specified in the\n * Marked\n * library](https://github.com/chjj/marked#overriding-renderer-methods).\n * It takes one argument: a marked renderer object, which is mutated by the\n * function.\n */\n @property({ type: Object }) renderer?: Function;\n \n /**\n * Sanitize the output. Ignore any HTML that has been input.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) sanitize?: boolean;\n\n /**\n * Function used to customize a sanitize behavior.\n * It takes one argument: element String without text Contents.\n *\n * e.g. `<div>` `<a href=\"/\">` `</p>'.\n * Note: To enable this function, must set `sanitize` to true.\n * WARNING: If you are using this option to un-trusted text, you must to\n * prevent XSS Attacks.\n */\n @property({ type: Object }) sanitizer?: Function;\n \n /**\n * If true, disables the default sanitization of any markdown received by\n * a request and allows fetched un-sanitized markdown\n *\n * e.g. fetching markdown via `src` that has HTML.\n * Note: this value overrides `sanitize` if a request is made.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) disableRemoteSanitization?: boolean;\n\n /**\n * Use \"smart\" typographic punctuation for things like quotes and dashes.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) smartypants?: boolean;\n\n /**\n * @returns A reference to the output element.\n */\n get outputElement(): HTMLElement | null {\n const slot = this.shadowRoot?.querySelector('slot[name=\"markdown-html\"]') as HTMLSlotElement | null;\n if (!slot) {\n return null;\n }\n const nodes = slot.assignedNodes();\n const child = nodes.find((node) => node.nodeType === 1 && (node as HTMLElement).getAttribute('slot') === 'markdown-html') as HTMLElement | undefined;\n return child || this.shadowRoot?.querySelector('#content') as HTMLElement | null;\n }\n\n protected override updated(cp: PropertyValues<this>): void {\n super.updated(cp);\n if (cp.has('markdown') || cp.has('smartypants') || cp.has('sanitizer') || cp.has('sanitize') || cp.has('renderer') || cp.has('pedantic') || cp.has('breaks')) {\n this.renderMarkdown();\n }\n }\n\n protected markdownElement?: HTMLScriptElement | null;\n\n protected attachedValue = false;\n\n override firstUpdated(): void {\n if (this.markdown) {\n this.renderMarkdown();\n return;\n }\n\n // Use the Markdown from the first `<script>` descendant whose MIME type\n // starts with \"text/markdown\". Script elements beyond the first are\n // ignored.\n const script = this.querySelector('[type=\"text/markdown\"]') as HTMLScriptElement | null;\n if (!script) {\n return;\n }\n this.markdownElement = script;\n \n if (script.src) {\n this.requestMarkdown(script.src);\n }\n const content = script.textContent;\n if (content && content.trim() !== '') {\n this.markdown = this.unindent(content);\n }\n\n const observer = new MutationObserver(this.scriptAttributeHandler.bind(this));\n observer.observe(script, { attributes: true });\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.attachedValue = true;\n this.renderMarkdown();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.attachedValue = false;\n }\n\n /**\n * Renders `markdown` into this element's DOM.\n *\n * This is automatically called whenever the `markdown` property is changed.\n *\n * The only case where you should be calling this is if you are providing\n * markdown via `<script type=\"text/markdown\">` after this element has been\n * constructed (or updating that markdown).\n * @event markedrendercomplete\n */\n renderMarkdown(): void {\n if (!this.attachedValue) {\n return;\n }\n const node = this.outputElement;\n if (!node) {\n return;\n }\n\n if (!this.markdown) {\n node.innerHTML = '';\n return;\n }\n const renderer = new marked.Renderer();\n if (this.renderer) {\n this.renderer(renderer);\n }\n const data = this.markdown;\n const opts: marked.MarkedOptions = {\n renderer,\n highlight: this.highlightMarkdown.bind(this),\n breaks: this.breaks,\n pedantic: this.pedantic,\n smartypants: this.smartypants,\n };\n let out = marked(data, opts);\n if (this.sanitize) {\n if (this.sanitizer) {\n out = this.sanitizer(out);\n } else {\n const result = sanitizer.sanitize(out);\n if (typeof result === 'string') {\n out = result;\n } else {\n // @ts-ignore\n out = result.toString();\n }\n }\n }\n node.innerHTML = out;\n this.dispatchEvent(new Event('markedrendercomplete'));\n }\n\n /**\n * Fired when the content is being processed and before it is rendered.\n * Provides an opportunity to highlight code blocks based on the programming\n * language used. This is also known as syntax highlighting. One example would\n * be to use a prebuilt syntax highlighting library, e.g with\n * [highlightjs](https://highlightjs.org/).\n */\n protected highlightMarkdown(code: string, lang: string): string {\n const factory = new PrismHighlighter();\n const result = factory.tokenize(code, lang);\n return result;\n }\n\n /**\n * Un-indents the markdown source that will be rendered.\n */\n unindent(text?: string): string {\n if (!text) {\n return '';\n }\n const lines = text.replace(/\\t/g, ' ').split('\\n');\n const indent = lines.reduce((prev: number|null, line: string): number | null => {\n if (/^\\s*$/.test(line)) {\n return prev; // Completely ignore blank lines.\n }\n const match = line.match(/^(\\s*)/);\n if (!match) {\n return prev;\n }\n\n const lineIndent = match[0].length;\n if (prev === null) {\n return lineIndent;\n }\n \n return lineIndent < prev ? lineIndent : prev;\n }, null);\n \n if (indent === null) {\n return text;\n }\n\n return lines.map((l) => l.substring(indent)).join('\\n');\n }\n\n /**\n * Fired when the XHR finishes loading\n */\n protected async requestMarkdown(url: string): Promise<void> {\n try {\n const response = await fetch(url, {\n headers: { accept: 'text/markdown' },\n });\n const { status } = response;\n if (status === 0 || (status >= 200 && status < 300)) {\n this.sanitize = !this.disableRemoteSanitization;\n this.markdown = await response.text();\n this.dispatchEvent(new Event('markedloaded'));\n } else {\n throw new Error('Unable to download the data');\n }\n } catch (e) {\n this.handleError(e as Error);\n }\n }\n\n /**\n * Fired when an error is received while fetching remote markdown content.\n */\n protected handleError(e: Error): void {\n const evt = new CustomEvent('markedloaderror', {\n composed: true,\n bubbles: true,\n cancelable: true,\n detail: e\n });\n this.dispatchEvent(evt);\n if (!evt.defaultPrevented) {\n this.markdown = 'Failed loading markdown source';\n }\n }\n\n protected scriptAttributeHandler(mutation: MutationRecord[]): void {\n if (mutation[0].attributeName !== 'src') {\n return;\n }\n const elm = this.markdownElement;\n if (elm) {\n this.requestMarkdown(elm.src);\n }\n }\n\n override render(): TemplateResult {\n return html`<slot name=\"markdown-html\"><div id=\"content\"></div></slot>`;\n }\n}\n"]}
|
|
1
|
+
{"version":3,"file":"MarkedHighlight.js","sourceRoot":"","sources":["../../../src/elements/highlight/MarkedHighlight.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable @typescript-eslint/ban-types */\n/* eslint-disable @typescript-eslint/adjacent-overload-signatures */\n/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable class-methods-use-this */\nimport { html, LitElement, TemplateResult, PropertyValues } from 'lit';\nimport { property } from 'lit/decorators.js';\nimport sanitizer from 'dompurify';\nimport { marked } from 'marked';\nimport { PrismHighlighter } from './PrismHighlighter.js';\n\n/**\nElement wrapper for the [marked](https://github.com/chjj/marked) library.\n\n`<marked-highlight>` accepts Markdown source and renders it to a child\nelement with the class `markdown-html`. This child element can be styled\nas you would a normal DOM element. If you do not provide a child element\nwith the `markdown-html` class, the Markdown source will still be rendered,\nbut to a shadow DOM child that cannot be styled.\n\n### Markdown Content\n\nThe Markdown source can be specified several ways:\n\n#### Use the `markdown` attribute to bind markdown\n\n```html\n<marked-highlight markdown=\"`Markdown` is _awesome_!\">\n <div slot=\"markdown-html\"></div>\n</marked-highlight>\n```\n#### Use `<script type=\"text/markdown\">` element child to inline markdown\n\n```html\n<marked-highlight>\n <div slot=\"markdown-html\"></div>\n <script type=\"text/markdown\">\n Check out my markdown!\n We can even embed elements without fear of the HTML parser mucking up their\n textual representation:\n </script>\n</marked-highlight>\n```\n#### Use `<script type=\"text/markdown\" src=\"URL\">` element child to specify remote markdown\n\n```html\n<marked-highlight>\n <div slot=\"markdown-html\"></div>\n <script type=\"text/markdown\" src=\"../guidelines.md\"></script>\n</marked-highlight>\n```\n\nNote that the `<script type=\"text/markdown\">` approach is *static*. Changes to\nthe script content will *not* update the rendered markdown!\n\nThough, you can data bind to the `src` attribute to change the markdown.\n\n```html\n<marked-highlight>\n <div slot=\"markdown-html\"></div>\n <script type=\"text/markdown\" src$=\"[[source]]\"></script>\n</marked-highlight>\n<script>\n ...\n this.source = '../guidelines.md';\n</script>\n```\n\n### Styling\n\nIf you are using a child with the `markdown-html` class, you can style it\nas you would a regular DOM element:\n\n```css\n[slot=\"markdown-html\"] p {\n color: red;\n}\n[slot=\"markdown-html\"] td:first-child {\n padding-left: 24px;\n}\n```\n\n@fires markedrendercomplete - Event dispatched when the element renders the output.\n@fires markedloaded - Event dispatched when the element loads the script from the URL.\n@fires markedloaderror - An event dispatched when an error ocurred when downloading the script content. The detail has the original error.\n */\nexport default class MarkedHighlight extends LitElement {\n /**\n * The markdown source to be rendered by this element.\n * @attribute\n */\n @property({ type: String }) markdown?: string;\n\n /**\n * Enable GFM line breaks (regular newlines instead of two spaces for\n * breaks)\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) breaks?: boolean;\n\n /**\n * Conform to obscure parts of markdown.pl as much as possible. Don't fix\n * any of the original markdown bugs or poor behavior.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) pedantic?: boolean;\n\n /**\n * Function used to customize a renderer based on the [API specified in the\n * Marked\n * library](https://github.com/chjj/marked#overriding-renderer-methods).\n * It takes one argument: a marked renderer object, which is mutated by the\n * function.\n */\n @property({ type: Object }) renderer?: Function;\n \n /**\n * Sanitize the output. Ignore any HTML that has been input.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) sanitize?: boolean;\n\n /**\n * Function used to customize a sanitize behavior.\n * It takes one argument: element String without text Contents.\n *\n * e.g. `<div>` `<a href=\"/\">` `</p>'.\n * Note: To enable this function, must set `sanitize` to true.\n * WARNING: If you are using this option to un-trusted text, you must to\n * prevent XSS Attacks.\n */\n @property({ type: Object }) sanitizer?: Function;\n \n /**\n * If true, disables the default sanitization of any markdown received by\n * a request and allows fetched un-sanitized markdown\n *\n * e.g. fetching markdown via `src` that has HTML.\n * Note: this value overrides `sanitize` if a request is made.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) disableRemoteSanitization?: boolean;\n\n /**\n * Use \"smart\" typographic punctuation for things like quotes and dashes.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) smartypants?: boolean;\n\n /**\n * @returns A reference to the output element.\n */\n get outputElement(): HTMLElement | null {\n const slot = this.shadowRoot?.querySelector('slot[name=\"markdown-html\"]') as HTMLSlotElement | null;\n if (!slot) {\n return null;\n }\n const nodes = slot.assignedNodes();\n const child = nodes.find((node) => node.nodeType === 1 && (node as HTMLElement).getAttribute('slot') === 'markdown-html') as HTMLElement | undefined;\n return child || this.shadowRoot?.querySelector('#content') as HTMLElement | null;\n }\n\n protected override updated(cp: PropertyValues<this>): void {\n super.updated(cp);\n if (cp.has('markdown') || cp.has('smartypants') || cp.has('sanitizer') || cp.has('sanitize') || cp.has('renderer') || cp.has('pedantic') || cp.has('breaks')) {\n this.renderMarkdown();\n }\n }\n\n protected markdownElement?: HTMLScriptElement | null;\n\n protected attachedValue = false;\n\n override firstUpdated(): void {\n if (this.markdown) {\n this.renderMarkdown();\n return;\n }\n\n // Use the Markdown from the first `<script>` descendant whose MIME type\n // starts with \"text/markdown\". Script elements beyond the first are\n // ignored.\n const script = this.querySelector('[type=\"text/markdown\"]') as HTMLScriptElement | null;\n if (!script) {\n return;\n }\n this.markdownElement = script;\n \n if (script.src) {\n this.requestMarkdown(script.src);\n }\n const content = script.textContent;\n if (content && content.trim() !== '') {\n this.markdown = this.unindent(content);\n }\n\n const observer = new MutationObserver(this.scriptAttributeHandler.bind(this));\n observer.observe(script, { attributes: true });\n }\n\n override connectedCallback(): void {\n super.connectedCallback();\n this.attachedValue = true;\n this.renderMarkdown();\n }\n\n override disconnectedCallback(): void {\n super.disconnectedCallback();\n this.attachedValue = false;\n }\n\n /**\n * Renders `markdown` into this element's DOM.\n *\n * This is automatically called whenever the `markdown` property is changed.\n *\n * The only case where you should be calling this is if you are providing\n * markdown via `<script type=\"text/markdown\">` after this element has been\n * constructed (or updating that markdown).\n * @event markedrendercomplete\n */\n renderMarkdown(): void {\n if (!this.attachedValue) {\n return;\n }\n const node = this.outputElement;\n if (!node) {\n return;\n }\n\n if (!this.markdown) {\n node.innerHTML = '';\n return;\n }\n const renderer = new marked.Renderer();\n if (this.renderer) {\n this.renderer(renderer);\n }\n const data = this.markdown;\n const opts: marked.MarkedOptions = {\n renderer,\n highlight: this.highlightMarkdown.bind(this),\n breaks: this.breaks,\n pedantic: this.pedantic,\n smartypants: this.smartypants,\n };\n let out = marked(data, opts);\n if (this.sanitize) {\n if (this.sanitizer) {\n out = this.sanitizer(out);\n } else {\n const result = sanitizer.sanitize(out);\n if (typeof result === 'string') {\n out = result;\n } else {\n // @ts-ignore\n out = result.toString();\n }\n }\n }\n node.innerHTML = out;\n this.dispatchEvent(new Event('markedrendercomplete'));\n }\n\n /**\n * Fired when the content is being processed and before it is rendered.\n * Provides an opportunity to highlight code blocks based on the programming\n * language used. This is also known as syntax highlighting. One example would\n * be to use a prebuilt syntax highlighting library, e.g with\n * [highlightjs](https://highlightjs.org/).\n */\n protected highlightMarkdown(code: string, lang: string): string {\n const factory = new PrismHighlighter();\n const result = factory.tokenize(code, lang);\n return result;\n }\n\n /**\n * Un-indents the markdown source that will be rendered.\n */\n unindent(text?: string): string {\n if (!text) {\n return '';\n }\n const lines = text.replace(/\\t/g, ' ').split('\\n');\n const indent = lines.reduce((prev: number|null, line: string): number | null => {\n if (/^\\s*$/.test(line)) {\n return prev; // Completely ignore blank lines.\n }\n const match = line.match(/^(\\s*)/);\n if (!match) {\n return prev;\n }\n\n const lineIndent = match[0].length;\n if (prev === null) {\n return lineIndent;\n }\n \n return lineIndent < prev ? lineIndent : prev;\n }, null);\n \n if (indent === null) {\n return text;\n }\n\n return lines.map((l) => l.substring(indent)).join('\\n');\n }\n\n /**\n * Fired when the XHR finishes loading\n */\n protected async requestMarkdown(url: string): Promise<void> {\n try {\n const response = await fetch(url, {\n headers: { accept: 'text/markdown' },\n });\n const { status } = response;\n if (status === 0 || (status >= 200 && status < 300)) {\n this.sanitize = !this.disableRemoteSanitization;\n this.markdown = await response.text();\n this.dispatchEvent(new Event('markedloaded'));\n } else {\n throw new Error('Unable to download the data');\n }\n } catch (e) {\n this.handleError(e as Error);\n }\n }\n\n /**\n * Fired when an error is received while fetching remote markdown content.\n */\n protected handleError(e: Error): void {\n const evt = new CustomEvent('markedloaderror', {\n composed: true,\n bubbles: true,\n cancelable: true,\n detail: e\n });\n this.dispatchEvent(evt);\n if (!evt.defaultPrevented) {\n this.markdown = 'Failed loading markdown source';\n }\n }\n\n protected scriptAttributeHandler(mutation: MutationRecord[]): void {\n if (mutation[0].attributeName !== 'src') {\n return;\n }\n const elm = this.markdownElement;\n if (elm) {\n this.requestMarkdown(elm.src);\n }\n }\n\n override render(): TemplateResult {\n return html`<slot name=\"markdown-html\"><div id=\"content\"></div></slot>`;\n }\n}\n"]}
|
|
@@ -39,24 +39,15 @@ import { PrismHighlighter } from './PrismHighlighter.js';
|
|
|
39
39
|
* @fires link - An event dispatched when the user click on the link. The detail object has the `url` property with the link value and the `asNew` property set to `true` when ctrl/cmd key was pressed when the link was clicked.
|
|
40
40
|
*/
|
|
41
41
|
export default class PrismHighlight extends LitElement {
|
|
42
|
-
|
|
43
|
-
|
|
44
|
-
|
|
45
|
-
|
|
46
|
-
|
|
47
|
-
|
|
48
|
-
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
lang = '';
|
|
52
|
-
/**
|
|
53
|
-
* When set it ignores syntax highlighting and only renders the code.
|
|
54
|
-
* @attribute
|
|
55
|
-
*/
|
|
56
|
-
raw;
|
|
57
|
-
outputElement;
|
|
58
|
-
highlighter = new PrismHighlighter(this.handleHighlight.bind(this));
|
|
59
|
-
tokenizeResults;
|
|
42
|
+
constructor() {
|
|
43
|
+
super(...arguments);
|
|
44
|
+
/**
|
|
45
|
+
* Prism supported language.
|
|
46
|
+
* @attribute
|
|
47
|
+
*/
|
|
48
|
+
this.lang = '';
|
|
49
|
+
this.highlighter = new PrismHighlighter(this.handleHighlight.bind(this));
|
|
50
|
+
}
|
|
60
51
|
updated(cp) {
|
|
61
52
|
super.updated(cp);
|
|
62
53
|
if (cp.has('code') || cp.has('lang')) {
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrismHighlight.js","sourceRoot":"","sources":["../../../src/elements/highlight/PrismHighlight.ts"],"names":[],"mappings":";AAAA,6CAA6C;AAC7C,0DAA0D;AAC1D;;;;;;;;;;;;EAYE;AACF,OAAO,EAAE,UAAU,EAAE,IAAI,EAAkC,MAAM,KAAK,CAAC;AACvE,OAAO,EAAE,QAAQ,EAAE,KAAK,EAAE,MAAM,mBAAmB,CAAC;AACpD,OAAO,EAAE,gBAAgB,EAAE,MAAM,uBAAuB,CAAC;AAEzD,yCAAyC;AAEzC;;;;;;;;;;;;;;;;;;;GAmBG;AACH,MAAM,CAAC,OAAO,OAAO,cAAe,SAAQ,UAAU;
|
|
1
|
+
{"version":3,"file":"PrismHighlight.js","sourceRoot":"","sources":["../../../src/elements/highlight/PrismHighlight.ts"],"names":[],"mappings":"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","sourcesContent":["/* eslint-disable lit/no-native-attributes */\n/* eslint-disable lit-a11y/click-events-have-key-events */\n/**\n@license\nCopyright 2018 The Advanced REST Client authors\nLicensed under the Apache License, Version 2.0 (the \"License\"); you may not\nuse this file except in compliance with the License. You may obtain a copy of\nthe License at\nhttp://www.apache.org/licenses/LICENSE-2.0\nUnless required by applicable law or agreed to in writing, software\ndistributed under the License is distributed on an \"AS IS\" BASIS, WITHOUT\nWARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. See the\nLicense for the specific language governing permissions and limitations under\nthe License.\n*/\nimport { LitElement, html, TemplateResult, PropertyValues } from 'lit';\nimport { property, query } from 'lit/decorators.js';\nimport { PrismHighlighter } from './PrismHighlighter.js';\n\n/** @typedef {import('prismjs')} Prism */\n\n/**\n * Syntax highlighting via Prism\n *\n * ### Example\n *\n * ```html\n * <prism-highlight id=\"c1\" lang=\"markdown\"></prism-highlight>\n * <script>\n * document.querySelector('#c1').code = '# Test highlight';\n * </script>\n * ```\n *\n * The `lang` attribute is required and the component will not start parsing data without it.\n *\n * Changing the `lang` and `code` properties together, do it in less than 10 ms.\n * The element is set to commit changes after this time period. Otherwise it may display\n * old and new code due to the asynchronous nature of the code highlighter.\n * \n * @fires link - An event dispatched when the user click on the link. The detail object has the `url` property with the link value and the `asNew` property set to `true` when ctrl/cmd key was pressed when the link was clicked.\n */\nexport default class PrismHighlight extends LitElement {\n /**\n * A data to be highlighted and rendered.\n * @attribute\n */\n @property({ type: String }) code?: string;\n\n /**\n * Prism supported language.\n * @attribute\n */\n @property({ type: String, reflect: true }) override lang = '';\n\n /** \n * When set it ignores syntax highlighting and only renders the code.\n * @attribute\n */\n @property({ type: Boolean, reflect: true }) raw?: boolean;\n\n @query('code')\n readonly outputElement?: HTMLElement | null;\n\n protected highlighter = new PrismHighlighter(this.handleHighlight.bind(this));\n\n protected tokenizeResults?: string;\n\n protected override updated(cp: PropertyValues | Map<PropertyKey, unknown>): void {\n super.updated(cp);\n if (cp.has('code') || cp.has('lang')) {\n this.highlight();\n }\n if (cp.has('raw')) {\n this.rawChanged();\n }\n }\n\n override firstUpdated(): void {\n /* istanbul ignore if */\n if (this.tokenizeResults && !this.raw) {\n const out = this.outputElement;\n if (out) {\n out.innerHTML += this.tokenizeResults;\n }\n this.tokenizeResults = undefined;\n }\n }\n\n // Resets the state of the render to initial state.\n reset(): void {\n const node = this.outputElement;\n if (node) {\n node.innerHTML = '';\n }\n }\n\n protected handleHighlight(code: string): void {\n const node = this.outputElement;\n /* istanbul ignore else */\n if (node) {\n node.innerHTML += code;\n } else {\n this.tokenizeResults = code;\n }\n }\n\n protected rawChanged(): void {\n if (!this.raw) {\n this.highlight();\n }\n }\n \n /**\n * Highlights the code.\n */\n protected highlight(): void {\n const { code, lang, raw } = this;\n if ((!code && lang) || raw) {\n return;\n }\n this.reset();\n this.highlighter.debounce(code || '', lang);\n }\n\n /**\n * Handler for click events.\n */\n protected handleLinks(e: MouseEvent): void {\n const el = e.target as HTMLElement;\n if (el.localName !== 'a') {\n return;\n }\n const link = el as HTMLAnchorElement;\n const newEntity = e.ctrlKey || e.metaKey;\n e.preventDefault();\n e.stopPropagation();\n e.stopImmediatePropagation();\n const url = link.href;\n this.dispatchEvent(new CustomEvent('link', {\n detail: {\n url,\n asNew: newEntity,\n },\n }));\n }\n\n override render(): TemplateResult {\n const { raw } = this;\n return raw ? this.renderRaw() : this.renderHighlighted();\n }\n\n protected renderHighlighted(): TemplateResult {\n return html`\n <pre class=\"parsed-content\">\n <code id=\"output\" class=\"language-\" @click=\"${this.handleLinks}\"></code>\n </pre>\n `;\n }\n\n protected renderRaw(): TemplateResult {\n return html`\n <pre class=\"raw-content\">\n <code id=\"output\" class=\"raw\">${this.code}</code>\n </pre>\n `;\n }\n}\n"]}
|
|
@@ -11,16 +11,14 @@ import 'prismjs/components/prism-dart.js';
|
|
|
11
11
|
// DART seems to be not working with auto-linker...
|
|
12
12
|
// import 'prismjs/plugins/autolinker/prism-autolinker.js';
|
|
13
13
|
export class PrismHighlighter {
|
|
14
|
-
listener;
|
|
15
|
-
/**
|
|
16
|
-
* The number of milliseconds the library will wait before it runs the tokenizer.
|
|
17
|
-
*/
|
|
18
|
-
debounceTimeout = 1;
|
|
19
|
-
debounceTimer;
|
|
20
14
|
/**
|
|
21
15
|
* @param highlightListener The listener for the debounced code highlight
|
|
22
16
|
*/
|
|
23
17
|
constructor(highlightListener) {
|
|
18
|
+
/**
|
|
19
|
+
* The number of milliseconds the library will wait before it runs the tokenizer.
|
|
20
|
+
*/
|
|
21
|
+
this.debounceTimeout = 1;
|
|
24
22
|
this.listener = highlightListener;
|
|
25
23
|
}
|
|
26
24
|
/**
|
|
@@ -1 +1 @@
|
|
|
1
|
-
{"version":3,"file":"PrismHighlighter.js","sourceRoot":"","sources":["../../../src/elements/highlight/PrismHighlighter.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,2CAA2C;AAC3C,OAAO,kBAAkB,CAAC;AAC1B,OAAO,sCAAsC,CAAC;AAC9C,OAAO,wCAAwC,CAAC;AAChD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,mDAAmD;AACnD,2DAA2D;AAE3D,MAAM,OAAO,gBAAgB;
|
|
1
|
+
{"version":3,"file":"PrismHighlighter.js","sourceRoot":"","sources":["../../../src/elements/highlight/PrismHighlighter.ts"],"names":[],"mappings":"AAAA,sDAAsD;AACtD,2CAA2C;AAC3C,OAAO,kBAAkB,CAAC;AAC1B,OAAO,sCAAsC,CAAC;AAC9C,OAAO,wCAAwC,CAAC;AAChD,OAAO,sCAAsC,CAAC;AAC9C,OAAO,oCAAoC,CAAC;AAC5C,OAAO,kCAAkC,CAAC;AAC1C,OAAO,qCAAqC,CAAC;AAC7C,OAAO,kCAAkC,CAAC;AAC1C,mDAAmD;AACnD,2DAA2D;AAE3D,MAAM,OAAO,gBAAgB;IAU3B;;OAEG;IACH,YAAY,iBAA+C;QAV3D;;WAEG;QACH,oBAAe,GAAG,CAAC,CAAC;QAQlB,IAAI,CAAC,QAAQ,GAAG,iBAAiB,CAAC;IACpC,CAAC;IAED;;;;;;;OAOG;IACH,QAAQ,CAAC,IAAY,EAAE,IAAY;QACjC,IAAI,CAAC,IAAI,CAAC,QAAQ,EAAE;YAClB,MAAM,IAAI,KAAK,CAAC,oCAAoC,CAAC,CAAA;SACtD;QACD,IAAI,IAAI,CAAC,aAAa,EAAE;YACtB,YAAY,CAAC,IAAI,CAAC,aAAa,CAAC,CAAC;SAClC;QACD,IAAI,CAAC,aAAa,GAAG,UAAU,CAAC,GAAG,EAAE;YACnC,IAAI,CAAC,aAAa,GAAG,SAAS,CAAC;YAC/B,MAAM,MAAM,GAAG,IAAI,CAAC,QAAQ,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;YACzC,IAAI,IAAI,CAAC,QAAQ,EAAE;gBACjB,IAAI,CAAC,QAAQ,CAAC,MAAM,CAAC,CAAC;aACvB;QACH,CAAC,EAAE,IAAI,CAAC,eAAe,CAAsB,CAAC;IAChD,CAAC;IAED;;OAEG;IACH,QAAQ,CAAC,IAAY,EAAE,IAAa;QAClC,MAAM,OAAO,GAAG,IAAI,CAAC,UAAU,CAAC,IAAI,EAAE,IAAI,CAAC,CAAC;QAC5C,MAAM,GAAG,GAAG;YACV,IAAI;YACJ,OAAO;YACP,QAAQ,EAAE,IAAI;SACf,CAAC;QACF,aAAa;QACb,KAAK,CAAC,KAAK,CAAC,GAAG,CAAC,kBAAkB,EAAE,GAAG,CAAC,CAAC;QACzC,aAAa;QACb,MAAM,MAAM,GAAG,KAAK,CAAC,SAAS,CAAC,IAAI,EAAE,OAAO,EAAE,IAAI,IAAI,EAAE,CAAC,CAAC;QAC1D,OAAO,MAAM,CAAC;IAChB,CAAC;IAED;;;;;OAKG;IACH,UAAU,CAAC,IAAY,EAAE,IAAa;QACpC,IAAI,CAAC,IAAI,EAAE;YACT,2DAA2D;YAC3D,4EAA4E;YAC5E,aAAa;YACb,OAAO,IAAI,CAAC,KAAK,CAAC,OAAO,CAAC,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC,CAAC,CAAC,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;SAClF;QACD,aAAa;QACb,IAAI,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,EAAE;YACzB,aAAa;YACb,OAAO,KAAK,CAAC,SAAS,CAAC,IAAI,CAAC,CAAC;SAC9B;QACD,QAAQ,IAAI,CAAC,SAAS,CAAC,CAAC,EAAE,CAAC,CAAC,EAAE;YAC5B,KAAK,IAAI,CAAC;YACV,KAAK,IAAI,CAAC;YACV,KAAK,IAAI;gBACP,aAAa;gBACb,OAAO,KAAK,CAAC,SAAS,CAAC,UAAU,CAAC;YACpC,KAAK,GAAG;gBACN,aAAa;gBACb,OAAO,KAAK,CAAC,SAAS,CAAC,KAAK,CAAC;YAC/B;gBACE,sEAAsE;gBACtE,aAAa;gBACb,OAAO,KAAK,CAAC,SAAS,CAAC,MAAM,CAAC;SACjC;IACH,CAAC;CACF","sourcesContent":["/* eslint-disable @typescript-eslint/ban-ts-comment */\n/* eslint-disable class-methods-use-this */\nimport 'prismjs/prism.js';\nimport 'prismjs/components/prism-json.min.js';\nimport 'prismjs/components/prism-javascript.js';\nimport 'prismjs/components/prism-markdown.js';\nimport 'prismjs/components/prism-markup.js';\nimport 'prismjs/components/prism-yaml.js';\nimport 'prismjs/components/prism-xml-doc.js';\nimport 'prismjs/components/prism-dart.js';\n// DART seems to be not working with auto-linker...\n// import 'prismjs/plugins/autolinker/prism-autolinker.js';\n\nexport class PrismHighlighter {\n protected listener?: (code: string) => unknown;\n\n /**\n * The number of milliseconds the library will wait before it runs the tokenizer.\n */\n debounceTimeout = 1;\n\n protected debounceTimer?: number;\n\n /**\n * @param highlightListener The listener for the debounced code highlight\n */\n constructor(highlightListener?: ((code: string) => unknown)) {\n this.listener = highlightListener;\n }\n\n /**\n * A function to be called to run the highlighter in a debouncer.\n * To use this library this way set the `highlightListener` in the constructor\n * which will be called when highlighting is done.\n * \n * @param code The code to highlight\n * @param lang The language to use.\n */\n debounce(code: string, lang: string): void {\n if (!this.listener) {\n throw new Error('The highlight listener is not set.')\n }\n if (this.debounceTimer) {\n clearTimeout(this.debounceTimer);\n }\n this.debounceTimer = setTimeout(() => {\n this.debounceTimer = undefined;\n const result = this.tokenize(code, lang);\n if (this.listener) {\n this.listener(result);\n }\n }, this.debounceTimeout) as unknown as number;\n }\n\n /**\n * Translates the code into a HTML markup\n */\n tokenize(code: string, lang?: string): string {\n const grammar = this.detectLang(code, lang);\n const env = {\n code,\n grammar,\n language: lang\n };\n // @ts-ignore\n Prism.hooks.run('before-highlight', env);\n // @ts-ignore\n const result = Prism.highlight(code, grammar, lang || '');\n return result;\n }\n\n /**\n * Picks a Prism formatter based on the `lang` hint and `code`.\n *\n * @param code The source being highlighted.\n * @param lang A language hint (e.g. ````LANG`).\n */\n detectLang(code: string, lang?: string): Prism.Grammar {\n if (!lang) {\n // Stupid simple detection if we have no lang, courtesy of:\n // https://github.com/robdodson/mark-down/blob/ac2eaa/mark-down.html#L93-101\n // @ts-ignore\n return code.match(/^\\s*</) ? Prism.languages.markup : Prism.languages.javascript;\n }\n // @ts-ignore\n if (Prism.languages[lang]) {\n // @ts-ignore\n return Prism.languages[lang];\n }\n switch (lang.substring(0, 2)) {\n case 'js':\n case 'es':\n case 'mj':\n // @ts-ignore\n return Prism.languages.javascript;\n case 'c':\n // @ts-ignore\n return Prism.languages.clike;\n default:\n // The assumption is that you're mostly documenting HTML when in HTML.\n // @ts-ignore\n return Prism.languages.markup;\n }\n }\n}\n"]}
|
|
@@ -63,12 +63,6 @@ const monacoContentTypes = {
|
|
|
63
63
|
* @fires change When the value and the model change
|
|
64
64
|
*/
|
|
65
65
|
export default class BodyEditor extends ApiElement {
|
|
66
|
-
/**
|
|
67
|
-
* The currently rendered editor.
|
|
68
|
-
* @attribute
|
|
69
|
-
*/
|
|
70
|
-
selected = 'raw';
|
|
71
|
-
valueInternal = '';
|
|
72
66
|
/**
|
|
73
67
|
* The HTTP body.
|
|
74
68
|
*
|
|
@@ -87,7 +81,6 @@ export default class BodyEditor extends ApiElement {
|
|
|
87
81
|
this.valueInternal = value;
|
|
88
82
|
this.requestUpdate();
|
|
89
83
|
}
|
|
90
|
-
modelInternal;
|
|
91
84
|
/**
|
|
92
85
|
* Previously generated by this editor metadata model.
|
|
93
86
|
* Used internally to set the UI.
|
|
@@ -106,21 +99,6 @@ export default class BodyEditor extends ApiElement {
|
|
|
106
99
|
this.requestUpdate();
|
|
107
100
|
this.modelChanged();
|
|
108
101
|
}
|
|
109
|
-
/**
|
|
110
|
-
* When set the editor is in read only mode.
|
|
111
|
-
* @attribute
|
|
112
|
-
*/
|
|
113
|
-
readOnly = false;
|
|
114
|
-
/**
|
|
115
|
-
* When set all controls are disabled in the form
|
|
116
|
-
* @attribute
|
|
117
|
-
*/
|
|
118
|
-
disabled = false;
|
|
119
|
-
/**
|
|
120
|
-
* When set it automatically encodes and decodes values.
|
|
121
|
-
* @attribute
|
|
122
|
-
*/
|
|
123
|
-
autoEncode = false;
|
|
124
102
|
/**
|
|
125
103
|
* @returns True when the current value is a file (or blob).
|
|
126
104
|
*/
|
|
@@ -128,19 +106,29 @@ export default class BodyEditor extends ApiElement {
|
|
|
128
106
|
const { value } = this;
|
|
129
107
|
return value instanceof Blob;
|
|
130
108
|
}
|
|
131
|
-
/**
|
|
132
|
-
* The current request content type. It is passed to the `raw` editor
|
|
133
|
-
* to detect current language.
|
|
134
|
-
* @attribute
|
|
135
|
-
*/
|
|
136
|
-
contentType;
|
|
137
|
-
invalidMimeMessage;
|
|
138
|
-
invalidMimeValue;
|
|
139
|
-
mimeValue;
|
|
140
|
-
urlEncodedEditor;
|
|
141
|
-
multipartEditor;
|
|
142
109
|
constructor() {
|
|
143
110
|
super();
|
|
111
|
+
/**
|
|
112
|
+
* The currently rendered editor.
|
|
113
|
+
* @attribute
|
|
114
|
+
*/
|
|
115
|
+
this.selected = 'raw';
|
|
116
|
+
this.valueInternal = '';
|
|
117
|
+
/**
|
|
118
|
+
* When set the editor is in read only mode.
|
|
119
|
+
* @attribute
|
|
120
|
+
*/
|
|
121
|
+
this.readOnly = false;
|
|
122
|
+
/**
|
|
123
|
+
* When set all controls are disabled in the form
|
|
124
|
+
* @attribute
|
|
125
|
+
*/
|
|
126
|
+
this.disabled = false;
|
|
127
|
+
/**
|
|
128
|
+
* When set it automatically encodes and decodes values.
|
|
129
|
+
* @attribute
|
|
130
|
+
*/
|
|
131
|
+
this.autoEncode = false;
|
|
144
132
|
this.addEventListener('drop', this.handlerDrop.bind(this));
|
|
145
133
|
this.addEventListener('dragover', this.handleDragOver.bind(this));
|
|
146
134
|
}
|