@testgorilla/tgo-coding-test 0.0.1 → 1.0.0
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- package/README.md +49 -2
- package/esm2022/index.mjs +12 -0
- package/esm2022/lib/components/code-editor/code-editor.component.mjs +335 -0
- package/esm2022/lib/components/code-editor/code-editor.service.mjs +72 -0
- package/esm2022/lib/components/code-editor/helpers/c-helper.mjs +40 -0
- package/esm2022/lib/components/code-editor/helpers/code-editor-helper.base.mjs +11 -0
- package/esm2022/lib/components/code-editor/helpers/code-editor-helper.model.mjs +2 -0
- package/esm2022/lib/components/code-editor/helpers/cpp-helper.mjs +41 -0
- package/esm2022/lib/components/code-editor/helpers/csharp-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/go-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/index.mjs +16 -0
- package/esm2022/lib/components/code-editor/helpers/java-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/javascript-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/kotlin-helper.mjs +42 -0
- package/esm2022/lib/components/code-editor/helpers/php-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/python-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/r-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/ruby-helper.mjs +26 -0
- package/esm2022/lib/components/code-editor/helpers/scala-helper.mjs +41 -0
- package/esm2022/lib/components/code-editor/helpers/sql-helper.mjs +34 -0
- package/esm2022/lib/components/code-editor/helpers/swift-helper.mjs +40 -0
- package/esm2022/lib/components/code-editor/helpers/typescript-helper.mjs +41 -0
- package/esm2022/lib/components/code-editor/models/code-editor.model.mjs +2 -0
- package/esm2022/lib/components/code-editor/models/coding-snapshot.model.mjs +2 -0
- package/esm2022/lib/components/coding-question/coding-question.component.mjs +126 -0
- package/esm2022/lib/components/coding-section/coding-section.component.mjs +188 -0
- package/esm2022/lib/components/common/truncated-text/truncated-text.component.mjs +38 -0
- package/esm2022/lib/components/configurations/configurations.component.mjs +97 -0
- package/esm2022/lib/components/instructions/instructions.component.mjs +139 -0
- package/esm2022/lib/components/panel/panel.component.mjs +34 -0
- package/esm2022/lib/components/runnable-editor/runnable-editor.component.mjs +169 -0
- package/esm2022/lib/components/tests/test-cases/test-cases.component.mjs +198 -0
- package/esm2022/lib/components/tests/test-cases-content/test-cases-content.component.mjs +96 -0
- package/esm2022/lib/components/tests/test-cases-status/test-cases-status.component.mjs +21 -0
- package/esm2022/lib/components/tests/test-results.component.mjs +127 -0
- package/esm2022/lib/components/tgo-coding-test/tgo-coding-test.component.mjs +280 -0
- package/esm2022/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.mjs +476 -0
- package/esm2022/lib/config/index.mjs +2 -0
- package/esm2022/lib/config/tgo-coding-test.config.mjs +2 -0
- package/esm2022/lib/config/tgo-coding-test.provider.mjs +34 -0
- package/esm2022/lib/config/tgo-coding-test.token.mjs +14 -0
- package/esm2022/lib/models/auto-saved-data.mjs +2 -0
- package/esm2022/lib/models/code-event.mjs +2 -0
- package/esm2022/lib/models/coderunner-execution-results.mjs +2 -0
- package/esm2022/lib/models/configs.mjs +2 -0
- package/esm2022/lib/models/language-change-action.mjs +2 -0
- package/esm2022/lib/models/lat-languages.mjs +3 -0
- package/esm2022/lib/models/mixpanel-events.mjs +2 -0
- package/esm2022/lib/models/mode.mjs +2 -0
- package/esm2022/lib/models/paste-data.mjs +2 -0
- package/esm2022/lib/models/programming-language.mjs +2 -0
- package/esm2022/lib/models/test-cases.mjs +7 -0
- package/esm2022/lib/models/theme.mjs +2 -0
- package/esm2022/lib/models/translations.mjs +2 -0
- package/esm2022/lib/models/view-mode.mjs +8 -0
- package/esm2022/lib/pipes/memoize-func.pipe.mjs +39 -0
- package/esm2022/lib/services/candidate-coding-test-services/candidature-api.service.mjs +19 -0
- package/esm2022/lib/services/candidate-coding-test-services/coderunner-api.service.mjs +58 -0
- package/esm2022/lib/services/candidate-coding-test-services/coding-test-tour.service.mjs +89 -0
- package/esm2022/lib/services/candidate-coding-test-services/coding-test.service.mjs +490 -0
- package/esm2022/lib/services/candidate-coding-test-services/index.mjs +5 -0
- package/esm2022/lib/services/coding-test-config.service.mjs +51 -0
- package/esm2022/lib/services/configurations.service.mjs +89 -0
- package/esm2022/lib/services/lib-coding-test.service.mjs +106 -0
- package/esm2022/lib/services/storage.service.mjs +624 -0
- package/esm2022/lib/services/test-cases.service.mjs +30 -0
- package/esm2022/lib/services/theme.service.mjs +36 -0
- package/esm2022/lib/utils/additional-languages/erlang.mjs +103 -0
- package/esm2022/lib/utils/resize-element.mjs +13 -0
- package/esm2022/lib/utils/time-to-ms.util.mjs +11 -0
- package/esm2022/shared/index.mjs +5 -0
- package/esm2022/shared/lib/components/audio-animation/audio-animation.component.mjs +114 -0
- package/esm2022/shared/lib/components/audio-animation/index.mjs +2 -0
- package/esm2022/shared/lib/components/index.mjs +3 -0
- package/esm2022/shared/lib/components/vimeo-video/index.mjs +2 -0
- package/esm2022/shared/lib/components/vimeo-video/vimeo-video.component.mjs +101 -0
- package/esm2022/shared/lib/models/answer.mjs +2 -0
- package/esm2022/shared/lib/models/assessment.mjs +2 -0
- package/esm2022/shared/lib/models/environment.mjs +2 -0
- package/esm2022/shared/lib/models/index.mjs +9 -0
- package/esm2022/shared/lib/models/question-component.mjs +2 -0
- package/esm2022/shared/lib/models/question.mjs +2 -0
- package/esm2022/shared/lib/models/test.mjs +2 -0
- package/esm2022/shared/lib/models/translations.mjs +2 -0
- package/esm2022/shared/lib/models/window.mjs +2 -0
- package/esm2022/shared/lib/services/api/api.service.mjs +97 -0
- package/esm2022/shared/lib/services/api/mocked-api.service.mjs +131 -0
- package/esm2022/shared/lib/services/environment/environment.service.mjs +13 -0
- package/esm2022/shared/lib/services/index.mjs +10 -0
- package/esm2022/shared/lib/services/localization/languages.model.mjs +19 -0
- package/esm2022/shared/lib/services/localization/transloco-lazy-module-utils.mjs +27 -0
- package/esm2022/shared/lib/services/localization/transloco-testing.module.mjs +11 -0
- package/esm2022/shared/lib/services/media/media.service.mjs +129 -0
- package/esm2022/shared/lib/services/mixpanel/mixpanel.service.mjs +30 -0
- package/esm2022/shared/lib/services/theme/theme.service.mjs +24 -0
- package/esm2022/shared/test-mocks/assessment-test.mock.mjs +112 -0
- package/esm2022/shared/test-mocks/index.mjs +3 -0
- package/esm2022/shared/test-mocks/tgo-ui.mock.mjs +39 -0
- package/esm2022/testgorilla-tgo-coding-test.mjs +5 -0
- package/fesm2022/testgorilla-tgo-coding-test.mjs +4526 -0
- package/fesm2022/testgorilla-tgo-coding-test.mjs.map +1 -0
- package/{src/index.ts → index.d.ts} +2 -19
- package/lib/components/code-editor/code-editor.component.d.ts +54 -0
- package/lib/components/code-editor/code-editor.service.d.ts +12 -0
- package/lib/components/code-editor/helpers/c-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/code-editor-helper.base.d.ts +8 -0
- package/lib/components/code-editor/helpers/code-editor-helper.model.d.ts +62 -0
- package/lib/components/code-editor/helpers/cpp-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/csharp-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/go-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/java-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/javascript-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/kotlin-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/php-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/python-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/r-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/ruby-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/scala-helper.d.ts +12 -0
- package/lib/components/code-editor/helpers/sql-helper.d.ts +10 -0
- package/lib/components/code-editor/helpers/swift-helper.d.ts +11 -0
- package/lib/components/code-editor/helpers/typescript-helper.d.ts +11 -0
- package/lib/components/code-editor/models/code-editor.model.d.ts +8 -0
- package/lib/components/code-editor/models/coding-snapshot.model.d.ts +4 -0
- package/lib/components/coding-question/coding-question.component.d.ts +45 -0
- package/lib/components/coding-section/coding-section.component.d.ts +52 -0
- package/lib/components/common/truncated-text/truncated-text.component.d.ts +13 -0
- package/lib/components/configurations/configurations.component.d.ts +40 -0
- package/lib/components/instructions/instructions.component.d.ts +48 -0
- package/lib/components/panel/panel.component.d.ts +12 -0
- package/lib/components/runnable-editor/runnable-editor.component.d.ts +53 -0
- package/lib/components/tests/test-cases/test-cases.component.d.ts +46 -0
- package/lib/components/tests/test-cases-content/test-cases-content.component.d.ts +26 -0
- package/lib/components/tests/test-cases-status/test-cases-status.component.d.ts +9 -0
- package/lib/components/tests/test-results.component.d.ts +33 -0
- package/lib/components/tgo-coding-test/tgo-coding-test.component.d.ts +69 -0
- package/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.d.ts +101 -0
- package/{src/lib/config/index.ts → lib/config/index.d.ts} +0 -1
- package/lib/config/tgo-coding-test.config.d.ts +24 -0
- package/{src/lib/config/tgo-coding-test.provider.ts → lib/config/tgo-coding-test.provider.d.ts} +6 -18
- package/lib/config/tgo-coding-test.token.d.ts +9 -0
- package/lib/models/auto-saved-data.d.ts +42 -0
- package/lib/models/code-event.d.ts +15 -0
- package/lib/models/coderunner-execution-results.d.ts +51 -0
- package/lib/models/configs.d.ts +15 -0
- package/lib/models/language-change-action.d.ts +4 -0
- package/lib/models/lat-languages.d.ts +8 -0
- package/lib/models/mixpanel-events.d.ts +3 -0
- package/lib/models/mode.d.ts +5 -0
- package/lib/models/paste-data.d.ts +4 -0
- package/lib/models/programming-language.d.ts +8 -0
- package/lib/models/test-cases.d.ts +67 -0
- package/lib/models/theme.d.ts +4 -0
- package/lib/models/translations.d.ts +1 -0
- package/lib/models/view-mode.d.ts +6 -0
- package/{src/lib/pipes/memoize-func.pipe.ts → lib/pipes/memoize-func.pipe.d.ts} +6 -14
- package/lib/services/candidate-coding-test-services/candidature-api.service.d.ts +10 -0
- package/lib/services/candidate-coding-test-services/coderunner-api.service.d.ts +18 -0
- package/lib/services/candidate-coding-test-services/coding-test-tour.service.d.ts +22 -0
- package/lib/services/candidate-coding-test-services/coding-test.service.d.ts +68 -0
- package/{src/lib/services/candidate-coding-test-services/index.ts → lib/services/candidate-coding-test-services/index.d.ts} +1 -1
- package/lib/services/coding-test-config.service.d.ts +38 -0
- package/lib/services/configurations.service.d.ts +37 -0
- package/lib/services/lib-coding-test.service.d.ts +69 -0
- package/lib/services/storage.service.d.ts +83 -0
- package/lib/services/test-cases.service.d.ts +12 -0
- package/lib/services/theme.service.d.ts +17 -0
- package/lib/utils/additional-languages/erlang.d.ts +37 -0
- package/lib/utils/resize-element.d.ts +2 -0
- package/lib/utils/time-to-ms.util.d.ts +1 -0
- package/package.json +18 -7
- package/shared/index.d.ts +4 -0
- package/shared/lib/components/audio-animation/audio-animation.component.d.ts +27 -0
- package/shared/lib/components/audio-animation/index.d.ts +1 -0
- package/shared/lib/components/index.d.ts +2 -0
- package/shared/lib/components/vimeo-video/index.d.ts +1 -0
- package/shared/lib/components/vimeo-video/vimeo-video.component.d.ts +24 -0
- package/shared/lib/models/answer.d.ts +17 -0
- package/shared/lib/models/assessment.d.ts +80 -0
- package/shared/lib/models/environment.d.ts +1 -0
- package/shared/lib/models/index.d.ts +8 -0
- package/shared/lib/models/question-component.d.ts +54 -0
- package/shared/lib/models/question.d.ts +102 -0
- package/shared/lib/models/test.d.ts +81 -0
- package/shared/lib/models/translations.d.ts +1 -0
- package/shared/lib/models/window.d.ts +6 -0
- package/shared/lib/services/api/api.service.d.ts +25 -0
- package/shared/lib/services/api/mocked-api.service.d.ts +35 -0
- package/shared/lib/services/environment/environment.service.d.ts +6 -0
- package/shared/lib/services/index.d.ts +9 -0
- package/shared/lib/services/localization/languages.model.d.ts +15 -0
- package/shared/lib/services/localization/transloco-lazy-module-utils.d.ts +11 -0
- package/shared/lib/services/localization/transloco-testing.module.d.ts +2 -0
- package/shared/lib/services/media/media.service.d.ts +29 -0
- package/shared/lib/services/mixpanel/mixpanel.service.d.ts +10 -0
- package/shared/lib/services/theme/theme.service.d.ts +8 -0
- package/shared/test-mocks/assessment-test.mock.d.ts +21 -0
- package/shared/test-mocks/index.d.ts +2 -0
- package/shared/test-mocks/tgo-ui.mock.d.ts +21 -0
- package/.eslintrc.json +0 -45
- package/jest.config.ts +0 -21
- package/ng-package.json +0 -14
- package/project.json +0 -36
- package/src/lib/components/.gitkeep +0 -0
- package/src/lib/components/code-editor/code-editor.component.html +0 -10
- package/src/lib/components/code-editor/code-editor.component.scss +0 -21
- package/src/lib/components/code-editor/code-editor.component.spec.ts +0 -136
- package/src/lib/components/code-editor/code-editor.component.ts +0 -369
- package/src/lib/components/code-editor/code-editor.mocks.ts +0 -28
- package/src/lib/components/code-editor/code-editor.service.spec.ts +0 -160
- package/src/lib/components/code-editor/code-editor.service.ts +0 -94
- package/src/lib/components/code-editor/helpers/c-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/c-helper.ts +0 -51
- package/src/lib/components/code-editor/helpers/code-editor-helper.base.spec.ts +0 -30
- package/src/lib/components/code-editor/helpers/code-editor-helper.base.ts +0 -16
- package/src/lib/components/code-editor/helpers/code-editor-helper.mocks.ts +0 -24
- package/src/lib/components/code-editor/helpers/code-editor-helper.model.ts +0 -67
- package/src/lib/components/code-editor/helpers/cpp-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/cpp-helper.ts +0 -52
- package/src/lib/components/code-editor/helpers/csharp-helper.spec.ts +0 -42
- package/src/lib/components/code-editor/helpers/csharp-helper.ts +0 -55
- package/src/lib/components/code-editor/helpers/go-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/go-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/java-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/java-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/javascript-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/javascript-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/kotlin-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/kotlin-helper.ts +0 -54
- package/src/lib/components/code-editor/helpers/php-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/php-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/python-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/python-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/r-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/r-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/ruby-helper.spec.ts +0 -39
- package/src/lib/components/code-editor/helpers/ruby-helper.ts +0 -32
- package/src/lib/components/code-editor/helpers/scala-helper.spec.ts +0 -41
- package/src/lib/components/code-editor/helpers/scala-helper.ts +0 -53
- package/src/lib/components/code-editor/helpers/sql-helper.spec.ts +0 -87
- package/src/lib/components/code-editor/helpers/sql-helper.ts +0 -44
- package/src/lib/components/code-editor/helpers/swift-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/swift-helper.ts +0 -51
- package/src/lib/components/code-editor/helpers/typescript-helper.spec.ts +0 -40
- package/src/lib/components/code-editor/helpers/typescript-helper.ts +0 -52
- package/src/lib/components/code-editor/models/code-editor.model.ts +0 -9
- package/src/lib/components/code-editor/models/coding-snapshot.model.ts +0 -4
- package/src/lib/components/coding-question/coding-question.component.html +0 -78
- package/src/lib/components/coding-question/coding-question.component.scss +0 -76
- package/src/lib/components/coding-question/coding-question.component.spec.ts +0 -85
- package/src/lib/components/coding-question/coding-question.component.ts +0 -102
- package/src/lib/components/coding-section/coding-section.component.html +0 -82
- package/src/lib/components/coding-section/coding-section.component.scss +0 -64
- package/src/lib/components/coding-section/coding-section.component.spec.ts +0 -257
- package/src/lib/components/coding-section/coding-section.component.ts +0 -187
- package/src/lib/components/coding-test.module.ts +0 -124
- package/src/lib/components/common/truncated-text/truncated-text.component.html +0 -6
- package/src/lib/components/common/truncated-text/truncated-text.component.scss +0 -18
- package/src/lib/components/common/truncated-text/truncated-text.component.spec.ts +0 -84
- package/src/lib/components/common/truncated-text/truncated-text.component.ts +0 -37
- package/src/lib/components/configurations/configurations.component.html +0 -57
- package/src/lib/components/configurations/configurations.component.scss +0 -42
- package/src/lib/components/configurations/configurations.component.spec.ts +0 -186
- package/src/lib/components/configurations/configurations.component.ts +0 -98
- package/src/lib/components/instructions/instructions.component.html +0 -41
- package/src/lib/components/instructions/instructions.component.scss +0 -167
- package/src/lib/components/instructions/instructions.component.spec.ts +0 -106
- package/src/lib/components/instructions/instructions.component.ts +0 -138
- package/src/lib/components/panel/panel.component.html +0 -19
- package/src/lib/components/panel/panel.component.scss +0 -41
- package/src/lib/components/panel/panel.component.spec.ts +0 -40
- package/src/lib/components/panel/panel.component.ts +0 -34
- package/src/lib/components/runnable-editor/runnable-editor.component.html +0 -75
- package/src/lib/components/runnable-editor/runnable-editor.component.scss +0 -55
- package/src/lib/components/runnable-editor/runnable-editor.component.spec.ts +0 -124
- package/src/lib/components/runnable-editor/runnable-editor.component.ts +0 -155
- package/src/lib/components/tests/test-cases/test-cases.component.html +0 -135
- package/src/lib/components/tests/test-cases/test-cases.component.scss +0 -220
- package/src/lib/components/tests/test-cases/test-cases.component.spec.ts +0 -401
- package/src/lib/components/tests/test-cases/test-cases.component.ts +0 -205
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.html +0 -94
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.scss +0 -103
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.spec.ts +0 -122
- package/src/lib/components/tests/test-cases-content/test-cases-content.component.ts +0 -102
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.html +0 -16
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.scss +0 -49
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.spec.ts +0 -22
- package/src/lib/components/tests/test-cases-status/test-cases-status.component.ts +0 -18
- package/src/lib/components/tests/test-results.component.html +0 -119
- package/src/lib/components/tests/test-results.component.scss +0 -189
- package/src/lib/components/tests/test-results.component.spec.ts +0 -140
- package/src/lib/components/tests/test-results.component.ts +0 -98
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.html +0 -96
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.scss +0 -6
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.spec.ts +0 -599
- package/src/lib/components/tgo-coding-test/tgo-coding-test.component.ts +0 -279
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.html +0 -36
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.scss +0 -183
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.spec.ts +0 -883
- package/src/lib/components/tgo-coding-test-candidate-view/tgo-coding-test-candidate-view.component.ts +0 -575
- package/src/lib/config/tgo-coding-test.config.ts +0 -26
- package/src/lib/config/tgo-coding-test.token.ts +0 -21
- package/src/lib/models/.gitkeep +0 -0
- package/src/lib/models/auto-saved-data.ts +0 -51
- package/src/lib/models/code-event.ts +0 -17
- package/src/lib/models/coderunner-execution-results.ts +0 -58
- package/src/lib/models/coding-lib.mocks.ts +0 -246
- package/src/lib/models/configs.ts +0 -18
- package/src/lib/models/language-change-action.ts +0 -4
- package/src/lib/models/lat-languages.ts +0 -12
- package/src/lib/models/mixpanel-events.ts +0 -3
- package/src/lib/models/mode.ts +0 -5
- package/src/lib/models/paste-data.ts +0 -4
- package/src/lib/models/programming-language.ts +0 -9
- package/src/lib/models/test-cases.ts +0 -74
- package/src/lib/models/theme.ts +0 -5
- package/src/lib/models/translations.ts +0 -1
- package/src/lib/models/view-mode.ts +0 -6
- package/src/lib/services/.gitkeep +0 -0
- package/src/lib/services/candidate-coding-test-services/candidature-api.service.spec.ts +0 -40
- package/src/lib/services/candidate-coding-test-services/candidature-api.service.ts +0 -15
- package/src/lib/services/candidate-coding-test-services/coderunner-api.service.spec.ts +0 -134
- package/src/lib/services/candidate-coding-test-services/coderunner-api.service.ts +0 -105
- package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.spec.ts +0 -161
- package/src/lib/services/candidate-coding-test-services/coding-test-tour.service.ts +0 -100
- package/src/lib/services/candidate-coding-test-services/coding-test.service.spec.ts +0 -1524
- package/src/lib/services/candidate-coding-test-services/coding-test.service.ts +0 -843
- package/src/lib/services/coding-test-config.service.ts +0 -48
- package/src/lib/services/configurations.service.mocks.ts +0 -77
- package/src/lib/services/configurations.service.spec.ts +0 -79
- package/src/lib/services/configurations.service.ts +0 -111
- package/src/lib/services/index.ts +0 -0
- package/src/lib/services/lib-coding-test.service.spec.ts +0 -265
- package/src/lib/services/lib-coding-test.service.ts +0 -157
- package/src/lib/services/local-storage.service.mocks.ts +0 -22
- package/src/lib/services/storage.service.spec.ts +0 -1120
- package/src/lib/services/storage.service.ts +0 -729
- package/src/lib/services/test-cases.service.spec.ts +0 -53
- package/src/lib/services/test-cases.service.ts +0 -29
- package/src/lib/services/theme.service.spec.ts +0 -76
- package/src/lib/services/theme.service.ts +0 -34
- package/src/lib/styles/mixins.scss +0 -86
- package/src/lib/styles/styles.scss +0 -112
- package/src/lib/styles/variables.scss +0 -105
- package/src/lib/utils/.gitkeep +0 -0
- package/src/lib/utils/additional-languages/erlang.ts +0 -115
- package/src/lib/utils/resize-element.ts +0 -15
- package/src/lib/utils/time-to-ms.util.ts +0 -10
- package/src/test-setup.ts +0 -1
- package/tsconfig.json +0 -16
- package/tsconfig.lib.json +0 -12
- package/tsconfig.lib.prod.json +0 -9
- package/tsconfig.spec.json +0 -13
- /package/{src/assets → assets}/i18n/en.json +0 -0
- /package/{src/lib/components/code-editor/helpers/index.ts → lib/components/code-editor/helpers/index.d.ts} +0 -0
|
@@ -0,0 +1,97 @@
|
|
|
1
|
+
import { __decorate } from "tslib";
|
|
2
|
+
import { ChangeDetectionStrategy, Component, inject, Input } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { FormBuilder, ReactiveFormsModule } from '@angular/forms';
|
|
5
|
+
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
|
|
6
|
+
import { distinctUntilChanged } from 'rxjs';
|
|
7
|
+
import { DropdownComponentModule, ToggleComponentModule } from '@testgorilla/tgo-ui';
|
|
8
|
+
import { ConfigurationsService } from '../../services/configurations.service';
|
|
9
|
+
import { LibCodingTestService } from '../../services/lib-coding-test.service';
|
|
10
|
+
import { StorageCodingService } from '../../services/storage.service';
|
|
11
|
+
import { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';
|
|
12
|
+
import { PanelComponent } from '../panel/panel.component';
|
|
13
|
+
import * as i0 from "@angular/core";
|
|
14
|
+
import * as i1 from "@angular/common";
|
|
15
|
+
import * as i2 from "@angular/forms";
|
|
16
|
+
import * as i3 from "@testgorilla/tgo-ui";
|
|
17
|
+
let ConfigurationsComponent = class ConfigurationsComponent {
|
|
18
|
+
fb = inject(FormBuilder);
|
|
19
|
+
configurationsService = inject(ConfigurationsService);
|
|
20
|
+
StorageCodingService = inject(StorageCodingService);
|
|
21
|
+
libCodingTestService = inject(LibCodingTestService);
|
|
22
|
+
translations;
|
|
23
|
+
companyColor;
|
|
24
|
+
applicationTheme;
|
|
25
|
+
formattingOptions = this.configurationsService.getFormattingOptions();
|
|
26
|
+
codingAssistanceOptions = this.configurationsService.getCodingAssistanceOptions();
|
|
27
|
+
initialConfig = this.StorageCodingService.getSavedConfig();
|
|
28
|
+
language$ = this.libCodingTestService.currentLanguage$;
|
|
29
|
+
configForm;
|
|
30
|
+
formObject = {};
|
|
31
|
+
configurationsPanelOpen$ = this.configurationsService.configurationsPanelOpen$;
|
|
32
|
+
ngOnInit() {
|
|
33
|
+
if (!this.initialConfig) {
|
|
34
|
+
this.initialConfig = this.configurationsService.getInitialConfig();
|
|
35
|
+
}
|
|
36
|
+
this.addConfigControls(this.formattingOptions);
|
|
37
|
+
this.addConfigControls(this.codingAssistanceOptions);
|
|
38
|
+
this.configForm = this.fb.group(this.formObject);
|
|
39
|
+
this.configForm.valueChanges.pipe(distinctUntilChanged(), untilDestroyed(this)).subscribe((value) => {
|
|
40
|
+
this.configurationsService.setConfig(value);
|
|
41
|
+
});
|
|
42
|
+
}
|
|
43
|
+
trackConfigChange(controlName) {
|
|
44
|
+
const controlValue = this.configForm.value[controlName];
|
|
45
|
+
this.configurationsService.trackConfigChanged({
|
|
46
|
+
[controlName]: controlValue,
|
|
47
|
+
});
|
|
48
|
+
}
|
|
49
|
+
closeConfigPanel() {
|
|
50
|
+
this.configurationsService.closeConfigPanel();
|
|
51
|
+
}
|
|
52
|
+
addConfigControls(configObject) {
|
|
53
|
+
// eslint-disable-next-line guard-for-in
|
|
54
|
+
for (const option in configObject) {
|
|
55
|
+
this.formObject[option] = this.initialConfig[option];
|
|
56
|
+
}
|
|
57
|
+
}
|
|
58
|
+
getFormattedOptions(configurationOptions) {
|
|
59
|
+
return configurationOptions.map(({ value, label }) => ({
|
|
60
|
+
value,
|
|
61
|
+
displayValue: label,
|
|
62
|
+
}));
|
|
63
|
+
}
|
|
64
|
+
isValidRow([language, editorOption]) {
|
|
65
|
+
if (language !== "javascript" /* CodeEditorLanguages.Javascript */ &&
|
|
66
|
+
language !== "typescript" /* CodeEditorLanguages.Typescript */ &&
|
|
67
|
+
(editorOption === "Auto-complete" /* CodingAssistanceOptions.AutoComplete */ ||
|
|
68
|
+
editorOption === "Error highlighting" /* CodingAssistanceOptions.ErrorHighlighting */)) {
|
|
69
|
+
return false;
|
|
70
|
+
}
|
|
71
|
+
return true;
|
|
72
|
+
}
|
|
73
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigurationsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
74
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: ConfigurationsComponent, isStandalone: true, selector: "tgo-code-configurations", inputs: { translations: "translations", companyColor: "companyColor", applicationTheme: "applicationTheme" }, ngImport: i0, template: "<tgo-code-panel\n [openPanel]=\"configurationsPanelOpen$ | async\"\n [heading]=\"translations['HEADINGS']['CONFIGURATIONS']\"\n (closeEvent)=\"closeConfigPanel()\"\n>\n <form [formGroup]=\"configForm\" class=\"configs\">\n <div id=\"formatting\" *ngIf=\"formattingOptions\">\n <h3>{{ translations['HEADINGS']['FORMATTING'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{ data: formattingOptions, inputType: 'dropdown' }\"\n ></ng-container>\n </div>\n <div id=\"codingAssistance\" *ngIf=\"codingAssistanceOptions\">\n <h3>{{ translations['HEADINGS']['CODING_ASSISTANCE'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{\n data: codingAssistanceOptions,\n inputType: 'toggle'\n }\"\n ></ng-container>\n </div>\n <ng-template #config let-configData=\"data\" let-inputType=\"inputType\">\n <ng-container *ngIf=\"language$ | async as language\">\n <ng-container *ngFor=\"let row of configData | keyvalue\">\n <div\n class=\"config-row\"\n *ngIf=\"[language, row.key] | memoizeFunc: isValidRow\"\n [class.config-row-toggle]=\"inputType === 'toggle'\"\n >\n <p class=\"config-name\">{{ row.key }}</p>\n <ui-dropdown\n *ngIf=\"inputType === 'dropdown'\"\n class=\"config-dropdown\"\n [formControlName]=\"row.key\"\n [valueList]=\"row.value | memoizeFunc: getFormattedOptions\"\n [allowClear]=\"false\"\n [applicationTheme]=\"applicationTheme\"\n [showBottomContent]=\"false\"\n (change)=\"trackConfigChange(row.key)\"\n ></ui-dropdown>\n <ui-toggle\n *ngIf=\"inputType === 'toggle'\"\n [applicationTheme]=\"applicationTheme\"\n [formControlName]=\"row.key\"\n (toggle)=\"trackConfigChange(row.key)\"\n class=\"config-toggle\"\n [class.config-toggle-company-colored]=\"!!companyColor\"\n [style.--toggle-checked-color]=\"companyColor\"\n ></ui-toggle>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </form>\n</tgo-code-panel>\n", styles: [".configs{display:flex;flex-direction:column;color:var(--main-text-color)}.configs .config-row{display:flex;justify-content:space-between;align-items:center}.configs .config-row.config-row-toggle{margin-bottom:32px}.configs .config-row.config-row-toggle .config-name{margin:0;padding:0}.configs .config-row.config-row-toggle .config-toggle.config-toggle-company-colored ::ng-deep .toggle-container.active{background-color:var(--toggle-checked-color)}.configs .config-row .config-dropdown{width:100%;max-width:320px}@media screen and (max-width: 599px){.configs .config-row .config-dropdown{flex:0 0 55%}}.config-name,.config-dropdown{margin:.25em 0;padding-bottom:1.5em}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: ReactiveFormsModule }, { kind: "directive", type: i2.ɵNgNoValidate, selector: "form:not([ngNoForm]):not([ngNativeValidate])" }, { kind: "directive", type: i2.NgControlStatus, selector: "[formControlName],[ngModel],[formControl]" }, { kind: "directive", type: i2.NgControlStatusGroup, selector: "[formGroupName],[formArrayName],[ngModelGroup],[formGroup],form:not([ngNoForm]),[ngForm]" }, { kind: "directive", type: i2.FormGroupDirective, selector: "[formGroup]", inputs: ["formGroup"], outputs: ["ngSubmit"], exportAs: ["ngForm"] }, { kind: "directive", type: i2.FormControlName, selector: "[formControlName]", inputs: ["formControlName", "disabled", "ngModel"], outputs: ["ngModelChange"] }, { kind: "ngmodule", type: DropdownComponentModule }, { kind: "component", type: i3.DropdownComponent, selector: "ui-dropdown", inputs: ["label", "labelIcon", "isAIVariant", "name", "placeholder", "id", "value", "errors", "disabled", "valueList", "allowClear", "allowMultipleSelection", "required", "showBottomContent", "applicationTheme", "hideBuiltInErrors", "hideLabelInErrors", "textField", "valueField", "hasError", "companyColor", "panelClass"], outputs: ["closed", "opened"] }, { kind: "ngmodule", type: ToggleComponentModule }, { kind: "component", type: i3.ToggleComponent, selector: "ui-toggle", inputs: ["selected", "disabled", "label", "message", "maxWidth", "applicationTheme", "ariaLabel", "ariaRequired", "preventClick", "loading", "ariaDescribedby"], outputs: ["toggle"] }, { kind: "pipe", type: MemoizeFuncPipe, name: "memoizeFunc" }, { kind: "component", type: PanelComponent, selector: "tgo-code-panel", inputs: ["heading", "openPanel"], outputs: ["closeEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
75
|
+
};
|
|
76
|
+
ConfigurationsComponent = __decorate([
|
|
77
|
+
UntilDestroy()
|
|
78
|
+
], ConfigurationsComponent);
|
|
79
|
+
export { ConfigurationsComponent };
|
|
80
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: ConfigurationsComponent, decorators: [{
|
|
81
|
+
type: Component,
|
|
82
|
+
args: [{ standalone: true, selector: 'tgo-code-configurations', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
83
|
+
CommonModule,
|
|
84
|
+
ReactiveFormsModule,
|
|
85
|
+
DropdownComponentModule,
|
|
86
|
+
ToggleComponentModule,
|
|
87
|
+
MemoizeFuncPipe,
|
|
88
|
+
PanelComponent,
|
|
89
|
+
], template: "<tgo-code-panel\n [openPanel]=\"configurationsPanelOpen$ | async\"\n [heading]=\"translations['HEADINGS']['CONFIGURATIONS']\"\n (closeEvent)=\"closeConfigPanel()\"\n>\n <form [formGroup]=\"configForm\" class=\"configs\">\n <div id=\"formatting\" *ngIf=\"formattingOptions\">\n <h3>{{ translations['HEADINGS']['FORMATTING'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{ data: formattingOptions, inputType: 'dropdown' }\"\n ></ng-container>\n </div>\n <div id=\"codingAssistance\" *ngIf=\"codingAssistanceOptions\">\n <h3>{{ translations['HEADINGS']['CODING_ASSISTANCE'] }}</h3>\n <ng-container\n [ngTemplateOutlet]=\"config\"\n [ngTemplateOutletContext]=\"{\n data: codingAssistanceOptions,\n inputType: 'toggle'\n }\"\n ></ng-container>\n </div>\n <ng-template #config let-configData=\"data\" let-inputType=\"inputType\">\n <ng-container *ngIf=\"language$ | async as language\">\n <ng-container *ngFor=\"let row of configData | keyvalue\">\n <div\n class=\"config-row\"\n *ngIf=\"[language, row.key] | memoizeFunc: isValidRow\"\n [class.config-row-toggle]=\"inputType === 'toggle'\"\n >\n <p class=\"config-name\">{{ row.key }}</p>\n <ui-dropdown\n *ngIf=\"inputType === 'dropdown'\"\n class=\"config-dropdown\"\n [formControlName]=\"row.key\"\n [valueList]=\"row.value | memoizeFunc: getFormattedOptions\"\n [allowClear]=\"false\"\n [applicationTheme]=\"applicationTheme\"\n [showBottomContent]=\"false\"\n (change)=\"trackConfigChange(row.key)\"\n ></ui-dropdown>\n <ui-toggle\n *ngIf=\"inputType === 'toggle'\"\n [applicationTheme]=\"applicationTheme\"\n [formControlName]=\"row.key\"\n (toggle)=\"trackConfigChange(row.key)\"\n class=\"config-toggle\"\n [class.config-toggle-company-colored]=\"!!companyColor\"\n [style.--toggle-checked-color]=\"companyColor\"\n ></ui-toggle>\n </div>\n </ng-container>\n </ng-container>\n </ng-template>\n </form>\n</tgo-code-panel>\n", styles: [".configs{display:flex;flex-direction:column;color:var(--main-text-color)}.configs .config-row{display:flex;justify-content:space-between;align-items:center}.configs .config-row.config-row-toggle{margin-bottom:32px}.configs .config-row.config-row-toggle .config-name{margin:0;padding:0}.configs .config-row.config-row-toggle .config-toggle.config-toggle-company-colored ::ng-deep .toggle-container.active{background-color:var(--toggle-checked-color)}.configs .config-row .config-dropdown{width:100%;max-width:320px}@media screen and (max-width: 599px){.configs .config-row .config-dropdown{flex:0 0 55%}}.config-name,.config-dropdown{margin:.25em 0;padding-bottom:1.5em}\n"] }]
|
|
90
|
+
}], propDecorators: { translations: [{
|
|
91
|
+
type: Input
|
|
92
|
+
}], companyColor: [{
|
|
93
|
+
type: Input
|
|
94
|
+
}], applicationTheme: [{
|
|
95
|
+
type: Input
|
|
96
|
+
}] } });
|
|
97
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiY29uZmlndXJhdGlvbnMuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9saWIvY29tcG9uZW50cy9jb25maWd1cmF0aW9ucy9jb25maWd1cmF0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiI7QUFBQSxPQUFPLEVBQUUsdUJBQXVCLEVBQUUsU0FBUyxFQUFFLE1BQU0sRUFBRSxLQUFLLEVBQVUsTUFBTSxlQUFlLENBQUM7QUFDMUYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxXQUFXLEVBQWEsbUJBQW1CLEVBQUUsTUFBTSxnQkFBZ0IsQ0FBQztBQUM3RSxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLE1BQU0sQ0FBQztBQUM1QyxPQUFPLEVBQWdDLHVCQUF1QixFQUFFLHFCQUFxQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFFbkgsT0FBTyxFQUFFLHFCQUFxQixFQUFFLE1BQU0sdUNBQXVDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sZ0NBQWdDLENBQUM7QUFFdEUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDO0FBQ2hFLE9BQU8sRUFBRSxjQUFjLEVBQUUsTUFBTSwwQkFBMEIsQ0FBQzs7Ozs7QUFrQm5ELElBQU0sdUJBQXVCLEdBQTdCLE1B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QzdELENBQUM7WUFDRCxPQUFPLEtBQUssQ0FBQztRQUNmLENBQUM7UUFDRCxPQUFPLElBQUksQ0FBQztJQUNkLENBQUM7d0dBbEVVLHVCQUF1Qjs0RkFBdkIsdUJBQXVCLGlNQzlCcEMscXpFQXlEQSx3dEJEbkNJLFlBQVksc2hCQUNaLG1CQUFtQiw0ckJBQ25CLHVCQUF1Qiw2Y0FDdkIscUJBQXFCLHdSQUNyQixlQUFlLG9EQUNmLGNBQWM7O0FBR0wsdUJBQXVCO0lBaEJuQyxZQUFZLEVBQUU7R0FnQkYsdUJBQXVCLENBbUVuQzs7NEZBbkVZLHVCQUF1QjtrQkFmbkMsU0FBUztpQ0FDSSxJQUFJLFlBQ04seUJBQXlCLG1CQUdsQix1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDO3dCQUNQLFlBQVk7d0JBQ1osbUJBQW1CO3dCQUNuQix1QkFBdUI7d0JBQ3ZCLHFCQUFxQjt3QkFDckIsZUFBZTt3QkFDZixjQUFjO3FCQUNmOzhCQVFRLFlBQVk7c0JBQXBCLEtBQUs7Z0JBQ0csWUFBWTtzQkFBcEIsS0FBSztnQkFDRyxnQkFBZ0I7c0JBQXhCLEtBQUsiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSwgQ29tcG9uZW50LCBpbmplY3QsIElucHV0LCBPbkluaXQgfSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBGb3JtQnVpbGRlciwgRm9ybUdyb3VwLCBSZWFjdGl2ZUZvcm1zTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvZm9ybXMnO1xuaW1wb3J0IHsgVW50aWxEZXN0cm95LCB1bnRpbERlc3Ryb3llZCB9IGZyb20gJ0BuZ25lYXQvdW50aWwtZGVzdHJveSc7XG5pbXBvcnQgeyBkaXN0aW5jdFVudGlsQ2hhbmdlZCB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UaGVtZSwgT3B0aW9uVHlwZSwgRHJvcGRvd25Db21wb25lbnRNb2R1bGUsIFRvZ2dsZUNvbXBvbmVudE1vZHVsZSB9IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdWknO1xuaW1wb3J0IHsgQ29kaW5nQXNzaXN0YW5jZU9wdGlvbnMsIENvbmZpZyB9IGZyb20gJy4uLy4uL21vZGVscy9jb25maWdzJztcbmltcG9ydCB7IENvbmZpZ3VyYXRpb25zU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL2NvbmZpZ3VyYXRpb25zLnNlcnZpY2UnO1xuaW1wb3J0IHsgTGliQ29kaW5nVGVzdFNlcnZpY2UgfSBmcm9tICcuLi8uLi9zZXJ2aWNlcy9saWItY29kaW5nLXRlc3Quc2VydmljZSc7XG5pbXBvcnQgeyBTdG9yYWdlQ29kaW5nU2VydmljZSB9IGZyb20gJy4uLy4uL3NlcnZpY2VzL3N0b3JhZ2Uuc2VydmljZSc7XG5pbXBvcnQgeyBDb2RlRWRpdG9yTGFuZ3VhZ2VzIH0gZnJvbSAnLi4vY29kZS1lZGl0b3IvaGVscGVycy9jb2RlLWVkaXRvci1oZWxwZXIubW9kZWwnO1xuaW1wb3J0IHsgTWVtb2l6ZUZ1bmNQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbWVtb2l6ZS1mdW5jLnBpcGUnO1xuaW1wb3J0IHsgUGFuZWxDb21wb25lbnQgfSBmcm9tICcuLi9wYW5lbC9wYW5lbC5jb21wb25lbnQnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3Rnby1jb2RlLWNvbmZpZ3VyYXRpb25zJyxcbiAgdGVtcGxhdGVVcmw6ICdjb25maWd1cmF0aW9ucy5jb21wb25lbnQuaHRtbCcsXG4gIHN0eWxlVXJsczogWydjb25maWd1cmF0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBjaGFuZ2VEZXRlY3Rpb246IENoYW5nZURldGVjdGlvblN0cmF0ZWd5Lk9uUHVzaCxcbiAgaW1wb3J0czogW1xuICAgIENvbW1vbk1vZHVsZSxcbiAgICBSZWFjdGl2ZUZvcm1zTW9kdWxlLFxuICAgIERyb3Bkb3duQ29tcG9uZW50TW9kdWxlLFxuICAgIFRvZ2dsZUNvbXBvbmVudE1vZHVsZSxcbiAgICBNZW1vaXplRnVuY1BpcGUsXG4gICAgUGFuZWxDb21wb25lbnQsXG4gIF0sXG59KVxuZXhwb3J0IGNsYXNzIENvbmZpZ3VyYXRpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBmYiA9IGluamVjdChGb3JtQnVpbGRlcik7XG4gIHByaXZhdGUgcmVhZG9ubHkgY29uZmlndXJhdGlvbnNTZXJ2aWNlID0gaW5qZWN0KENvbmZpZ3VyYXRpb25zU2VydmljZSk7XG4gIHByaXZhdGUgcmVhZG9ubHkgU3RvcmFnZUNvZGluZ1NlcnZpY2UgPSBpbmplY3QoU3RvcmFnZUNvZGluZ1NlcnZpY2UpO1xuICBwcml2YXRlIHJlYWRvbmx5IGxpYkNvZGluZ1Rlc3RTZXJ2aWNlID0gaW5qZWN0KExpYkNvZGluZ1Rlc3RTZXJ2aWNlKTtcblxuICBASW5wdXQoKSB0cmFuc2xhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBASW5wdXQoKSBjb21wYW55Q29sb3I6IHN0cmluZztcbiAgQElucHV0KCkgYXBwbGljYXRpb25UaGVtZTogQXBwbGljYXRpb25UaGVtZTtcblxuICBmb3JtYXR0aW5nT3B0aW9ucyA9IHRoaXMuY29uZmlndXJhdGlvbnNTZXJ2aWNlLmdldEZvcm1hdHRpbmdPcHRpb25zKCk7XG4gIGNvZGluZ0Fzc2lzdGFuY2VPcHRpb25zID0gdGhpcy5jb25maWd1cmF0aW9uc1NlcnZpY2UuZ2V0Q29kaW5nQXNzaXN0YW5jZU9wdGlvbnMoKTtcbiAgaW5pdGlhbENvbmZpZyA9IHRoaXMuU3RvcmFnZUNvZGluZ1NlcnZpY2UuZ2V0U2F2ZWRDb25maWcoKTtcbiAgbGFuZ3VhZ2UkID0gdGhpcy5saWJDb2RpbmdUZXN0U2VydmljZS5jdXJyZW50TGFuZ3VhZ2UkO1xuXG4gIGNvbmZpZ0Zvcm06IEZvcm1Hcm91cDtcbiAgZm9ybU9iamVjdCA9IHt9O1xuICBjb25maWd1cmF0aW9uc1BhbmVsT3BlbiQgPSB0aGlzLmNvbmZpZ3VyYXRpb25zU2VydmljZS5jb25maWd1cmF0aW9uc1BhbmVsT3BlbiQ7XG5cbiAgbmdPbkluaXQoKSB7XG4gICAgaWYgKCF0aGlzLmluaXRpYWxDb25maWcpIHtcbiAgICAgIHRoaXMuaW5pdGlhbENvbmZpZyA9IHRoaXMuY29uZmlndXJhdGlvbnNTZXJ2aWNlLmdldEluaXRpYWxDb25maWcoKTtcbiAgICB9XG4gICAgdGhpcy5hZGRDb25maWdDb250cm9scyh0aGlzLmZvcm1hdHRpbmdPcHRpb25zKTtcbiAgICB0aGlzLmFkZENvbmZpZ0NvbnRyb2xzKHRoaXMuY29kaW5nQXNzaXN0YW5jZU9wdGlvbnMpO1xuICAgIHRoaXMuY29uZmlnRm9ybSA9IHRoaXMuZmIuZ3JvdXAodGhpcy5mb3JtT2JqZWN0KTtcbiAgICB0aGlzLmNvbmZpZ0Zvcm0udmFsdWVDaGFuZ2VzLnBpcGUoZGlzdGluY3RVbnRpbENoYW5nZWQoKSwgdW50aWxEZXN0cm95ZWQodGhpcykpLnN1YnNjcmliZSgodmFsdWU6IENvbmZpZykgPT4ge1xuICAgICAgdGhpcy5jb25maWd1cmF0aW9uc1NlcnZpY2Uuc2V0Q29uZmlnKHZhbHVlKTtcbiAgICB9KTtcbiAgfVxuXG4gIHRyYWNrQ29uZmlnQ2hhbmdlKGNvbnRyb2xOYW1lOiBzdHJpbmcpOiB2b2lkIHtcbiAgICBjb25zdCBjb250cm9sVmFsdWUgPSB0aGlzLmNvbmZpZ0Zvcm0udmFsdWVbY29udHJvbE5hbWVdO1xuICAgIHRoaXMuY29uZmlndXJhdGlvbnNTZXJ2aWNlLnRyYWNrQ29uZmlnQ2hhbmdlZCh7XG4gICAgICBbY29udHJvbE5hbWVdOiBjb250cm9sVmFsdWUsXG4gICAgfSk7XG4gIH1cblxuICBjbG9zZUNvbmZpZ1BhbmVsKCkge1xuICAgIHRoaXMuY29uZmlndXJhdGlvbnNTZXJ2aWNlLmNsb3NlQ29uZmlnUGFuZWwoKTtcbiAgfVxuXG4gIHByaXZhdGUgYWRkQ29uZmlnQ29udHJvbHMoY29uZmlnT2JqZWN0OiBvYmplY3QpIHtcbiAgICAvLyBlc2xpbnQtZGlzYWJsZS1uZXh0LWxpbmUgZ3VhcmQtZm9yLWluXG4gICAgZm9yIChjb25zdCBvcHRpb24gaW4gY29uZmlnT2JqZWN0KSB7XG4gICAgICB0aGlzLmZvcm1PYmplY3Rbb3B0aW9uXSA9IHRoaXMuaW5pdGlhbENvbmZpZ1tvcHRpb25dO1xuICAgIH1cbiAgfVxuXG4gIGdldEZvcm1hdHRlZE9wdGlvbnMoY29uZmlndXJhdGlvbk9wdGlvbnM6IHsgbGFiZWw6IHN0cmluZzsgdmFsdWU6IGFueSB9W10pOiBPcHRpb25UeXBlW10ge1xuICAgIHJldHVybiBjb25maWd1cmF0aW9uT3B0aW9ucy5tYXAoKHsgdmFsdWUsIGxhYmVsIH0pID0+ICh7XG4gICAgICB2YWx1ZSxcbiAgICAgIGRpc3BsYXlWYWx1ZTogbGFiZWwsXG4gICAgfSkpO1xuICB9XG5cbiAgaXNWYWxpZFJvdyhbbGFuZ3VhZ2UsIGVkaXRvck9wdGlvbl06IFtDb2RlRWRpdG9yTGFuZ3VhZ2VzLCBDb2RpbmdBc3Npc3RhbmNlT3B0aW9uc10pIHtcbiAgICBpZiAoXG4gICAgICBsYW5ndWFnZSAhPT0gQ29kZUVkaXRvckxhbmd1YWdlcy5KYXZhc2NyaXB0ICYmXG4gICAgICBsYW5ndWFnZSAhPT0gQ29kZUVkaXRvckxhbmd1YWdlcy5UeXBlc2NyaXB0ICYmXG4gICAgICAoZWRpdG9yT3B0aW9uID09PSBDb2RpbmdBc3Npc3RhbmNlT3B0aW9ucy5BdXRvQ29tcGxldGUgfHxcbiAgICAgICAgZWRpdG9yT3B0aW9uID09PSBDb2RpbmdBc3Npc3RhbmNlT3B0aW9ucy5FcnJvckhpZ2hsaWdodGluZylcbiAgICApIHtcbiAgICAgIHJldHVybiBmYWxzZTtcbiAgICB9XG4gICAgcmV0dXJuIHRydWU7XG4gIH1cbn1cbiIsIjx0Z28tY29kZS1wYW5lbFxuICBbb3BlblBhbmVsXT1cImNvbmZpZ3VyYXRpb25zUGFuZWxPcGVuJCB8IGFzeW5jXCJcbiAgW2hlYWRpbmddPVwidHJhbnNsYXRpb25zWydIRUFESU5HUyddWydDT05GSUdVUkFUSU9OUyddXCJcbiAgKGNsb3NlRXZlbnQpPVwiY2xvc2VDb25maWdQYW5lbCgpXCJcbj5cbiAgPGZvcm0gW2Zvcm1Hcm91cF09XCJjb25maWdGb3JtXCIgY2xhc3M9XCJjb25maWdzXCI+XG4gICAgPGRpdiBpZD1cImZvcm1hdHRpbmdcIiAqbmdJZj1cImZvcm1hdHRpbmdPcHRpb25zXCI+XG4gICAgICA8aDM+e3sgdHJhbnNsYXRpb25zWydIRUFESU5HUyddWydGT1JNQVRUSU5HJ10gfX08L2gzPlxuICAgICAgPG5nLWNvbnRhaW5lclxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldF09XCJjb25maWdcIlxuICAgICAgICBbbmdUZW1wbGF0ZU91dGxldENvbnRleHRdPVwieyBkYXRhOiBmb3JtYXR0aW5nT3B0aW9ucywgaW5wdXRUeXBlOiAnZHJvcGRvd24nIH1cIlxuICAgICAgPjwvbmctY29udGFpbmVyPlxuICAgIDwvZGl2PlxuICAgIDxkaXYgaWQ9XCJjb2RpbmdBc3Npc3RhbmNlXCIgKm5nSWY9XCJjb2RpbmdBc3Npc3RhbmNlT3B0aW9uc1wiPlxuICAgICAgPGgzPnt7IHRyYW5zbGF0aW9uc1snSEVBRElOR1MnXVsnQ09ESU5HX0FTU0lTVEFOQ0UnXSB9fTwvaDM+XG4gICAgICA8bmctY29udGFpbmVyXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImNvbmZpZ1wiXG4gICAgICAgIFtuZ1RlbXBsYXRlT3V0bGV0Q29udGV4dF09XCJ7XG4gICAgICAgICAgZGF0YTogY29kaW5nQXNzaXN0YW5jZU9wdGlvbnMsXG4gICAgICAgICAgaW5wdXRUeXBlOiAndG9nZ2xlJ1xuICAgICAgICB9XCJcbiAgICAgID48L25nLWNvbnRhaW5lcj5cbiAgICA8L2Rpdj5cbiAgICA8bmctdGVtcGxhdGUgI2NvbmZpZyBsZXQtY29uZmlnRGF0YT1cImRhdGFcIiBsZXQtaW5wdXRUeXBlPVwiaW5wdXRUeXBlXCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibGFuZ3VhZ2UkIHwgYXN5bmMgYXMgbGFuZ3VhZ2VcIj5cbiAgICAgICAgPG5nLWNvbnRhaW5lciAqbmdGb3I9XCJsZXQgcm93IG9mIGNvbmZpZ0RhdGEgfCBrZXl2YWx1ZVwiPlxuICAgICAgICAgIDxkaXZcbiAgICAgICAgICAgIGNsYXNzPVwiY29uZmlnLXJvd1wiXG4gICAgICAgICAgICAqbmdJZj1cIltsYW5ndWFnZSwgcm93LmtleV0gfCBtZW1vaXplRnVuYzogaXNWYWxpZFJvd1wiXG4gICAgICAgICAgICBbY2xhc3MuY29uZmlnLXJvdy10b2dnbGVdPVwiaW5wdXRUeXBlID09PSAndG9nZ2xlJ1wiXG4gICAgICAgICAgPlxuICAgICAgICAgICAgPHAgY2xhc3M9XCJjb25maWctbmFtZVwiPnt7IHJvdy5rZXkgfX08L3A+XG4gICAgICAgICAgICA8dWktZHJvcGRvd25cbiAgICAgICAgICAgICAgKm5nSWY9XCJpbnB1dFR5cGUgPT09ICdkcm9wZG93bidcIlxuICAgICAgICAgICAgICBjbGFzcz1cImNvbmZpZy1kcm9wZG93blwiXG4gICAgICAgICAgICAgIFtmb3JtQ29udHJvbE5hbWVdPVwicm93LmtleVwiXG4gICAgICAgICAgICAgIFt2YWx1ZUxpc3RdPVwicm93LnZhbHVlIHwgbWVtb2l6ZUZ1bmM6IGdldEZvcm1hdHRlZE9wdGlvbnNcIlxuICAgICAgICAgICAgICBbYWxsb3dDbGVhcl09XCJmYWxzZVwiXG4gICAgICAgICAgICAgIFthcHBsaWNhdGlvblRoZW1lXT1cImFwcGxpY2F0aW9uVGhlbWVcIlxuICAgICAgICAgICAgICBbc2hvd0JvdHRvbUNvbnRlbnRdPVwiZmFsc2VcIlxuICAgICAgICAgICAgICAoY2hhbmdlKT1cInRyYWNrQ29uZmlnQ2hhbmdlKHJvdy5rZXkpXCJcbiAgICAgICAgICAgID48L3VpLWRyb3Bkb3duPlxuICAgICAgICAgICAgPHVpLXRvZ2dsZVxuICAgICAgICAgICAgICAqbmdJZj1cImlucHV0VHlwZSA9PT0gJ3RvZ2dsZSdcIlxuICAgICAgICAgICAgICBbYXBwbGljYXRpb25UaGVtZV09XCJhcHBsaWNhdGlvblRoZW1lXCJcbiAgICAgICAgICAgICAgW2Zvcm1Db250cm9sTmFtZV09XCJyb3cua2V5XCJcbiAgICAgICAgICAgICAgKHRvZ2dsZSk9XCJ0cmFja0NvbmZpZ0NoYW5nZShyb3cua2V5KVwiXG4gICAgICAgICAgICAgIGNsYXNzPVwiY29uZmlnLXRvZ2dsZVwiXG4gICAgICAgICAgICAgIFtjbGFzcy5jb25maWctdG9nZ2xlLWNvbXBhbnktY29sb3JlZF09XCIhIWNvbXBhbnlDb2xvclwiXG4gICAgICAgICAgICAgIFtzdHlsZS4tLXRvZ2dsZS1jaGVja2VkLWNvbG9yXT1cImNvbXBhbnlDb2xvclwiXG4gICAgICAgICAgICA+PC91aS10b2dnbGU+XG4gICAgICAgICAgPC9kaXY+XG4gICAgICAgIDwvbmctY29udGFpbmVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgPC9uZy10ZW1wbGF0ZT5cbiAgPC9mb3JtPlxuPC90Z28tY29kZS1wYW5lbD5cbiJdfQ==
|
|
@@ -0,0 +1,139 @@
|
|
|
1
|
+
import { Component, ElementRef, inject, Input, ViewChild } from '@angular/core';
|
|
2
|
+
import { CommonModule } from '@angular/common';
|
|
3
|
+
import Quill from 'quill';
|
|
4
|
+
import { TableCell, TableContainer, TableRow } from 'quill/formats/table';
|
|
5
|
+
import { asyncScheduler, observeOn, of, take } from 'rxjs';
|
|
6
|
+
import { QuillModule } from 'ngx-quill';
|
|
7
|
+
import { TooltipComponentModule, IconComponentModule, DividerComponentModule } from '@testgorilla/tgo-ui';
|
|
8
|
+
import { LibCodingTestService } from '../../services/lib-coding-test.service';
|
|
9
|
+
import { MemoizeFuncPipe } from '../../pipes/memoize-func.pipe';
|
|
10
|
+
import * as i0 from "@angular/core";
|
|
11
|
+
import * as i1 from "@angular/common";
|
|
12
|
+
import * as i2 from "ngx-quill";
|
|
13
|
+
import * as i3 from "@testgorilla/tgo-ui";
|
|
14
|
+
class TGOTableCell extends TableCell {
|
|
15
|
+
static className = 'td-q';
|
|
16
|
+
}
|
|
17
|
+
class TGOTableRow extends TableRow {
|
|
18
|
+
static className = 'tr-q';
|
|
19
|
+
}
|
|
20
|
+
class TGOTableContainer extends TableContainer {
|
|
21
|
+
static className = 'table-q';
|
|
22
|
+
}
|
|
23
|
+
export class InstructionsComponent {
|
|
24
|
+
libCodingTestService = inject(LibCodingTestService);
|
|
25
|
+
PreviewMode = "preview" /* Modes.Preview */;
|
|
26
|
+
RunningMode = "running" /* Modes.Running */;
|
|
27
|
+
NonAssessmentPreview = "non-assessment-preview" /* Modes.NonAssessmentPreview */;
|
|
28
|
+
mode = "preview" /* Modes.Preview */;
|
|
29
|
+
questionText;
|
|
30
|
+
translations;
|
|
31
|
+
isDarkTheme;
|
|
32
|
+
isLAT = false;
|
|
33
|
+
language$ = this.libCodingTestService.currentLanguage$;
|
|
34
|
+
set QuillElement(quill) {
|
|
35
|
+
if (!quill) {
|
|
36
|
+
return;
|
|
37
|
+
}
|
|
38
|
+
this.manualHighlight(quill.nativeElement);
|
|
39
|
+
}
|
|
40
|
+
languages = {
|
|
41
|
+
c: 'C GCC',
|
|
42
|
+
'c#': 'C# SDK',
|
|
43
|
+
'c#_legacy': 'C# SDK',
|
|
44
|
+
'c++': 'C++ G++',
|
|
45
|
+
java: 'Java OpenJDK',
|
|
46
|
+
python: 'Python',
|
|
47
|
+
javascript: 'JavaScript Node',
|
|
48
|
+
php: 'PHP',
|
|
49
|
+
sql: 'SQL SQLite',
|
|
50
|
+
typescript: 'Typescript',
|
|
51
|
+
ruby: 'Ruby',
|
|
52
|
+
go: 'Go',
|
|
53
|
+
r: 'R',
|
|
54
|
+
kotlin: 'Kotlin',
|
|
55
|
+
elixir: 'Elixir',
|
|
56
|
+
rust: 'Rust',
|
|
57
|
+
dart: 'Dart',
|
|
58
|
+
erlang: 'Erlang',
|
|
59
|
+
julia: 'Julia',
|
|
60
|
+
perl: 'Perl',
|
|
61
|
+
swift: 'Swift',
|
|
62
|
+
scala: 'Scala',
|
|
63
|
+
};
|
|
64
|
+
languagesVersion = {
|
|
65
|
+
c: '10',
|
|
66
|
+
'c#': '3.1.300',
|
|
67
|
+
'c#_legacy': '3.1.300',
|
|
68
|
+
'c++': '10',
|
|
69
|
+
java: '12',
|
|
70
|
+
python: '3.8',
|
|
71
|
+
javascript: '13',
|
|
72
|
+
php: '7.4',
|
|
73
|
+
sql: '3.31.1',
|
|
74
|
+
typescript: '4.3.4',
|
|
75
|
+
ruby: '3',
|
|
76
|
+
go: '1.16',
|
|
77
|
+
r: '4.1.0',
|
|
78
|
+
kotlin: '',
|
|
79
|
+
elixir: '',
|
|
80
|
+
rust: '',
|
|
81
|
+
dart: '',
|
|
82
|
+
erlang: '',
|
|
83
|
+
julia: '',
|
|
84
|
+
perl: '',
|
|
85
|
+
swift: '',
|
|
86
|
+
scala: '2.11',
|
|
87
|
+
};
|
|
88
|
+
manualHighlight(quillElement) {
|
|
89
|
+
const codeElements = quillElement.getElementsByTagName('pre');
|
|
90
|
+
if (!codeElements.length) {
|
|
91
|
+
return;
|
|
92
|
+
}
|
|
93
|
+
of(Array.from(codeElements))
|
|
94
|
+
.pipe(observeOn(asyncScheduler), take(1))
|
|
95
|
+
.subscribe((codeElements) => {
|
|
96
|
+
if (!window.hljs) {
|
|
97
|
+
return;
|
|
98
|
+
}
|
|
99
|
+
codeElements.forEach(el => {
|
|
100
|
+
window.hljs.highlightBlock(el);
|
|
101
|
+
});
|
|
102
|
+
});
|
|
103
|
+
}
|
|
104
|
+
ngOnInit() {
|
|
105
|
+
Quill.register(TGOTableCell, true);
|
|
106
|
+
Quill.register(TGOTableRow, true);
|
|
107
|
+
Quill.register(TGOTableContainer, true);
|
|
108
|
+
}
|
|
109
|
+
getVersion([isLAT, key]) {
|
|
110
|
+
return isLAT ? this.libCodingTestService.getVersion() : this.languagesVersion[key];
|
|
111
|
+
}
|
|
112
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InstructionsComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
113
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: InstructionsComponent, isStandalone: true, selector: "tgo-code-instructions", inputs: { mode: "mode", questionText: "questionText", translations: "translations", isDarkTheme: "isDarkTheme", isLAT: "isLAT" }, viewQueries: [{ propertyName: "QuillElement", first: true, predicate: ["quill"], descendants: true, read: ElementRef }], ngImport: i0, template: "<ng-container *ngIf=\"language$ | async as language\">\n <section *ngIf=\"questionText\" class=\"question\" id=\"question-section\">\n <header class=\"question-header\">\n <h2 class=\"question-heading\">{{ translations['HEADINGS']['INSTRUCTIONS'] }}</h2>\n </header>\n <div class=\"question-content\">\n <ng-container *ngIf=\"mode === PreviewMode\">\n <div class=\"tips\">\n <ui-tooltip [message]=\"translations['PRACTICE_QUESTIONS_STAGE']['INFO']\" class=\"tips-icon\">\n <ui-icon [name]=\"'Info'\" [size]=\"'24'\"></ui-icon>\n </ui-tooltip>\n <p class=\"tips-panel-text\">\n {{ translations['PRACTICE_QUESTIONS_STAGE']['QUESTIONS_INDEXING_AS_LAST'] }}\n </p>\n </div>\n <p class=\"tips-text\" [innerHTML]=\"translations['CODE_QUESTION']['PRACTICE_INTRODUCTION']\"></p>\n <ui-divider class=\"divider\" [size]=\"'small'\"></ui-divider>\n </ng-container>\n\n <quill-view\n #quill\n class=\"disable-text-selection question-text\"\n [class.question-text-dark]=\"isDarkTheme\"\n theme=\"snow\"\n [content]=\"questionText\"\n ></quill-view>\n <div [ngSwitch]=\"language\">\n <span class=\"mr-4\">{{ translations['CODE_QUESTION']['LANGUAGE_USING'] }} </span>\n <ng-container *ngFor=\"let item of languages | keyvalue\">\n <span *ngSwitchCase=\"item.key\">\n <span class=\"bold mr-4\">{{ item.value + ' ' + ([isLAT, item.key] | memoizeFunc: getVersion : this) }}</span>\n </span>\n </ng-container>\n <span *ngIf=\"mode === RunningMode || mode === NonAssessmentPreview\">\n <br />\n <span>{{ translations['CODE_QUESTION']['ADD_COMMENTS'] }}</span>\n </span>\n </div>\n </div>\n </section>\n</ng-container>\n", styles: [".tips{border-radius:5px;display:flex;flex-direction:row;place-content:center flex-start;align-items:center;margin-bottom:16px;padding:16px;background-color:var(--info-panel-color)}.tips-panel-text{color:#000}.tips-panel-text,.tips-text{font-size:16px}.tips-icon{margin-right:8px}.testgorilla-petrol-light{background:#c8d7de}.question-text{display:block;margin-bottom:32px}.question-text-dark ::ng-deep .ql-snow .ql-editor *[style]{color:var(--main-text-color)!important;background-color:inherit!important}.disable-text-selection{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.question{display:flex;flex-direction:column;height:100%}@media screen and (max-width: 959px){.question{height:auto}}.question.long_answer_list{padding-bottom:0}.question ::ng-deep .ql-editor,.question ::ng-deep .ql-container{max-height:100%}.question-content{padding:16px 40px 30px;height:100%;overflow-y:auto}.question-content .divider{display:block;margin:12px 0}.question-header{padding:18px 0 18px 40px;border-bottom:1px solid #E0E0E0}.question-header .question-heading{margin:0}:host{display:block;height:100%;overflow:hidden}@media screen and (max-width: 959px){:host{height:auto;flex:1 0 auto}}:host ::ng-deep p{margin:0;position:relative}:host ::ng-deep img{border-radius:5px}:host .bold{font-weight:700}:host .medium-size{font-size:medium}:host .image{border-radius:6px;overflow:hidden;transform:translateZ(0)}:host .image img{width:100%}::ng-deep .ql-editor{height:auto}::ng-deep .ql-editor .table-q{width:100%;border-collapse:collapse;border-radius:5px;table-layout:fixed;overflow:hidden;white-space:nowrap}::ng-deep .ql-editor .table-q .tr-q:first-of-type{background-color:var(--main-text-color)!important;color:#fff}::ng-deep .ql-editor .table-q .tr-q:nth-of-type(2n){background-color:var(--tertiary-background-color)}::ng-deep .ql-editor .table-q .tr-q:nth-of-type(odd){background-color:var(--grey-background)}::ng-deep .ql-editor .table-q .td-q{border:4px solid var(--secondary-border-color);border-radius:10px;padding:2px 5px;height:25px;vertical-align:top;text-align:center;white-space:normal}::ng-deep .ql-editor.ql-blank:before{color:var(--secondary-text-color)}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgForOf, selector: "[ngFor][ngForOf]", inputs: ["ngForOf", "ngForTrackBy", "ngForTemplate"] }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgSwitch, selector: "[ngSwitch]", inputs: ["ngSwitch"] }, { kind: "directive", type: i1.NgSwitchCase, selector: "[ngSwitchCase]", inputs: ["ngSwitchCase"] }, { kind: "pipe", type: i1.AsyncPipe, name: "async" }, { kind: "pipe", type: i1.KeyValuePipe, name: "keyvalue" }, { kind: "ngmodule", type: QuillModule }, { kind: "component", type: i2.QuillViewComponent, selector: "quill-view", inputs: ["format", "theme", "modules", "debug", "formats", "sanitize", "beforeRender", "strict", "content", "customModules", "customOptions"], outputs: ["onEditorCreated"] }, { kind: "ngmodule", type: TooltipComponentModule }, { kind: "component", type: i3.TooltipComponent, selector: "ui-tooltip", inputs: ["position", "disabled", "message", "applicationTheme", "labelForDefinition", "definitionTooltipSize", "variant"] }, { kind: "ngmodule", type: IconComponentModule }, { kind: "component", type: i3.IconComponent, selector: "ui-icon", inputs: ["size", "cssClass", "name", "color", "filled", "toggleIconStyle", "applicationTheme", "useFullIconName"] }, { kind: "ngmodule", type: DividerComponentModule }, { kind: "component", type: i3.DividerComponent, selector: "ui-divider", inputs: ["size", "companyColor", "applicationTheme", "label"] }, { kind: "pipe", type: MemoizeFuncPipe, name: "memoizeFunc" }] });
|
|
114
|
+
}
|
|
115
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: InstructionsComponent, decorators: [{
|
|
116
|
+
type: Component,
|
|
117
|
+
args: [{ standalone: true, selector: 'tgo-code-instructions', imports: [
|
|
118
|
+
CommonModule,
|
|
119
|
+
QuillModule,
|
|
120
|
+
TooltipComponentModule,
|
|
121
|
+
IconComponentModule,
|
|
122
|
+
DividerComponentModule,
|
|
123
|
+
MemoizeFuncPipe,
|
|
124
|
+
], template: "<ng-container *ngIf=\"language$ | async as language\">\n <section *ngIf=\"questionText\" class=\"question\" id=\"question-section\">\n <header class=\"question-header\">\n <h2 class=\"question-heading\">{{ translations['HEADINGS']['INSTRUCTIONS'] }}</h2>\n </header>\n <div class=\"question-content\">\n <ng-container *ngIf=\"mode === PreviewMode\">\n <div class=\"tips\">\n <ui-tooltip [message]=\"translations['PRACTICE_QUESTIONS_STAGE']['INFO']\" class=\"tips-icon\">\n <ui-icon [name]=\"'Info'\" [size]=\"'24'\"></ui-icon>\n </ui-tooltip>\n <p class=\"tips-panel-text\">\n {{ translations['PRACTICE_QUESTIONS_STAGE']['QUESTIONS_INDEXING_AS_LAST'] }}\n </p>\n </div>\n <p class=\"tips-text\" [innerHTML]=\"translations['CODE_QUESTION']['PRACTICE_INTRODUCTION']\"></p>\n <ui-divider class=\"divider\" [size]=\"'small'\"></ui-divider>\n </ng-container>\n\n <quill-view\n #quill\n class=\"disable-text-selection question-text\"\n [class.question-text-dark]=\"isDarkTheme\"\n theme=\"snow\"\n [content]=\"questionText\"\n ></quill-view>\n <div [ngSwitch]=\"language\">\n <span class=\"mr-4\">{{ translations['CODE_QUESTION']['LANGUAGE_USING'] }} </span>\n <ng-container *ngFor=\"let item of languages | keyvalue\">\n <span *ngSwitchCase=\"item.key\">\n <span class=\"bold mr-4\">{{ item.value + ' ' + ([isLAT, item.key] | memoizeFunc: getVersion : this) }}</span>\n </span>\n </ng-container>\n <span *ngIf=\"mode === RunningMode || mode === NonAssessmentPreview\">\n <br />\n <span>{{ translations['CODE_QUESTION']['ADD_COMMENTS'] }}</span>\n </span>\n </div>\n </div>\n </section>\n</ng-container>\n", styles: [".tips{border-radius:5px;display:flex;flex-direction:row;place-content:center flex-start;align-items:center;margin-bottom:16px;padding:16px;background-color:var(--info-panel-color)}.tips-panel-text{color:#000}.tips-panel-text,.tips-text{font-size:16px}.tips-icon{margin-right:8px}.testgorilla-petrol-light{background:#c8d7de}.question-text{display:block;margin-bottom:32px}.question-text-dark ::ng-deep .ql-snow .ql-editor *[style]{color:var(--main-text-color)!important;background-color:inherit!important}.disable-text-selection{-webkit-touch-callout:none;-webkit-user-select:none;-khtml-user-select:none;-moz-user-select:none;-ms-user-select:none;user-select:none}.question{display:flex;flex-direction:column;height:100%}@media screen and (max-width: 959px){.question{height:auto}}.question.long_answer_list{padding-bottom:0}.question ::ng-deep .ql-editor,.question ::ng-deep .ql-container{max-height:100%}.question-content{padding:16px 40px 30px;height:100%;overflow-y:auto}.question-content .divider{display:block;margin:12px 0}.question-header{padding:18px 0 18px 40px;border-bottom:1px solid #E0E0E0}.question-header .question-heading{margin:0}:host{display:block;height:100%;overflow:hidden}@media screen and (max-width: 959px){:host{height:auto;flex:1 0 auto}}:host ::ng-deep p{margin:0;position:relative}:host ::ng-deep img{border-radius:5px}:host .bold{font-weight:700}:host .medium-size{font-size:medium}:host .image{border-radius:6px;overflow:hidden;transform:translateZ(0)}:host .image img{width:100%}::ng-deep .ql-editor{height:auto}::ng-deep .ql-editor .table-q{width:100%;border-collapse:collapse;border-radius:5px;table-layout:fixed;overflow:hidden;white-space:nowrap}::ng-deep .ql-editor .table-q .tr-q:first-of-type{background-color:var(--main-text-color)!important;color:#fff}::ng-deep .ql-editor .table-q .tr-q:nth-of-type(2n){background-color:var(--tertiary-background-color)}::ng-deep .ql-editor .table-q .tr-q:nth-of-type(odd){background-color:var(--grey-background)}::ng-deep .ql-editor .table-q .td-q{border:4px solid var(--secondary-border-color);border-radius:10px;padding:2px 5px;height:25px;vertical-align:top;text-align:center;white-space:normal}::ng-deep .ql-editor.ql-blank:before{color:var(--secondary-text-color)}\n"] }]
|
|
125
|
+
}], propDecorators: { mode: [{
|
|
126
|
+
type: Input
|
|
127
|
+
}], questionText: [{
|
|
128
|
+
type: Input
|
|
129
|
+
}], translations: [{
|
|
130
|
+
type: Input
|
|
131
|
+
}], isDarkTheme: [{
|
|
132
|
+
type: Input
|
|
133
|
+
}], isLAT: [{
|
|
134
|
+
type: Input
|
|
135
|
+
}], QuillElement: [{
|
|
136
|
+
type: ViewChild,
|
|
137
|
+
args: ['quill', { read: ElementRef }]
|
|
138
|
+
}] } });
|
|
139
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoiaW5zdHJ1Y3Rpb25zLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbXBvbmVudHMvaW5zdHJ1Y3Rpb25zL2luc3RydWN0aW9ucy5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL2luc3RydWN0aW9ucy9pbnN0cnVjdGlvbnMuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IkFBQUEsT0FBTyxFQUFFLFNBQVMsRUFBRSxVQUFVLEVBQUUsTUFBTSxFQUFFLEtBQUssRUFBVSxTQUFTLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFDeEYsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sS0FBSyxNQUFNLE9BQU8sQ0FBQztBQUMxQixPQUFPLEVBQUUsU0FBUyxFQUFFLGNBQWMsRUFBRSxRQUFRLEVBQUUsTUFBTSxxQkFBcUIsQ0FBQztBQUMxRSxPQUFPLEVBQUUsY0FBYyxFQUFFLFNBQVMsRUFBRSxFQUFFLEVBQUUsSUFBSSxFQUFFLE1BQU0sTUFBTSxDQUFDO0FBQzNELE9BQU8sRUFBRSxXQUFXLEVBQUUsTUFBTSxXQUFXLENBQUM7QUFDeEMsT0FBTyxFQUFFLHNCQUFzQixFQUFFLG1CQUFtQixFQUFFLHNCQUFzQixFQUFFLE1BQU0scUJBQXFCLENBQUM7QUFHMUcsT0FBTyxFQUFFLG9CQUFvQixFQUFFLE1BQU0sd0NBQXdDLENBQUM7QUFDOUUsT0FBTyxFQUFFLGVBQWUsRUFBRSxNQUFNLCtCQUErQixDQUFDOzs7OztBQUVoRSxNQUFNLFlBQWEsU0FBUSxTQUFTO0lBQzNCLE1BQU0sQ0FBQyxTQUFTLEdBQUcsTUFBTSxDQUFDOztBQUduQyxNQUFNLFdBQVksU0FBUSxRQUFRO0lBQ3pCLE1B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QUFDLE9BQU8sRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQgeyBDb21wb25lbnQsIEVsZW1lbnRSZWYsIGluamVjdCwgSW5wdXQsIE9uSW5pdCwgVmlld0NoaWxkIH0gZnJvbSAnQGFuZ3VsYXIvY29yZSc7XG5pbXBvcnQgeyBDb21tb25Nb2R1bGUgfSBmcm9tICdAYW5ndWxhci9jb21tb24nO1xuaW1wb3J0IFF1aWxsIGZyb20gJ3F1aWxsJztcbmltcG9ydCB7IFRhYmxlQ2VsbCwgVGFibGVDb250YWluZXIsIFRhYmxlUm93IH0gZnJvbSAncXVpbGwvZm9ybWF0cy90YWJsZSc7XG5pbXBvcnQgeyBhc3luY1NjaGVkdWxlciwgb2JzZXJ2ZU9uLCBvZiwgdGFrZSB9IGZyb20gJ3J4anMnO1xuaW1wb3J0IHsgUXVpbGxNb2R1bGUgfSBmcm9tICduZ3gtcXVpbGwnO1xuaW1wb3J0IHsgVG9vbHRpcENvbXBvbmVudE1vZHVsZSwgSWNvbkNvbXBvbmVudE1vZHVsZSwgRGl2aWRlckNvbXBvbmVudE1vZHVsZSB9IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdWknO1xuXG5pbXBvcnQgeyBNb2RlcyB9IGZyb20gJy4uLy4uL21vZGVscy9tb2RlJztcbmltcG9ydCB7IExpYkNvZGluZ1Rlc3RTZXJ2aWNlIH0gZnJvbSAnLi4vLi4vc2VydmljZXMvbGliLWNvZGluZy10ZXN0LnNlcnZpY2UnO1xuaW1wb3J0IHsgTWVtb2l6ZUZ1bmNQaXBlIH0gZnJvbSAnLi4vLi4vcGlwZXMvbWVtb2l6ZS1mdW5jLnBpcGUnO1xuXG5jbGFzcyBUR09UYWJsZUNlbGwgZXh0ZW5kcyBUYWJsZUNlbGwge1xuICBwdWJsaWMgc3RhdGljIGNsYXNzTmFtZSA9ICd0ZC1xJztcbn1cblxuY2xhc3MgVEdPVGFibGVSb3cgZXh0ZW5kcyBUYWJsZVJvdyB7XG4gIHB1YmxpYyBzdGF0aWMgY2xhc3NOYW1lID0gJ3RyLXEnO1xufVxuXG5jbGFzcyBUR09UYWJsZUNvbnRhaW5lciBleHRlbmRzIFRhYmxlQ29udGFpbmVyIHtcbiAgcHVibGljIHN0YXRpYyBjbGFzc05hbWUgPSAndGFibGUtcSc7XG59XG5cbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3Rnby1jb2RlLWluc3RydWN0aW9ucycsXG4gIHRlbXBsYXRlVXJsOiAnaW5zdHJ1Y3Rpb25zLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ2luc3RydWN0aW9ucy5jb21wb25lbnQuc2NzcyddLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIFF1aWxsTW9kdWxlLFxuICAgIFRvb2x0aXBDb21wb25lbnRNb2R1bGUsXG4gICAgSWNvbkNvbXBvbmVudE1vZHVsZSxcbiAgICBEaXZpZGVyQ29tcG9uZW50TW9kdWxlLFxuICAgIE1lbW9pemVGdW5jUGlwZSxcbiAgXSxcbn0pXG5leHBvcnQgY2xhc3MgSW5zdHJ1Y3Rpb25zQ29tcG9uZW50IGltcGxlbWVudHMgT25Jbml0IHtcbiAgcHJpdmF0ZSByZWFkb25seSBsaWJDb2RpbmdUZXN0U2VydmljZSA9IGluamVjdChMaWJDb2RpbmdUZXN0U2VydmljZSk7XG5cbiAgcmVhZG9ubHkgUHJldmlld01vZGUgPSBNb2Rlcy5QcmV2aWV3O1xuICByZWFkb25seSBSdW5uaW5nTW9kZSA9IE1vZGVzLlJ1bm5pbmc7XG4gIHJlYWRvbmx5IE5vbkFzc2Vzc21lbnRQcmV2aWV3ID0gTW9kZXMuTm9uQXNzZXNzbWVudFByZXZpZXc7XG4gIEBJbnB1dCgpIG1vZGUgPSBNb2Rlcy5QcmV2aWV3O1xuICBASW5wdXQoKSBxdWVzdGlvblRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgdHJhbnNsYXRpb25zOiBSZWNvcmQ8c3RyaW5nLCB1bmtub3duPjtcbiAgQElucHV0KCkgaXNEYXJrVGhlbWU6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzTEFUID0gZmFsc2U7XG4gIGxhbmd1YWdlJCA9IHRoaXMubGliQ29kaW5nVGVzdFNlcnZpY2UuY3VycmVudExhbmd1YWdlJDtcblxuICBAVmlld0NoaWxkKCdxdWlsbCcsIHsgcmVhZDogRWxlbWVudFJlZiB9KSBzZXQgUXVpbGxFbGVtZW50KHF1aWxsOiBFbGVtZW50UmVmKSB7XG4gICAgaWYgKCFxdWlsbCkge1xuICAgICAgcmV0dXJuO1xuICAgIH1cblxuICAgIHRoaXMubWFudWFsSGlnaGxpZ2h0KHF1aWxsLm5hdGl2ZUVsZW1lbnQpO1xuICB9XG5cbiAgbGFuZ3VhZ2VzID0ge1xuICAgIGM6ICdDIEdDQycsXG4gICAgJ2MjJzogJ0MjIFNESycsXG4gICAgJ2MjX2xlZ2FjeSc6ICdDIyBTREsnLFxuICAgICdjKysnOiAnQysrIEcrKycsXG4gICAgamF2YTogJ0phdmEgT3BlbkpESycsXG4gICAgcHl0aG9uOiAnUHl0aG9uJyxcbiAgICBqYXZhc2NyaXB0OiAnSmF2YVNjcmlwdCBOb2RlJyxcbiAgICBwaHA6ICdQSFAnLFxuICAgIHNxbDogJ1NRTCBTUUxpdGUnLFxuICAgIHR5cGVzY3JpcHQ6ICdUeXBlc2NyaXB0JyxcbiAgICBydWJ5OiAnUnVieScsXG4gICAgZ286ICdHbycsXG4gICAgcjogJ1InLFxuICAgIGtvdGxpbjogJ0tvdGxpbicsXG4gICAgZWxpeGlyOiAnRWxpeGlyJyxcbiAgICBydXN0OiAnUnVzdCcsXG4gICAgZGFydDogJ0RhcnQnLFxuICAgIGVybGFuZzogJ0VybGFuZycsXG4gICAganVsaWE6ICdKdWxpYScsXG4gICAgcGVybDogJ1BlcmwnLFxuICAgIHN3aWZ0OiAnU3dpZnQnLFxuICAgIHNjYWxhOiAnU2NhbGEnLFxuICB9O1xuICBsYW5ndWFnZXNWZXJzaW9uOiB7IFtrZXk6IHN0cmluZ106IHN0cmluZyB9ID0ge1xuICAgIGM6ICcxMCcsXG4gICAgJ2MjJzogJzMuMS4zMDAnLFxuICAgICdjI19sZWdhY3knOiAnMy4xLjMwMCcsXG4gICAgJ2MrKyc6ICcxMCcsXG4gICAgamF2YTogJzEyJyxcbiAgICBweXRob246ICczLjgnLFxuICAgIGphdmFzY3JpcHQ6ICcxMycsXG4gICAgcGhwOiAnNy40JyxcbiAgICBzcWw6ICczLjMxLjEnLFxuICAgIHR5cGVzY3JpcHQ6ICc0LjMuNCcsXG4gICAgcnVieTogJzMnLFxuICAgIGdvOiAnMS4xNicsXG4gICAgcjogJzQuMS4wJyxcbiAgICBrb3RsaW46ICcnLFxuICAgIGVsaXhpcjogJycsXG4gICAgcnVzdDogJycsXG4gICAgZGFydDogJycsXG4gICAgZXJsYW5nOiAnJyxcbiAgICBqdWxpYTogJycsXG4gICAgcGVybDogJycsXG4gICAgc3dpZnQ6ICcnLFxuICAgIHNjYWxhOiAnMi4xMScsXG4gIH07XG5cbiAgcHJpdmF0ZSBtYW51YWxIaWdobGlnaHQocXVpbGxFbGVtZW50OiBIVE1MRWxlbWVudCk6IHZvaWQge1xuICAgIGNvbnN0IGNvZGVFbGVtZW50cyA9IHF1aWxsRWxlbWVudC5nZXRFbGVtZW50c0J5VGFnTmFtZSgncHJlJyk7XG5cbiAgICBpZiAoIWNvZGVFbGVtZW50cy5sZW5ndGgpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBvZihBcnJheS5mcm9tKGNvZGVFbGVtZW50cykpXG4gICAgICAucGlwZShvYnNlcnZlT24oYXN5bmNTY2hlZHVsZXIpLCB0YWtlKDEpKVxuICAgICAgLnN1YnNjcmliZSgoY29kZUVsZW1lbnRzOiBIVE1MUHJlRWxlbWVudFtdKSA9PiB7XG4gICAgICAgIGlmICghd2luZG93LmhsanMpIHtcbiAgICAgICAgICByZXR1cm47XG4gICAgICAgIH1cblxuICAgICAgICBjb2RlRWxlbWVudHMuZm9yRWFjaChlbCA9PiB7XG4gICAgICAgICAgd2luZG93LmhsanMuaGlnaGxpZ2h0QmxvY2soZWwpO1xuICAgICAgICB9KTtcbiAgICAgIH0pO1xuICB9XG5cbiAgbmdPbkluaXQoKTogdm9pZCB7XG4gICAgUXVpbGwucmVnaXN0ZXIoVEdPVGFibGVDZWxsLCB0cnVlKTtcbiAgICBRdWlsbC5yZWdpc3RlcihUR09UYWJsZVJvdywgdHJ1ZSk7XG4gICAgUXVpbGwucmVnaXN0ZXIoVEdPVGFibGVDb250YWluZXIsIHRydWUpO1xuICB9XG5cbiAgZ2V0VmVyc2lvbihbaXNMQVQsIGtleV06IFtib29sZWFuLCBzdHJpbmddKTogc3RyaW5nIHtcbiAgICByZXR1cm4gaXNMQVQgPyB0aGlzLmxpYkNvZGluZ1Rlc3RTZXJ2aWNlLmdldFZlcnNpb24oKSA6IHRoaXMubGFuZ3VhZ2VzVmVyc2lvbltrZXldO1xuICB9XG59XG4iLCI8bmctY29udGFpbmVyICpuZ0lmPVwibGFuZ3VhZ2UkIHwgYXN5bmMgYXMgbGFuZ3VhZ2VcIj5cbiAgPHNlY3Rpb24gKm5nSWY9XCJxdWVzdGlvblRleHRcIiBjbGFzcz1cInF1ZXN0aW9uXCIgaWQ9XCJxdWVzdGlvbi1zZWN0aW9uXCI+XG4gICAgPGhlYWRlciBjbGFzcz1cInF1ZXN0aW9uLWhlYWRlclwiPlxuICAgICAgPGgyIGNsYXNzPVwicXVlc3Rpb24taGVhZGluZ1wiPnt7IHRyYW5zbGF0aW9uc1snSEVBRElOR1MnXVsnSU5TVFJVQ1RJT05TJ10gfX08L2gyPlxuICAgIDwvaGVhZGVyPlxuICAgIDxkaXYgY2xhc3M9XCJxdWVzdGlvbi1jb250ZW50XCI+XG4gICAgICA8bmctY29udGFpbmVyICpuZ0lmPVwibW9kZSA9PT0gUHJldmlld01vZGVcIj5cbiAgICAgICAgPGRpdiBjbGFzcz1cInRpcHNcIj5cbiAgICAgICAgICA8dWktdG9vbHRpcCBbbWVzc2FnZV09XCJ0cmFuc2xhdGlvbnNbJ1BSQUNUSUNFX1FVRVNUSU9OU19TVEFHRSddWydJTkZPJ11cIiBjbGFzcz1cInRpcHMtaWNvblwiPlxuICAgICAgICAgICAgPHVpLWljb24gW25hbWVdPVwiJ0luZm8nXCIgW3NpemVdPVwiJzI0J1wiPjwvdWktaWNvbj5cbiAgICAgICAgICA8L3VpLXRvb2x0aXA+XG4gICAgICAgICAgPHAgY2xhc3M9XCJ0aXBzLXBhbmVsLXRleHRcIj5cbiAgICAgICAgICAgIHt7IHRyYW5zbGF0aW9uc1snUFJBQ1RJQ0VfUVVFU1RJT05TX1NUQUdFJ11bJ1FVRVNUSU9OU19JTkRFWElOR19BU19MQVNUJ10gfX1cbiAgICAgICAgICA8L3A+XG4gICAgICAgIDwvZGl2PlxuICAgICAgICA8cCBjbGFzcz1cInRpcHMtdGV4dFwiIFtpbm5lckhUTUxdPVwidHJhbnNsYXRpb25zWydDT0RFX1FVRVNUSU9OJ11bJ1BSQUNUSUNFX0lOVFJPRFVDVElPTiddXCI+PC9wPlxuICAgICAgICA8dWktZGl2aWRlciBjbGFzcz1cImRpdmlkZXJcIiBbc2l6ZV09XCInc21hbGwnXCI+PC91aS1kaXZpZGVyPlxuICAgICAgPC9uZy1jb250YWluZXI+XG5cbiAgICAgIDxxdWlsbC12aWV3XG4gICAgICAgICNxdWlsbFxuICAgICAgICBjbGFzcz1cImRpc2FibGUtdGV4dC1zZWxlY3Rpb24gcXVlc3Rpb24tdGV4dFwiXG4gICAgICAgIFtjbGFzcy5xdWVzdGlvbi10ZXh0LWRhcmtdPVwiaXNEYXJrVGhlbWVcIlxuICAgICAgICB0aGVtZT1cInNub3dcIlxuICAgICAgICBbY29udGVudF09XCJxdWVzdGlvblRleHRcIlxuICAgICAgPjwvcXVpbGwtdmlldz5cbiAgICAgIDxkaXYgW25nU3dpdGNoXT1cImxhbmd1YWdlXCI+XG4gICAgICAgIDxzcGFuIGNsYXNzPVwibXItNFwiPnt7IHRyYW5zbGF0aW9uc1snQ09ERV9RVUVTVElPTiddWydMQU5HVUFHRV9VU0lORyddIH19Jm5ic3A7PC9zcGFuPlxuICAgICAgICA8bmctY29udGFpbmVyICpuZ0Zvcj1cImxldCBpdGVtIG9mIGxhbmd1YWdlcyB8IGtleXZhbHVlXCI+XG4gICAgICAgICAgPHNwYW4gKm5nU3dpdGNoQ2FzZT1cIml0ZW0ua2V5XCI+XG4gICAgICAgICAgICA8c3BhbiBjbGFzcz1cImJvbGQgbXItNFwiPnt7IGl0ZW0udmFsdWUgKyAnICcgKyAoW2lzTEFULCBpdGVtLmtleV0gfCBtZW1vaXplRnVuYzogZ2V0VmVyc2lvbiA6IHRoaXMpIH19PC9zcGFuPlxuICAgICAgICAgIDwvc3Bhbj5cbiAgICAgICAgPC9uZy1jb250YWluZXI+XG4gICAgICAgIDxzcGFuICpuZ0lmPVwibW9kZSA9PT0gUnVubmluZ01vZGUgfHwgbW9kZSA9PT0gTm9uQXNzZXNzbWVudFByZXZpZXdcIj5cbiAgICAgICAgICA8YnIgLz5cbiAgICAgICAgICA8c3Bhbj57eyB0cmFuc2xhdGlvbnNbJ0NPREVfUVVFU1RJT04nXVsnQUREX0NPTU1FTlRTJ10gfX08L3NwYW4+XG4gICAgICAgIDwvc3Bhbj5cbiAgICAgIDwvZGl2PlxuICAgIDwvZGl2PlxuICA8L3NlY3Rpb24+XG48L25nLWNvbnRhaW5lcj5cbiJdfQ==
|
|
@@ -0,0 +1,34 @@
|
|
|
1
|
+
import { ChangeDetectionStrategy, Component, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
2
|
+
import { MatSidenav, MatSidenavModule } from '@angular/material/sidenav';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { ButtonComponentModule } from '@testgorilla/tgo-ui';
|
|
5
|
+
import * as i0 from "@angular/core";
|
|
6
|
+
import * as i1 from "@angular/material/sidenav";
|
|
7
|
+
import * as i2 from "@testgorilla/tgo-ui";
|
|
8
|
+
export class PanelComponent {
|
|
9
|
+
heading;
|
|
10
|
+
openPanel;
|
|
11
|
+
closeEvent = new EventEmitter();
|
|
12
|
+
sidenav;
|
|
13
|
+
ngOnChanges(changes) {
|
|
14
|
+
if (changes.openPanel.currentValue) {
|
|
15
|
+
this.sidenav.open();
|
|
16
|
+
}
|
|
17
|
+
}
|
|
18
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PanelComponent, deps: [], target: i0.ɵɵFactoryTarget.Component });
|
|
19
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: PanelComponent, isStandalone: true, selector: "tgo-code-panel", inputs: { heading: "heading", openPanel: "openPanel" }, outputs: { closeEvent: "closeEvent" }, viewQueries: [{ propertyName: "sidenav", first: true, predicate: ["sidenav"], descendants: true, static: true }], usesOnChanges: true, ngImport: i0, template: "<mat-sidenav-container class=\"sidenav-container\">\n <mat-sidenav #sidenav position=\"end\" (closedStart)=\"closeEvent.emit(true)\">\n <div class=\"container\">\n <div class=\"header\">\n <h2 class=\"heading\">{{ heading }}</h2>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"'Close'\"\n (buttonClickEvent)=\"sidenav.close()\"\n class=\"themed-button\"\n ></ui-button>\n </div>\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </mat-sidenav>\n</mat-sidenav-container>\n", styles: [".container{display:flex;flex-direction:column;padding:24px 32px}.container .header{display:flex;justify-content:space-between;align-items:center;padding:16px 0}.container .heading{margin:0}.close-icon{fill:var(--icon-bg-color)}.sidenav-container{z-index:36}.sidenav-container mat-sidenav{width:100%;max-width:600px;background-color:var(--drawer-bg-color)!important}.sidenav-container .mat-sidenav.mat-drawer-opened{position:fixed}.sidenav-container ::ng-deep .mat-drawer-backdrop.mat-drawer-shown{background-color:transparent;position:fixed}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "ngmodule", type: MatSidenavModule }, { kind: "component", type: i1.MatSidenav, selector: "mat-sidenav", inputs: ["fixedInViewport", "fixedTopGap", "fixedBottomGap"], exportAs: ["matSidenav"] }, { kind: "component", type: i1.MatSidenavContainer, selector: "mat-sidenav-container", exportAs: ["matSidenavContainer"] }, { kind: "ngmodule", type: ButtonComponentModule }, { kind: "component", type: i2.ButtonComponent, selector: "ui-button", inputs: ["size", "variant", "label", "iconPosition", "justIcon", "iconName", "disabled", "loading", "fullWidth", "url", "urlTarget", "value", "tooltip", "isPremium", "type", "companyColor", "buttonBadgeConfig", "applicationTheme", "disabledScaleOnClick", "ariaLabel", "ariaRequired", "ariaLabelledby", "ariaDescribedby", "preventDefault", "hasBackground", "tooltipPosition", "role", "iconFilled"], outputs: ["buttonClickEvent", "buttonHoverEvent"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
20
|
+
}
|
|
21
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: PanelComponent, decorators: [{
|
|
22
|
+
type: Component,
|
|
23
|
+
args: [{ standalone: true, selector: 'tgo-code-panel', changeDetection: ChangeDetectionStrategy.OnPush, imports: [CommonModule, MatSidenavModule, ButtonComponentModule], template: "<mat-sidenav-container class=\"sidenav-container\">\n <mat-sidenav #sidenav position=\"end\" (closedStart)=\"closeEvent.emit(true)\">\n <div class=\"container\">\n <div class=\"header\">\n <h2 class=\"heading\">{{ heading }}</h2>\n <ui-button\n [variant]=\"'icon-button'\"\n [iconName]=\"'Close'\"\n [tooltip]=\"'Close'\"\n (buttonClickEvent)=\"sidenav.close()\"\n class=\"themed-button\"\n ></ui-button>\n </div>\n <div>\n <ng-content></ng-content>\n </div>\n </div>\n </mat-sidenav>\n</mat-sidenav-container>\n", styles: [".container{display:flex;flex-direction:column;padding:24px 32px}.container .header{display:flex;justify-content:space-between;align-items:center;padding:16px 0}.container .heading{margin:0}.close-icon{fill:var(--icon-bg-color)}.sidenav-container{z-index:36}.sidenav-container mat-sidenav{width:100%;max-width:600px;background-color:var(--drawer-bg-color)!important}.sidenav-container .mat-sidenav.mat-drawer-opened{position:fixed}.sidenav-container ::ng-deep .mat-drawer-backdrop.mat-drawer-shown{background-color:transparent;position:fixed}\n"] }]
|
|
24
|
+
}], propDecorators: { heading: [{
|
|
25
|
+
type: Input
|
|
26
|
+
}], openPanel: [{
|
|
27
|
+
type: Input
|
|
28
|
+
}], closeEvent: [{
|
|
29
|
+
type: Output
|
|
30
|
+
}], sidenav: [{
|
|
31
|
+
type: ViewChild,
|
|
32
|
+
args: ['sidenav', { static: true }]
|
|
33
|
+
}] } });
|
|
34
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicGFuZWwuY29tcG9uZW50LmpzIiwic291cmNlUm9vdCI6IiIsInNvdXJjZXMiOlsiLi4vLi4vLi4vLi4vLi4vLi4vLi4vcGFja2FnZXMvdGdvLWNvZGluZy10ZXN0L3NyYy9saWIvY29tcG9uZW50cy9wYW5lbC9wYW5lbC5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL3BhbmVsL3BhbmVsLmNvbXBvbmVudC5odG1sIl0sIm5hbWVzIjpbXSwibWFwcGluZ3MiOiJBQUFBLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsU0FBUyxFQUNULFlBQVksRUFDWixLQUFLLEVBRUwsTUFBTSxFQUVOLFNBQVMsR0FDVixNQUFNLGVBQWUsQ0FBQztBQUN2QixPQUFPLEVBQUUsVUFBVSxFQUFFLGdCQUFnQixFQUFFLE1BQU0sMkJBQTJCLENBQUM7QUFDekUsT0FBTyxFQUFFLFlBQVksRUFBRSxNQUFNLGlCQUFpQixDQUFDO0FBQy9DLE9BQU8sRUFBRSxxQkFBcUIsRUFBRSxNQUFNLHFCQUFxQixDQUFDOzs7O0FBVTVELE1BQU0sT0FBTyxjQUFjO0lBQ2hCLE9BQU8sQ0FBUztJQUNoQixTQUFTLENBQVU7SUFDbEIsVUFBVSxHQUFHLElBQUksWUFBWSxFQUFXLENBQUM7SUFDWCxPQUFPLENBQWE7SUFFNUQsV0FBVyxDQUFDLE9BQXNCO1FBQ2hDLElBQUksT0FBTyxDQUFDLFNBQVMsQ0FBQyxZQUFZLEVBQUUsQ0FBQztZQUNuQyxJQUFJLENBQUMsT0FBTyxDQUFDLElBQUksRUFBRSxDQUFDO1FBQ3RCLENBQUM7SUFDSCxDQUFDO3dHQVZVLGNBQWM7NEZBQWQsY0FBYyxnVEN0QjNCLHVtQkFtQkEsd2xCRENZLFlBQVksOEJBQUUsZ0JBQWdCLHNUQUFFLHFCQUFxQjs7NEZBRXBELGNBQWM7a0JBUjFCLFNBQVM7aUNBQ0ksSUFBSSxZQUNOLGdCQUFnQixtQkFHVCx1QkFBdUIsQ0FBQyxNQUFNLFdBQ3RDLENBQUMsWUFBWSxFQUFFLGdCQUFnQixFQUFFLHFCQUFxQixDQUFDOzhCQUd2RCxPQUFPO3NCQUFmLEtBQUs7Z0JBQ0csU0FBUztzQkFBakIsS0FBSztnQkFDSSxVQUFVO3NCQUFuQixNQUFNO2dCQUNpQyxPQUFPO3NCQUE5QyxTQUFTO3VCQUFDLFNBQVMsRUFBRSxFQUFFLE1BQU0sRUFBRSxJQUFJLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ29tcG9uZW50LFxuICBFdmVudEVtaXR0ZXIsXG4gIElucHV0LFxuICBPbkNoYW5nZXMsXG4gIE91dHB1dCxcbiAgU2ltcGxlQ2hhbmdlcyxcbiAgVmlld0NoaWxkLFxufSBmcm9tICdAYW5ndWxhci9jb3JlJztcbmltcG9ydCB7IE1hdFNpZGVuYXYsIE1hdFNpZGVuYXZNb2R1bGUgfSBmcm9tICdAYW5ndWxhci9tYXRlcmlhbC9zaWRlbmF2JztcbmltcG9ydCB7IENvbW1vbk1vZHVsZSB9IGZyb20gJ0Bhbmd1bGFyL2NvbW1vbic7XG5pbXBvcnQgeyBCdXR0b25Db21wb25lbnRNb2R1bGUgfSBmcm9tICdAdGVzdGdvcmlsbGEvdGdvLXVpJztcblxuQENvbXBvbmVudCh7XG4gIHN0YW5kYWxvbmU6IHRydWUsXG4gIHNlbGVjdG9yOiAndGdvLWNvZGUtcGFuZWwnLFxuICB0ZW1wbGF0ZVVybDogJ3BhbmVsLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJ3BhbmVsLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbQ29tbW9uTW9kdWxlLCBNYXRTaWRlbmF2TW9kdWxlLCBCdXR0b25Db21wb25lbnRNb2R1bGVdLFxufSlcbmV4cG9ydCBjbGFzcyBQYW5lbENvbXBvbmVudCBpbXBsZW1lbnRzIE9uQ2hhbmdlcyB7XG4gIEBJbnB1dCgpIGhlYWRpbmc6IHN0cmluZztcbiAgQElucHV0KCkgb3BlblBhbmVsOiBib29sZWFuO1xuICBAT3V0cHV0KCkgY2xvc2VFdmVudCA9IG5ldyBFdmVudEVtaXR0ZXI8Ym9vbGVhbj4oKTtcbiAgQFZpZXdDaGlsZCgnc2lkZW5hdicsIHsgc3RhdGljOiB0cnVlIH0pIHNpZGVuYXY6IE1hdFNpZGVuYXY7XG5cbiAgbmdPbkNoYW5nZXMoY2hhbmdlczogU2ltcGxlQ2hhbmdlcyk6IHZvaWQge1xuICAgIGlmIChjaGFuZ2VzLm9wZW5QYW5lbC5jdXJyZW50VmFsdWUpIHtcbiAgICAgIHRoaXMuc2lkZW5hdi5vcGVuKCk7XG4gICAgfVxuICB9XG59XG4iLCI8bWF0LXNpZGVuYXYtY29udGFpbmVyIGNsYXNzPVwic2lkZW5hdi1jb250YWluZXJcIj5cbiAgPG1hdC1zaWRlbmF2ICNzaWRlbmF2IHBvc2l0aW9uPVwiZW5kXCIgKGNsb3NlZFN0YXJ0KT1cImNsb3NlRXZlbnQuZW1pdCh0cnVlKVwiPlxuICAgIDxkaXYgY2xhc3M9XCJjb250YWluZXJcIj5cbiAgICAgIDxkaXYgY2xhc3M9XCJoZWFkZXJcIj5cbiAgICAgICAgPGgyIGNsYXNzPVwiaGVhZGluZ1wiPnt7IGhlYWRpbmcgfX08L2gyPlxuICAgICAgICA8dWktYnV0dG9uXG4gICAgICAgICAgW3ZhcmlhbnRdPVwiJ2ljb24tYnV0dG9uJ1wiXG4gICAgICAgICAgW2ljb25OYW1lXT1cIidDbG9zZSdcIlxuICAgICAgICAgIFt0b29sdGlwXT1cIidDbG9zZSdcIlxuICAgICAgICAgIChidXR0b25DbGlja0V2ZW50KT1cInNpZGVuYXYuY2xvc2UoKVwiXG4gICAgICAgICAgY2xhc3M9XCJ0aGVtZWQtYnV0dG9uXCJcbiAgICAgICAgPjwvdWktYnV0dG9uPlxuICAgICAgPC9kaXY+XG4gICAgICA8ZGl2PlxuICAgICAgICA8bmctY29udGVudD48L25nLWNvbnRlbnQ+XG4gICAgICA8L2Rpdj5cbiAgICA8L2Rpdj5cbiAgPC9tYXQtc2lkZW5hdj5cbjwvbWF0LXNpZGVuYXYtY29udGFpbmVyPlxuIl19
|
|
@@ -0,0 +1,169 @@
|
|
|
1
|
+
import { __decorate, __metadata } from "tslib";
|
|
2
|
+
import { ChangeDetectionStrategy, ChangeDetectorRef, Component, ElementRef, EventEmitter, Input, Output, ViewChild, } from '@angular/core';
|
|
3
|
+
import { CommonModule } from '@angular/common';
|
|
4
|
+
import { UntilDestroy, untilDestroyed } from '@ngneat/until-destroy';
|
|
5
|
+
import { animationFrameScheduler, concat, debounceTime, distinctUntilChanged, map, observeOn, of, } from 'rxjs';
|
|
6
|
+
import { AngularSplitModule } from 'angular-split';
|
|
7
|
+
import { resizeElement } from '../../utils/resize-element';
|
|
8
|
+
import { CodingSectionComponent } from '../coding-section/coding-section.component';
|
|
9
|
+
import { ConfigurationsComponent } from '../configurations/configurations.component';
|
|
10
|
+
import { TestResultsComponent } from '../tests/test-results.component';
|
|
11
|
+
import * as i0 from "@angular/core";
|
|
12
|
+
import * as i1 from "@angular/common";
|
|
13
|
+
import * as i2 from "angular-split";
|
|
14
|
+
let RunnableEditorComponent = class RunnableEditorComponent {
|
|
15
|
+
changeDetectorRef;
|
|
16
|
+
initCode;
|
|
17
|
+
functionParams;
|
|
18
|
+
functionName;
|
|
19
|
+
returnType;
|
|
20
|
+
isFullViewMode;
|
|
21
|
+
isLAT;
|
|
22
|
+
isSQL;
|
|
23
|
+
canAddCustomTestCases;
|
|
24
|
+
hideTestCases;
|
|
25
|
+
languages;
|
|
26
|
+
shouldGenerateInitCode;
|
|
27
|
+
autoHeight;
|
|
28
|
+
translations;
|
|
29
|
+
questionText;
|
|
30
|
+
companyColor;
|
|
31
|
+
testCasesStatus;
|
|
32
|
+
loading;
|
|
33
|
+
runTestResponse = [];
|
|
34
|
+
exampleTestCases;
|
|
35
|
+
isRunnableWithLangSelector;
|
|
36
|
+
applicationTheme;
|
|
37
|
+
pasteEvent = new EventEmitter();
|
|
38
|
+
codeChange = new EventEmitter();
|
|
39
|
+
runTestClick = new EventEmitter();
|
|
40
|
+
languageChange = new EventEmitter();
|
|
41
|
+
codingTestsSplitRef;
|
|
42
|
+
testsSplitAreaRef;
|
|
43
|
+
minTestsSplitHeight;
|
|
44
|
+
currentIdeSplitHeight = 55;
|
|
45
|
+
currentTestsSplitHeight = 45;
|
|
46
|
+
MIN_TESTS_HEIGHT_PX = 119;
|
|
47
|
+
MIN_LAT_TESTS_HEIGHT_PX = 202;
|
|
48
|
+
GUTTER_SIZE = 1;
|
|
49
|
+
isMobile = /Android|webOS|iPhone|iPad|iPod|BlackBerry|IEMobile|Opera Mini/i.test(navigator.userAgent);
|
|
50
|
+
constructor(changeDetectorRef) {
|
|
51
|
+
this.changeDetectorRef = changeDetectorRef;
|
|
52
|
+
}
|
|
53
|
+
ngAfterViewInit() {
|
|
54
|
+
if (this.isMobile) {
|
|
55
|
+
return;
|
|
56
|
+
}
|
|
57
|
+
if (this.isFullViewMode) {
|
|
58
|
+
this.setCodingSplitListener();
|
|
59
|
+
}
|
|
60
|
+
else {
|
|
61
|
+
const { offsetHeight: height } = this.codingTestsSplitRef.nativeElement;
|
|
62
|
+
this.minTestsSplitHeight = this.getMinTestsPercentHeight(height);
|
|
63
|
+
}
|
|
64
|
+
}
|
|
65
|
+
/* listens to area height changes and calculates the maximum % size of coding window area */
|
|
66
|
+
setCodingSplitListener() {
|
|
67
|
+
concat(this.getInitialMaxHeight$(), resizeElement(this.codingTestsSplitRef.nativeElement))
|
|
68
|
+
.pipe(observeOn(animationFrameScheduler), debounceTime(300), map(({ contentRect: { height } }) => height), distinctUntilChanged(), untilDestroyed(this))
|
|
69
|
+
.subscribe(height => {
|
|
70
|
+
this.calculateCurrentHeights(height);
|
|
71
|
+
this.changeDetectorRef.detectChanges();
|
|
72
|
+
});
|
|
73
|
+
}
|
|
74
|
+
calculateCurrentHeights(fullHeight) {
|
|
75
|
+
const { offsetHeight: testsSplitHeight } = this.testsSplitAreaRef.nativeElement;
|
|
76
|
+
this.minTestsSplitHeight = this.getMinTestsPercentHeight(fullHeight);
|
|
77
|
+
let testsPercentHeight = this.getPercentHeightFromWhole(fullHeight, testsSplitHeight);
|
|
78
|
+
if (testsPercentHeight < this.minTestsSplitHeight) {
|
|
79
|
+
testsPercentHeight = this.minTestsSplitHeight;
|
|
80
|
+
}
|
|
81
|
+
this.currentTestsSplitHeight = testsPercentHeight;
|
|
82
|
+
this.currentIdeSplitHeight = 100 - this.currentTestsSplitHeight;
|
|
83
|
+
}
|
|
84
|
+
getInitialMaxHeight$() {
|
|
85
|
+
const { offsetHeight: height } = this.codingTestsSplitRef.nativeElement;
|
|
86
|
+
return of({ contentRect: { height: this.getMinTestsPercentHeight(height) } });
|
|
87
|
+
}
|
|
88
|
+
getPercentHeightFromWhole(fullHeight, areaHeight) {
|
|
89
|
+
return (areaHeight * 100) / (fullHeight - this.GUTTER_SIZE * 2);
|
|
90
|
+
}
|
|
91
|
+
getMinTestsPercentHeight(height) {
|
|
92
|
+
const minTestsHeightPx = this.isLAT ? this.MIN_LAT_TESTS_HEIGHT_PX : this.MIN_TESTS_HEIGHT_PX;
|
|
93
|
+
return (minTestsHeightPx * 100) / height;
|
|
94
|
+
}
|
|
95
|
+
static ɵfac = i0.ɵɵngDeclareFactory({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RunnableEditorComponent, deps: [{ token: i0.ChangeDetectorRef }], target: i0.ɵɵFactoryTarget.Component });
|
|
96
|
+
static ɵcmp = i0.ɵɵngDeclareComponent({ minVersion: "14.0.0", version: "18.2.13", type: RunnableEditorComponent, isStandalone: true, selector: "tgo-runnable-editor", inputs: { initCode: "initCode", functionParams: "functionParams", functionName: "functionName", returnType: "returnType", isFullViewMode: "isFullViewMode", isLAT: "isLAT", isSQL: "isSQL", canAddCustomTestCases: "canAddCustomTestCases", hideTestCases: "hideTestCases", languages: "languages", shouldGenerateInitCode: "shouldGenerateInitCode", autoHeight: "autoHeight", translations: "translations", questionText: "questionText", companyColor: "companyColor", testCasesStatus: "testCasesStatus", loading: "loading", runTestResponse: "runTestResponse", exampleTestCases: "exampleTestCases", isRunnableWithLangSelector: "isRunnableWithLangSelector", applicationTheme: "applicationTheme" }, outputs: { pasteEvent: "pasteEvent", codeChange: "codeChange", runTestClick: "runTestClick", languageChange: "languageChange" }, viewQueries: [{ propertyName: "codingTestsSplitRef", first: true, predicate: ["codingTestsSplit"], descendants: true, read: ElementRef }, { propertyName: "testsSplitAreaRef", first: true, predicate: ["testsSplitArea"], descendants: true, read: ElementRef }], ngImport: i0, template: "<as-split\n *ngIf=\"!isMobile; else mobileTpl\"\n #codingTestsSplit\n class=\"as-split\"\n direction=\"vertical\"\n restrictMove=\"true\"\n [gutterSize]=\"GUTTER_SIZE\"\n>\n <as-split-area class=\"ide-split-area\" [size]=\"currentIdeSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n </as-split-area>\n <as-split-area #testsSplitArea [size]=\"currentTestsSplitHeight\" [minSize]=\"minTestsSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </as-split-area>\n</as-split>\n\n<ng-template #mobileTpl>\n <div class=\"container-mobile\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #ide>\n <div class=\"ide-container\">\n <tgo-coding-section\n class=\"coding-section\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"isFullViewMode\"\n [isRunnableWithLangSelector]=\"isRunnableWithLangSelector\"\n [shouldGenerateInitCode]=\"shouldGenerateInitCode\"\n [isLAT]=\"isLAT\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [isMobile]=\"isMobile\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n ></tgo-coding-section>\n\n <tgo-code-configurations\n *ngIf=\"isFullViewMode\"\n [translations]=\"translations\"\n [companyColor]=\"companyColor\"\n [applicationTheme]=\"applicationTheme\"\n >\n </tgo-code-configurations>\n </div>\n</ng-template>\n\n<ng-template #tests>\n <div class=\"tests\" [class.tests-lat]=\"isLAT\">\n <tgo-code-test-results\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [runTestResponse]=\"runTestResponse\"\n [translations]=\"translations\"\n [exampleTestCases]=\"exampleTestCases\"\n [canChangeProgrammingLang]=\"languages?.length > 1\"\n [showTestCases]=\"isLAT || (isSQL && !hideTestCases)\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (runTestClick)=\"runTestClick.emit($event)\"\n >\n </tgo-code-test-results>\n </div>\n</ng-template>\n", styles: [".as-split{min-height:500px}.as-split ::ng-deep .as-split-gutter{position:relative;background-color:#d9d9d9!important;transition:background .2s ease-in-out}.as-split ::ng-deep .as-split-gutter-icon{background-image:none!important;position:absolute;border-radius:5px;background:#d9d9d9;transition:background .2s ease-in-out}.as-split ::ng-deep .as-split-gutter-icon:before,.as-split ::ng-deep .as-split-gutter-icon:after{content:\"\";position:absolute}.as-split ::ng-deep .as-split-gutter:hover,.as-split ::ng-deep .as-split-gutter.as-dragged{background-color:var(--company-color, #46A997)!important}.as-split ::ng-deep .as-split-gutter:hover .as-split-gutter-icon,.as-split ::ng-deep .as-split-gutter.as-dragged .as-split-gutter-icon{background:var(--company-color, #46A997)}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon{height:34px!important;width:12px!important;z-index:1}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:before,.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{top:9px;bottom:9px;background-color:var(--bg-mat-card);width:2px;border-radius:5px}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:before{left:2px}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{right:2px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon{height:12px!important;width:34px!important}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:before,.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{left:9px;right:9px;background-color:var(--bg-mat-card);height:2px;width:auto;border-radius:5px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:before{top:2px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{top:auto;bottom:2px}:host{display:block;height:100%}@media screen and (max-width: 959px){:host{flex:1 0 600px;height:auto}}.ide-split-area{min-height:65px}.ide-container,.tests{height:100%}.tests-lat{overflow:hidden}@media screen and (max-width: 959px){.tests-lat{flex:1 0 60vh}}.coding-section{display:block;height:100%}.container-mobile{height:100%;display:flex;flex-direction:column}.container-mobile .ide-container,.container-mobile .tests{max-height:60vh}\n"], dependencies: [{ kind: "ngmodule", type: CommonModule }, { kind: "directive", type: i1.NgIf, selector: "[ngIf]", inputs: ["ngIf", "ngIfThen", "ngIfElse"] }, { kind: "directive", type: i1.NgTemplateOutlet, selector: "[ngTemplateOutlet]", inputs: ["ngTemplateOutletContext", "ngTemplateOutlet", "ngTemplateOutletInjector"] }, { kind: "ngmodule", type: AngularSplitModule }, { kind: "component", type: i2.SplitComponent, selector: "as-split", inputs: ["gutterSize", "gutterStep", "disabled", "gutterClickDeltaPx", "direction", "dir", "unit", "gutterAriaLabel", "restrictMove", "useTransition", "gutterDblClickDuration"], outputs: ["gutterClick", "gutterDblClick", "dragStart", "dragEnd", "transitionEnd"], exportAs: ["asSplit"] }, { kind: "component", type: i2.SplitAreaComponent, selector: "as-split-area", inputs: ["size", "minSize", "maxSize", "lockSize", "visible"], exportAs: ["asSplitArea"] }, { kind: "component", type: CodingSectionComponent, selector: "tgo-coding-section", inputs: ["initCode", "functionParams", "functionName", "returnType", "isLAT", "languages", "isFullViewMode", "shouldGenerateInitCode", "isRunnableWithLangSelector", "autoHeight", "translations", "isMobile", "applicationTheme"], outputs: ["pasteEvent", "codeChange", "languageChange"] }, { kind: "component", type: ConfigurationsComponent, selector: "tgo-code-configurations", inputs: ["translations", "companyColor", "applicationTheme"] }, { kind: "component", type: TestResultsComponent, selector: "tgo-code-test-results", inputs: ["companyColor", "testCasesStatus", "loading", "runTestResponse", "translations", "isLAT", "isSQL", "exampleTestCases", "canChangeProgrammingLang", "showTestCases", "canAddCustomTestCases", "applicationTheme"], outputs: ["runTestClick"] }], changeDetection: i0.ChangeDetectionStrategy.OnPush });
|
|
97
|
+
};
|
|
98
|
+
RunnableEditorComponent = __decorate([
|
|
99
|
+
UntilDestroy(),
|
|
100
|
+
__metadata("design:paramtypes", [ChangeDetectorRef])
|
|
101
|
+
], RunnableEditorComponent);
|
|
102
|
+
export { RunnableEditorComponent };
|
|
103
|
+
i0.ɵɵngDeclareClassMetadata({ minVersion: "12.0.0", version: "18.2.13", ngImport: i0, type: RunnableEditorComponent, decorators: [{
|
|
104
|
+
type: Component,
|
|
105
|
+
args: [{ standalone: true, selector: 'tgo-runnable-editor', changeDetection: ChangeDetectionStrategy.OnPush, imports: [
|
|
106
|
+
CommonModule,
|
|
107
|
+
AngularSplitModule,
|
|
108
|
+
CodingSectionComponent,
|
|
109
|
+
ConfigurationsComponent,
|
|
110
|
+
TestResultsComponent,
|
|
111
|
+
], template: "<as-split\n *ngIf=\"!isMobile; else mobileTpl\"\n #codingTestsSplit\n class=\"as-split\"\n direction=\"vertical\"\n restrictMove=\"true\"\n [gutterSize]=\"GUTTER_SIZE\"\n>\n <as-split-area class=\"ide-split-area\" [size]=\"currentIdeSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n </as-split-area>\n <as-split-area #testsSplitArea [size]=\"currentTestsSplitHeight\" [minSize]=\"minTestsSplitHeight\">\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </as-split-area>\n</as-split>\n\n<ng-template #mobileTpl>\n <div class=\"container-mobile\">\n <ng-container [ngTemplateOutlet]=\"ide\"></ng-container>\n <ng-container [ngTemplateOutlet]=\"tests\"></ng-container>\n </div>\n</ng-template>\n\n<ng-template #ide>\n <div class=\"ide-container\">\n <tgo-coding-section\n class=\"coding-section\"\n [initCode]=\"initCode\"\n [functionParams]=\"functionParams\"\n [functionName]=\"functionName\"\n [returnType]=\"returnType\"\n [isFullViewMode]=\"isFullViewMode\"\n [isRunnableWithLangSelector]=\"isRunnableWithLangSelector\"\n [shouldGenerateInitCode]=\"shouldGenerateInitCode\"\n [isLAT]=\"isLAT\"\n [languages]=\"languages\"\n [autoHeight]=\"autoHeight\"\n [translations]=\"translations\"\n [isMobile]=\"isMobile\"\n [applicationTheme]=\"applicationTheme\"\n (pasteEvent)=\"pasteEvent.emit($event)\"\n (codeChange)=\"codeChange.emit($event)\"\n (languageChange)=\"languageChange.emit($event)\"\n ></tgo-coding-section>\n\n <tgo-code-configurations\n *ngIf=\"isFullViewMode\"\n [translations]=\"translations\"\n [companyColor]=\"companyColor\"\n [applicationTheme]=\"applicationTheme\"\n >\n </tgo-code-configurations>\n </div>\n</ng-template>\n\n<ng-template #tests>\n <div class=\"tests\" [class.tests-lat]=\"isLAT\">\n <tgo-code-test-results\n [companyColor]=\"companyColor\"\n [testCasesStatus]=\"testCasesStatus\"\n [loading]=\"loading\"\n [isLAT]=\"isLAT\"\n [isSQL]=\"isSQL\"\n [runTestResponse]=\"runTestResponse\"\n [translations]=\"translations\"\n [exampleTestCases]=\"exampleTestCases\"\n [canChangeProgrammingLang]=\"languages?.length > 1\"\n [showTestCases]=\"isLAT || (isSQL && !hideTestCases)\"\n [canAddCustomTestCases]=\"canAddCustomTestCases\"\n [applicationTheme]=\"applicationTheme\"\n (runTestClick)=\"runTestClick.emit($event)\"\n >\n </tgo-code-test-results>\n </div>\n</ng-template>\n", styles: [".as-split{min-height:500px}.as-split ::ng-deep .as-split-gutter{position:relative;background-color:#d9d9d9!important;transition:background .2s ease-in-out}.as-split ::ng-deep .as-split-gutter-icon{background-image:none!important;position:absolute;border-radius:5px;background:#d9d9d9;transition:background .2s ease-in-out}.as-split ::ng-deep .as-split-gutter-icon:before,.as-split ::ng-deep .as-split-gutter-icon:after{content:\"\";position:absolute}.as-split ::ng-deep .as-split-gutter:hover,.as-split ::ng-deep .as-split-gutter.as-dragged{background-color:var(--company-color, #46A997)!important}.as-split ::ng-deep .as-split-gutter:hover .as-split-gutter-icon,.as-split ::ng-deep .as-split-gutter.as-dragged .as-split-gutter-icon{background:var(--company-color, #46A997)}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon{height:34px!important;width:12px!important;z-index:1}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:before,.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{top:9px;bottom:9px;background-color:var(--bg-mat-card);width:2px;border-radius:5px}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:before{left:2px}.as-split.as-horizontal ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{right:2px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon{height:12px!important;width:34px!important}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:before,.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{left:9px;right:9px;background-color:var(--bg-mat-card);height:2px;width:auto;border-radius:5px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:before{top:2px}.as-split.as-vertical ::ng-deep>.as-split-gutter .as-split-gutter-icon:after{top:auto;bottom:2px}:host{display:block;height:100%}@media screen and (max-width: 959px){:host{flex:1 0 600px;height:auto}}.ide-split-area{min-height:65px}.ide-container,.tests{height:100%}.tests-lat{overflow:hidden}@media screen and (max-width: 959px){.tests-lat{flex:1 0 60vh}}.coding-section{display:block;height:100%}.container-mobile{height:100%;display:flex;flex-direction:column}.container-mobile .ide-container,.container-mobile .tests{max-height:60vh}\n"] }]
|
|
112
|
+
}], ctorParameters: () => [{ type: i0.ChangeDetectorRef }], propDecorators: { initCode: [{
|
|
113
|
+
type: Input
|
|
114
|
+
}], functionParams: [{
|
|
115
|
+
type: Input
|
|
116
|
+
}], functionName: [{
|
|
117
|
+
type: Input
|
|
118
|
+
}], returnType: [{
|
|
119
|
+
type: Input
|
|
120
|
+
}], isFullViewMode: [{
|
|
121
|
+
type: Input
|
|
122
|
+
}], isLAT: [{
|
|
123
|
+
type: Input
|
|
124
|
+
}], isSQL: [{
|
|
125
|
+
type: Input
|
|
126
|
+
}], canAddCustomTestCases: [{
|
|
127
|
+
type: Input
|
|
128
|
+
}], hideTestCases: [{
|
|
129
|
+
type: Input
|
|
130
|
+
}], languages: [{
|
|
131
|
+
type: Input
|
|
132
|
+
}], shouldGenerateInitCode: [{
|
|
133
|
+
type: Input
|
|
134
|
+
}], autoHeight: [{
|
|
135
|
+
type: Input
|
|
136
|
+
}], translations: [{
|
|
137
|
+
type: Input
|
|
138
|
+
}], questionText: [{
|
|
139
|
+
type: Input
|
|
140
|
+
}], companyColor: [{
|
|
141
|
+
type: Input
|
|
142
|
+
}], testCasesStatus: [{
|
|
143
|
+
type: Input
|
|
144
|
+
}], loading: [{
|
|
145
|
+
type: Input
|
|
146
|
+
}], runTestResponse: [{
|
|
147
|
+
type: Input
|
|
148
|
+
}], exampleTestCases: [{
|
|
149
|
+
type: Input
|
|
150
|
+
}], isRunnableWithLangSelector: [{
|
|
151
|
+
type: Input
|
|
152
|
+
}], applicationTheme: [{
|
|
153
|
+
type: Input
|
|
154
|
+
}], pasteEvent: [{
|
|
155
|
+
type: Output
|
|
156
|
+
}], codeChange: [{
|
|
157
|
+
type: Output
|
|
158
|
+
}], runTestClick: [{
|
|
159
|
+
type: Output
|
|
160
|
+
}], languageChange: [{
|
|
161
|
+
type: Output
|
|
162
|
+
}], codingTestsSplitRef: [{
|
|
163
|
+
type: ViewChild,
|
|
164
|
+
args: ['codingTestsSplit', { read: ElementRef }]
|
|
165
|
+
}], testsSplitAreaRef: [{
|
|
166
|
+
type: ViewChild,
|
|
167
|
+
args: ['testsSplitArea', { read: ElementRef }]
|
|
168
|
+
}] } });
|
|
169
|
+
//# sourceMappingURL=data:application/json;base64,eyJ2ZXJzaW9uIjozLCJmaWxlIjoicnVubmFibGUtZWRpdG9yLmNvbXBvbmVudC5qcyIsInNvdXJjZVJvb3QiOiIiLCJzb3VyY2VzIjpbIi4uLy4uLy4uLy4uLy4uLy4uLy4uL3BhY2thZ2VzL3Rnby1jb2RpbmctdGVzdC9zcmMvbGliL2NvbXBvbmVudHMvcnVubmFibGUtZWRpdG9yL3J1bm5hYmxlLWVkaXRvci5jb21wb25lbnQudHMiLCIuLi8uLi8uLi8uLi8uLi8uLi8uLi9wYWNrYWdlcy90Z28tY29kaW5nLXRlc3Qvc3JjL2xpYi9jb21wb25lbnRzL3J1bm5hYmxlLWVkaXRvci9ydW5uYWJsZS1lZGl0b3IuY29tcG9uZW50Lmh0bWwiXSwibmFtZXMiOltdLCJtYXBwaW5ncyI6IjtBQUFBLE9BQU8sRUFFTCx1QkFBdUIsRUFDdkIsaUJBQWlCLEVBQ2pCLFNBQVMsRUFDVCxVQUFVLEVBQ1YsWUFBWSxFQUNaLEtBQUssRUFDTCxNQUFNLEVBQ04sU0FBUyxHQUNWLE1BQU0sZUFBZSxDQUFDO0FBQ3ZCLE9BQU8sRUFBRSxZQUFZLEVBQUUsTUFBTSxpQkFBaUIsQ0FBQztBQUMvQyxPQUFPLEVBQUUsWUFBWSxFQUFFLGNBQWMsRUFBRSxNQUFNLHVCQUF1QixDQUFDO0FBQ3JFLE9BQU8sRUFDTCx1QkFBdUIsRUFDdkIsTUFBTSxFQUNOLFlBQVksRUFDWixvQkFBb0IsRUFDcEIsR0FBRyxFQUVILFNBQVMsRUFDVCxFQUFFLEdBQ0gsTUFBTSxNQUFNLENBQUM7QUFDZCxPQUFPLEVBQUUsa0JBQWtCLEVBQUUsTUFBTSxlQUFlLENBQUM7QUFLbkQsT0FBTyxFQUFFLGFBQWEsRUFBRSxNQUFNLDRCQUE0QixDQUFDO0FBTzNELE9BQU8sRUFBRSxzQkFBc0IsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3BGLE9BQU8sRUFBRSx1QkFBdUIsRUFBRSxNQUFNLDRDQUE0QyxDQUFDO0FBQ3JGLE9BQU8sRUFBRSxvQkFBb0IsRUFBRSxNQUFNLGlDQUFpQyxDQUFDOzs7O0FBaUJoRSxJQUFNLHVCQUF1QixHQUE3QixNQUFN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bkUsU0FBUzt1QkFBQyxnQkFBZ0IsRUFBRSxFQUFFLElBQUksRUFBRSxVQUFVLEVBQUUiLCJzb3VyY2VzQ29udGVudCI6WyJpbXBvcnQge1xuICBBZnRlclZpZXdJbml0LFxuICBDaGFuZ2VEZXRlY3Rpb25TdHJhdGVneSxcbiAgQ2hhbmdlRGV0ZWN0b3JSZWYsXG4gIENvbXBvbmVudCxcbiAgRWxlbWVudFJlZixcbiAgRXZlbnRFbWl0dGVyLFxuICBJbnB1dCxcbiAgT3V0cHV0LFxuICBWaWV3Q2hpbGQsXG59IGZyb20gJ0Bhbmd1bGFyL2NvcmUnO1xuaW1wb3J0IHsgQ29tbW9uTW9kdWxlIH0gZnJvbSAnQGFuZ3VsYXIvY29tbW9uJztcbmltcG9ydCB7IFVudGlsRGVzdHJveSwgdW50aWxEZXN0cm95ZWQgfSBmcm9tICdAbmduZWF0L3VudGlsLWRlc3Ryb3knO1xuaW1wb3J0IHtcbiAgYW5pbWF0aW9uRnJhbWVTY2hlZHVsZXIsXG4gIGNvbmNhdCxcbiAgZGVib3VuY2VUaW1lLFxuICBkaXN0aW5jdFVudGlsQ2hhbmdlZCxcbiAgbWFwLFxuICBPYnNlcnZhYmxlLFxuICBvYnNlcnZlT24sXG4gIG9mLFxufSBmcm9tICdyeGpzJztcbmltcG9ydCB7IEFuZ3VsYXJTcGxpdE1vZHVsZSB9IGZyb20gJ2FuZ3VsYXItc3BsaXQnO1xuaW1wb3J0IHsgQXBwbGljYXRpb25UaGVtZSB9IGZyb20gJ0B0ZXN0Z29yaWxsYS90Z28tdWknO1xuXG5pbXBvcnQgeyBMQVRMYW5ndWFnZXMgfSBmcm9tICcuLi8uLi9tb2RlbHMvbGF0LWxhbmd1YWdlcyc7XG5pbXBvcnQgeyBFeGFtcGxlVGVzdENhc2UgfSBmcm9tICcuLi8uLi9tb2RlbHMvdGVzdC1jYXNlcyc7XG5pbXBvcnQgeyByZXNpemVFbGVtZW50IH0gZnJvbSAnLi4vLi4vdXRpbHMvcmVzaXplLWVsZW1lbnQnO1xuaW1wb3J0IHtcbiAgQ29kZUVkaXRvckZ1bmNQYXJhbSxcbiAgQ29kZUVkaXRvckxhbmd1YWdlcyxcbiAgQ29kZUVkaXRvclR5cGVzTWFwLFxufSBmcm9tICcuLi9jb2RlLWVkaXRvci9oZWxwZXJzL2NvZGUtZWRpdG9yLWhlbHBlci5tb2RlbCc7XG5pbXBvcnQgeyBQYXN0ZURhdGEgfSBmcm9tICcuLi9jb2RlLWVkaXRvci9tb2RlbHMvY29kZS1lZGl0b3IubW9kZWwnO1xuaW1wb3J0IHsgQ29kaW5nU2VjdGlvbkNvbXBvbmVudCB9IGZyb20gJy4uL2NvZGluZy1zZWN0aW9uL2NvZGluZy1zZWN0aW9uLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBDb25maWd1cmF0aW9uc0NvbXBvbmVudCB9IGZyb20gJy4uL2NvbmZpZ3VyYXRpb25zL2NvbmZpZ3VyYXRpb25zLmNvbXBvbmVudCc7XG5pbXBvcnQgeyBUZXN0UmVzdWx0c0NvbXBvbmVudCB9IGZyb20gJy4uL3Rlc3RzL3Rlc3QtcmVzdWx0cy5jb21wb25lbnQnO1xuXG5AVW50aWxEZXN0cm95KClcbkBDb21wb25lbnQoe1xuICBzdGFuZGFsb25lOiB0cnVlLFxuICBzZWxlY3RvcjogJ3Rnby1ydW5uYWJsZS1lZGl0b3InLFxuICB0ZW1wbGF0ZVVybDogJy4vcnVubmFibGUtZWRpdG9yLmNvbXBvbmVudC5odG1sJyxcbiAgc3R5bGVVcmxzOiBbJy4vcnVubmFibGUtZWRpdG9yLmNvbXBvbmVudC5zY3NzJ10sXG4gIGNoYW5nZURldGVjdGlvbjogQ2hhbmdlRGV0ZWN0aW9uU3RyYXRlZ3kuT25QdXNoLFxuICBpbXBvcnRzOiBbXG4gICAgQ29tbW9uTW9kdWxlLFxuICAgIEFuZ3VsYXJTcGxpdE1vZHVsZSxcbiAgICBDb2RpbmdTZWN0aW9uQ29tcG9uZW50LFxuICAgIENvbmZpZ3VyYXRpb25zQ29tcG9uZW50LFxuICAgIFRlc3RSZXN1bHRzQ29tcG9uZW50LFxuICBdLFxufSlcbmV4cG9ydCBjbGFzcyBSdW5uYWJsZUVkaXRvckNvbXBvbmVudCBpbXBsZW1lbnRzIEFmdGVyVmlld0luaXQge1xuICBASW5wdXQoKSBpbml0Q29kZTogc3RyaW5nO1xuICBASW5wdXQoKSBmdW5jdGlvblBhcmFtczogQ29kZUVkaXRvckZ1bmNQYXJhbVtdO1xuICBASW5wdXQoKSBmdW5jdGlvbk5hbWU6IHN0cmluZztcbiAgQElucHV0KCkgcmV0dXJuVHlwZToga2V5b2YgQ29kZUVkaXRvclR5cGVzTWFwO1xuICBASW5wdXQoKSBpc0Z1bGxWaWV3TW9kZTogYm9vbGVhbjtcbiAgQElucHV0KCkgaXNMQVQ6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGlzU1FMOiBib29sZWFuO1xuICBASW5wdXQoKSBjYW5BZGRDdXN0b21UZXN0Q2FzZXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGhpZGVUZXN0Q2FzZXM6IGJvb2xlYW47XG4gIEBJbnB1dCgpIGxhbmd1YWdlczogTEFUTGFuZ3VhZ2VzO1xuICBASW5wdXQoKSBzaG91bGRHZW5lcmF0ZUluaXRDb2RlOiBib29sZWFuO1xuICBASW5wdXQoKSBhdXRvSGVpZ2h0OiBib29sZWFuO1xuICBASW5wdXQoKSB0cmFuc2xhdGlvbnM6IFJlY29yZDxzdHJpbmcsIHVua25vd24+O1xuICBASW5wdXQoKSBxdWVzdGlvblRleHQ6IHN0cmluZztcbiAgQElucHV0KCkgY29tcGFueUNvbG9yOiBzdHJpbmc7XG4gIEBJbnB1dCgpIHRlc3RDYXNlc1N0YXR1czogYW55O1xuICBASW5wdXQoKSBsb2FkaW5nOiBib29sZWFuO1xuICBASW5wdXQoKSBydW5UZXN0UmVzcG9uc2UgPSBbXTtcbiAgQElucHV0KCkgZXhhbXBsZVRlc3RDYXNlczogRXhhbXBsZVRlc3RDYXNlW107XG4gIEBJbnB1dCgpIGlzUnVubmFibGVXaXRoTGFuZ1NlbGVjdG9yOiBib29sZWFuO1xuICBASW5wdXQoKSBhcHBsaWNhdGlvblRoZW1lOiBBcHBsaWNhdGlvblRoZW1lO1xuXG4gIEBPdXRwdXQoKSBwYXN0ZUV2ZW50ID0gbmV3IEV2ZW50RW1pdHRlcjxQYXN0ZURhdGE+KCk7XG4gIEBPdXRwdXQoKSBjb2RlQ2hhbmdlID0gbmV3IEV2ZW50RW1pdHRlcjxzdHJpbmc+KCk7XG4gIEBPdXRwdXQoKSBydW5UZXN0Q2xpY2sgPSBuZXcgRXZlbnRFbWl0dGVyPGJvb2xlYW4+KCk7XG4gIEBPdXRwdXQoKSBsYW5ndWFnZUNoYW5nZSA9IG5ldyBFdmVudEVtaXR0ZXI8Q29kZUVkaXRvckxhbmd1YWdlcz4oKTtcblxuICBAVmlld0NoaWxkKCdjb2RpbmdUZXN0c1NwbGl0JywgeyByZWFkOiBFbGVtZW50UmVmIH0pIGNvZGluZ1Rlc3RzU3BsaXRSZWY6IEVsZW1lbnRSZWY7XG4gIEBWaWV3Q2hpbGQoJ3Rlc3RzU3BsaXRBcmVhJywgeyByZWFkOiBFbGVtZW50UmVmIH0pIHRlc3RzU3BsaXRBcmVhUmVmOiBFbGVtZW50UmVmO1xuXG4gIG1pblRlc3RzU3BsaXRIZWlnaHQ6IG51bWJlcjtcbiAgY3VycmVudElkZVNwbGl0SGVpZ2h0ID0gNTU7XG4gIGN1cnJlbnRUZXN0c1NwbGl0SGVpZ2h0ID0gNDU7XG5cbiAgTUlOX1RFU1RTX0hFSUdIVF9QWCA9IDExOTtcbiAgTUlOX0xBVF9URVNUU19IRUlHSFRfUFggPSAyMDI7XG4gIEdVVFRFUl9TSVpFID0gMTtcblxuICBpc01vYmlsZSA9IC9BbmRyb2lkfHdlYk9TfGlQaG9uZXxpUGFkfGlQb2R8QmxhY2tCZXJyeXxJRU1vYmlsZXxPcGVyYSBNaW5pL2kudGVzdChuYXZpZ2F0b3IudXNlckFnZW50KTtcblxuICBjb25zdHJ1Y3Rvcihwcml2YXRlIGNoYW5nZURldGVjdG9yUmVmOiBDaGFuZ2VEZXRlY3RvclJlZikge31cblxuICBuZ0FmdGVyVmlld0luaXQoKTogdm9pZCB7XG4gICAgaWYgKHRoaXMuaXNNb2JpbGUpIHtcbiAgICAgIHJldHVybjtcbiAgICB9XG5cbiAgICBpZiAodGhpcy5pc0Z1bGxWaWV3TW9kZSkge1xuICAgICAgdGhpcy5zZXRDb2RpbmdTcGxpdExpc3RlbmVyKCk7XG4gICAgfSBlbHNlIHtcbiAgICAgIGNvbnN0IHsgb2Zmc2V0SGVpZ2h0OiBoZWlnaHQgfSA9IHRoaXMuY29kaW5nVGVzdHNTcGxpdFJlZi5uYXRpdmVFbGVtZW50O1xuICAgICAgdGhpcy5taW5UZXN0c1NwbGl0SGVpZ2h0ID0gdGhpcy5nZXRNaW5UZXN0c1BlcmNlbnRIZWlnaHQoaGVpZ2h0KTtcbiAgICB9XG4gIH1cblxuICAvKiBsaXN0ZW5zIHRvIGFyZWEgaGVpZ2h0IGNoYW5nZXMgYW5kIGNhbGN1bGF0ZXMgdGhlIG1heGltdW0gJSBzaXplIG9mIGNvZGluZyB3aW5kb3cgYXJlYSAqL1xuICBwcml2YXRlIHNldENvZGluZ1NwbGl0TGlzdGVuZXIoKTogdm9pZCB7XG4gICAgY29uY2F0KHRoaXMuZ2V0SW5pdGlhbE1heEhlaWdodCQoKSwgcmVzaXplRWxlbWVudCh0aGlzLmNvZGluZ1Rlc3RzU3BsaXRSZWYubmF0aXZlRWxlbWVudCkpXG4gICAgICAucGlwZShcbiAgICAgICAgb2JzZXJ2ZU9uKGFuaW1hdGlvbkZyYW1lU2NoZWR1bGVyKSxcbiAgICAgICAgZGVib3VuY2VUaW1lKDMwMCksXG4gICAgICAgIG1hcCgoeyBjb250ZW50UmVjdDogeyBoZWlnaHQgfSB9KSA9PiBoZWlnaHQpLFxuICAgICAgICBkaXN0aW5jdFVudGlsQ2hhbmdlZCgpLFxuICAgICAgICB1bnRpbERlc3Ryb3llZCh0aGlzKVxuICAgICAgKVxuICAgICAgLnN1YnNjcmliZShoZWlnaHQgPT4ge1xuICAgICAgICB0aGlzLmNhbGN1bGF0ZUN1cnJlbnRIZWlnaHRzKGhlaWdodCk7XG5cbiAgICAgICAgdGhpcy5jaGFuZ2VEZXRlY3RvclJlZi5kZXRlY3RDaGFuZ2VzKCk7XG4gICAgICB9KTtcbiAgfVxuXG4gIHByaXZhdGUgY2FsY3VsYXRlQ3VycmVudEhlaWdodHMoZnVsbEhlaWdodDogbnVtYmVyKTogdm9pZCB7XG4gICAgY29uc3QgeyBvZmZzZXRIZWlnaHQ6IHRlc3RzU3BsaXRIZWlnaHQgfSA9IHRoaXMudGVzdHNTcGxpdEFyZWFSZWYubmF0aXZlRWxlbWVudDtcbiAgICB0aGlzLm1pblRlc3RzU3BsaXRIZWlnaHQgPSB0aGlzLmdldE1pblRlc3RzUGVyY2VudEhlaWdodChmdWxsSGVpZ2h0KTtcblxuICAgIGxldCB0ZXN0c1BlcmNlbnRIZWlnaHQgPSB0aGlzLmdldFBlcmNlbnRIZWlnaHRGcm9tV2hvbGUoZnVsbEhlaWdodCwgdGVzdHNTcGxpdEhlaWdodCk7XG5cbiAgICBpZiAodGVzdHNQZXJjZW50SGVpZ2h0IDwgdGhpcy5taW5UZXN0c1NwbGl0SGVpZ2h0KSB7XG4gICAgICB0ZXN0c1BlcmNlbnRIZWlnaHQgPSB0aGlzLm1pblRlc3RzU3BsaXRIZWlnaHQ7XG4gICAgfVxuXG4gICAgdGhpcy5jdXJyZW50VGVzdHNTcGxpdEhlaWdodCA9IHRlc3RzUGVyY2VudEhlaWdodDtcbiAgICB0aGlzLmN1cnJlbnRJZGVTcGxpdEhlaWdodCA9IDEwMCAtIHRoaXMuY3VycmVudFRlc3RzU3BsaXRIZWlnaHQ7XG4gIH1cblxuICBwcml2YXRlIGdldEluaXRpYWxNYXhIZWlnaHQkKCk6IE9ic2VydmFibGU8YW55PiB7XG4gICAgY29uc3QgeyBvZmZzZXRIZWlnaHQ6IGhlaWdodCB9ID0gdGhpcy5jb2RpbmdUZXN0c1NwbGl0UmVmLm5hdGl2ZUVsZW1lbnQ7XG4gICAgcmV0dXJuIG9mKHsgY29udGVudFJlY3Q6IHsgaGVpZ2h0OiB0aGlzLmdldE1pblRlc3RzUGVyY2VudEhlaWdodChoZWlnaHQpIH0gfSk7XG4gIH1cblxuICBwcml2YXRlIGdldFBlcmNlbnRIZWlnaHRGcm9tV2hvbGUoZnVsbEhlaWdodDogbnVtYmVyLCBhcmVhSGVpZ2h0OiBudW1iZXIpOiBudW1iZXIge1xuICAgIHJldHVybiAoYXJlYUhlaWdodCAqIDEwMCkgLyAoZnVsbEhlaWdodCAtIHRoaXMuR1VUVEVSX1NJWkUgKiAyKTtcbiAgfVxuXG4gIHByaXZhdGUgZ2V0TWluVGVzdHNQZXJjZW50SGVpZ2h0KGhlaWdodDogbnVtYmVyKTogbnVtYmVyIHtcbiAgICBjb25zdCBtaW5UZXN0c0hlaWdodFB4ID0gdGhpcy5pc0xBVCA/IHRoaXMuTUlOX0xBVF9URVNUU19IRUlHSFRfUFggOiB0aGlzLk1JTl9URVNUU19IRUlHSFRfUFg7XG4gICAgcmV0dXJuIChtaW5UZXN0c0hlaWdodFB4ICogMTAwKSAvIGhlaWdodDtcbiAgfVxufVxuIiwiPGFzLXNwbGl0XG4gICpuZ0lmPVwiIWlzTW9iaWxlOyBlbHNlIG1vYmlsZVRwbFwiXG4gICNjb2RpbmdUZXN0c1NwbGl0XG4gIGNsYXNzPVwiYXMtc3BsaXRcIlxuICBkaXJlY3Rpb249XCJ2ZXJ0aWNhbFwiXG4gIHJlc3RyaWN0TW92ZT1cInRydWVcIlxuICBbZ3V0dGVyU2l6ZV09XCJHVVRURVJfU0laRVwiXG4+XG4gIDxhcy1zcGxpdC1hcmVhIGNsYXNzPVwiaWRlLXNwbGl0LWFyZWFcIiBbc2l6ZV09XCJjdXJyZW50SWRlU3BsaXRIZWlnaHRcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cImlkZVwiPjwvbmctY29udGFpbmVyPlxuICA8L2FzLXNwbGl0LWFyZWE+XG4gIDxhcy1zcGxpdC1hcmVhICN0ZXN0c1NwbGl0QXJlYSBbc2l6ZV09XCJjdXJyZW50VGVzdHNTcGxpdEhlaWdodFwiIFttaW5TaXplXT1cIm1pblRlc3RzU3BsaXRIZWlnaHRcIj5cbiAgICA8bmctY29udGFpbmVyIFtuZ1RlbXBsYXRlT3V0bGV0XT1cInRlc3RzXCI+PC9uZy1jb250YWluZXI+XG4gIDwvYXMtc3BsaXQtYXJlYT5cbjwvYXMtc3BsaXQ+XG5cbjxuZy10ZW1wbGF0ZSAjbW9iaWxlVHBsPlxuICA8ZGl2IGNsYXNzPVwiY29udGFpbmVyLW1vYmlsZVwiPlxuICAgIDxuZy1jb250YWluZXIgW25nVGVtcGxhdGVPdXRsZXRdPVwiaWRlXCI+PC9uZy1jb250YWluZXI+XG4gICAgPG5nLWNvbnRhaW5lciBbbmdUZW1wbGF0ZU91dGxldF09XCJ0ZXN0c1wiPjwvbmctY29udGFpbmVyPlxuICA8L2Rpdj5cbjwvbmctdGVtcGxhdGU+XG5cbjxuZy10ZW1wbGF0ZSAjaWRlPlxuICA8ZGl2IGNsYXNzPVwiaWRlLWNvbnRhaW5lclwiPlxuICAgIDx0Z28tY29kaW5nLXNlY3Rpb25cbiAgICAgIGNsYXNzPVwiY29kaW5nLXNlY3Rpb25cIlxuICAgICAgW2luaXRDb2RlXT1cImluaXRDb2RlXCJcbiAgICAgIFtmdW5jdGlvblBhcmFtc109XCJmdW5jdGlvblBhcmFtc1wiXG4gICAgICBbZnVuY3Rpb25OYW1lXT1cImZ1bmN0aW9uTmFtZVwiXG4gICAgICBbcmV0dXJuVHlwZV09XCJyZXR1cm5UeXBlXCJcbiAgICAgIFtpc0Z1bGxWaWV3TW9kZV09XCJpc0Z1bGxWaWV3TW9kZVwiXG4gICAgICBbaXNSdW5uYWJsZVdpdGhMYW5nU2VsZWN0b3JdPVwiaXNSdW5uYWJsZVdpdGhMYW5nU2VsZWN0b3JcIlxuICAgICAgW3Nob3VsZEdlbmVyYXRlSW5pdENvZGVdPVwic2hvdWxkR2VuZXJhdGVJbml0Q29kZVwiXG4gICAgICBbaXNMQVRdPVwiaXNMQVRcIlxuICAgICAgW2xhbmd1YWdlc109XCJsYW5ndWFnZXNcIlxuICAgICAgW2F1dG9IZWlnaHRdPVwiYXV0b0hlaWdodFwiXG4gICAgICBbdHJhbnNsYXRpb25zXT1cInRyYW5zbGF0aW9uc1wiXG4gICAgICBbaXNNb2JpbGVdPVwiaXNNb2JpbGVcIlxuICAgICAgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiXG4gICAgICAocGFzdGVFdmVudCk9XCJwYXN0ZUV2ZW50LmVtaXQoJGV2ZW50KVwiXG4gICAgICAoY29kZUNoYW5nZSk9XCJjb2RlQ2hhbmdlLmVtaXQoJGV2ZW50KVwiXG4gICAgICAobGFuZ3VhZ2VDaGFuZ2UpPVwibGFuZ3VhZ2VDaGFuZ2UuZW1pdCgkZXZlbnQpXCJcbiAgICA+PC90Z28tY29kaW5nLXNlY3Rpb24+XG5cbiAgICA8dGdvLWNvZGUtY29uZmlndXJhdGlvbnNcbiAgICAgICpuZ0lmPVwiaXNGdWxsVmlld01vZGVcIlxuICAgICAgW3RyYW5zbGF0aW9uc109XCJ0cmFuc2xhdGlvbnNcIlxuICAgICAgW2NvbXBhbnlDb2xvcl09XCJjb21wYW55Q29sb3JcIlxuICAgICAgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiXG4gICAgPlxuICAgIDwvdGdvLWNvZGUtY29uZmlndXJhdGlvbnM+XG4gIDwvZGl2PlxuPC9uZy10ZW1wbGF0ZT5cblxuPG5nLXRlbXBsYXRlICN0ZXN0cz5cbiAgPGRpdiBjbGFzcz1cInRlc3RzXCIgW2NsYXNzLnRlc3RzLWxhdF09XCJpc0xBVFwiPlxuICAgIDx0Z28tY29kZS10ZXN0LXJlc3VsdHNcbiAgICAgIFtjb21wYW55Q29sb3JdPVwiY29tcGFueUNvbG9yXCJcbiAgICAgIFt0ZXN0Q2FzZXNTdGF0dXNdPVwidGVzdENhc2VzU3RhdHVzXCJcbiAgICAgIFtsb2FkaW5nXT1cImxvYWRpbmdcIlxuICAgICAgW2lzTEFUXT1cImlzTEFUXCJcbiAgICAgIFtpc1NRTF09XCJpc1NRTFwiXG4gICAgICBbcnVuVGVzdFJlc3BvbnNlXT1cInJ1blRlc3RSZXNwb25zZVwiXG4gICAgICBbdHJhbnNsYXRpb25zXT1cInRyYW5zbGF0aW9uc1wiXG4gICAgICBbZXhhbXBsZVRlc3RDYXNlc109XCJleGFtcGxlVGVzdENhc2VzXCJcbiAgICAgIFtjYW5DaGFuZ2VQcm9ncmFtbWluZ0xhbmddPVwibGFuZ3VhZ2VzPy5sZW5ndGggPiAxXCJcbiAgICAgIFtzaG93VGVzdENhc2VzXT1cImlzTEFUIHx8IChpc1NRTCAmJiAhaGlkZVRlc3RDYXNlcylcIlxuICAgICAgW2NhbkFkZEN1c3RvbVRlc3RDYXNlc109XCJjYW5BZGRDdXN0b21UZXN0Q2FzZXNcIlxuICAgICAgW2FwcGxpY2F0aW9uVGhlbWVdPVwiYXBwbGljYXRpb25UaGVtZVwiXG4gICAgICAocnVuVGVzdENsaWNrKT1cInJ1blRlc3RDbGljay5lbWl0KCRldmVudClcIlxuICAgID5cbiAgICA8L3Rnby1jb2RlLXRlc3QtcmVzdWx0cz5cbiAgPC9kaXY+XG48L25nLXRlbXBsYXRlPlxuIl19
|