@gmb/bitmark-parser-generator 1.35.0 → 2.1.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/dist/browser/bitmark-parser-generator.min.js +1 -1
- package/dist/browser/bundle-report.html +2 -2
- package/dist/cjs/BitmarkParserGenerator.js +8 -3
- package/dist/cjs/BitmarkParserGenerator.js.map +1 -1
- package/dist/cjs/ast/Ast.js +1 -0
- package/dist/cjs/ast/Ast.js.map +1 -1
- package/dist/cjs/ast/BaseBuilder.js +91 -54
- package/dist/cjs/ast/BaseBuilder.js.map +1 -1
- package/dist/cjs/ast/Builder.js +813 -389
- package/dist/cjs/ast/Builder.js.map +1 -1
- package/dist/cjs/ast/ResourceBuilder.js +516 -252
- package/dist/cjs/ast/ResourceBuilder.js.map +1 -1
- package/dist/cjs/ast/rules/NodeValidator.js +61 -22
- package/dist/cjs/ast/rules/NodeValidator.js.map +1 -1
- package/dist/cjs/breakscaping/Breakscape.js +96 -71
- package/dist/cjs/breakscaping/Breakscape.js.map +1 -1
- package/dist/cjs/config/raw/bits.js +44 -5
- package/dist/cjs/config/raw/bits.js.map +1 -1
- package/dist/cjs/config/raw/properties.js +7 -2
- package/dist/cjs/config/raw/properties.js.map +1 -1
- package/dist/cjs/generated/build-info.js +1 -1
- package/dist/cjs/generated/build-info.js.map +1 -1
- package/dist/cjs/generated/parser/bitmark/bitmark-peggy-parser.js +1 -0
- package/dist/cjs/generated/parser/bitmark/bitmark-peggy-parser.js.map +1 -1
- package/dist/cjs/generator/AstWalkerGenerator.js +4 -1
- package/dist/cjs/generator/AstWalkerGenerator.js.map +1 -1
- package/dist/cjs/generator/bitmark/BitmarkGenerator.js +992 -339
- package/dist/cjs/generator/bitmark/BitmarkGenerator.js.map +1 -1
- package/dist/cjs/generator/json/JsonGenerator.js +312 -1985
- package/dist/cjs/generator/json/JsonGenerator.js.map +1 -1
- package/dist/cjs/generator/text/TextGenerator.js +26 -8
- package/dist/cjs/generator/text/TextGenerator.js.map +1 -1
- package/dist/cjs/index.js.map +1 -1
- package/dist/cjs/model/ast/NodeType.js +28 -8
- package/dist/cjs/model/ast/NodeType.js.map +1 -1
- package/dist/cjs/model/config/enum/PropertyConfigKey.js +1 -0
- package/dist/cjs/model/config/enum/PropertyConfigKey.js.map +1 -1
- package/dist/cjs/model/enum/BitType.js +2 -2
- package/dist/cjs/model/enum/BitType.js.map +1 -1
- package/dist/cjs/model/enum/PropertyFormat.js +3 -1
- package/dist/cjs/model/enum/PropertyFormat.js.map +1 -1
- package/dist/cjs/model/enum/TextFormat.js +1 -1
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserHelper.js +9 -3
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserHelper.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserProcessor.js +49 -131
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserTypes.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserValidator.js +7 -31
- package/dist/cjs/parser/bitmark/peg/BitmarkPegParserValidator.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/BodyContentProcessor.js +255 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/BodyContentProcessor.js.map +1 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/BookChainContentProcessor.js +25 -12
- package/dist/cjs/parser/bitmark/peg/contentProcessors/BookChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/CardContentProcessor.js +175 -129
- package/dist/cjs/parser/bitmark/peg/contentProcessors/CardContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ClozeTagContentProcessor.js +8 -2
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ClozeTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.js +61 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.js.map +1 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/DefaultTagContentProcessor.js +11 -5
- package/dist/cjs/parser/bitmark/peg/contentProcessors/DefaultTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ExampleTagContentProcessor.js +21 -17
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ExampleTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/FooterContentProcessor.js +50 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/FooterContentProcessor.js.map +1 -0
- package/dist/cjs/parser/bitmark/peg/contentProcessors/GapChainContentProcessor.js +2 -15
- package/dist/cjs/parser/bitmark/peg/contentProcessors/GapChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ImageSourceChainContentProcessor.js +2 -4
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ImageSourceChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ItemLeadTagContentProcessor.js +4 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ItemLeadTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/MarkChainContentProcessor.js +2 -4
- package/dist/cjs/parser/bitmark/peg/contentProcessors/MarkChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/MarkConfigChainContentProcessor.js +5 -5
- package/dist/cjs/parser/bitmark/peg/contentProcessors/MarkConfigChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/PersonChainContentProcessor.js +5 -6
- package/dist/cjs/parser/bitmark/peg/contentProcessors/PersonChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/PropertyContentProcessor.js +23 -7
- package/dist/cjs/parser/bitmark/peg/contentProcessors/PropertyContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/RatingLevelChainContentProcessor.js +5 -5
- package/dist/cjs/parser/bitmark/peg/contentProcessors/RatingLevelChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ReferenceTagContentProcessor.js +3 -2
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ReferenceTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.js +19 -8
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ServingsChainContentProcessor.js +4 -6
- package/dist/cjs/parser/bitmark/peg/contentProcessors/ServingsChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TechnicalTermChainContentProcessor.js +4 -5
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TechnicalTermChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.js +14 -5
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.js +37 -21
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.js.map +1 -1
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TrueFalseTagContentProcessor.js +3 -2
- package/dist/cjs/parser/bitmark/peg/contentProcessors/TrueFalseTagContentProcessor.js.map +1 -1
- package/dist/cjs/parser/json/JsonParser.js +73 -765
- package/dist/cjs/parser/json/JsonParser.js.map +1 -1
- package/dist/cjs/parser/text/TextParser.js +61 -2
- package/dist/cjs/parser/text/TextParser.js.map +1 -1
- package/dist/cjs/utils/BitUtils.js +15 -13
- package/dist/cjs/utils/BitUtils.js.map +1 -1
- package/dist/esm/BitmarkParserGenerator.js +8 -3
- package/dist/esm/BitmarkParserGenerator.js.map +1 -1
- package/dist/esm/ast/Ast.js +1 -0
- package/dist/esm/ast/Ast.js.map +1 -1
- package/dist/esm/ast/BaseBuilder.js +91 -54
- package/dist/esm/ast/BaseBuilder.js.map +1 -1
- package/dist/esm/ast/Builder.js +813 -389
- package/dist/esm/ast/Builder.js.map +1 -1
- package/dist/esm/ast/ResourceBuilder.js +516 -252
- package/dist/esm/ast/ResourceBuilder.js.map +1 -1
- package/dist/esm/ast/rules/NodeValidator.js +61 -22
- package/dist/esm/ast/rules/NodeValidator.js.map +1 -1
- package/dist/esm/breakscaping/Breakscape.js +96 -71
- package/dist/esm/breakscaping/Breakscape.js.map +1 -1
- package/dist/esm/config/raw/bits.js +44 -5
- package/dist/esm/config/raw/bits.js.map +1 -1
- package/dist/esm/config/raw/properties.js +7 -2
- package/dist/esm/config/raw/properties.js.map +1 -1
- package/dist/esm/generated/build-info.js +1 -1
- package/dist/esm/generated/build-info.js.map +1 -1
- package/dist/esm/generated/parser/bitmark/bitmark-peggy-parser.js +1 -0
- package/dist/esm/generated/parser/bitmark/bitmark-peggy-parser.js.map +1 -1
- package/dist/esm/generator/AstWalkerGenerator.js +4 -1
- package/dist/esm/generator/AstWalkerGenerator.js.map +1 -1
- package/dist/esm/generator/bitmark/BitmarkGenerator.js +992 -339
- package/dist/esm/generator/bitmark/BitmarkGenerator.js.map +1 -1
- package/dist/esm/generator/json/JsonGenerator.js +312 -1985
- package/dist/esm/generator/json/JsonGenerator.js.map +1 -1
- package/dist/esm/generator/text/TextGenerator.js +26 -8
- package/dist/esm/generator/text/TextGenerator.js.map +1 -1
- package/dist/esm/index.js.map +1 -1
- package/dist/esm/model/ast/NodeType.js +28 -8
- package/dist/esm/model/ast/NodeType.js.map +1 -1
- package/dist/esm/model/config/enum/PropertyConfigKey.js +1 -0
- package/dist/esm/model/config/enum/PropertyConfigKey.js.map +1 -1
- package/dist/esm/model/enum/BitType.js +2 -2
- package/dist/esm/model/enum/BitType.js.map +1 -1
- package/dist/esm/model/enum/PropertyFormat.js +3 -1
- package/dist/esm/model/enum/PropertyFormat.js.map +1 -1
- package/dist/esm/model/enum/TextFormat.js +1 -1
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserHelper.js +9 -3
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserHelper.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserProcessor.js +49 -131
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserTypes.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserValidator.js +7 -31
- package/dist/esm/parser/bitmark/peg/BitmarkPegParserValidator.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/BodyContentProcessor.js +252 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/BodyContentProcessor.js.map +1 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/BookChainContentProcessor.js +25 -12
- package/dist/esm/parser/bitmark/peg/contentProcessors/BookChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/CardContentProcessor.js +175 -129
- package/dist/esm/parser/bitmark/peg/contentProcessors/CardContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ClozeTagContentProcessor.js +8 -2
- package/dist/esm/parser/bitmark/peg/contentProcessors/ClozeTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.js +58 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.js.map +1 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/DefaultTagContentProcessor.js +11 -5
- package/dist/esm/parser/bitmark/peg/contentProcessors/DefaultTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ExampleTagContentProcessor.js +21 -17
- package/dist/esm/parser/bitmark/peg/contentProcessors/ExampleTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/FooterContentProcessor.js +47 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/FooterContentProcessor.js.map +1 -0
- package/dist/esm/parser/bitmark/peg/contentProcessors/GapChainContentProcessor.js +2 -15
- package/dist/esm/parser/bitmark/peg/contentProcessors/GapChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ImageSourceChainContentProcessor.js +2 -4
- package/dist/esm/parser/bitmark/peg/contentProcessors/ImageSourceChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ItemLeadTagContentProcessor.js +4 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ItemLeadTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/MarkChainContentProcessor.js +2 -4
- package/dist/esm/parser/bitmark/peg/contentProcessors/MarkChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/MarkConfigChainContentProcessor.js +5 -5
- package/dist/esm/parser/bitmark/peg/contentProcessors/MarkConfigChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/PersonChainContentProcessor.js +5 -6
- package/dist/esm/parser/bitmark/peg/contentProcessors/PersonChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/PropertyContentProcessor.js +23 -7
- package/dist/esm/parser/bitmark/peg/contentProcessors/PropertyContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/RatingLevelChainContentProcessor.js +5 -5
- package/dist/esm/parser/bitmark/peg/contentProcessors/RatingLevelChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ReferenceTagContentProcessor.js +3 -2
- package/dist/esm/parser/bitmark/peg/contentProcessors/ReferenceTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.js +19 -8
- package/dist/esm/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/ServingsChainContentProcessor.js +4 -6
- package/dist/esm/parser/bitmark/peg/contentProcessors/ServingsChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/TechnicalTermChainContentProcessor.js +4 -5
- package/dist/esm/parser/bitmark/peg/contentProcessors/TechnicalTermChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.js +14 -5
- package/dist/esm/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.js +37 -21
- package/dist/esm/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.js.map +1 -1
- package/dist/esm/parser/bitmark/peg/contentProcessors/TrueFalseTagContentProcessor.js +3 -2
- package/dist/esm/parser/bitmark/peg/contentProcessors/TrueFalseTagContentProcessor.js.map +1 -1
- package/dist/esm/parser/json/JsonParser.js +73 -765
- package/dist/esm/parser/json/JsonParser.js.map +1 -1
- package/dist/esm/parser/text/TextParser.js +61 -2
- package/dist/esm/parser/text/TextParser.js.map +1 -1
- package/dist/esm/utils/BitUtils.js +15 -13
- package/dist/esm/utils/BitUtils.js.map +1 -1
- package/dist/types/BitmarkParserGenerator.d.ts +8 -0
- package/dist/types/BitmarkParserGenerator.d.ts.map +1 -1
- package/dist/types/ast/Ast.d.ts.map +1 -1
- package/dist/types/ast/BaseBuilder.d.ts +31 -21
- package/dist/types/ast/BaseBuilder.d.ts.map +1 -1
- package/dist/types/ast/Builder.d.ts +293 -441
- package/dist/types/ast/Builder.d.ts.map +1 -1
- package/dist/types/ast/ResourceBuilder.d.ts +177 -164
- package/dist/types/ast/ResourceBuilder.d.ts.map +1 -1
- package/dist/types/ast/rules/NodeValidator.d.ts +3 -2
- package/dist/types/ast/rules/NodeValidator.d.ts.map +1 -1
- package/dist/types/breakscaping/Breakscape.d.ts +6 -5
- package/dist/types/breakscaping/Breakscape.d.ts.map +1 -1
- package/dist/types/config/raw/bits.d.ts.map +1 -1
- package/dist/types/config/raw/properties.d.ts.map +1 -1
- package/dist/types/generated/parser/bitmark/bitmark-peggy-parser.d.ts.map +1 -1
- package/dist/types/generator/AstWalkerGenerator.d.ts.map +1 -1
- package/dist/types/generator/bitmark/BitmarkGenerator.d.ts +92 -55
- package/dist/types/generator/bitmark/BitmarkGenerator.d.ts.map +1 -1
- package/dist/types/generator/json/JsonGenerator.d.ts +89 -108
- package/dist/types/generator/json/JsonGenerator.d.ts.map +1 -1
- package/dist/types/generator/text/TextGenerator.d.ts +14 -2
- package/dist/types/generator/text/TextGenerator.d.ts.map +1 -1
- package/dist/types/index.d.ts +2 -2
- package/dist/types/index.d.ts.map +1 -1
- package/dist/types/model/ast/NodeType.d.ts +50 -16
- package/dist/types/model/ast/NodeType.d.ts.map +1 -1
- package/dist/types/model/ast/Nodes.d.ts +64 -440
- package/dist/types/model/ast/Nodes.d.ts.map +1 -1
- package/dist/types/model/config/enum/ConfigKey.d.ts +2 -0
- package/dist/types/model/config/enum/ConfigKey.d.ts.map +1 -1
- package/dist/types/model/config/enum/PropertyConfigKey.d.ts +3 -0
- package/dist/types/model/config/enum/PropertyConfigKey.d.ts.map +1 -1
- package/dist/types/model/enum/BitType.d.ts +4 -4
- package/dist/types/model/enum/PropertyFormat.d.ts +4 -2
- package/dist/types/model/enum/PropertyFormat.d.ts.map +1 -1
- package/dist/types/model/enum/PropertyTag.d.ts +2 -0
- package/dist/types/model/enum/PropertyTag.d.ts.map +1 -1
- package/dist/types/model/json/BitJson.d.ts +38 -21
- package/dist/types/model/json/BitJson.d.ts.map +1 -1
- package/dist/types/model/json/BodyBitJson.d.ts +16 -12
- package/dist/types/model/json/BodyBitJson.d.ts.map +1 -1
- package/dist/types/model/json/ResourceJson.d.ts +2 -22
- package/dist/types/model/json/ResourceJson.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/BitmarkPegParserHelper.d.ts +3 -2
- package/dist/types/parser/bitmark/peg/BitmarkPegParserHelper.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/BitmarkPegParserProcessor.d.ts +2 -15
- package/dist/types/parser/bitmark/peg/BitmarkPegParserProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/BitmarkPegParserTypes.d.ts +83 -71
- package/dist/types/parser/bitmark/peg/BitmarkPegParserTypes.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/BitmarkPegParserValidator.d.ts +2 -2
- package/dist/types/parser/bitmark/peg/BitmarkPegParserValidator.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/BodyContentProcessor.d.ts +37 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/BodyContentProcessor.d.ts.map +1 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/BookChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/CardContentProcessor.d.ts +2 -2
- package/dist/types/parser/bitmark/peg/contentProcessors/CardContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ClozeTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.d.ts +15 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/ContentProcessorUtils.d.ts.map +1 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/DefaultTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ExampleTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/FooterContentProcessor.d.ts +16 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/FooterContentProcessor.d.ts.map +1 -0
- package/dist/types/parser/bitmark/peg/contentProcessors/GapChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ImageSourceChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ItemLeadTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/MarkChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/MarkConfigChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/PersonChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/PropertyContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/RatingLevelChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ReferenceTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.d.ts +2 -2
- package/dist/types/parser/bitmark/peg/contentProcessors/ResourceContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/ServingsChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/TechnicalTermChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.d.ts +5 -2
- package/dist/types/parser/bitmark/peg/contentProcessors/TitleTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.d.ts +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/TrueFalseChainContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/bitmark/peg/contentProcessors/TrueFalseTagContentProcessor.d.ts.map +1 -1
- package/dist/types/parser/json/JsonParser.d.ts +9 -72
- package/dist/types/parser/json/JsonParser.d.ts.map +1 -1
- package/dist/types/parser/text/TextParser.d.ts +16 -1
- package/dist/types/parser/text/TextParser.d.ts.map +1 -1
- package/dist/types/utils/BitUtils.d.ts +8 -8
- package/dist/types/utils/BitUtils.d.ts.map +1 -1
- package/package.json +1 -1
|
@@ -27,10 +27,7 @@ const Config_1 = require("../../config/Config");
|
|
|
27
27
|
const NodeType_1 = require("../../model/ast/NodeType");
|
|
28
28
|
const BitType_1 = require("../../model/enum/BitType");
|
|
29
29
|
const BitmarkVersion_1 = require("../../model/enum/BitmarkVersion");
|
|
30
|
-
const BodyBitType_1 = require("../../model/enum/BodyBitType");
|
|
31
30
|
const ExampleType_1 = require("../../model/enum/ExampleType");
|
|
32
|
-
const PropertyAstKey_1 = require("../../model/enum/PropertyAstKey");
|
|
33
|
-
const PropertyTag_1 = require("../../model/enum/PropertyTag");
|
|
34
31
|
const ResourceTag_1 = require("../../model/enum/ResourceTag");
|
|
35
32
|
const TextFormat_1 = require("../../model/enum/TextFormat");
|
|
36
33
|
const TextNodeType_1 = require("../../model/enum/TextNodeType");
|
|
@@ -38,9 +35,8 @@ const TextParser_1 = require("../../parser/text/TextParser");
|
|
|
38
35
|
const ArrayUtils_1 = require("../../utils/ArrayUtils");
|
|
39
36
|
const BooleanUtils_1 = require("../../utils/BooleanUtils");
|
|
40
37
|
const NumberUtils_1 = require("../../utils/NumberUtils");
|
|
41
|
-
const StringUtils_1 = require("../../utils/StringUtils");
|
|
42
|
-
const UrlUtils_1 = require("../../utils/UrlUtils");
|
|
43
38
|
const AstWalkerGenerator_1 = require("../AstWalkerGenerator");
|
|
39
|
+
const TextGenerator_1 = require("../text/TextGenerator");
|
|
44
40
|
const DEFAULT_OPTIONS = {
|
|
45
41
|
// debugGenerationInline: true,
|
|
46
42
|
};
|
|
@@ -68,7 +64,13 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
68
64
|
this.textDefault = Breakscape_1.Breakscape.EMPTY_STRING;
|
|
69
65
|
this.bodyDefault = Breakscape_1.Breakscape.EMPTY_STRING;
|
|
70
66
|
this.bodyJson = this.bodyDefault;
|
|
71
|
-
this.
|
|
67
|
+
this.placeholderIndex = 0;
|
|
68
|
+
// Bind callbacks
|
|
69
|
+
this.enter = this.enter.bind(this);
|
|
70
|
+
this.between = this.between.bind(this);
|
|
71
|
+
this.exit = this.exit.bind(this);
|
|
72
|
+
this.leaf = this.leaf.bind(this);
|
|
73
|
+
this.bodyBitCallback = this.bodyBitCallback.bind(this);
|
|
72
74
|
this.bitmarkVersion = (_a = BitmarkVersion_1.BitmarkVersion.fromValue(options === null || options === void 0 ? void 0 : options.bitmarkVersion)) !== null && _a !== void 0 ? _a : BitmarkVersion_1.DEFAULT_BITMARK_VERSION;
|
|
73
75
|
this.textParserVersion = this.textParser.version();
|
|
74
76
|
this.options = Object.assign(Object.assign({}, DEFAULT_OPTIONS), options === null || options === void 0 ? void 0 : options.jsonOptions);
|
|
@@ -85,11 +87,13 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
85
87
|
this.options.textAsPlainText = false;
|
|
86
88
|
}
|
|
87
89
|
}
|
|
90
|
+
// Create the text generator for generating v2 texts
|
|
91
|
+
this.textGenerator = new TextGenerator_1.TextGenerator(this.bitmarkVersion, {
|
|
92
|
+
// writeCallback: this.write,
|
|
93
|
+
bodyBitCallback: this.bodyBitCallback,
|
|
94
|
+
debugGenerationInline: this.debugGenerationInline,
|
|
95
|
+
});
|
|
88
96
|
this.writer = writer;
|
|
89
|
-
this.enter = this.enter.bind(this);
|
|
90
|
-
this.between = this.between.bind(this);
|
|
91
|
-
this.exit = this.exit.bind(this);
|
|
92
|
-
this.leaf = this.leaf.bind(this);
|
|
93
97
|
this.generatePropertyHandlers();
|
|
94
98
|
}
|
|
95
99
|
/**
|
|
@@ -133,7 +137,8 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
133
137
|
this.textDefault = this.options.textAsPlainText ? Breakscape_1.Breakscape.EMPTY_STRING : [];
|
|
134
138
|
this.bodyDefault = this.options.textAsPlainText ? Breakscape_1.Breakscape.EMPTY_STRING : [];
|
|
135
139
|
this.bodyJson = this.bodyDefault;
|
|
136
|
-
this.
|
|
140
|
+
this.listItem = undefined;
|
|
141
|
+
this.placeholderIndex = 0;
|
|
137
142
|
this.printed = false;
|
|
138
143
|
}
|
|
139
144
|
walkAndWrite(ast) {
|
|
@@ -151,6 +156,16 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
151
156
|
// Reset the JSON
|
|
152
157
|
this.json = [];
|
|
153
158
|
}
|
|
159
|
+
exit_bitmarkAst(_node, _route) {
|
|
160
|
+
// Convert all bitmark text to plain text if required
|
|
161
|
+
if (this.options.textAsPlainText) {
|
|
162
|
+
// Convert all bitmark text to plain text
|
|
163
|
+
this.convertAllBitmarkTextsToStringsForPlainText(this.json);
|
|
164
|
+
}
|
|
165
|
+
// Walk the entire json object and remove all' '_xxx' properties
|
|
166
|
+
// (which are used to store temporary data during the generation process)
|
|
167
|
+
this.removeTemporaryProperties(this.json);
|
|
168
|
+
}
|
|
154
169
|
// bitmarkAst -> bits
|
|
155
170
|
// bitmarkAst -> bits -> bitsValue
|
|
156
171
|
enter_bitsValue(node, _route) {
|
|
@@ -184,7 +199,7 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
184
199
|
}
|
|
185
200
|
else {
|
|
186
201
|
// String example
|
|
187
|
-
defaultExample = (_c =
|
|
202
|
+
defaultExample = (_c = ArrayUtils_1.ArrayUtils.asSingle(bit.sampleSolution)) !== null && _c !== void 0 ? _c : '';
|
|
188
203
|
}
|
|
189
204
|
const exampleRes = this.toExample(bit, {
|
|
190
205
|
defaultExample,
|
|
@@ -196,87 +211,34 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
196
211
|
else if (bit.isExample) {
|
|
197
212
|
this.bitJson.isExample = true;
|
|
198
213
|
}
|
|
214
|
+
// Reset the placeholder index
|
|
215
|
+
this.placeholderIndex = 0;
|
|
199
216
|
}
|
|
200
217
|
exit_bitsValue(_node, _route) {
|
|
201
218
|
// Clean up the bit JSON, removing any unwanted values
|
|
202
|
-
this.
|
|
219
|
+
this.cleanBitJson(this.bitJson);
|
|
203
220
|
}
|
|
204
221
|
// bitmarkAst -> bits -> bitsValue -> imageSource
|
|
205
222
|
enter_imageSource(node, route) {
|
|
206
|
-
|
|
207
|
-
// Ignore values that are not at the bit level as they might be handled elsewhere
|
|
208
|
-
const parent = this.getParentNode(route);
|
|
209
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.bitsValue)
|
|
210
|
-
return;
|
|
211
|
-
const { url, mockupId, size, format, trim } = imageSource;
|
|
212
|
-
const imageSourceJson = {};
|
|
213
|
-
this.addProperty(imageSourceJson, 'url', url !== null && url !== void 0 ? url : '', true);
|
|
214
|
-
this.addProperty(imageSourceJson, 'mockupId', mockupId !== null && mockupId !== void 0 ? mockupId : '', true);
|
|
215
|
-
this.addProperty(imageSourceJson, 'size', size !== null && size !== void 0 ? size : null, true);
|
|
216
|
-
this.addProperty(imageSourceJson, 'format', format !== null && format !== void 0 ? format : null, true);
|
|
217
|
-
this.addProperty(imageSourceJson, 'trim', BooleanUtils_1.BooleanUtils.isBoolean(trim) ? trim : null, true);
|
|
218
|
-
this.bitJson.imageSource = imageSourceJson;
|
|
223
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: false });
|
|
219
224
|
}
|
|
220
225
|
// bitmarkAst -> bits -> bitsValue -> person
|
|
221
226
|
enter_person(node, route) {
|
|
222
|
-
const person = node.value;
|
|
223
227
|
const bitType = this.getBitType(route);
|
|
224
|
-
|
|
225
|
-
const parent = this.getParentNode(route);
|
|
226
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.bitsValue || !bitType)
|
|
227
|
-
return;
|
|
228
|
-
const { name, title, avatarImage } = person;
|
|
229
|
-
const personJson = {};
|
|
230
|
-
this.addProperty(personJson, 'name', name !== null && name !== void 0 ? name : '', true);
|
|
231
|
-
if (title) {
|
|
232
|
-
this.addProperty(personJson, 'title', title, true);
|
|
233
|
-
}
|
|
234
|
-
if (avatarImage) {
|
|
235
|
-
const res = this.parseResourceToJson(bitType, avatarImage);
|
|
236
|
-
if (res && res.type === ResourceTag_1.ResourceTag.image) {
|
|
237
|
-
personJson.avatarImage = res.image;
|
|
238
|
-
}
|
|
239
|
-
}
|
|
228
|
+
let keyOverride = 'person';
|
|
240
229
|
if (Config_1.Config.isOfBitType(bitType, BitType_1.BitType.conversationLeft1)) {
|
|
241
230
|
// Use the legacy partner property in the JSON for conversation bits, so change to person is backwards compatible
|
|
242
|
-
|
|
243
|
-
}
|
|
244
|
-
else {
|
|
245
|
-
this.bitJson.person = personJson;
|
|
231
|
+
keyOverride = 'partner';
|
|
246
232
|
}
|
|
233
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: false, keyOverride });
|
|
247
234
|
}
|
|
248
235
|
// bitmarkAst -> bits -> bitsValue -> ratingLevelStart
|
|
249
236
|
enter_ratingLevelStart(node, route) {
|
|
250
|
-
|
|
251
|
-
if (json)
|
|
252
|
-
this.bitJson.ratingLevelStart = json;
|
|
253
|
-
// Stop traversal of this branch
|
|
254
|
-
return false;
|
|
237
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: false });
|
|
255
238
|
}
|
|
256
239
|
// bitmarkAst -> bits -> bitsValue -> ratingLevelEnd
|
|
257
240
|
enter_ratingLevelEnd(node, route) {
|
|
258
|
-
|
|
259
|
-
if (json)
|
|
260
|
-
this.bitJson.ratingLevelEnd = json;
|
|
261
|
-
// Stop traversal of this branch
|
|
262
|
-
return false;
|
|
263
|
-
}
|
|
264
|
-
// Common code for ratingLevelStart and ratingLevelEnd
|
|
265
|
-
enterRatingLevelStartEndCommon(node, route) {
|
|
266
|
-
const n = node.value;
|
|
267
|
-
// Ignore statements that are not at the bit level
|
|
268
|
-
const parent = this.getParentNode(route);
|
|
269
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.bitsValue)
|
|
270
|
-
return;
|
|
271
|
-
const json = {};
|
|
272
|
-
this.addProperty(json, 'level', n.level, true);
|
|
273
|
-
if (n.label) {
|
|
274
|
-
json.label = this.convertBreakscapedStringToJsonText(n.label, TextFormat_1.TextFormat.bitmarkMinusMinus);
|
|
275
|
-
}
|
|
276
|
-
// Delete unwanted properties
|
|
277
|
-
if ((json === null || json === void 0 ? void 0 : json.label) == null)
|
|
278
|
-
delete json.label;
|
|
279
|
-
return json;
|
|
241
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: false });
|
|
280
242
|
}
|
|
281
243
|
// bitmarkAst -> bits -> bitsValue -> productId
|
|
282
244
|
enter_productId(node, route) {
|
|
@@ -284,53 +246,76 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
284
246
|
// Ignore item that is not at the correct level
|
|
285
247
|
const parent = this.getParentNode(route);
|
|
286
248
|
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.bitsValue)
|
|
287
|
-
return;
|
|
249
|
+
return true;
|
|
288
250
|
const bitType = this.getBitType(route);
|
|
289
251
|
if (bitType === BitType_1.BitType.module) {
|
|
290
|
-
this.addProperty(this.bitJson, 'productId', productIds);
|
|
252
|
+
this.addProperty(this.bitJson, 'productId', productIds, { array: true });
|
|
291
253
|
}
|
|
292
254
|
else if (productIds.length > 0) {
|
|
293
|
-
this.addProperty(this.bitJson, 'productId', productIds[productIds.length - 1],
|
|
255
|
+
this.addProperty(this.bitJson, 'productId', productIds[productIds.length - 1], { array: false });
|
|
294
256
|
}
|
|
257
|
+
// Stop traversal of this branch
|
|
258
|
+
return false;
|
|
259
|
+
}
|
|
260
|
+
// bitmarkAst -> bits -> bitsValue -> markConfig
|
|
261
|
+
enter_markConfig(_node, _route) {
|
|
262
|
+
// Handler so markConfig is not processed by the default property handler
|
|
263
|
+
// Continue traversal
|
|
264
|
+
return true;
|
|
295
265
|
}
|
|
296
266
|
// bitmarkAst -> bits -> bitsValue -> markConfig -> markConfigValue
|
|
297
267
|
enter_markConfigValue(node, route) {
|
|
298
|
-
const
|
|
268
|
+
const markJson = node.value;
|
|
299
269
|
// Ignore item that is not at the correct level
|
|
300
270
|
const parent = this.getParentNode(route);
|
|
301
271
|
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.markConfig)
|
|
302
|
-
return;
|
|
303
|
-
const { mark, color, emphasis } = markConfig;
|
|
304
|
-
const markJson = {};
|
|
305
|
-
this.addProperty(markJson, 'mark', mark !== null && mark !== void 0 ? mark : 'unknown', true);
|
|
306
|
-
if (color)
|
|
307
|
-
this.addProperty(markJson, 'color', color !== null && color !== void 0 ? color : '', true);
|
|
308
|
-
if (emphasis)
|
|
309
|
-
this.addProperty(markJson, 'emphasis', emphasis !== null && emphasis !== void 0 ? emphasis : '', true);
|
|
272
|
+
return true;
|
|
310
273
|
if (!this.bitJson.marks)
|
|
311
274
|
this.bitJson.marks = [];
|
|
312
275
|
this.bitJson.marks.push(markJson);
|
|
276
|
+
// Stop traversal of this branch
|
|
277
|
+
return false;
|
|
313
278
|
}
|
|
314
|
-
// bitmarkAst -> bits -> bitsValue ->
|
|
315
|
-
|
|
316
|
-
|
|
317
|
-
|
|
318
|
-
|
|
319
|
-
|
|
320
|
-
|
|
321
|
-
|
|
322
|
-
|
|
323
|
-
|
|
324
|
-
}
|
|
325
|
-
|
|
326
|
-
|
|
327
|
-
|
|
328
|
-
|
|
329
|
-
|
|
330
|
-
|
|
331
|
-
|
|
332
|
-
|
|
333
|
-
|
|
279
|
+
// bitmarkAst -> bits -> bitsValue -> item
|
|
280
|
+
enter_item(node, route) {
|
|
281
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: true });
|
|
282
|
+
}
|
|
283
|
+
// bitmarkAst -> bits -> bitsValue -> lead
|
|
284
|
+
enter_lead(node, route) {
|
|
285
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: true });
|
|
286
|
+
}
|
|
287
|
+
// bitmarkAst -> bits -> bitsValue -> pageNumber
|
|
288
|
+
enter_pageNumber(node, route) {
|
|
289
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: true });
|
|
290
|
+
}
|
|
291
|
+
// bitmarkAst -> bits -> bitsValue -> marginNumber
|
|
292
|
+
enter_marginNumber(node, route) {
|
|
293
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: true });
|
|
294
|
+
}
|
|
295
|
+
// bitmarkAst -> bits -> bitsValue -> hint
|
|
296
|
+
enter_hint(node, route) {
|
|
297
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: true });
|
|
298
|
+
}
|
|
299
|
+
// bitmarkAst -> bits -> bitsValue -> instruction
|
|
300
|
+
enter_instruction(node, route) {
|
|
301
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: true });
|
|
302
|
+
}
|
|
303
|
+
// bitmarkAst -> bits -> bitsValue -> title
|
|
304
|
+
enter_title(node, route) {
|
|
305
|
+
// // Ignore title that are not at the bit or card node level as they are handled elsewhere
|
|
306
|
+
// const parent = this.getParentNode(route);
|
|
307
|
+
// if (parent?.key !== NodeType.bitsValue && parent?.key !== NodeType.cardNode) return;
|
|
308
|
+
// this.bitJson.title = node.value;
|
|
309
|
+
return this.standardHandler(node, route, [NodeType_1.NodeType.bitsValue, NodeType_1.NodeType.cardNode], { array: true });
|
|
310
|
+
}
|
|
311
|
+
// bitmarkAst -> bits -> bitsValue -> subtitle
|
|
312
|
+
enter_subtitle(node, route) {
|
|
313
|
+
// this.bitJson.subtitle = node.value;
|
|
314
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: true });
|
|
315
|
+
}
|
|
316
|
+
// bitmarkAst -> bits -> bitsValue -> caption
|
|
317
|
+
enter_caption(node, route) {
|
|
318
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: true });
|
|
334
319
|
}
|
|
335
320
|
// bitmarkAst -> bits -> bitsValue -> width
|
|
336
321
|
enter_width(node, route) {
|
|
@@ -342,8 +327,7 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
342
327
|
value = (_a = NumberUtils_1.NumberUtils.asNumber(value, 0)) !== null && _a !== void 0 ? _a : 0;
|
|
343
328
|
}
|
|
344
329
|
// Add the property
|
|
345
|
-
this.
|
|
346
|
-
return false;
|
|
330
|
+
return this.standardHandler(node, route, undefined, { array: false, valueOverride: value });
|
|
347
331
|
}
|
|
348
332
|
// bitmarkAst -> bits -> bitsValue -> height
|
|
349
333
|
enter_height(node, route) {
|
|
@@ -355,8 +339,7 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
355
339
|
value = (_a = NumberUtils_1.NumberUtils.asNumber(value, 0)) !== null && _a !== void 0 ? _a : 0;
|
|
356
340
|
}
|
|
357
341
|
// Add the property
|
|
358
|
-
this.
|
|
359
|
-
return false;
|
|
342
|
+
return this.standardHandler(node, route, undefined, { array: false, valueOverride: value });
|
|
360
343
|
}
|
|
361
344
|
// bitmarkAst -> bits -> bitsValue -> extraProperties
|
|
362
345
|
enter_extraProperties(node, _route) {
|
|
@@ -367,12 +350,14 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
367
350
|
if (Object.prototype.hasOwnProperty.call(this.bitJson, key)) {
|
|
368
351
|
k = `_${key}`;
|
|
369
352
|
}
|
|
370
|
-
this.addProperty(this.bitJson, k, values);
|
|
353
|
+
this.addProperty(this.bitJson, k, values, { array: true });
|
|
371
354
|
}
|
|
372
355
|
}
|
|
373
356
|
}
|
|
374
357
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> cardBits -> cardBitsValue
|
|
375
358
|
enter_cardBitsValue(node, route) {
|
|
359
|
+
var _a, _b, _c, _d;
|
|
360
|
+
const cardBit = node.value;
|
|
376
361
|
// How cardBits are handled depends on the bit type
|
|
377
362
|
const bitType = this.getBitType(route);
|
|
378
363
|
if (!bitType)
|
|
@@ -390,7 +375,14 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
390
375
|
listItems = this.bitJson.listItems;
|
|
391
376
|
}
|
|
392
377
|
// Create this list item
|
|
393
|
-
this.listItem =
|
|
378
|
+
this.listItem = {
|
|
379
|
+
item: ((_a = cardBit.item) !== null && _a !== void 0 ? _a : []),
|
|
380
|
+
lead: ((_b = cardBit.lead) !== null && _b !== void 0 ? _b : []),
|
|
381
|
+
hint: ((_c = cardBit.hint) !== null && _c !== void 0 ? _c : []),
|
|
382
|
+
instruction: ((_d = cardBit.instruction) !== null && _d !== void 0 ? _d : []),
|
|
383
|
+
// ...this.toItemLeadHintInstruction(node.value),
|
|
384
|
+
body: this.bodyDefault,
|
|
385
|
+
};
|
|
394
386
|
// Delete unwanted properties
|
|
395
387
|
// const nv = node.value;
|
|
396
388
|
// const li: Partial<ListItemJson> = this.listItem;
|
|
@@ -400,220 +392,58 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
400
392
|
this.listItem = undefined;
|
|
401
393
|
}
|
|
402
394
|
// bitmarkAst -> bits -> bitsValue -> body
|
|
403
|
-
enter_body(
|
|
404
|
-
|
|
405
|
-
const textFormat = this.getTextFormat(_route);
|
|
406
|
-
if (textFormat === TextFormat_1.TextFormat.json)
|
|
407
|
-
this.bodyDefault = null;
|
|
408
|
-
this.bodyJson = this.bodyDefault;
|
|
409
|
-
}
|
|
410
|
-
exit_body(_node, route) {
|
|
395
|
+
enter_body(node, route) {
|
|
396
|
+
const value = node.value;
|
|
411
397
|
const parent = this.getParentNode(route);
|
|
412
398
|
if (!parent)
|
|
413
|
-
return;
|
|
399
|
+
return false;
|
|
400
|
+
const textFormat = this.getTextFormat(route);
|
|
401
|
+
const isBitmarkText = textFormat === TextFormat_1.TextFormat.bitmarkMinusMinus || textFormat === TextFormat_1.TextFormat.bitmarkPlusPlus;
|
|
402
|
+
this.bodyJson = value.body;
|
|
403
|
+
// Set the correct body property
|
|
414
404
|
if (parent.key === NodeType_1.NodeType.bitsValue) {
|
|
415
405
|
// Body is at the bit level
|
|
416
406
|
this.bitJson.body = this.bodyJson;
|
|
407
|
+
// Convert the body to plain text if required
|
|
408
|
+
if (this.options.textAsPlainText && isBitmarkText && this.isBitmarkText(this.bodyJson)) {
|
|
409
|
+
const textBody = this.textGenerator.generateSync(this.bodyJson, textFormat);
|
|
410
|
+
this.bitJson.body = (Breakscape_1.Breakscape.unbreakscape(textBody, {
|
|
411
|
+
textFormat: TextFormat_1.TextFormat.bitmarkMinusMinus,
|
|
412
|
+
}) || '').trim();
|
|
413
|
+
}
|
|
417
414
|
}
|
|
418
415
|
else if (parent.key === NodeType_1.NodeType.cardBitsValue) {
|
|
419
416
|
// Body is at the list item (card bit) level
|
|
420
417
|
if (this.listItem)
|
|
421
418
|
this.listItem.body = this.bodyJson;
|
|
422
419
|
}
|
|
423
|
-
|
|
424
|
-
// bitmarkAst -> bits -> bitsValue -> * -> bodyParts (body, cardBody (e.g. cloze-list, page-footer))
|
|
425
|
-
enter_bodyParts(node, route) {
|
|
426
|
-
const bodyParts = node.value;
|
|
427
|
-
const plainText = this.options.textAsPlainText;
|
|
428
|
-
const textFormat = this.getTextFormat(route);
|
|
429
|
-
let fullBodyTextStr = '';
|
|
430
|
-
let plainBodyTextStr = '';
|
|
431
|
-
let placeholderIndex = this.startPlaceholderIndex;
|
|
432
|
-
// Function for creating the placeholder keys
|
|
433
|
-
const createPlaceholderKeys = (i) => {
|
|
434
|
-
return {
|
|
435
|
-
// Old placeholder style (for backwards compatibility) = {0}
|
|
436
|
-
legacyPlaceholderKey: `{${i}}`,
|
|
437
|
-
// New placeholder style (cannot clash as bitmark parser would have removed it) = [!0]
|
|
438
|
-
placeholderKey: `[!${i}]`,
|
|
439
|
-
};
|
|
440
|
-
};
|
|
441
|
-
// Loop the text bodyParts creating full body text with the correct placeholders
|
|
442
|
-
//
|
|
443
|
-
// For text output 'fullBodyTextStr:
|
|
444
|
-
// - is created and written to the JSON
|
|
445
|
-
// - has placeholders inserted into 'fullBodyTextStr' in the format {0}
|
|
446
|
-
//
|
|
447
|
-
// For JSON output 'fullBodyTextStr:
|
|
448
|
-
// - is created and passed into the text parser to create the body text AST
|
|
449
|
-
// - has placeholders inserted into 'fullBodyTextStr' in the format [!0] to allow the text parser to identify
|
|
450
|
-
// where the body bits should be inserted
|
|
451
|
-
//
|
|
452
|
-
for (let i = 0; i < bodyParts.length; i++) {
|
|
453
|
-
const bodyPart = bodyParts[i];
|
|
454
|
-
const isText = bodyPart.type === BodyBitType_1.BodyBitType.text;
|
|
455
|
-
if (isText) {
|
|
456
|
-
const asText = bodyPart;
|
|
457
|
-
const bodyTextPart = asText.data.bodyText;
|
|
458
|
-
// Append the text part to the full text body
|
|
459
|
-
if (asText.data.isPlain) {
|
|
460
|
-
plainBodyTextStr = Breakscape_1.Breakscape.concatenate(plainBodyTextStr, bodyTextPart);
|
|
461
|
-
}
|
|
462
|
-
else {
|
|
463
|
-
fullBodyTextStr = Breakscape_1.Breakscape.concatenate(fullBodyTextStr, bodyTextPart);
|
|
464
|
-
}
|
|
465
|
-
}
|
|
466
|
-
else {
|
|
467
|
-
const { legacyPlaceholderKey, placeholderKey } = createPlaceholderKeys(placeholderIndex);
|
|
468
|
-
// Append the placeholder to the full text body
|
|
469
|
-
fullBodyTextStr = Breakscape_1.Breakscape.concatenate(fullBodyTextStr, plainText ? legacyPlaceholderKey : placeholderKey);
|
|
470
|
-
placeholderIndex++;
|
|
471
|
-
}
|
|
472
|
-
}
|
|
473
|
-
// Add string or AST to the body
|
|
474
|
-
const bodyJson = this.convertBreakscapedStringToJsonText(fullBodyTextStr, textFormat);
|
|
475
|
-
const plainTextBodyJson = this.convertBreakscapedStringToJsonText(plainBodyTextStr, TextFormat_1.TextFormat.text);
|
|
476
|
-
const bodyAst = bodyJson;
|
|
477
|
-
// Newlines will have been lost from the end of fullBodyTextStr, and start of plainBodyTextStr
|
|
478
|
-
// Count then and add them back when merging
|
|
479
|
-
const newlines = StringUtils_1.StringUtils.countOccurrencesAtEnd(fullBodyTextStr, '\n') +
|
|
480
|
-
StringUtils_1.StringUtils.countOccurrencesAtStart(plainBodyTextStr, '\n');
|
|
481
|
-
this.bodyJson = this.concatenatePlainTextWithJsonTexts(bodyJson, newlines, plainTextBodyJson);
|
|
482
|
-
// Loop the body parts again to create the body bits:
|
|
483
|
-
// - For text output the body bits are inserted into the 'placeholders' object
|
|
484
|
-
// - For JSON output the body bits are inserted into body AST, replacing the placeholders created by the text parser
|
|
485
|
-
placeholderIndex = this.startPlaceholderIndex;
|
|
486
|
-
for (let i = 0; i < bodyParts.length; i++) {
|
|
487
|
-
const bodyPart = bodyParts[i];
|
|
488
|
-
// Skip text body parts as they are handled above
|
|
489
|
-
const isText = bodyPart.type === BodyBitType_1.BodyBitType.text;
|
|
490
|
-
if (isText)
|
|
491
|
-
continue;
|
|
492
|
-
const bodyBit = bodyPart;
|
|
493
|
-
let bodyBitJson;
|
|
494
|
-
const { legacyPlaceholderKey } = createPlaceholderKeys(placeholderIndex);
|
|
495
|
-
switch (bodyPart.type) {
|
|
496
|
-
case BodyBitType_1.BodyBitType.gap: {
|
|
497
|
-
const gap = bodyBit;
|
|
498
|
-
bodyBitJson = this.createGapJson(gap);
|
|
499
|
-
break;
|
|
500
|
-
}
|
|
501
|
-
case BodyBitType_1.BodyBitType.mark: {
|
|
502
|
-
const mark = bodyBit;
|
|
503
|
-
bodyBitJson = this.createMarkJson(mark);
|
|
504
|
-
break;
|
|
505
|
-
}
|
|
506
|
-
case BodyBitType_1.BodyBitType.select: {
|
|
507
|
-
const select = bodyBit;
|
|
508
|
-
bodyBitJson = this.createSelectJson(select);
|
|
509
|
-
break;
|
|
510
|
-
}
|
|
511
|
-
case BodyBitType_1.BodyBitType.highlight: {
|
|
512
|
-
const highlight = bodyBit;
|
|
513
|
-
bodyBitJson = this.createHighlightJson(highlight);
|
|
514
|
-
break;
|
|
515
|
-
}
|
|
516
|
-
}
|
|
517
|
-
// Add the gap to the placeholders
|
|
518
|
-
if (bodyBitJson) {
|
|
519
|
-
if (plainText) {
|
|
520
|
-
// Ensure placeholders exists
|
|
521
|
-
if (!this.bitJson.placeholders)
|
|
522
|
-
this.bitJson.placeholders = {};
|
|
523
|
-
// Add the body bit to the placeholders
|
|
524
|
-
this.bitJson.placeholders[legacyPlaceholderKey] = bodyBitJson;
|
|
525
|
-
}
|
|
526
|
-
else {
|
|
527
|
-
// Insert the body bit into the body AST
|
|
528
|
-
this.replacePlaceholderWithBodyBit(bodyAst, bodyBitJson, placeholderIndex);
|
|
529
|
-
}
|
|
530
|
-
}
|
|
531
|
-
placeholderIndex++;
|
|
532
|
-
}
|
|
533
|
-
// Save the current placeholder index for the next body (body, card bodies)
|
|
534
|
-
this.startPlaceholderIndex = placeholderIndex;
|
|
535
|
-
// Stop traversal of this branch for efficiency
|
|
420
|
+
// Stop traversal of this branch
|
|
536
421
|
return false;
|
|
537
422
|
}
|
|
538
|
-
|
|
539
|
-
|
|
540
|
-
|
|
541
|
-
|
|
542
|
-
|
|
543
|
-
this.
|
|
544
|
-
|
|
545
|
-
return
|
|
423
|
+
bodyBitCallback(bodyBit, _index, _route) {
|
|
424
|
+
// console.log('bodyBitCallback', bodyBit, index, route);
|
|
425
|
+
var _a;
|
|
426
|
+
const placeholder = `{${this.placeholderIndex}}`;
|
|
427
|
+
this.placeholderIndex++;
|
|
428
|
+
this.bitJson.placeholders = (_a = this.bitJson.placeholders) !== null && _a !== void 0 ? _a : {};
|
|
429
|
+
this.bitJson.placeholders[placeholder] = bodyBit;
|
|
430
|
+
return placeholder;
|
|
431
|
+
}
|
|
432
|
+
// bitmarkAst -> bits -> bitsValue -> footer
|
|
433
|
+
enter_footer(node, route) {
|
|
434
|
+
return this.standardHandler(node, route, undefined, { array: true, valueOverride: node.value.footer });
|
|
546
435
|
}
|
|
547
436
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> elements
|
|
548
|
-
enter_elements(node,
|
|
549
|
-
|
|
550
|
-
// Ignore elements that are not at the bit level as they are handled elsewhere as quizzes
|
|
551
|
-
// if (parent?.key !== NodeType.bitsValue) return;
|
|
552
|
-
if (elements && elements.length > 0) {
|
|
553
|
-
this.bitJson.elements = Breakscape_1.Breakscape.unbreakscape(elements);
|
|
554
|
-
}
|
|
437
|
+
enter_elements(node, route) {
|
|
438
|
+
return this.standardHandler(node, route, undefined, { array: true });
|
|
555
439
|
}
|
|
556
440
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> flashcards
|
|
557
441
|
enter_flashcards(node, route) {
|
|
558
|
-
|
|
559
|
-
const flashcards = node.value;
|
|
560
|
-
// Ignore responses that are not at the correct level as they are potentially handled elsewhere
|
|
561
|
-
const parent = this.getParentNode(route);
|
|
562
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.cardNode)
|
|
563
|
-
return;
|
|
564
|
-
const flashcardsJson = [];
|
|
565
|
-
if (flashcards) {
|
|
566
|
-
for (const c of flashcards) {
|
|
567
|
-
// Create the flashcard
|
|
568
|
-
const flashcardJson = Object.assign(Object.assign({ question: this.convertBreakscapedStringToJsonText((_a = c.question) !== null && _a !== void 0 ? _a : Breakscape_1.Breakscape.EMPTY_STRING, TextFormat_1.TextFormat.bitmarkMinusMinus), answer: this.convertBreakscapedStringToJsonText((_b = c.answer) !== null && _b !== void 0 ? _b : Breakscape_1.Breakscape.EMPTY_STRING, TextFormat_1.TextFormat.bitmarkMinusMinus), alternativeAnswers: ((_c = c.alternativeAnswers) !== null && _c !== void 0 ? _c : []).map((a) => this.convertBreakscapedStringToJsonText(a !== null && a !== void 0 ? a : Breakscape_1.Breakscape.EMPTY_STRING, TextFormat_1.TextFormat.bitmarkMinusMinus)) }, this.toItemLeadHintInstruction(c)), this.toExample(c, {
|
|
569
|
-
defaultExample: c.isDefaultExample,
|
|
570
|
-
isBoolean: true,
|
|
571
|
-
}));
|
|
572
|
-
// Delete unwanted properties
|
|
573
|
-
if (((_d = c.itemLead) === null || _d === void 0 ? void 0 : _d.lead) == null)
|
|
574
|
-
delete flashcardJson.lead;
|
|
575
|
-
flashcardsJson.push(flashcardJson);
|
|
576
|
-
}
|
|
577
|
-
}
|
|
578
|
-
if (flashcardsJson.length > 0) {
|
|
579
|
-
this.bitJson.cards = flashcardsJson;
|
|
580
|
-
}
|
|
442
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: true, keyOverride: 'cards' });
|
|
581
443
|
}
|
|
582
444
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> definitions
|
|
583
445
|
enter_definitions(node, route) {
|
|
584
|
-
|
|
585
|
-
const definitionListItem = node.value;
|
|
586
|
-
// Ignore responses that are not at the correct level as they are potentially handled elsewhere
|
|
587
|
-
const parent = this.getParentNode(route);
|
|
588
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.cardNode)
|
|
589
|
-
return;
|
|
590
|
-
const definitionsJson = [];
|
|
591
|
-
if (definitionListItem) {
|
|
592
|
-
for (const c of definitionListItem) {
|
|
593
|
-
// Create the flashcard
|
|
594
|
-
const definitionListItemJson = Object.assign(Object.assign({ term: this.convertBreakscapedStringToJsonText((_a = c.term) !== null && _a !== void 0 ? _a : Breakscape_1.Breakscape.EMPTY_STRING, TextFormat_1.TextFormat.bitmarkMinusMinus), description: this.convertBreakscapedStringToJsonText((_b = c.description) !== null && _b !== void 0 ? _b : Breakscape_1.Breakscape.EMPTY_STRING, TextFormat_1.TextFormat.bitmarkMinusMinus), alternativeDefinitions: ((_c = c.alternativeDefinitions) !== null && _c !== void 0 ? _c : []).map((a) => this.convertBreakscapedStringToJsonText(a !== null && a !== void 0 ? a : Breakscape_1.Breakscape.EMPTY_STRING, TextFormat_1.TextFormat.bitmarkMinusMinus)) }, this.toItemLeadHintInstruction(c)), this.toExample(c, {
|
|
595
|
-
defaultExample: c.isDefaultExample,
|
|
596
|
-
isBoolean: true,
|
|
597
|
-
}));
|
|
598
|
-
// Delete unwanted properties
|
|
599
|
-
if (((_d = c.itemLead) === null || _d === void 0 ? void 0 : _d.lead) == null)
|
|
600
|
-
delete definitionListItemJson.lead;
|
|
601
|
-
// description-list is an alias of definition-list. Just rename the properties
|
|
602
|
-
if (Config_1.Config.isOfBitType(this.getBitType(route), BitType_1.BitType.descriptionList)) {
|
|
603
|
-
definitionListItemJson.alternativeDescriptions = definitionListItemJson.alternativeDefinitions;
|
|
604
|
-
delete definitionListItemJson.alternativeDefinitions;
|
|
605
|
-
}
|
|
606
|
-
definitionsJson.push(definitionListItemJson);
|
|
607
|
-
}
|
|
608
|
-
}
|
|
609
|
-
if (definitionsJson.length > 0) {
|
|
610
|
-
if (Config_1.Config.isOfBitType(this.getBitType(route), BitType_1.BitType.descriptionList)) {
|
|
611
|
-
this.bitJson.descriptions = definitionsJson;
|
|
612
|
-
}
|
|
613
|
-
else {
|
|
614
|
-
this.bitJson.definitions = definitionsJson;
|
|
615
|
-
}
|
|
616
|
-
}
|
|
446
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: true });
|
|
617
447
|
}
|
|
618
448
|
// bitmarkAst -> bits -> bitsValue -> statement
|
|
619
449
|
enter_statement(node, route) {
|
|
@@ -624,405 +454,74 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
624
454
|
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.cardNode)
|
|
625
455
|
return;
|
|
626
456
|
if (statement) {
|
|
627
|
-
this.bitJson.statement = (_a =
|
|
457
|
+
this.bitJson.statement = (_a = statement.statement) !== null && _a !== void 0 ? _a : '';
|
|
628
458
|
this.bitJson.isCorrect = (_b = statement.isCorrect) !== null && _b !== void 0 ? _b : false;
|
|
459
|
+
this.bitJson.example = statement.example;
|
|
460
|
+
this.bitJson.isExample = statement.isExample;
|
|
629
461
|
}
|
|
630
462
|
}
|
|
631
463
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> statements -> statementsValue
|
|
632
464
|
enter_statements(node, route) {
|
|
633
|
-
|
|
634
|
-
const statements = node.value;
|
|
635
|
-
// Ignore statements that are not at the card node level as they are handled elsewhere
|
|
636
|
-
const parent = this.getParentNode(route);
|
|
637
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.cardNode)
|
|
638
|
-
return;
|
|
639
|
-
const statementsJson = [];
|
|
640
|
-
if (statements) {
|
|
641
|
-
for (const s of statements) {
|
|
642
|
-
// Create the statement
|
|
643
|
-
const statementJson = Object.assign(Object.assign({ statement: (_a = Breakscape_1.Breakscape.unbreakscape(s.text)) !== null && _a !== void 0 ? _a : '', isCorrect: !!s.isCorrect }, this.toItemLeadHintInstruction(s)), this.toExample(s, {
|
|
644
|
-
defaultExample: !!s.isCorrect,
|
|
645
|
-
isBoolean: true,
|
|
646
|
-
}));
|
|
647
|
-
// Delete unwanted properties
|
|
648
|
-
if (((_b = s.itemLead) === null || _b === void 0 ? void 0 : _b.item) == null)
|
|
649
|
-
delete statementJson.item;
|
|
650
|
-
if (((_c = s.itemLead) === null || _c === void 0 ? void 0 : _c.lead) == null)
|
|
651
|
-
delete statementJson.lead;
|
|
652
|
-
if ((s === null || s === void 0 ? void 0 : s.hint) == null)
|
|
653
|
-
delete statementJson.hint;
|
|
654
|
-
if ((s === null || s === void 0 ? void 0 : s.instruction) == null)
|
|
655
|
-
delete statementJson.instruction;
|
|
656
|
-
statementsJson.push(statementJson);
|
|
657
|
-
}
|
|
658
|
-
}
|
|
659
|
-
if (statementsJson.length > 0) {
|
|
660
|
-
this.bitJson.statements = statementsJson;
|
|
661
|
-
}
|
|
465
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: true });
|
|
662
466
|
}
|
|
663
467
|
// bitmarkAst -> bits -> bitsValue -> choices
|
|
664
468
|
// X bitmarkAst -> bits -> bitsValue -> cardNode -> quizzes -> quizzesValue -> choices
|
|
665
469
|
enter_choices(node, route) {
|
|
666
|
-
|
|
667
|
-
const choices = node.value;
|
|
668
|
-
// Ignore choices that are not at the bit level as they are handled elsewhere as quizzes
|
|
669
|
-
const parent = this.getParentNode(route);
|
|
670
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.cardNode)
|
|
671
|
-
return;
|
|
672
|
-
const choicesJson = [];
|
|
673
|
-
if (choices) {
|
|
674
|
-
for (const c of choices) {
|
|
675
|
-
// Create the choice
|
|
676
|
-
const choiceJson = Object.assign(Object.assign({ choice: (_a = Breakscape_1.Breakscape.unbreakscape(c.text)) !== null && _a !== void 0 ? _a : '', isCorrect: (_b = c.isCorrect) !== null && _b !== void 0 ? _b : false }, this.toItemLeadHintInstruction(c)), this.toExample(c, {
|
|
677
|
-
defaultExample: !!c.isCorrect,
|
|
678
|
-
isBoolean: true,
|
|
679
|
-
}));
|
|
680
|
-
// Delete unwanted properties
|
|
681
|
-
if (((_c = c.itemLead) === null || _c === void 0 ? void 0 : _c.lead) == null)
|
|
682
|
-
delete choiceJson.lead;
|
|
683
|
-
choicesJson.push(choiceJson);
|
|
684
|
-
}
|
|
685
|
-
}
|
|
686
|
-
if (choicesJson.length > 0) {
|
|
687
|
-
this.bitJson.choices = choicesJson;
|
|
688
|
-
}
|
|
470
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: true });
|
|
689
471
|
}
|
|
690
472
|
// bitmarkAst -> bits -> bitsValue -> responses
|
|
691
473
|
// X bitmarkAst -> bits -> bitsValue -> cardNode -> quizzes -> quizzesValue -> responses
|
|
692
474
|
enter_responses(node, route) {
|
|
693
|
-
|
|
694
|
-
const responses = node.value;
|
|
695
|
-
// Ignore responses that are not at the correct level as they are handled elsewhere as quizzes
|
|
696
|
-
const parent = this.getParentNode(route);
|
|
697
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.cardNode)
|
|
698
|
-
return;
|
|
699
|
-
const responsesJson = [];
|
|
700
|
-
if (responses) {
|
|
701
|
-
for (const r of responses) {
|
|
702
|
-
// Create the response
|
|
703
|
-
const responseJson = Object.assign(Object.assign({ response: (_a = Breakscape_1.Breakscape.unbreakscape(r.text)) !== null && _a !== void 0 ? _a : '', isCorrect: (_b = r.isCorrect) !== null && _b !== void 0 ? _b : false }, this.toItemLeadHintInstruction(r)), this.toExample(r, {
|
|
704
|
-
defaultExample: !!r.isCorrect,
|
|
705
|
-
isBoolean: true,
|
|
706
|
-
}));
|
|
707
|
-
// Delete unwanted properties
|
|
708
|
-
if (((_c = r.itemLead) === null || _c === void 0 ? void 0 : _c.lead) == null)
|
|
709
|
-
delete responseJson.lead;
|
|
710
|
-
responsesJson.push(responseJson);
|
|
711
|
-
}
|
|
712
|
-
}
|
|
713
|
-
if (responsesJson.length > 0) {
|
|
714
|
-
this.bitJson.responses = responsesJson;
|
|
715
|
-
}
|
|
475
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: true });
|
|
716
476
|
}
|
|
717
477
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> quizzes
|
|
718
|
-
enter_quizzes(node,
|
|
719
|
-
|
|
720
|
-
const quizzes = node.value;
|
|
721
|
-
const quizzesJson = [];
|
|
722
|
-
if (quizzes) {
|
|
723
|
-
for (const q of quizzes) {
|
|
724
|
-
// Choices
|
|
725
|
-
const choicesJson = [];
|
|
726
|
-
if (q.choices) {
|
|
727
|
-
for (const c of q.choices) {
|
|
728
|
-
// Create the choice
|
|
729
|
-
const choiceJson = Object.assign(Object.assign({ choice: (_a = Breakscape_1.Breakscape.unbreakscape(c.text)) !== null && _a !== void 0 ? _a : '', isCorrect: (_b = c.isCorrect) !== null && _b !== void 0 ? _b : false }, this.toItemLeadHintInstruction(c)), this.toExample(c, {
|
|
730
|
-
defaultExample: !!c.isCorrect,
|
|
731
|
-
isBoolean: true,
|
|
732
|
-
}));
|
|
733
|
-
// Delete unwanted properties
|
|
734
|
-
if (((_c = q.itemLead) === null || _c === void 0 ? void 0 : _c.lead) == null)
|
|
735
|
-
delete choiceJson.lead;
|
|
736
|
-
choicesJson.push(choiceJson);
|
|
737
|
-
}
|
|
738
|
-
}
|
|
739
|
-
// Responses
|
|
740
|
-
const responsesJson = [];
|
|
741
|
-
if (q.responses) {
|
|
742
|
-
for (const r of q.responses) {
|
|
743
|
-
// Create the choice
|
|
744
|
-
const responseJson = Object.assign(Object.assign({ response: (_d = Breakscape_1.Breakscape.unbreakscape(r.text)) !== null && _d !== void 0 ? _d : '', isCorrect: (_e = r.isCorrect) !== null && _e !== void 0 ? _e : false }, this.toItemLeadHintInstruction(r)), this.toExample(r, {
|
|
745
|
-
defaultExample: !!r.isCorrect,
|
|
746
|
-
isBoolean: true,
|
|
747
|
-
}));
|
|
748
|
-
// Delete unwanted properties
|
|
749
|
-
if (((_f = q.itemLead) === null || _f === void 0 ? void 0 : _f.lead) == null)
|
|
750
|
-
delete responseJson.lead;
|
|
751
|
-
responsesJson.push(responseJson);
|
|
752
|
-
}
|
|
753
|
-
}
|
|
754
|
-
// Create the quiz
|
|
755
|
-
const quizJson = Object.assign(Object.assign({}, this.toItemLeadHintInstruction(q)), { isExample: (_g = q.isExample) !== null && _g !== void 0 ? _g : false, choices: q.choices ? choicesJson : undefined, responses: q.responses ? responsesJson : undefined });
|
|
756
|
-
// Delete unwanted properties
|
|
757
|
-
if (((_h = q.itemLead) === null || _h === void 0 ? void 0 : _h.lead) == null)
|
|
758
|
-
delete quizJson.lead;
|
|
759
|
-
quizzesJson.push(quizJson);
|
|
760
|
-
}
|
|
761
|
-
}
|
|
762
|
-
if (quizzesJson.length > 0) {
|
|
763
|
-
this.bitJson.quizzes = quizzesJson;
|
|
764
|
-
}
|
|
478
|
+
enter_quizzes(node, route) {
|
|
479
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: true });
|
|
765
480
|
}
|
|
766
481
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> heading
|
|
767
|
-
enter_heading(node,
|
|
768
|
-
|
|
769
|
-
const heading = node.value;
|
|
770
|
-
// Check if the heading is for a match or a match matrix
|
|
771
|
-
const bitType = this.getBitType(_route);
|
|
772
|
-
const isMatrix = Config_1.Config.isOfBitType(bitType, BitType_1.BitType.matchMatrix);
|
|
773
|
-
// Create the heading
|
|
774
|
-
const headingJson = {
|
|
775
|
-
forKeys: (_a = Breakscape_1.Breakscape.unbreakscape(heading.forKeys)) !== null && _a !== void 0 ? _a : '',
|
|
776
|
-
};
|
|
777
|
-
if (isMatrix) {
|
|
778
|
-
// Matrix match, forValues is an array
|
|
779
|
-
headingJson.forValues = [];
|
|
780
|
-
if (Array.isArray(heading.forValues)) {
|
|
781
|
-
if (heading.forValues.length >= 1) {
|
|
782
|
-
headingJson.forValues = Breakscape_1.Breakscape.unbreakscape(heading.forValues);
|
|
783
|
-
}
|
|
784
|
-
}
|
|
785
|
-
}
|
|
786
|
-
else {
|
|
787
|
-
// Standard match, forValues is a string
|
|
788
|
-
headingJson.forValues = '';
|
|
789
|
-
if (Array.isArray(heading.forValues)) {
|
|
790
|
-
if (heading.forValues.length >= 1) {
|
|
791
|
-
headingJson.forValues = Breakscape_1.Breakscape.unbreakscape(heading.forValues[heading.forValues.length - 1]);
|
|
792
|
-
}
|
|
793
|
-
}
|
|
794
|
-
}
|
|
795
|
-
this.bitJson.heading = headingJson;
|
|
482
|
+
enter_heading(node, route) {
|
|
483
|
+
return this.standardHandler(node, route, undefined, { array: false });
|
|
796
484
|
}
|
|
797
485
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> pairs
|
|
798
486
|
enter_pairs(node, route) {
|
|
799
|
-
|
|
800
|
-
const pairs = node.value;
|
|
801
|
-
const pairsJson = [];
|
|
802
|
-
const bitType = this.getBitType(route);
|
|
803
|
-
if (pairs && bitType) {
|
|
804
|
-
for (const p of pairs) {
|
|
805
|
-
// Get default example
|
|
806
|
-
const defaultExample = Array.isArray(p.values) && p.values.length > 0 && p.values[0];
|
|
807
|
-
// Create the question
|
|
808
|
-
const pairJson = Object.assign(Object.assign(Object.assign({ key: (_a = Breakscape_1.Breakscape.unbreakscape(p.key)) !== null && _a !== void 0 ? _a : '', keyAudio: p.keyAudio ? this.addAudioResource(bitType, p.keyAudio) : undefined, keyImage: p.keyImage ? this.addImageResource(bitType, p.keyImage) : undefined, values: (_b = Breakscape_1.Breakscape.unbreakscape(p.values)) !== null && _b !== void 0 ? _b : [] }, this.toItemLeadHintInstruction(p)), { isCaseSensitive: (_c = p.isCaseSensitive) !== null && _c !== void 0 ? _c : true }), this.toExample(p, {
|
|
809
|
-
defaultExample,
|
|
810
|
-
isBoolean: false,
|
|
811
|
-
}));
|
|
812
|
-
// Delete unwanted properties
|
|
813
|
-
if (((_d = p.itemLead) === null || _d === void 0 ? void 0 : _d.lead) == null)
|
|
814
|
-
delete pairJson.lead;
|
|
815
|
-
if (pairJson.key) {
|
|
816
|
-
delete pairJson.keyAudio;
|
|
817
|
-
delete pairJson.keyImage;
|
|
818
|
-
}
|
|
819
|
-
if (pairJson.keyAudio != null) {
|
|
820
|
-
delete pairJson.key;
|
|
821
|
-
delete pairJson.keyImage;
|
|
822
|
-
}
|
|
823
|
-
if (pairJson.keyImage != null) {
|
|
824
|
-
delete pairJson.key;
|
|
825
|
-
delete pairJson.keyAudio;
|
|
826
|
-
}
|
|
827
|
-
pairsJson.push(pairJson);
|
|
828
|
-
}
|
|
829
|
-
}
|
|
830
|
-
if (pairsJson.length > 0) {
|
|
831
|
-
this.bitJson.pairs = pairsJson;
|
|
832
|
-
}
|
|
487
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: true });
|
|
833
488
|
}
|
|
834
489
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> matrix
|
|
835
|
-
enter_matrix(node,
|
|
836
|
-
|
|
837
|
-
const matrix = node.value;
|
|
838
|
-
const matrixJsonArray = [];
|
|
839
|
-
if (matrix) {
|
|
840
|
-
for (const m of matrix) {
|
|
841
|
-
// Choices
|
|
842
|
-
const matrixCellsJson = [];
|
|
843
|
-
if (m.cells) {
|
|
844
|
-
for (const c of m.cells) {
|
|
845
|
-
// Get default example
|
|
846
|
-
const defaultExample = Array.isArray(c.values) && c.values.length > 0 && c.values[0];
|
|
847
|
-
// Create the choice
|
|
848
|
-
const matrixCellJson = Object.assign(Object.assign(Object.assign({ values: (_a = Breakscape_1.Breakscape.unbreakscape(c.values)) !== null && _a !== void 0 ? _a : [] }, this.toItemLeadHintInstruction(c)), { isCaseSensitive: (_b = c.isCaseSensitive) !== null && _b !== void 0 ? _b : true }), this.toExample(c, {
|
|
849
|
-
defaultExample,
|
|
850
|
-
isBoolean: false,
|
|
851
|
-
}));
|
|
852
|
-
// Delete unwanted properties
|
|
853
|
-
if (((_c = c.itemLead) === null || _c === void 0 ? void 0 : _c.lead) == null)
|
|
854
|
-
delete matrixCellJson.lead;
|
|
855
|
-
if (c.hint == null)
|
|
856
|
-
delete matrixCellJson.hint;
|
|
857
|
-
matrixCellsJson.push(matrixCellJson);
|
|
858
|
-
}
|
|
859
|
-
}
|
|
860
|
-
// Create the matrix
|
|
861
|
-
const matrixJson = Object.assign(Object.assign({ key: (_d = Breakscape_1.Breakscape.unbreakscape(m.key)) !== null && _d !== void 0 ? _d : '', cells: matrixCellsJson !== null && matrixCellsJson !== void 0 ? matrixCellsJson : [] }, this.toItemLeadHintInstruction(m)), {
|
|
862
|
-
// ...this.toExample(m.example, m.isExample),
|
|
863
|
-
isExample: (_e = m.isExample) !== null && _e !== void 0 ? _e : false });
|
|
864
|
-
// Delete unwanted properties
|
|
865
|
-
if (((_f = m.itemLead) === null || _f === void 0 ? void 0 : _f.lead) == null)
|
|
866
|
-
delete matrixJson.lead;
|
|
867
|
-
if (m.instruction == null)
|
|
868
|
-
delete matrixJson.instruction;
|
|
869
|
-
matrixJsonArray.push(matrixJson);
|
|
870
|
-
}
|
|
871
|
-
}
|
|
872
|
-
if (matrixJsonArray.length > 0) {
|
|
873
|
-
this.bitJson.matrix = matrixJsonArray;
|
|
874
|
-
}
|
|
490
|
+
enter_matrix(node, route) {
|
|
491
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: true });
|
|
875
492
|
}
|
|
876
493
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> table
|
|
877
|
-
enter_table(node,
|
|
878
|
-
|
|
879
|
-
// const bitType = this.getBitType(route);
|
|
880
|
-
if (table) {
|
|
881
|
-
const tableJson = {
|
|
882
|
-
columns: Breakscape_1.Breakscape.unbreakscape(table.columns),
|
|
883
|
-
data: table.rows.map((row) => Breakscape_1.Breakscape.unbreakscape(row)),
|
|
884
|
-
};
|
|
885
|
-
// const isEmpty = !table.columns || table.columns.length === 0 || !table.rows || table.rows.length === 0;
|
|
886
|
-
this.bitJson.table = tableJson;
|
|
887
|
-
}
|
|
888
|
-
// Stop traversal of this branch to avoid unnecessary processing
|
|
889
|
-
return false;
|
|
494
|
+
enter_table(node, route) {
|
|
495
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: false });
|
|
890
496
|
}
|
|
891
497
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> questions
|
|
892
|
-
enter_questions(node,
|
|
893
|
-
|
|
894
|
-
const questions = node.value;
|
|
895
|
-
const questionsJson = [];
|
|
896
|
-
if (questions) {
|
|
897
|
-
for (const q of questions) {
|
|
898
|
-
// Create the question
|
|
899
|
-
const questionJson = Object.assign(Object.assign(Object.assign({ question: (_a = Breakscape_1.Breakscape.unbreakscape(q.question)) !== null && _a !== void 0 ? _a : '', partialAnswer: (_b = Breakscape_1.Breakscape.unbreakscape(ArrayUtils_1.ArrayUtils.asSingle(q.partialAnswer))) !== null && _b !== void 0 ? _b : '', sampleSolution: (_c = Breakscape_1.Breakscape.unbreakscape(ArrayUtils_1.ArrayUtils.asSingle(q.sampleSolution))) !== null && _c !== void 0 ? _c : '', additionalSolutions: (_d = Breakscape_1.Breakscape.unbreakscape(q.additionalSolutions)) !== null && _d !== void 0 ? _d : [] }, this.toItemLeadHintInstruction(q)), { reasonableNumOfChars: q.reasonableNumOfChars }), this.toExample(q, {
|
|
900
|
-
defaultExample: q.sampleSolution || '',
|
|
901
|
-
isBoolean: false,
|
|
902
|
-
}));
|
|
903
|
-
// Delete unwanted properties
|
|
904
|
-
if (((_e = q.itemLead) === null || _e === void 0 ? void 0 : _e.lead) == null)
|
|
905
|
-
delete questionJson.lead;
|
|
906
|
-
if (q.additionalSolutions == null || q.additionalSolutions.length === 0) {
|
|
907
|
-
delete questionJson.additionalSolutions;
|
|
908
|
-
}
|
|
909
|
-
questionsJson.push(questionJson);
|
|
910
|
-
}
|
|
911
|
-
}
|
|
912
|
-
if (questionsJson.length > 0) {
|
|
913
|
-
this.bitJson.questions = questionsJson;
|
|
914
|
-
}
|
|
498
|
+
enter_questions(node, route) {
|
|
499
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: true });
|
|
915
500
|
}
|
|
916
501
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> botResponses
|
|
917
502
|
enter_botResponses(node, route) {
|
|
918
|
-
|
|
919
|
-
const botResponses = node.value;
|
|
920
|
-
// Ignore responses that are not at the cardNode level as they are handled elsewhere
|
|
921
|
-
const parent = this.getParentNode(route);
|
|
922
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.cardNode)
|
|
923
|
-
return;
|
|
924
|
-
const responsesJson = [];
|
|
925
|
-
if (botResponses) {
|
|
926
|
-
for (const r of botResponses) {
|
|
927
|
-
// Create the response
|
|
928
|
-
const responseJson = Object.assign({ response: (_a = Breakscape_1.Breakscape.unbreakscape(r.response)) !== null && _a !== void 0 ? _a : '', reaction: (_b = Breakscape_1.Breakscape.unbreakscape(r.reaction)) !== null && _b !== void 0 ? _b : '', feedback: (_c = Breakscape_1.Breakscape.unbreakscape(r.feedback)) !== null && _c !== void 0 ? _c : '' }, this.toItemLeadHintInstruction(r));
|
|
929
|
-
// Delete unwanted properties
|
|
930
|
-
if (((_d = r.itemLead) === null || _d === void 0 ? void 0 : _d.lead) == null)
|
|
931
|
-
delete responseJson.lead;
|
|
932
|
-
if (r.hint == null)
|
|
933
|
-
delete responseJson.hint;
|
|
934
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
935
|
-
delete responseJson.instruction;
|
|
936
|
-
responsesJson.push(responseJson);
|
|
937
|
-
}
|
|
938
|
-
}
|
|
939
|
-
if (responsesJson.length > 0) {
|
|
940
|
-
this.bitJson.responses = responsesJson;
|
|
941
|
-
}
|
|
503
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: true, keyOverride: 'responses' });
|
|
942
504
|
}
|
|
943
505
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> ingredients -> ingredientsValue
|
|
944
506
|
enter_ingredients(node, route) {
|
|
945
|
-
|
|
946
|
-
const ingredients = node.value;
|
|
947
|
-
// Ignore statements that are not at the card node level as they are handled elsewhere
|
|
948
|
-
const parent = this.getParentNode(route);
|
|
949
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.cardNode)
|
|
950
|
-
return;
|
|
951
|
-
const ingredientsJson = [];
|
|
952
|
-
if (ingredients) {
|
|
953
|
-
for (const i of ingredients) {
|
|
954
|
-
// Create the ingredient
|
|
955
|
-
const ingredientJson = {
|
|
956
|
-
title: (_a = Breakscape_1.Breakscape.unbreakscape(i.title)) !== null && _a !== void 0 ? _a : '',
|
|
957
|
-
checked: (_b = i.checked) !== null && _b !== void 0 ? _b : false,
|
|
958
|
-
item: (_c = Breakscape_1.Breakscape.unbreakscape(i.item)) !== null && _c !== void 0 ? _c : '',
|
|
959
|
-
quantity: (_d = i.quantity) !== null && _d !== void 0 ? _d : 0,
|
|
960
|
-
unit: (_e = Breakscape_1.Breakscape.unbreakscape(i.unit)) !== null && _e !== void 0 ? _e : '',
|
|
961
|
-
unitAbbr: (_f = Breakscape_1.Breakscape.unbreakscape(i.unitAbbr)) !== null && _f !== void 0 ? _f : '',
|
|
962
|
-
decimalPlaces: (_g = i.decimalPlaces) !== null && _g !== void 0 ? _g : 1,
|
|
963
|
-
disableCalculation: (_h = i.disableCalculation) !== null && _h !== void 0 ? _h : false,
|
|
964
|
-
};
|
|
965
|
-
// Delete unwanted properties
|
|
966
|
-
if ((i === null || i === void 0 ? void 0 : i.title) == null)
|
|
967
|
-
delete ingredientJson.title;
|
|
968
|
-
// if (i?.unit == null) delete ingredientJson.unit;
|
|
969
|
-
if ((i === null || i === void 0 ? void 0 : i.unitAbbr) == null)
|
|
970
|
-
delete ingredientJson.unitAbbr;
|
|
971
|
-
// if (i?.instruction == null) delete ingredientJson.instruction;
|
|
972
|
-
ingredientsJson.push(ingredientJson);
|
|
973
|
-
}
|
|
974
|
-
}
|
|
975
|
-
if (ingredientsJson.length > 0) {
|
|
976
|
-
this.bitJson.ingredients = ingredientsJson;
|
|
977
|
-
}
|
|
507
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: true });
|
|
978
508
|
}
|
|
979
509
|
// bitmarkAst -> bits -> bitsValue -> cardNode -> captionDefinitionList
|
|
980
|
-
enter_captionDefinitionList(node,
|
|
981
|
-
|
|
982
|
-
const list = node.value;
|
|
983
|
-
// const bitType = this.getBitType(route);
|
|
984
|
-
if (list) {
|
|
985
|
-
const columns = (_a = list.columns) !== null && _a !== void 0 ? _a : [];
|
|
986
|
-
const definitions = (_b = list.definitions) !== null && _b !== void 0 ? _b : [];
|
|
987
|
-
const captionDefinitionListJson = {
|
|
988
|
-
columns: Breakscape_1.Breakscape.unbreakscape(columns),
|
|
989
|
-
definitions: definitions.map((d) => {
|
|
990
|
-
var _a, _b;
|
|
991
|
-
return {
|
|
992
|
-
term: (_a = Breakscape_1.Breakscape.unbreakscape(d.term)) !== null && _a !== void 0 ? _a : '',
|
|
993
|
-
description: (_b = Breakscape_1.Breakscape.unbreakscape(d.description)) !== null && _b !== void 0 ? _b : '',
|
|
994
|
-
};
|
|
995
|
-
}),
|
|
996
|
-
};
|
|
997
|
-
// const isEmpty = !table.columns || table.columns.length === 0 || !table.rows || table.rows.length === 0;
|
|
998
|
-
this.bitJson.captionDefinitionList = captionDefinitionListJson;
|
|
999
|
-
}
|
|
1000
|
-
// Stop traversal of this branch to avoid unnecessary processing
|
|
1001
|
-
return false;
|
|
510
|
+
enter_captionDefinitionList(node, route) {
|
|
511
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.cardNode, { array: false });
|
|
1002
512
|
}
|
|
1003
513
|
// bitmarkAst -> bits -> bitsValue -> imagePlaceholder
|
|
1004
514
|
enter_imagePlaceholder(node, route) {
|
|
1005
|
-
|
|
1006
|
-
const parent = this.getParentNode(route);
|
|
1007
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.bitsValue)
|
|
1008
|
-
return;
|
|
1009
|
-
const resource = node.value;
|
|
1010
|
-
const bitType = this.getBitType(route);
|
|
1011
|
-
if (!resource || !bitType)
|
|
1012
|
-
return;
|
|
1013
|
-
const res = this.parseResourceToJson(bitType, resource);
|
|
1014
|
-
if (res && res.type === ResourceTag_1.ResourceTag.image) {
|
|
1015
|
-
this.bitJson.imagePlaceholder = res;
|
|
1016
|
-
}
|
|
515
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: false });
|
|
1017
516
|
}
|
|
1018
517
|
// bitmarkAst -> bits -> bitsValue -> resources
|
|
1019
518
|
enter_resources(node, route) {
|
|
1020
|
-
var _a;
|
|
519
|
+
var _a, _b;
|
|
1021
520
|
const resources = node.value;
|
|
1022
521
|
const bitType = this.getBitType(route);
|
|
1023
522
|
const resourceType = this.getResourceType(route);
|
|
1024
523
|
if (!resources || !bitType)
|
|
1025
|
-
return;
|
|
524
|
+
return true;
|
|
1026
525
|
let resourceJson;
|
|
1027
526
|
const bitConfig = Config_1.Config.getBitConfig(bitType);
|
|
1028
527
|
const bitResourcesConfig = Config_1.Config.getBitResourcesConfig(bitType, resourceType);
|
|
@@ -1036,15 +535,17 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
1036
535
|
// Create the combo resource wrapper
|
|
1037
536
|
const wrapper = {
|
|
1038
537
|
type: comboTagType,
|
|
538
|
+
__typeAlias: comboTagType,
|
|
1039
539
|
};
|
|
1040
540
|
// For each of the resources in this combo resource, find the actual resource and add it to the JSON
|
|
1041
541
|
for (const rt of resourceTags) {
|
|
1042
|
-
const r = resources.find((r) => r.
|
|
542
|
+
const r = resources.find((r) => r.__typeAlias === rt);
|
|
1043
543
|
// Extract everything except the type from the resource
|
|
1044
544
|
if (r) {
|
|
1045
|
-
const tagConfig = Config_1.Config.getTagConfigForTag(bitConfig.tags, r.
|
|
1046
|
-
const key = (_a = tagConfig === null || tagConfig === void 0 ? void 0 : tagConfig.jsonKey) !== null && _a !== void 0 ? _a : r.
|
|
1047
|
-
const
|
|
545
|
+
const tagConfig = Config_1.Config.getTagConfigForTag(bitConfig.tags, r.__typeAlias);
|
|
546
|
+
const key = (_a = tagConfig === null || tagConfig === void 0 ? void 0 : tagConfig.jsonKey) !== null && _a !== void 0 ? _a : r.__typeAlias;
|
|
547
|
+
const tag = (_b = tagConfig === null || tagConfig === void 0 ? void 0 : tagConfig.tag) !== null && _b !== void 0 ? _b : r.__typeAlias;
|
|
548
|
+
const json = r.__typeAlias === tag ? r : undefined;
|
|
1048
549
|
if (json) {
|
|
1049
550
|
for (const [k, v] of Object.entries(json)) {
|
|
1050
551
|
if (k !== 'type') {
|
|
@@ -1062,9 +563,8 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
1062
563
|
// The resource is a logo-grave / prototpye-images resource
|
|
1063
564
|
const images = [];
|
|
1064
565
|
for (const r of resources) {
|
|
1065
|
-
|
|
1066
|
-
|
|
1067
|
-
images.push(json);
|
|
566
|
+
if (r.type === ResourceTag_1.ResourceTag.image) {
|
|
567
|
+
images.push(r);
|
|
1068
568
|
}
|
|
1069
569
|
}
|
|
1070
570
|
if (bitType === BitType_1.BitType.imagesLogoGrave) {
|
|
@@ -1078,93 +578,50 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
1078
578
|
// This is a standard resource. If there is more than one resource, use the first one.
|
|
1079
579
|
// There should not be more than one because of validation
|
|
1080
580
|
if (resources.length >= 1) {
|
|
1081
|
-
resourceJson = this.parseResourceToJson(bitType, resources[0]);
|
|
581
|
+
resourceJson = resources[0]; // this.parseResourceToJson(bitType, resources[0]);
|
|
1082
582
|
}
|
|
1083
583
|
}
|
|
1084
584
|
this.bitJson.resource = resourceJson;
|
|
585
|
+
return false;
|
|
1085
586
|
}
|
|
1086
|
-
//
|
|
1087
|
-
|
|
1088
|
-
|
|
1089
|
-
// bitmarkAst -> bits -> bitsValue -> title
|
|
1090
|
-
leaf_title(node, route) {
|
|
1091
|
-
// Ignore title that are not at the bit or card node level as they are handled elsewhere
|
|
1092
|
-
const parent = this.getParentNode(route);
|
|
1093
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.bitsValue && (parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.cardNode)
|
|
1094
|
-
return;
|
|
1095
|
-
this.bitJson.title = this.convertBreakscapedStringToJsonText(node.value, TextFormat_1.TextFormat.bitmarkMinusMinus);
|
|
1096
|
-
}
|
|
1097
|
-
// bitmarkAst -> bits -> bitsValue -> subtitle
|
|
1098
|
-
leaf_subtitle(node, _route) {
|
|
1099
|
-
this.bitJson.subtitle = this.convertBreakscapedStringToJsonText(node.value, TextFormat_1.TextFormat.bitmarkMinusMinus);
|
|
587
|
+
// bitmarkAst -> bits -> bitsValue -> level
|
|
588
|
+
leaf_level(node, route) {
|
|
589
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: false });
|
|
1100
590
|
}
|
|
1101
|
-
//
|
|
1102
|
-
|
|
1103
|
-
|
|
1104
|
-
if (node.value != null)
|
|
1105
|
-
this.addProperty(this.bitJson, 'level', (_a = node.value) !== null && _a !== void 0 ? _a : 1, true);
|
|
591
|
+
// bitmarkAst -> bits -> bitsValue -> book (array)
|
|
592
|
+
enter_book(node, route) {
|
|
593
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: true });
|
|
1106
594
|
}
|
|
1107
|
-
// bitmarkAst -> bits -> bitsValue -> book
|
|
1108
|
-
leaf_book(node,
|
|
1109
|
-
|
|
1110
|
-
this.addProperty(this.bitJson, 'book', node.value, true);
|
|
595
|
+
// bitmarkAst -> bits -> bitsValue -> book (single)
|
|
596
|
+
leaf_book(node, route) {
|
|
597
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: false });
|
|
1111
598
|
}
|
|
1112
599
|
// bitmarkAst -> bits -> bitsValue -> anchor
|
|
1113
|
-
leaf_anchor(node,
|
|
1114
|
-
|
|
1115
|
-
this.addProperty(this.bitJson, 'anchor', node.value, true);
|
|
600
|
+
leaf_anchor(node, route) {
|
|
601
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: false });
|
|
1116
602
|
}
|
|
1117
603
|
// bitmarkAst -> bits -> bitsValue -> reference
|
|
1118
|
-
leaf_reference(node,
|
|
1119
|
-
|
|
1120
|
-
this.addProperty(this.bitJson, 'reference', node.value, true);
|
|
604
|
+
leaf_reference(node, route) {
|
|
605
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: false });
|
|
1121
606
|
}
|
|
1122
607
|
// bitmarkAst -> bits -> bitsValue -> referenceEnd
|
|
1123
|
-
leaf_referenceEnd(node,
|
|
1124
|
-
|
|
1125
|
-
this.addProperty(this.bitJson, 'referenceEnd', node.value, true);
|
|
1126
|
-
}
|
|
1127
|
-
// bitmarkAst -> bits -> bitsValue -> caption
|
|
1128
|
-
leaf_caption(node, route) {
|
|
1129
|
-
const caption = node.value;
|
|
1130
|
-
// Ignore caption that is not at the bit level as it are handled elsewhere
|
|
1131
|
-
const parent = this.getParentNode(route);
|
|
1132
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.bitsValue)
|
|
1133
|
-
return;
|
|
1134
|
-
this.bitJson.caption = this.convertBreakscapedStringToJsonText(caption, TextFormat_1.TextFormat.bitmarkMinusMinus);
|
|
1135
|
-
}
|
|
1136
|
-
// bitmarkAst -> bits -> bitsValue -> * -> hint
|
|
1137
|
-
leaf_hint(node, route) {
|
|
1138
|
-
const hint = node.value;
|
|
1139
|
-
// Ignore hint that is not at the bit level as it are handled elsewhere
|
|
1140
|
-
const parent = this.getParentNode(route);
|
|
1141
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.bitsValue)
|
|
1142
|
-
return;
|
|
1143
|
-
this.bitJson.hint = this.convertBreakscapedStringToJsonText(hint, TextFormat_1.TextFormat.bitmarkMinusMinus);
|
|
1144
|
-
}
|
|
1145
|
-
// bitmarkAst -> bits -> bitsValue -> * -> instruction
|
|
1146
|
-
leaf_instruction(node, route) {
|
|
1147
|
-
const instruction = node.value;
|
|
1148
|
-
// Ignore instruction that is not at the bit level as it are handled elsewhere
|
|
1149
|
-
const parent = this.getParentNode(route);
|
|
1150
|
-
if ((parent === null || parent === void 0 ? void 0 : parent.key) !== NodeType_1.NodeType.bitsValue)
|
|
1151
|
-
return;
|
|
1152
|
-
this.bitJson.instruction = this.convertBreakscapedStringToJsonText(instruction, TextFormat_1.TextFormat.bitmarkMinusMinus);
|
|
1153
|
-
}
|
|
1154
|
-
// bitmarkAst -> bits -> footer -> footerText
|
|
1155
|
-
leaf_footerText(node, route) {
|
|
1156
|
-
const footer = node.value;
|
|
1157
|
-
const textFormat = this.getTextFormat(route);
|
|
1158
|
-
this.bitJson.footer = this.convertBreakscapedStringToJsonText(footer, textFormat);
|
|
608
|
+
leaf_referenceEnd(node, route) {
|
|
609
|
+
return this.standardHandler(node, route, NodeType_1.NodeType.bitsValue, { array: false });
|
|
1159
610
|
}
|
|
1160
611
|
// bitmarkAst -> bits -> bitsValue -> markup
|
|
1161
612
|
leaf_markup(node, _route) {
|
|
1162
613
|
const bitmark = node.value;
|
|
1163
614
|
if (bitmark)
|
|
1164
615
|
this.bitWrapperJson.bitmark = bitmark;
|
|
616
|
+
// Stop traversal of this branch
|
|
617
|
+
return false;
|
|
1165
618
|
}
|
|
1166
|
-
// bitmarkAst -> bits -> bitsValue -> parser
|
|
1167
619
|
// bitmarkAst -> bits -> bitsValue -> * -> internalComment
|
|
620
|
+
enter_internalComment(_node, _route) {
|
|
621
|
+
// Stop traversal of this branch, handled in enter_parser()
|
|
622
|
+
return false;
|
|
623
|
+
}
|
|
624
|
+
// bitmarkAst -> bits -> bitsValue -> parser
|
|
1168
625
|
enter_parser(node, route) {
|
|
1169
626
|
const parser = node.value;
|
|
1170
627
|
const bitType = this.getBitType(route);
|
|
@@ -1178,13 +635,11 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
1178
635
|
if (Array.isArray(parserExcessResources) && parserExcessResources.length > 0) {
|
|
1179
636
|
excessResources = [];
|
|
1180
637
|
for (const r of parserExcessResources) {
|
|
1181
|
-
|
|
1182
|
-
if (rJson)
|
|
1183
|
-
excessResources.push(rJson);
|
|
638
|
+
excessResources.push(r);
|
|
1184
639
|
}
|
|
1185
640
|
}
|
|
1186
641
|
// Extract internal comments from the AST and add to the parser
|
|
1187
|
-
const internalComments =
|
|
642
|
+
const internalComments = this.getInternalComments(route);
|
|
1188
643
|
if ((parent === null || parent === void 0 ? void 0 : parent.key) === NodeType_1.NodeType.bitsValue) {
|
|
1189
644
|
// Bit level parser information
|
|
1190
645
|
this.bitWrapperJson.parser = Object.assign(Object.assign({ version,
|
|
@@ -1230,32 +685,12 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
1230
685
|
const propertiesConfig = Config_1.Config.getRawPropertiesConfig();
|
|
1231
686
|
for (const propertyConfig of Object.values(propertiesConfig)) {
|
|
1232
687
|
const astKey = (_a = propertyConfig.astKey) !== null && _a !== void 0 ? _a : propertyConfig.tag;
|
|
1233
|
-
// Special cases (handled outside of the automatically generated handlers)
|
|
1234
|
-
if (astKey === PropertyTag_1.PropertyTag.internalComment)
|
|
1235
|
-
continue;
|
|
1236
|
-
if (astKey === PropertyTag_1.PropertyTag.caption)
|
|
1237
|
-
continue;
|
|
1238
|
-
if (astKey === PropertyTag_1.PropertyTag.example)
|
|
1239
|
-
continue;
|
|
1240
|
-
if (astKey === PropertyTag_1.PropertyTag.imageSource)
|
|
1241
|
-
continue;
|
|
1242
|
-
if (astKey === PropertyTag_1.PropertyTag.person)
|
|
1243
|
-
continue;
|
|
1244
|
-
if (astKey === PropertyTag_1.PropertyTag.imagePlaceholder)
|
|
1245
|
-
continue;
|
|
1246
|
-
if (astKey === PropertyTag_1.PropertyTag.width)
|
|
1247
|
-
continue;
|
|
1248
|
-
if (astKey === PropertyTag_1.PropertyTag.height)
|
|
1249
|
-
continue;
|
|
1250
|
-
if (astKey === PropertyAstKey_1.PropertyAstKey.ast_markConfig)
|
|
1251
|
-
continue;
|
|
1252
|
-
if (astKey === PropertyTag_1.PropertyTag.ratingLevelStart)
|
|
1253
|
-
continue;
|
|
1254
|
-
if (astKey === PropertyTag_1.PropertyTag.ratingLevelEnd)
|
|
1255
|
-
continue;
|
|
1256
|
-
if (astKey === PropertyTag_1.PropertyTag.productId)
|
|
1257
|
-
continue;
|
|
1258
688
|
const funcName = `enter_${astKey}`;
|
|
689
|
+
// Skip if the function already exists, allows for custom handlers
|
|
690
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
691
|
+
if (typeof this[funcName] === 'function') {
|
|
692
|
+
continue;
|
|
693
|
+
}
|
|
1259
694
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1260
695
|
this[funcName] = (node, route) => {
|
|
1261
696
|
var _a;
|
|
@@ -1270,7 +705,7 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
1270
705
|
// Convert key as needed
|
|
1271
706
|
const jsonKey = (_a = propertyConfig.jsonKey) !== null && _a !== void 0 ? _a : propertyConfig.tag;
|
|
1272
707
|
// Add the property
|
|
1273
|
-
this.addProperty(this.bitJson, jsonKey, value, propertyConfig.single);
|
|
708
|
+
this.addProperty(this.bitJson, jsonKey, value, { array: !propertyConfig.single });
|
|
1274
709
|
};
|
|
1275
710
|
// Bind this
|
|
1276
711
|
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
@@ -1281,605 +716,51 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
1281
716
|
//
|
|
1282
717
|
// HELPER FUNCTIONS
|
|
1283
718
|
//
|
|
1284
|
-
|
|
1285
|
-
|
|
1286
|
-
|
|
1287
|
-
|
|
1288
|
-
|
|
1289
|
-
|
|
1290
|
-
|
|
1291
|
-
|
|
1292
|
-
|
|
1293
|
-
// Remove unwanted properties
|
|
1294
|
-
// if (!data.itemLead?.lead) delete gapJson.lead;
|
|
1295
|
-
return gapJson;
|
|
1296
|
-
}
|
|
1297
|
-
createMarkJson(mark) {
|
|
1298
|
-
const data = mark.data;
|
|
1299
|
-
// Create the mark
|
|
1300
|
-
const markJson = Object.assign(Object.assign({ type: 'mark', solution: Breakscape_1.Breakscape.unbreakscape(data.solution), mark: Breakscape_1.Breakscape.unbreakscape(data.mark) }, this.toItemLeadHintInstruction(data)), this.toExample(data, {
|
|
1301
|
-
defaultExample: true,
|
|
1302
|
-
isBoolean: true,
|
|
1303
|
-
}));
|
|
1304
|
-
// Remove unwanted properties
|
|
1305
|
-
// if (!data.itemLead?.lead) delete markJson.lead;
|
|
1306
|
-
return markJson;
|
|
1307
|
-
}
|
|
1308
|
-
createSelectJson(select) {
|
|
1309
|
-
var _a, _b, _c, _d;
|
|
1310
|
-
const data = select.data;
|
|
1311
|
-
// Create the select options
|
|
1312
|
-
const options = [];
|
|
1313
|
-
for (const option of data.options) {
|
|
1314
|
-
const optionJson = Object.assign(Object.assign({ text: Breakscape_1.Breakscape.unbreakscape(option.text), isCorrect: (_a = option.isCorrect) !== null && _a !== void 0 ? _a : false }, this.toItemLeadHintInstruction(option)), this.toExample(option, {
|
|
1315
|
-
defaultExample: !!option.isCorrect,
|
|
1316
|
-
isBoolean: true,
|
|
1317
|
-
}));
|
|
1318
|
-
// Remove unwanted properties
|
|
1319
|
-
// if (!option.itemLead?.item) delete optionJson.item;
|
|
1320
|
-
// if (!option.itemLead?.lead) delete optionJson.lead;
|
|
1321
|
-
// if (!option.instruction) delete optionJson.instruction;
|
|
1322
|
-
options.push(optionJson);
|
|
1323
|
-
}
|
|
1324
|
-
// Create the select
|
|
1325
|
-
const selectJson = Object.assign(Object.assign({ type: 'select', prefix: (_b = Breakscape_1.Breakscape.unbreakscape(data.prefix)) !== null && _b !== void 0 ? _b : '', postfix: (_c = Breakscape_1.Breakscape.unbreakscape(data.postfix)) !== null && _c !== void 0 ? _c : '' }, this.toItemLeadHintInstruction(data)), { isExample: (_d = data.isExample) !== null && _d !== void 0 ? _d : false, options });
|
|
1326
|
-
// Remove unwanted properties
|
|
1327
|
-
// if (!data.itemLead?.lead) delete selectJson.lead;
|
|
1328
|
-
return selectJson;
|
|
1329
|
-
}
|
|
1330
|
-
createHighlightJson(highlight) {
|
|
1331
|
-
var _a, _b, _c, _d, _e;
|
|
1332
|
-
const data = highlight.data;
|
|
1333
|
-
// Create the highlight options
|
|
1334
|
-
const texts = [];
|
|
1335
|
-
for (const text of data.texts) {
|
|
1336
|
-
const textJson = Object.assign(Object.assign({ text: Breakscape_1.Breakscape.unbreakscape(text.text), isCorrect: (_a = text.isCorrect) !== null && _a !== void 0 ? _a : false, isHighlighted: (_b = text.isHighlighted) !== null && _b !== void 0 ? _b : false }, this.toItemLeadHintInstruction(text)), this.toExample(text, {
|
|
1337
|
-
defaultExample: !!text.isCorrect,
|
|
1338
|
-
isBoolean: true,
|
|
1339
|
-
}));
|
|
1340
|
-
// Remove unwanted properties
|
|
1341
|
-
// if (!text.itemLead?.item) delete textJson.item;
|
|
1342
|
-
// if (!text.itemLead?.lead) delete textJson.lead;
|
|
1343
|
-
// if (!text.hint) delete textJson.hint;
|
|
1344
|
-
texts.push(textJson);
|
|
1345
|
-
}
|
|
1346
|
-
// Create the select
|
|
1347
|
-
const highlightJson = Object.assign(Object.assign({ type: 'highlight', prefix: (_c = Breakscape_1.Breakscape.unbreakscape(data.prefix)) !== null && _c !== void 0 ? _c : '', postfix: (_d = Breakscape_1.Breakscape.unbreakscape(data.postfix)) !== null && _d !== void 0 ? _d : '' }, this.toItemLeadHintInstruction(data)), { isExample: (_e = data.isExample) !== null && _e !== void 0 ? _e : false, texts });
|
|
1348
|
-
// Remove unwanted properties
|
|
1349
|
-
// if (!data.itemLead?.lead) delete highlightJson.lead;
|
|
1350
|
-
return highlightJson;
|
|
1351
|
-
}
|
|
1352
|
-
parseResourceToJson(bitType, resource) {
|
|
1353
|
-
if (!resource)
|
|
1354
|
-
return undefined;
|
|
1355
|
-
// All resources should now be valid as they are validated in the AST
|
|
1356
|
-
// TODO: remove code below
|
|
1357
|
-
// // Check if a resource has a value, if not, we should not write it (or any of its chained properties)
|
|
1358
|
-
// let valid = false;
|
|
1359
|
-
// if (resource.value) {
|
|
1360
|
-
// valid = true;
|
|
1361
|
-
// }
|
|
1362
|
-
// // Resource is not valid, return undefined
|
|
1363
|
-
// if (!valid) return undefined;
|
|
1364
|
-
// // Resource is valid, write it.
|
|
1365
|
-
let resourceJson;
|
|
1366
|
-
switch (resource.type) {
|
|
1367
|
-
case ResourceTag_1.ResourceTag.image:
|
|
1368
|
-
resourceJson = {
|
|
1369
|
-
type: ResourceTag_1.ResourceTag.image,
|
|
1370
|
-
image: this.addImageResource(bitType, resource),
|
|
1371
|
-
};
|
|
1372
|
-
break;
|
|
1373
|
-
case ResourceTag_1.ResourceTag.imageLink:
|
|
1374
|
-
resourceJson = {
|
|
1375
|
-
type: ResourceTag_1.ResourceTag.imageLink,
|
|
1376
|
-
imageLink: this.addImageLinkResource(bitType, resource),
|
|
1377
|
-
};
|
|
1378
|
-
break;
|
|
1379
|
-
case ResourceTag_1.ResourceTag.audio:
|
|
1380
|
-
resourceJson = {
|
|
1381
|
-
type: ResourceTag_1.ResourceTag.audio,
|
|
1382
|
-
audio: this.addAudioResource(bitType, resource),
|
|
1383
|
-
};
|
|
1384
|
-
break;
|
|
1385
|
-
case ResourceTag_1.ResourceTag.audioEmbed:
|
|
1386
|
-
resourceJson = {
|
|
1387
|
-
type: ResourceTag_1.ResourceTag.audioEmbed,
|
|
1388
|
-
audioEmbed: this.addAudioEmbedResource(bitType, resource),
|
|
1389
|
-
};
|
|
1390
|
-
break;
|
|
1391
|
-
case ResourceTag_1.ResourceTag.audioLink:
|
|
1392
|
-
resourceJson = {
|
|
1393
|
-
type: ResourceTag_1.ResourceTag.audioLink,
|
|
1394
|
-
audioLink: this.addAudioLinkResource(bitType, resource),
|
|
1395
|
-
};
|
|
1396
|
-
break;
|
|
1397
|
-
case ResourceTag_1.ResourceTag.video:
|
|
1398
|
-
resourceJson = {
|
|
1399
|
-
type: ResourceTag_1.ResourceTag.video,
|
|
1400
|
-
video: this.addVideoResource(bitType, resource),
|
|
1401
|
-
};
|
|
1402
|
-
break;
|
|
1403
|
-
case ResourceTag_1.ResourceTag.videoEmbed:
|
|
1404
|
-
resourceJson = {
|
|
1405
|
-
type: ResourceTag_1.ResourceTag.videoEmbed,
|
|
1406
|
-
videoEmbed: this.addVideoEmbedResource(bitType, resource),
|
|
1407
|
-
};
|
|
1408
|
-
resourceJson.videoEmbed = this.addVideoLinkResource(bitType, resource);
|
|
1409
|
-
break;
|
|
1410
|
-
case ResourceTag_1.ResourceTag.videoLink:
|
|
1411
|
-
resourceJson = {
|
|
1412
|
-
type: ResourceTag_1.ResourceTag.videoLink,
|
|
1413
|
-
videoLink: this.addVideoLinkResource(bitType, resource),
|
|
1414
|
-
};
|
|
1415
|
-
break;
|
|
1416
|
-
case ResourceTag_1.ResourceTag.stillImageFilmEmbed:
|
|
1417
|
-
resourceJson = {
|
|
1418
|
-
type: ResourceTag_1.ResourceTag.stillImageFilmEmbed,
|
|
1419
|
-
stillImageFilmEmbed: this.addStillImageFilmEmbedResource(bitType, resource),
|
|
1420
|
-
};
|
|
1421
|
-
break;
|
|
1422
|
-
case ResourceTag_1.ResourceTag.stillImageFilmLink:
|
|
1423
|
-
resourceJson = {
|
|
1424
|
-
type: ResourceTag_1.ResourceTag.stillImageFilmLink,
|
|
1425
|
-
stillImageFilmLink: this.addStillImageFilmLinkResource(bitType, resource),
|
|
1426
|
-
};
|
|
1427
|
-
break;
|
|
1428
|
-
case ResourceTag_1.ResourceTag.article:
|
|
1429
|
-
resourceJson = {
|
|
1430
|
-
type: ResourceTag_1.ResourceTag.article,
|
|
1431
|
-
article: this.addArticleResource(bitType, resource),
|
|
1432
|
-
};
|
|
1433
|
-
break;
|
|
1434
|
-
case ResourceTag_1.ResourceTag.document:
|
|
1435
|
-
resourceJson = {
|
|
1436
|
-
type: ResourceTag_1.ResourceTag.document,
|
|
1437
|
-
document: this.addDocumentResource(bitType, resource),
|
|
1438
|
-
};
|
|
1439
|
-
break;
|
|
1440
|
-
case ResourceTag_1.ResourceTag.documentEmbed:
|
|
1441
|
-
resourceJson = {
|
|
1442
|
-
type: ResourceTag_1.ResourceTag.documentEmbed,
|
|
1443
|
-
documentEmbed: this.addDocumentEmbedResource(bitType, resource),
|
|
1444
|
-
};
|
|
1445
|
-
break;
|
|
1446
|
-
case ResourceTag_1.ResourceTag.documentLink:
|
|
1447
|
-
resourceJson = {
|
|
1448
|
-
type: ResourceTag_1.ResourceTag.documentLink,
|
|
1449
|
-
documentLink: this.addDocumentLinkResource(bitType, resource),
|
|
1450
|
-
};
|
|
1451
|
-
break;
|
|
1452
|
-
case ResourceTag_1.ResourceTag.documentDownload:
|
|
1453
|
-
resourceJson = {
|
|
1454
|
-
type: ResourceTag_1.ResourceTag.documentDownload,
|
|
1455
|
-
documentDownload: this.addDocumentDownloadResource(bitType, resource),
|
|
1456
|
-
};
|
|
1457
|
-
break;
|
|
1458
|
-
case ResourceTag_1.ResourceTag.appLink:
|
|
1459
|
-
resourceJson = {
|
|
1460
|
-
type: ResourceTag_1.ResourceTag.appLink,
|
|
1461
|
-
appLink: this.addAppLinkResource(bitType, resource),
|
|
1462
|
-
};
|
|
1463
|
-
break;
|
|
1464
|
-
case ResourceTag_1.ResourceTag.websiteLink:
|
|
1465
|
-
resourceJson = {
|
|
1466
|
-
type: ResourceTag_1.ResourceTag.websiteLink,
|
|
1467
|
-
websiteLink: this.addWebsiteLinkResource(bitType, resource),
|
|
1468
|
-
};
|
|
1469
|
-
break;
|
|
1470
|
-
default:
|
|
1471
|
-
}
|
|
1472
|
-
return resourceJson;
|
|
1473
|
-
}
|
|
1474
|
-
addImageResource(bitType, resource) {
|
|
1475
|
-
var _a, _b, _c;
|
|
1476
|
-
const resourceJson = {};
|
|
1477
|
-
if (StringUtils_1.StringUtils.isString(resource)) {
|
|
1478
|
-
const value = resource;
|
|
1479
|
-
resource = {
|
|
1480
|
-
type: ResourceTag_1.ResourceTag.image,
|
|
1481
|
-
typeAlias: ResourceTag_1.ResourceTag.image,
|
|
1482
|
-
value: value,
|
|
1483
|
-
format: UrlUtils_1.UrlUtils.fileExtensionFromUrl(value),
|
|
1484
|
-
provider: UrlUtils_1.UrlUtils.domainFromUrl(value),
|
|
1485
|
-
};
|
|
1486
|
-
}
|
|
1487
|
-
resource = resource; // Keep TS compiler happy
|
|
1488
|
-
if (resource.format != null)
|
|
1489
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1490
|
-
if (resource.provider != null)
|
|
1491
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1492
|
-
if (resource.value != null)
|
|
1493
|
-
resourceJson.src = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1494
|
-
if (resource.src1x != null)
|
|
1495
|
-
resourceJson.src1x = Breakscape_1.Breakscape.unbreakscape(resource.src1x);
|
|
1496
|
-
if (resource.src2x != null)
|
|
1497
|
-
resourceJson.src2x = Breakscape_1.Breakscape.unbreakscape(resource.src2x);
|
|
1498
|
-
if (resource.src3x != null)
|
|
1499
|
-
resourceJson.src3x = Breakscape_1.Breakscape.unbreakscape(resource.src3x);
|
|
1500
|
-
if (resource.src4x != null)
|
|
1501
|
-
resourceJson.src4x = Breakscape_1.Breakscape.unbreakscape(resource.src4x);
|
|
1502
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1503
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1504
|
-
resourceJson.alt = (_c = Breakscape_1.Breakscape.unbreakscape(resource.alt)) !== null && _c !== void 0 ? _c : '';
|
|
1505
|
-
resourceJson.zoomDisabled = this.getZoomDisabled(bitType, resource.zoomDisabled);
|
|
1506
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1507
|
-
return resourceJson;
|
|
1508
|
-
}
|
|
1509
|
-
addImageLinkResource(bitType, resource) {
|
|
1510
|
-
var _a, _b, _c;
|
|
1511
|
-
const resourceJson = {};
|
|
1512
|
-
if (StringUtils_1.StringUtils.isString(resource)) {
|
|
1513
|
-
const value = resource;
|
|
1514
|
-
resource = {
|
|
1515
|
-
type: ResourceTag_1.ResourceTag.imageLink,
|
|
1516
|
-
typeAlias: ResourceTag_1.ResourceTag.imageLink,
|
|
1517
|
-
value,
|
|
1518
|
-
format: UrlUtils_1.UrlUtils.fileExtensionFromUrl(value),
|
|
1519
|
-
provider: UrlUtils_1.UrlUtils.domainFromUrl(value),
|
|
1520
|
-
};
|
|
1521
|
-
}
|
|
1522
|
-
resource = resource; // Keep TS compiler happy
|
|
1523
|
-
if (resource.format != null)
|
|
1524
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1525
|
-
if (resource.provider != null)
|
|
1526
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1527
|
-
if (resource.value != null)
|
|
1528
|
-
resourceJson.url = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1529
|
-
if (resource.src1x != null)
|
|
1530
|
-
resourceJson.src1x = Breakscape_1.Breakscape.unbreakscape(resource.src1x);
|
|
1531
|
-
if (resource.src2x != null)
|
|
1532
|
-
resourceJson.src2x = Breakscape_1.Breakscape.unbreakscape(resource.src2x);
|
|
1533
|
-
if (resource.src3x != null)
|
|
1534
|
-
resourceJson.src3x = Breakscape_1.Breakscape.unbreakscape(resource.src3x);
|
|
1535
|
-
if (resource.src4x != null)
|
|
1536
|
-
resourceJson.src4x = Breakscape_1.Breakscape.unbreakscape(resource.src4x);
|
|
1537
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1538
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1539
|
-
resourceJson.alt = (_c = Breakscape_1.Breakscape.unbreakscape(resource.alt)) !== null && _c !== void 0 ? _c : '';
|
|
1540
|
-
resourceJson.zoomDisabled = this.getZoomDisabled(bitType, resource.zoomDisabled);
|
|
1541
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1542
|
-
return resourceJson;
|
|
1543
|
-
}
|
|
1544
|
-
addAudioResource(bitType, resource) {
|
|
1545
|
-
const resourceJson = {};
|
|
1546
|
-
if (resource.format != null)
|
|
1547
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1548
|
-
if (resource.provider != null)
|
|
1549
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1550
|
-
if (resource.value != null)
|
|
1551
|
-
resourceJson.src = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1552
|
-
if (resource.duration != null)
|
|
1553
|
-
resourceJson.duration = resource.duration;
|
|
1554
|
-
if (resource.mute != null)
|
|
1555
|
-
resourceJson.mute = resource.mute;
|
|
1556
|
-
if (resource.autoplay != null)
|
|
1557
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1558
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1559
|
-
return resourceJson;
|
|
1560
|
-
}
|
|
1561
|
-
addAudioEmbedResource(bitType, resource) {
|
|
1562
|
-
const resourceJson = {};
|
|
1563
|
-
if (resource.format != null)
|
|
1564
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1565
|
-
if (resource.provider != null)
|
|
1566
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1567
|
-
if (resource.value != null)
|
|
1568
|
-
resourceJson.src = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1569
|
-
if (resource.duration != null)
|
|
1570
|
-
resourceJson.duration = resource.duration;
|
|
1571
|
-
if (resource.mute != null)
|
|
1572
|
-
resourceJson.mute = resource.mute;
|
|
1573
|
-
if (resource.autoplay != null)
|
|
1574
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1575
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1576
|
-
return resourceJson;
|
|
1577
|
-
}
|
|
1578
|
-
addAudioLinkResource(bitType, resource) {
|
|
1579
|
-
const resourceJson = {};
|
|
1580
|
-
if (resource.format != null)
|
|
1581
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1582
|
-
if (resource.provider != null)
|
|
1583
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1584
|
-
if (resource.value != null)
|
|
1585
|
-
resourceJson.url = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1586
|
-
if (resource.duration != null)
|
|
1587
|
-
resourceJson.duration = resource.duration;
|
|
1588
|
-
if (resource.mute != null)
|
|
1589
|
-
resourceJson.mute = resource.mute;
|
|
1590
|
-
if (resource.autoplay != null)
|
|
1591
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1592
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson, true);
|
|
1593
|
-
return resourceJson;
|
|
1594
|
-
}
|
|
1595
|
-
addVideoResource(bitType, resource) {
|
|
1596
|
-
var _a, _b;
|
|
1597
|
-
const resourceJson = {};
|
|
1598
|
-
if (resource.format != null)
|
|
1599
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1600
|
-
if (resource.provider != null)
|
|
1601
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1602
|
-
if (resource.value != null)
|
|
1603
|
-
resourceJson.src = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1604
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1605
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1606
|
-
if (resource.duration != null)
|
|
1607
|
-
resourceJson.duration = resource.duration;
|
|
1608
|
-
if (resource.mute != null)
|
|
1609
|
-
resourceJson.mute = resource.mute;
|
|
1610
|
-
if (resource.autoplay != null)
|
|
1611
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1612
|
-
if (resource.allowSubtitles != null)
|
|
1613
|
-
resourceJson.allowSubtitles = resource.allowSubtitles;
|
|
1614
|
-
if (resource.showSubtitles != null)
|
|
1615
|
-
resourceJson.showSubtitles = resource.showSubtitles;
|
|
1616
|
-
if (resource.alt != null)
|
|
1617
|
-
resourceJson.alt = Breakscape_1.Breakscape.unbreakscape(resource.alt);
|
|
1618
|
-
if (resource.posterImage != null)
|
|
1619
|
-
resourceJson.posterImage = this.addImageResource(bitType, resource.posterImage);
|
|
1620
|
-
if (resource.thumbnails != null && resource.thumbnails.length > 0) {
|
|
1621
|
-
resourceJson.thumbnails = [];
|
|
1622
|
-
for (const thumbnail of resource.thumbnails) {
|
|
1623
|
-
resourceJson.thumbnails.push(this.addImageResource(bitType, thumbnail));
|
|
1624
|
-
}
|
|
1625
|
-
}
|
|
1626
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1627
|
-
return resourceJson;
|
|
1628
|
-
}
|
|
1629
|
-
addVideoEmbedResource(bitType, resource) {
|
|
1630
|
-
var _a, _b;
|
|
1631
|
-
const resourceJson = {};
|
|
1632
|
-
if (resource.format != null)
|
|
1633
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1634
|
-
if (resource.provider != null)
|
|
1635
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1636
|
-
if (resource.value != null)
|
|
1637
|
-
resourceJson.src = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1638
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1639
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1640
|
-
if (resource.duration != null)
|
|
1641
|
-
resourceJson.duration = resource.duration;
|
|
1642
|
-
if (resource.mute != null)
|
|
1643
|
-
resourceJson.mute = resource.mute;
|
|
1644
|
-
if (resource.autoplay != null)
|
|
1645
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1646
|
-
if (resource.allowSubtitles != null)
|
|
1647
|
-
resourceJson.allowSubtitles = resource.allowSubtitles;
|
|
1648
|
-
if (resource.showSubtitles != null)
|
|
1649
|
-
resourceJson.showSubtitles = resource.showSubtitles;
|
|
1650
|
-
if (resource.alt != null)
|
|
1651
|
-
resourceJson.alt = Breakscape_1.Breakscape.unbreakscape(resource.alt);
|
|
1652
|
-
if (resource.posterImage != null)
|
|
1653
|
-
resourceJson.posterImage = this.addImageResource(bitType, resource.posterImage);
|
|
1654
|
-
if (resource.thumbnails != null && resource.thumbnails.length > 0) {
|
|
1655
|
-
resourceJson.thumbnails = [];
|
|
1656
|
-
for (const thumbnail of resource.thumbnails) {
|
|
1657
|
-
resourceJson.thumbnails.push(this.addImageResource(bitType, thumbnail));
|
|
1658
|
-
}
|
|
1659
|
-
}
|
|
1660
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1661
|
-
return resourceJson;
|
|
1662
|
-
}
|
|
1663
|
-
addVideoLinkResource(bitType, resource) {
|
|
719
|
+
/**
|
|
720
|
+
* Default handler for properties.
|
|
721
|
+
*
|
|
722
|
+
* @param node the node
|
|
723
|
+
* @param route the route to the node
|
|
724
|
+
* @param parentNodeTypes the parent node types for which to handle the node
|
|
725
|
+
* @returns
|
|
726
|
+
*/
|
|
727
|
+
standardHandler(node, route, parentNodeTypes, options) {
|
|
1664
728
|
var _a, _b;
|
|
1665
|
-
|
|
1666
|
-
if (
|
|
1667
|
-
|
|
1668
|
-
|
|
1669
|
-
|
|
1670
|
-
|
|
1671
|
-
resourceJson.url = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1672
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1673
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1674
|
-
if (resource.duration != null)
|
|
1675
|
-
resourceJson.duration = resource.duration;
|
|
1676
|
-
if (resource.mute != null)
|
|
1677
|
-
resourceJson.mute = resource.mute;
|
|
1678
|
-
if (resource.autoplay != null)
|
|
1679
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1680
|
-
if (resource.allowSubtitles != null)
|
|
1681
|
-
resourceJson.allowSubtitles = resource.allowSubtitles;
|
|
1682
|
-
if (resource.showSubtitles != null)
|
|
1683
|
-
resourceJson.showSubtitles = resource.showSubtitles;
|
|
1684
|
-
if (resource.alt != null)
|
|
1685
|
-
resourceJson.alt = Breakscape_1.Breakscape.unbreakscape(resource.alt);
|
|
1686
|
-
if (resource.posterImage != null)
|
|
1687
|
-
resourceJson.posterImage = this.addImageResource(bitType, resource.posterImage);
|
|
1688
|
-
if (resource.thumbnails != null && resource.thumbnails.length > 0) {
|
|
1689
|
-
resourceJson.thumbnails = [];
|
|
1690
|
-
for (const thumbnail of resource.thumbnails) {
|
|
1691
|
-
resourceJson.thumbnails.push(this.addImageResource(bitType, thumbnail));
|
|
1692
|
-
}
|
|
729
|
+
// Ignore items not at the nodeType level
|
|
730
|
+
if (parentNodeTypes) {
|
|
731
|
+
const nodeTypeArray = Array.isArray(parentNodeTypes) ? parentNodeTypes : [parentNodeTypes];
|
|
732
|
+
const parent = this.getParentNode(route);
|
|
733
|
+
if (!(parent === null || parent === void 0 ? void 0 : parent.key) || !nodeTypeArray.includes(parent === null || parent === void 0 ? void 0 : parent.key))
|
|
734
|
+
return true;
|
|
1693
735
|
}
|
|
1694
|
-
|
|
1695
|
-
|
|
736
|
+
// Add the property
|
|
737
|
+
this.addProperty(this.bitJson, (_a = options.keyOverride) !== null && _a !== void 0 ? _a : node.key, (_b = options.valueOverride) !== null && _b !== void 0 ? _b : node.value, options);
|
|
738
|
+
// Stop traversal of this branch
|
|
739
|
+
return false;
|
|
1696
740
|
}
|
|
1697
|
-
|
|
1698
|
-
|
|
1699
|
-
|
|
1700
|
-
if (
|
|
1701
|
-
|
|
1702
|
-
|
|
1703
|
-
|
|
1704
|
-
|
|
1705
|
-
|
|
1706
|
-
|
|
1707
|
-
|
|
1708
|
-
if (resource.duration != null)
|
|
1709
|
-
resourceJson.duration = resource.duration;
|
|
1710
|
-
if (resource.mute != null)
|
|
1711
|
-
resourceJson.mute = resource.mute;
|
|
1712
|
-
if (resource.autoplay != null)
|
|
1713
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1714
|
-
if (resource.allowSubtitles != null)
|
|
1715
|
-
resourceJson.allowSubtitles = resource.allowSubtitles;
|
|
1716
|
-
if (resource.showSubtitles != null)
|
|
1717
|
-
resourceJson.showSubtitles = resource.showSubtitles;
|
|
1718
|
-
if (resource.alt != null)
|
|
1719
|
-
resourceJson.alt = Breakscape_1.Breakscape.unbreakscape(resource.alt);
|
|
1720
|
-
if (resource.posterImage != null)
|
|
1721
|
-
resourceJson.posterImage = this.addImageResource(bitType, resource.posterImage);
|
|
1722
|
-
if (resource.thumbnails != null && resource.thumbnails.length > 0) {
|
|
1723
|
-
resourceJson.thumbnails = [];
|
|
1724
|
-
for (const thumbnail of resource.thumbnails) {
|
|
1725
|
-
resourceJson.thumbnails.push(this.addImageResource(bitType, thumbnail));
|
|
741
|
+
addProperty(
|
|
742
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
743
|
+
target, name, values, options) {
|
|
744
|
+
if (values !== undefined) {
|
|
745
|
+
let finalValue;
|
|
746
|
+
if (!Array.isArray(values))
|
|
747
|
+
values = [values];
|
|
748
|
+
const valuesArr = values;
|
|
749
|
+
// if (valuesArr.length > 0) {
|
|
750
|
+
if (!options.array && valuesArr.length >= 1) {
|
|
751
|
+
finalValue = valuesArr[valuesArr.length - 1];
|
|
1726
752
|
}
|
|
1727
|
-
|
|
1728
|
-
|
|
1729
|
-
return resourceJson;
|
|
1730
|
-
}
|
|
1731
|
-
addStillImageFilmLinkResource(bitType, resource) {
|
|
1732
|
-
var _a, _b;
|
|
1733
|
-
const resourceJson = {};
|
|
1734
|
-
if (resource.format != null)
|
|
1735
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1736
|
-
if (resource.provider != null)
|
|
1737
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1738
|
-
if (resource.value != null)
|
|
1739
|
-
resourceJson.url = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1740
|
-
resourceJson.width = (_a = resource.width) !== null && _a !== void 0 ? _a : null;
|
|
1741
|
-
resourceJson.height = (_b = resource.height) !== null && _b !== void 0 ? _b : null;
|
|
1742
|
-
if (resource.duration != null)
|
|
1743
|
-
resourceJson.duration = resource.duration;
|
|
1744
|
-
if (resource.mute != null)
|
|
1745
|
-
resourceJson.mute = resource.mute;
|
|
1746
|
-
if (resource.autoplay != null)
|
|
1747
|
-
resourceJson.autoplay = resource.autoplay;
|
|
1748
|
-
if (resource.allowSubtitles != null)
|
|
1749
|
-
resourceJson.allowSubtitles = resource.allowSubtitles;
|
|
1750
|
-
if (resource.showSubtitles != null)
|
|
1751
|
-
resourceJson.showSubtitles = resource.showSubtitles;
|
|
1752
|
-
if (resource.alt != null)
|
|
1753
|
-
resourceJson.alt = Breakscape_1.Breakscape.unbreakscape(resource.alt);
|
|
1754
|
-
if (resource.posterImage != null)
|
|
1755
|
-
resourceJson.posterImage = this.addImageResource(bitType, resource.posterImage);
|
|
1756
|
-
if (resource.thumbnails != null && resource.thumbnails.length > 0) {
|
|
1757
|
-
resourceJson.thumbnails = [];
|
|
1758
|
-
for (const thumbnail of resource.thumbnails) {
|
|
1759
|
-
resourceJson.thumbnails.push(this.addImageResource(bitType, thumbnail));
|
|
753
|
+
else {
|
|
754
|
+
finalValue = valuesArr;
|
|
1760
755
|
}
|
|
1761
|
-
|
|
1762
|
-
|
|
1763
|
-
|
|
1764
|
-
}
|
|
1765
|
-
addArticleResource(bitType, resource) {
|
|
1766
|
-
const resourceJson = {};
|
|
1767
|
-
if (resource.format != null)
|
|
1768
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1769
|
-
if (resource.provider != null)
|
|
1770
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1771
|
-
if (resource.value != null)
|
|
1772
|
-
resourceJson.body = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1773
|
-
// if (resource.href != null) resourceJson.href = BreakscapeUtils.unbreakscape(resource.href); // It is never used (and doesn't exist in the AST model)
|
|
1774
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1775
|
-
return resourceJson;
|
|
1776
|
-
}
|
|
1777
|
-
addDocumentResource(bitType, resource) {
|
|
1778
|
-
const resourceJson = {};
|
|
1779
|
-
if (resource.format != null)
|
|
1780
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1781
|
-
if (resource.provider != null)
|
|
1782
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1783
|
-
if (resource.value != null)
|
|
1784
|
-
resourceJson.url = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1785
|
-
// if (resource.href != null) resourceJson.href = BreakscapeUtils.unbreakscape(resource.href); // It is never used (and doesn't exist in the AST model)
|
|
1786
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1787
|
-
return resourceJson;
|
|
1788
|
-
}
|
|
1789
|
-
addDocumentEmbedResource(bitType, resource) {
|
|
1790
|
-
const resourceJson = {};
|
|
1791
|
-
if (resource.format != null)
|
|
1792
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1793
|
-
if (resource.provider != null)
|
|
1794
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1795
|
-
if (resource.value != null)
|
|
1796
|
-
resourceJson.url = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1797
|
-
// if (resource.href != null) resourceJson.href = BreakscapeUtils.unbreakscape(resource.href); // It is never used (and doesn't exist in the AST model)
|
|
1798
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1799
|
-
return resourceJson;
|
|
1800
|
-
}
|
|
1801
|
-
addDocumentLinkResource(bitType, resource) {
|
|
1802
|
-
const resourceJson = {};
|
|
1803
|
-
if (resource.format != null)
|
|
1804
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1805
|
-
if (resource.provider != null)
|
|
1806
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1807
|
-
if (resource.value != null)
|
|
1808
|
-
resourceJson.url = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1809
|
-
// if (resource.href != null) resourceJson.href = BreakscapeUtils.unbreakscape(resource.href); // It is never used (and doesn't exist in the AST model)
|
|
1810
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1811
|
-
return resourceJson;
|
|
1812
|
-
}
|
|
1813
|
-
addDocumentDownloadResource(bitType, resource) {
|
|
1814
|
-
const resourceJson = {};
|
|
1815
|
-
if (resource.format != null)
|
|
1816
|
-
resourceJson.format = Breakscape_1.Breakscape.unbreakscape(resource.format);
|
|
1817
|
-
if (resource.provider != null)
|
|
1818
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1819
|
-
if (resource.value != null)
|
|
1820
|
-
resourceJson.url = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1821
|
-
// if (resource.href != null) resourceJson.href = resource.href; // It is never used (and doesn't exist in the AST model)
|
|
1822
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1823
|
-
return resourceJson;
|
|
1824
|
-
}
|
|
1825
|
-
addAppLinkResource(bitType, resource) {
|
|
1826
|
-
const resourceJson = {};
|
|
1827
|
-
// if (resource.format != null) resourceJson.format = BreakscapeUtils.unbreakscape(resource.format);
|
|
1828
|
-
if (resource.value != null)
|
|
1829
|
-
resourceJson.url = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1830
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1831
|
-
return resourceJson;
|
|
1832
|
-
}
|
|
1833
|
-
addWebsiteLinkResource(bitType, resource) {
|
|
1834
|
-
const resourceJson = {};
|
|
1835
|
-
// if (resource.format != null) resourceJson.format = BreakscapeUtils.unbreakscape(resource.format);
|
|
1836
|
-
if (resource.value != null)
|
|
1837
|
-
resourceJson.url = Breakscape_1.Breakscape.unbreakscape(resource.value);
|
|
1838
|
-
if (resource.siteName != null)
|
|
1839
|
-
resourceJson.siteName = Breakscape_1.Breakscape.unbreakscape(resource.siteName);
|
|
1840
|
-
this.addGenericResourceProperties(bitType, resource, resourceJson);
|
|
1841
|
-
return resourceJson;
|
|
1842
|
-
}
|
|
1843
|
-
addGenericResourceProperties(_bitType, resource, resourceJson, noDefaults) {
|
|
1844
|
-
var _a, _b, _c, _d, _e, _f, _g, _h, _j, _k;
|
|
1845
|
-
if (noDefaults) {
|
|
1846
|
-
if (resource.license != null)
|
|
1847
|
-
resourceJson.license = (_a = Breakscape_1.Breakscape.unbreakscape(resource.license)) !== null && _a !== void 0 ? _a : '';
|
|
1848
|
-
if (resource.copyright != null)
|
|
1849
|
-
resourceJson.copyright = (_b = Breakscape_1.Breakscape.unbreakscape(resource.copyright)) !== null && _b !== void 0 ? _b : '';
|
|
1850
|
-
if (resource.provider != null)
|
|
1851
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1852
|
-
if (resource.showInIndex != null)
|
|
1853
|
-
resourceJson.showInIndex = (_c = resource.showInIndex) !== null && _c !== void 0 ? _c : false;
|
|
1854
|
-
if (resource.caption != null) {
|
|
1855
|
-
resourceJson.caption = this.convertBreakscapedStringToJsonText((_d = resource.caption) !== null && _d !== void 0 ? _d : '', TextFormat_1.TextFormat.bitmarkMinusMinus);
|
|
756
|
+
// }
|
|
757
|
+
if (options.allowNull || finalValue != null) {
|
|
758
|
+
target[name] = finalValue;
|
|
1856
759
|
}
|
|
1857
|
-
if (resource.search != null)
|
|
1858
|
-
resourceJson.search = (_e = Breakscape_1.Breakscape.unbreakscape(resource.search)) !== null && _e !== void 0 ? _e : '';
|
|
1859
760
|
}
|
|
1860
|
-
else {
|
|
1861
|
-
resourceJson.license = (_f = Breakscape_1.Breakscape.unbreakscape(resource.license)) !== null && _f !== void 0 ? _f : '';
|
|
1862
|
-
resourceJson.copyright = (_g = Breakscape_1.Breakscape.unbreakscape(resource.copyright)) !== null && _g !== void 0 ? _g : '';
|
|
1863
|
-
if (resource.provider != null)
|
|
1864
|
-
resourceJson.provider = Breakscape_1.Breakscape.unbreakscape(resource.provider);
|
|
1865
|
-
resourceJson.showInIndex = (_h = resource.showInIndex) !== null && _h !== void 0 ? _h : false;
|
|
1866
|
-
resourceJson.caption = this.convertBreakscapedStringToJsonText((_j = resource.caption) !== null && _j !== void 0 ? _j : Breakscape_1.Breakscape.EMPTY_STRING, TextFormat_1.TextFormat.bitmarkMinusMinus);
|
|
1867
|
-
if (resource.search != null)
|
|
1868
|
-
resourceJson.search = (_k = Breakscape_1.Breakscape.unbreakscape(resource.search)) !== null && _k !== void 0 ? _k : '';
|
|
1869
|
-
}
|
|
1870
|
-
return resourceJson;
|
|
1871
|
-
}
|
|
1872
|
-
toItemLeadHintInstruction(item) {
|
|
1873
|
-
var _a, _b, _c, _d, _e, _f;
|
|
1874
|
-
return {
|
|
1875
|
-
item: this.convertBreakscapedStringToJsonText((_b = (_a = item.itemLead) === null || _a === void 0 ? void 0 : _a.item) !== null && _b !== void 0 ? _b : Breakscape_1.Breakscape.EMPTY_STRING, TextFormat_1.TextFormat.bitmarkMinusMinus),
|
|
1876
|
-
lead: this.convertBreakscapedStringToJsonText((_d = (_c = item.itemLead) === null || _c === void 0 ? void 0 : _c.lead) !== null && _d !== void 0 ? _d : Breakscape_1.Breakscape.EMPTY_STRING, TextFormat_1.TextFormat.bitmarkMinusMinus),
|
|
1877
|
-
hint: this.convertBreakscapedStringToJsonText((_e = item.hint) !== null && _e !== void 0 ? _e : Breakscape_1.Breakscape.EMPTY_STRING, TextFormat_1.TextFormat.bitmarkMinusMinus),
|
|
1878
|
-
instruction: this.convertBreakscapedStringToJsonText((_f = item.instruction) !== null && _f !== void 0 ? _f : Breakscape_1.Breakscape.EMPTY_STRING, TextFormat_1.TextFormat.bitmarkMinusMinus),
|
|
1879
|
-
};
|
|
1880
761
|
}
|
|
1881
762
|
toExample(node, options) {
|
|
1882
|
-
const { isExample, example,
|
|
763
|
+
const { isExample, example, __isDefaultExample } = node;
|
|
1883
764
|
const { defaultExample, isBoolean } = options;
|
|
1884
765
|
if (!isExample) {
|
|
1885
766
|
return {
|
|
@@ -1888,7 +769,7 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
1888
769
|
};
|
|
1889
770
|
}
|
|
1890
771
|
let exampleValue;
|
|
1891
|
-
if (
|
|
772
|
+
if (__isDefaultExample) {
|
|
1892
773
|
exampleValue = isBoolean
|
|
1893
774
|
? BooleanUtils_1.BooleanUtils.toBoolean(defaultExample)
|
|
1894
775
|
: this.convertBreakscapedStringToJsonText(defaultExample, TextFormat_1.TextFormat.bitmarkMinusMinus);
|
|
@@ -1903,53 +784,6 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
1903
784
|
example: exampleValue,
|
|
1904
785
|
};
|
|
1905
786
|
}
|
|
1906
|
-
addProperty(
|
|
1907
|
-
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
1908
|
-
target, name, values, singleWithoutArray) {
|
|
1909
|
-
if (values !== undefined) {
|
|
1910
|
-
let finalValue;
|
|
1911
|
-
if (!Array.isArray(values))
|
|
1912
|
-
values = [values];
|
|
1913
|
-
if (Array.isArray(values) && values.length > 0) {
|
|
1914
|
-
// Unbreakscape values that are strings
|
|
1915
|
-
values = Breakscape_1.Breakscape.unbreakscape(values);
|
|
1916
|
-
if (Array.isArray(values) && singleWithoutArray && values.length >= 1) {
|
|
1917
|
-
finalValue = values[values.length - 1];
|
|
1918
|
-
}
|
|
1919
|
-
else {
|
|
1920
|
-
finalValue = values;
|
|
1921
|
-
}
|
|
1922
|
-
}
|
|
1923
|
-
// if (finalValue != null) {
|
|
1924
|
-
target[name] = finalValue;
|
|
1925
|
-
// }
|
|
1926
|
-
}
|
|
1927
|
-
}
|
|
1928
|
-
//
|
|
1929
|
-
// Helper functions
|
|
1930
|
-
//
|
|
1931
|
-
/**
|
|
1932
|
-
* Get the value for the zoomDisabled property, setting the appropriate default value if no value is set.
|
|
1933
|
-
*
|
|
1934
|
-
* @param bitType
|
|
1935
|
-
* @param zoomDisabled
|
|
1936
|
-
* @returns
|
|
1937
|
-
*/
|
|
1938
|
-
getZoomDisabled(bitType, zoomDisabled) {
|
|
1939
|
-
if (zoomDisabled != null)
|
|
1940
|
-
return zoomDisabled;
|
|
1941
|
-
// The default value in the JSON is hardcoded, because there is currently no good way to set a different
|
|
1942
|
-
// default per bit in the BitConfig.
|
|
1943
|
-
if (Config_1.Config.isOfBitType(bitType, [
|
|
1944
|
-
BitType_1.BitType.imageSeparator,
|
|
1945
|
-
BitType_1.BitType.pageBanner,
|
|
1946
|
-
BitType_1.BitType.imagesLogoGrave,
|
|
1947
|
-
BitType_1.BitType.prototypeImages,
|
|
1948
|
-
])) {
|
|
1949
|
-
return true;
|
|
1950
|
-
}
|
|
1951
|
-
return false;
|
|
1952
|
-
}
|
|
1953
787
|
/**
|
|
1954
788
|
* Get the bit type from any node
|
|
1955
789
|
*
|
|
@@ -2039,13 +873,11 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
2039
873
|
const isBitmarkText = format === TextFormat_1.TextFormat.bitmarkMinusMinus || format === TextFormat_1.TextFormat.bitmarkPlusPlus;
|
|
2040
874
|
if (!isBitmarkText) {
|
|
2041
875
|
// Not bitmark text, so plain text, so unbreakscape only the start of bit tags
|
|
2042
|
-
return
|
|
2043
|
-
bitTagOnly: true,
|
|
2044
|
-
}) || Breakscape_1.Breakscape.EMPTY_STRING);
|
|
876
|
+
return text || '';
|
|
2045
877
|
}
|
|
2046
878
|
const asPlainText = this.options.textAsPlainText;
|
|
2047
879
|
if (asPlainText) {
|
|
2048
|
-
return
|
|
880
|
+
return text || '';
|
|
2049
881
|
}
|
|
2050
882
|
// Use the text parser to parse the text
|
|
2051
883
|
const textAst = this.textParser.toAst(text, {
|
|
@@ -2105,40 +937,22 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
2105
937
|
return `${text !== null && text !== void 0 ? text : ''}${'\n'.repeat(extraBreaks)}${textPlain !== null && textPlain !== void 0 ? textPlain : ''}`;
|
|
2106
938
|
}
|
|
2107
939
|
/**
|
|
2108
|
-
*
|
|
940
|
+
* Check if an object is bitmark text
|
|
941
|
+
* The check looks for a special tag on the array (__tag: 'text')
|
|
2109
942
|
*
|
|
2110
|
-
* @param
|
|
2111
|
-
* @
|
|
2112
|
-
* @param index the index of the placeholder to replace
|
|
943
|
+
* @param obj object that might be bitmark text
|
|
944
|
+
* @returns
|
|
2113
945
|
*/
|
|
2114
|
-
|
|
2115
|
-
|
|
2116
|
-
const walkRecursive = (node, parent, parentKey) => {
|
|
2117
|
-
if (Array.isArray(node)) {
|
|
2118
|
-
// Walk the array of nodes
|
|
2119
|
-
for (let i = 0; i < node.length; i++) {
|
|
2120
|
-
const child = node[i];
|
|
2121
|
-
const done = walkRecursive(child, node, i);
|
|
2122
|
-
if (done)
|
|
2123
|
-
return true;
|
|
2124
|
-
}
|
|
2125
|
-
}
|
|
2126
|
-
else {
|
|
2127
|
-
if (node.type === 'bit' && node.index === index) {
|
|
2128
|
-
// Found the placeholder, replace it with the body bit
|
|
2129
|
-
parent[parentKey] = bodyBitJson;
|
|
2130
|
-
return true;
|
|
2131
|
-
}
|
|
2132
|
-
if (node.content) {
|
|
2133
|
-
// Walk the child content
|
|
2134
|
-
const done = walkRecursive(node.content, node, 'content');
|
|
2135
|
-
if (done)
|
|
2136
|
-
return true;
|
|
2137
|
-
}
|
|
2138
|
-
}
|
|
946
|
+
isBitmarkText(obj) {
|
|
947
|
+
if (obj == null)
|
|
2139
948
|
return false;
|
|
2140
|
-
|
|
2141
|
-
|
|
949
|
+
if (!Array.isArray(obj))
|
|
950
|
+
return false;
|
|
951
|
+
// Check for the hidden text tag
|
|
952
|
+
// eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
953
|
+
if (obj.__tag === 'text')
|
|
954
|
+
return true;
|
|
955
|
+
return false;
|
|
2142
956
|
}
|
|
2143
957
|
//
|
|
2144
958
|
// WRITE FUNCTIONS
|
|
@@ -2173,211 +987,23 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
2173
987
|
originalType: bit.isCommented ? bit.bitType : undefined,
|
|
2174
988
|
format: bit.textFormat,
|
|
2175
989
|
bitLevel: bit.bitLevel,
|
|
2176
|
-
// Properties
|
|
2177
|
-
id: undefined,
|
|
2178
|
-
internalComment: undefined,
|
|
2179
|
-
externalId: undefined,
|
|
2180
|
-
spaceId: undefined,
|
|
2181
|
-
padletId: undefined,
|
|
2182
|
-
jupyterId: undefined,
|
|
2183
|
-
jupyterExecutionCount: undefined,
|
|
2184
|
-
isPublic: undefined,
|
|
2185
|
-
aiGenerated: undefined,
|
|
2186
|
-
machineTranslated: undefined,
|
|
2187
|
-
analyticsTag: undefined,
|
|
2188
|
-
feedbackEngine: undefined,
|
|
2189
|
-
feedbackType: undefined,
|
|
2190
|
-
disableFeedback: undefined,
|
|
2191
|
-
releaseVersion: undefined,
|
|
2192
|
-
releaseKind: undefined,
|
|
2193
|
-
releaseDate: undefined,
|
|
2194
|
-
book: undefined,
|
|
2195
|
-
ageRange: undefined,
|
|
2196
|
-
lang: undefined,
|
|
2197
|
-
language: undefined,
|
|
2198
|
-
publisher: undefined,
|
|
2199
|
-
publisherName: undefined,
|
|
2200
|
-
theme: undefined,
|
|
2201
|
-
computerLanguage: undefined,
|
|
2202
|
-
target: undefined,
|
|
2203
|
-
slug: undefined,
|
|
2204
|
-
tag: undefined,
|
|
2205
|
-
reductionTag: undefined,
|
|
2206
|
-
bubbleTag: undefined,
|
|
2207
|
-
levelCEFRp: undefined,
|
|
2208
|
-
levelCEFR: undefined,
|
|
2209
|
-
levelILR: undefined,
|
|
2210
|
-
levelACTFL: undefined,
|
|
2211
|
-
icon: undefined,
|
|
2212
|
-
iconTag: undefined,
|
|
2213
|
-
colorTag: undefined,
|
|
2214
|
-
flashcardSet: undefined,
|
|
2215
|
-
subtype: undefined,
|
|
2216
|
-
bookAlias: undefined,
|
|
2217
|
-
coverImage: undefined,
|
|
2218
|
-
coverColor: undefined,
|
|
2219
|
-
publications: undefined,
|
|
2220
|
-
author: undefined,
|
|
2221
|
-
subject: undefined,
|
|
2222
|
-
date: undefined,
|
|
2223
|
-
dateEnd: undefined,
|
|
2224
|
-
location: undefined,
|
|
2225
|
-
kind: undefined,
|
|
2226
|
-
hasMarkAsDone: undefined,
|
|
2227
|
-
processHandIn: undefined,
|
|
2228
|
-
action: undefined,
|
|
2229
|
-
showInIndex: undefined,
|
|
2230
|
-
blockId: undefined,
|
|
2231
|
-
pageNo: undefined,
|
|
2232
|
-
x: undefined,
|
|
2233
|
-
y: undefined,
|
|
2234
|
-
width: undefined,
|
|
2235
|
-
height: undefined,
|
|
2236
|
-
index: undefined,
|
|
2237
|
-
classification: undefined,
|
|
2238
|
-
availableClassifications: undefined,
|
|
2239
|
-
allowedBit: undefined,
|
|
2240
|
-
tableFixedHeader: undefined,
|
|
2241
|
-
tableSearch: undefined,
|
|
2242
|
-
tableSort: undefined,
|
|
2243
|
-
tablePagination: undefined,
|
|
2244
|
-
tablePaginationLimit: undefined,
|
|
2245
|
-
tableHeight: undefined,
|
|
2246
|
-
tableWhitespaceNoWrap: undefined,
|
|
2247
|
-
tableAutoWidth: undefined,
|
|
2248
|
-
tableResizableColumns: undefined,
|
|
2249
|
-
quizCountItems: undefined,
|
|
2250
|
-
quizStrikethroughSolutions: undefined,
|
|
2251
|
-
codeLineNumbers: undefined,
|
|
2252
|
-
codeMinimap: undefined,
|
|
2253
|
-
stripePricingTableId: undefined,
|
|
2254
|
-
stripePublishableKey: undefined,
|
|
2255
|
-
thumbImage: undefined,
|
|
2256
|
-
scormSource: undefined,
|
|
2257
|
-
posterImage: undefined,
|
|
2258
|
-
focusX: undefined,
|
|
2259
|
-
focusY: undefined,
|
|
2260
|
-
pointerLeft: undefined,
|
|
2261
|
-
pointerTop: undefined,
|
|
2262
|
-
listItemIndent: undefined,
|
|
2263
|
-
backgroundWallpaper: undefined,
|
|
2264
|
-
hasBookNavigation: undefined,
|
|
2265
|
-
duration: undefined,
|
|
2266
|
-
deeplink: undefined,
|
|
2267
|
-
externalLink: undefined,
|
|
2268
|
-
externalLinkText: undefined,
|
|
2269
|
-
videoCallLink: undefined,
|
|
2270
|
-
vendorUrl: undefined,
|
|
2271
|
-
search: undefined,
|
|
2272
|
-
list: undefined,
|
|
2273
|
-
textReference: undefined,
|
|
2274
|
-
isTracked: undefined,
|
|
2275
|
-
isInfoOnly: undefined,
|
|
2276
|
-
imageFirst: undefined,
|
|
2277
|
-
activityType: undefined,
|
|
2278
|
-
labelTrue: undefined,
|
|
2279
|
-
labelFalse: undefined,
|
|
2280
|
-
content2Buy: undefined,
|
|
2281
|
-
mailingList: undefined,
|
|
2282
|
-
buttonCaption: undefined,
|
|
2283
|
-
callToActionUrl: undefined,
|
|
2284
|
-
caption: undefined,
|
|
2285
|
-
quotedPerson: undefined,
|
|
2286
|
-
reasonableNumOfChars: undefined,
|
|
2287
|
-
resolved: undefined,
|
|
2288
|
-
resolvedDate: undefined,
|
|
2289
|
-
resolvedBy: undefined,
|
|
2290
|
-
maxCreatedBits: undefined,
|
|
2291
|
-
maxDisplayLevel: undefined,
|
|
2292
|
-
page: undefined,
|
|
2293
|
-
productId: undefined,
|
|
2294
|
-
product: undefined,
|
|
2295
|
-
productVideo: undefined,
|
|
2296
|
-
productFolder: undefined,
|
|
2297
|
-
technicalTerm: undefined,
|
|
2298
|
-
servings: undefined,
|
|
2299
|
-
ratingLevelStart: undefined,
|
|
2300
|
-
ratingLevelEnd: undefined,
|
|
2301
|
-
ratingLevelSelected: undefined,
|
|
2302
|
-
// Book data
|
|
2303
|
-
title: undefined,
|
|
2304
|
-
subtitle: undefined,
|
|
2305
|
-
level: undefined,
|
|
2306
|
-
toc: undefined,
|
|
2307
|
-
progress: undefined,
|
|
2308
|
-
anchor: undefined,
|
|
2309
|
-
reference: undefined,
|
|
2310
|
-
referenceEnd: undefined,
|
|
2311
|
-
// Item, Lead, Hint, Instruction
|
|
2312
|
-
item: undefined,
|
|
2313
|
-
lead: undefined,
|
|
2314
|
-
pageNumber: undefined,
|
|
2315
|
-
marginNumber: undefined,
|
|
2316
|
-
hint: undefined,
|
|
2317
|
-
instruction: undefined,
|
|
2318
|
-
// Example
|
|
2319
|
-
isExample: undefined,
|
|
2320
|
-
example: undefined,
|
|
2321
|
-
// Person .conversion-xxx, page-person, etc
|
|
2322
|
-
person: undefined,
|
|
2323
|
-
// Marks (config)
|
|
2324
|
-
marks: undefined,
|
|
2325
|
-
// Extra Properties
|
|
2326
|
-
extraProperties: undefined,
|
|
2327
|
-
// Body
|
|
2328
|
-
body: undefined,
|
|
2329
|
-
// Resource
|
|
2330
|
-
imagePlaceholder: undefined,
|
|
2331
|
-
resource: undefined,
|
|
2332
|
-
logos: undefined,
|
|
2333
|
-
images: undefined,
|
|
2334
|
-
// Children
|
|
2335
|
-
statement: undefined,
|
|
2336
|
-
isCorrect: undefined,
|
|
2337
|
-
sampleSolution: undefined,
|
|
2338
|
-
additionalSolutions: undefined,
|
|
2339
|
-
partialAnswer: undefined,
|
|
2340
|
-
elements: undefined,
|
|
2341
|
-
cards: undefined,
|
|
2342
|
-
definitions: undefined,
|
|
2343
|
-
statements: undefined,
|
|
2344
|
-
responses: undefined,
|
|
2345
|
-
quizzes: undefined,
|
|
2346
|
-
heading: undefined,
|
|
2347
|
-
pairs: undefined,
|
|
2348
|
-
matrix: undefined,
|
|
2349
|
-
choices: undefined,
|
|
2350
|
-
questions: undefined,
|
|
2351
|
-
captionDefinitionList: undefined,
|
|
2352
|
-
listItems: undefined,
|
|
2353
|
-
sections: undefined,
|
|
2354
|
-
// Placeholders
|
|
2355
|
-
placeholders: undefined,
|
|
2356
|
-
// Footer
|
|
2357
|
-
footer: undefined,
|
|
2358
990
|
};
|
|
2359
|
-
// Add the resource template if there should be a resource (indicated by resourceType) but there is none defined.
|
|
2360
|
-
// if (bit.resourceType && !bitJson.resource) {
|
|
2361
|
-
// const jsonKey = ResourceTag.keyFromValue(bit.resourceType);
|
|
2362
|
-
// bitJson.resource = {
|
|
2363
|
-
// type: bit.resourceType,
|
|
2364
|
-
// } as ResourceJson;
|
|
2365
|
-
// // eslint-disable-next-line @typescript-eslint/no-explicit-any
|
|
2366
|
-
// if (jsonKey) (bitJson.resource as any)[jsonKey] = {};
|
|
2367
|
-
// }
|
|
2368
991
|
return bitJson;
|
|
2369
992
|
}
|
|
2370
993
|
/**
|
|
2371
994
|
* Remove wanted properties from bit json object.
|
|
2372
995
|
* - This function defines the defaults for properties in the json.
|
|
2373
996
|
*
|
|
997
|
+
* TODO: All these defaults should come from the config and be set in the Builder.
|
|
998
|
+
*
|
|
2374
999
|
* @param bit
|
|
2375
1000
|
* @returns
|
|
2376
1001
|
*/
|
|
2377
|
-
|
|
1002
|
+
cleanBitJson(bitJson) {
|
|
1003
|
+
var _a, _b, _c, _d, _e, _f;
|
|
2378
1004
|
const bitType = Config_1.Config.getBitType(bitJson.type);
|
|
2379
|
-
const textFormat = bitJson.format;
|
|
2380
|
-
const plainText = this.options.textAsPlainText;
|
|
1005
|
+
// const textFormat = bitJson.format;
|
|
1006
|
+
// const plainText = this.options.textAsPlainText;
|
|
2381
1007
|
// Clear 'originalType' if not set
|
|
2382
1008
|
if (bitJson.originalType == null)
|
|
2383
1009
|
bitJson.originalType = undefined;
|
|
@@ -2391,8 +1017,14 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
2391
1017
|
// The properties used are a bit random sometimes?
|
|
2392
1018
|
// It would be better if this functionality was generated from the bit config
|
|
2393
1019
|
if (Config_1.Config.isOfBitType(bitType, [BitType_1.BitType._error, BitType_1.BitType._comment])) {
|
|
2394
|
-
// Special
|
|
1020
|
+
// Special case for _error and _comment bits
|
|
2395
1021
|
delete bitJson.format;
|
|
1022
|
+
delete bitJson.item;
|
|
1023
|
+
delete bitJson.lead;
|
|
1024
|
+
delete bitJson.pageNumber;
|
|
1025
|
+
delete bitJson.marginNumber;
|
|
1026
|
+
delete bitJson.hint;
|
|
1027
|
+
delete bitJson.instruction;
|
|
2396
1028
|
//
|
|
2397
1029
|
}
|
|
2398
1030
|
else {
|
|
@@ -2401,6 +1033,18 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
2401
1033
|
// Most bits have these defaults, but there are special cases (not sure if that is by error or design)
|
|
2402
1034
|
if (Config_1.Config.isOfBitType(bitType, [BitType_1.BitType.page])) {
|
|
2403
1035
|
// Bits without item, lead, etc
|
|
1036
|
+
if (bitJson.item == null || ((_a = bitJson.item) === null || _a === void 0 ? void 0 : _a.length) === 0)
|
|
1037
|
+
delete bitJson.item;
|
|
1038
|
+
if (bitJson.lead == null || ((_b = bitJson.lead) === null || _b === void 0 ? void 0 : _b.length) === 0)
|
|
1039
|
+
delete bitJson.lead;
|
|
1040
|
+
if (bitJson.pageNumber == null || ((_c = bitJson.pageNumber) === null || _c === void 0 ? void 0 : _c.length) === 0)
|
|
1041
|
+
delete bitJson.pageNumber;
|
|
1042
|
+
if (bitJson.marginNumber == null || ((_d = bitJson.marginNumber) === null || _d === void 0 ? void 0 : _d.length) === 0)
|
|
1043
|
+
delete bitJson.marginNumber;
|
|
1044
|
+
if (bitJson.hint == null || ((_e = bitJson.hint) === null || _e === void 0 ? void 0 : _e.length) === 0)
|
|
1045
|
+
delete bitJson.hint;
|
|
1046
|
+
if (bitJson.instruction == null || ((_f = bitJson.instruction) === null || _f === void 0 ? void 0 : _f.length) === 0)
|
|
1047
|
+
delete bitJson.instruction;
|
|
2404
1048
|
}
|
|
2405
1049
|
else {
|
|
2406
1050
|
// Majority of bits
|
|
@@ -2568,6 +1212,8 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
2568
1212
|
bitJson.tableAutoWidth = true;
|
|
2569
1213
|
if (bitJson.tableResizableColumns == null)
|
|
2570
1214
|
bitJson.tableResizableColumns = false;
|
|
1215
|
+
if (bitJson.tableColumnMinWidth == null)
|
|
1216
|
+
bitJson.tableColumnMinWidth = 0;
|
|
2571
1217
|
//
|
|
2572
1218
|
}
|
|
2573
1219
|
if (Config_1.Config.isOfBitType(bitType, [
|
|
@@ -2708,361 +1354,42 @@ class JsonGenerator extends AstWalkerGenerator_1.AstWalkerGenerator {
|
|
|
2708
1354
|
delete bitJson.example;
|
|
2709
1355
|
}
|
|
2710
1356
|
}
|
|
2711
|
-
// Remove unwanted properties
|
|
2712
|
-
// Properties
|
|
2713
|
-
if (bitJson.id == null)
|
|
2714
|
-
delete bitJson.id;
|
|
2715
|
-
if (bitJson.internalComment == null)
|
|
2716
|
-
delete bitJson.internalComment;
|
|
2717
|
-
if (bitJson.externalId == null)
|
|
2718
|
-
delete bitJson.externalId;
|
|
2719
|
-
if (bitJson.spaceId == null)
|
|
2720
|
-
delete bitJson.spaceId;
|
|
2721
|
-
if (bitJson.padletId == null)
|
|
2722
|
-
delete bitJson.padletId;
|
|
2723
|
-
if (bitJson.jupyterId == null)
|
|
2724
|
-
delete bitJson.jupyterId;
|
|
2725
|
-
if (bitJson.jupyterExecutionCount == null)
|
|
2726
|
-
delete bitJson.jupyterExecutionCount;
|
|
2727
|
-
if (bitJson.isPublic == null)
|
|
2728
|
-
delete bitJson.isPublic;
|
|
2729
|
-
if (bitJson.aiGenerated == null)
|
|
2730
|
-
delete bitJson.aiGenerated;
|
|
2731
|
-
if (bitJson.machineTranslated == null)
|
|
2732
|
-
delete bitJson.machineTranslated;
|
|
2733
|
-
if (bitJson.analyticsTag == null)
|
|
2734
|
-
delete bitJson.analyticsTag;
|
|
2735
|
-
if (bitJson.feedbackEngine == null)
|
|
2736
|
-
delete bitJson.feedbackEngine;
|
|
2737
|
-
if (bitJson.feedbackType == null)
|
|
2738
|
-
delete bitJson.feedbackType;
|
|
2739
|
-
if (bitJson.disableFeedback == null)
|
|
2740
|
-
delete bitJson.disableFeedback;
|
|
2741
|
-
if (bitJson.releaseVersion == null)
|
|
2742
|
-
delete bitJson.releaseVersion;
|
|
2743
|
-
if (bitJson.releaseKind == null)
|
|
2744
|
-
delete bitJson.releaseKind;
|
|
2745
|
-
if (bitJson.releaseDate == null)
|
|
2746
|
-
delete bitJson.releaseDate;
|
|
2747
|
-
if (bitJson.book == null)
|
|
2748
|
-
delete bitJson.book;
|
|
2749
|
-
if (bitJson.ageRange == null)
|
|
2750
|
-
delete bitJson.ageRange;
|
|
2751
|
-
if (bitJson.lang == null)
|
|
2752
|
-
delete bitJson.lang;
|
|
2753
|
-
if (bitJson.language == null)
|
|
2754
|
-
delete bitJson.language;
|
|
2755
|
-
if (bitJson.publisher == null)
|
|
2756
|
-
delete bitJson.publisher;
|
|
2757
|
-
if (bitJson.publisherName == null)
|
|
2758
|
-
delete bitJson.publisherName;
|
|
2759
|
-
if (bitJson.theme == null)
|
|
2760
|
-
delete bitJson.theme;
|
|
2761
|
-
if (bitJson.computerLanguage == null)
|
|
2762
|
-
delete bitJson.computerLanguage;
|
|
2763
|
-
if (bitJson.target == null)
|
|
2764
|
-
delete bitJson.target;
|
|
2765
|
-
if (bitJson.slug == null)
|
|
2766
|
-
delete bitJson.slug;
|
|
2767
|
-
if (bitJson.tag == null)
|
|
2768
|
-
delete bitJson.tag;
|
|
2769
|
-
if (bitJson.reductionTag == null)
|
|
2770
|
-
delete bitJson.reductionTag;
|
|
2771
|
-
if (bitJson.bubbleTag == null)
|
|
2772
|
-
delete bitJson.bubbleTag;
|
|
2773
|
-
if (bitJson.levelCEFRp == null)
|
|
2774
|
-
delete bitJson.levelCEFRp;
|
|
2775
|
-
if (bitJson.levelCEFR == null)
|
|
2776
|
-
delete bitJson.levelCEFR;
|
|
2777
|
-
if (bitJson.levelILR == null)
|
|
2778
|
-
delete bitJson.levelILR;
|
|
2779
|
-
if (bitJson.levelACTFL == null)
|
|
2780
|
-
delete bitJson.levelACTFL;
|
|
2781
|
-
if (bitJson.icon == null)
|
|
2782
|
-
delete bitJson.icon;
|
|
2783
|
-
if (bitJson.iconTag == null)
|
|
2784
|
-
delete bitJson.iconTag;
|
|
2785
|
-
if (bitJson.colorTag == null)
|
|
2786
|
-
delete bitJson.colorTag;
|
|
2787
|
-
if (bitJson.flashcardSet == null)
|
|
2788
|
-
delete bitJson.flashcardSet;
|
|
2789
|
-
if (bitJson.subtype == null)
|
|
2790
|
-
delete bitJson.subtype;
|
|
2791
|
-
if (bitJson.bookAlias == null)
|
|
2792
|
-
delete bitJson.bookAlias;
|
|
2793
|
-
if (bitJson.coverImage == null)
|
|
2794
|
-
delete bitJson.coverImage;
|
|
2795
|
-
if (bitJson.coverColor == null)
|
|
2796
|
-
delete bitJson.coverColor;
|
|
2797
|
-
if (bitJson.publications == null)
|
|
2798
|
-
delete bitJson.publications;
|
|
2799
|
-
if (bitJson.author == null)
|
|
2800
|
-
delete bitJson.author;
|
|
2801
|
-
if (bitJson.subject == null)
|
|
2802
|
-
delete bitJson.subject;
|
|
2803
|
-
if (bitJson.date == null)
|
|
2804
|
-
delete bitJson.date;
|
|
2805
|
-
if (bitJson.dateEnd == null)
|
|
2806
|
-
delete bitJson.dateEnd;
|
|
2807
|
-
if (bitJson.location == null)
|
|
2808
|
-
delete bitJson.location;
|
|
2809
|
-
if (bitJson.kind == null)
|
|
2810
|
-
delete bitJson.kind;
|
|
2811
|
-
if (bitJson.hasMarkAsDone == null)
|
|
2812
|
-
delete bitJson.hasMarkAsDone;
|
|
2813
|
-
if (bitJson.processHandIn == null)
|
|
2814
|
-
delete bitJson.processHandIn;
|
|
2815
|
-
if (bitJson.action == null)
|
|
2816
|
-
delete bitJson.action;
|
|
2817
|
-
if (bitJson.showInIndex == null)
|
|
2818
|
-
delete bitJson.showInIndex;
|
|
2819
|
-
if (bitJson.blockId == null)
|
|
2820
|
-
delete bitJson.blockId;
|
|
2821
|
-
if (bitJson.pageNo == null)
|
|
2822
|
-
delete bitJson.pageNo;
|
|
2823
|
-
if (bitJson.x == null)
|
|
2824
|
-
delete bitJson.x;
|
|
2825
|
-
if (bitJson.y == null)
|
|
2826
|
-
delete bitJson.y;
|
|
2827
|
-
if (bitJson.width == null)
|
|
2828
|
-
delete bitJson.width;
|
|
2829
|
-
if (bitJson.height == null)
|
|
2830
|
-
delete bitJson.height;
|
|
2831
|
-
if (bitJson.index == null)
|
|
2832
|
-
delete bitJson.index;
|
|
2833
|
-
if (bitJson.classification == null)
|
|
2834
|
-
delete bitJson.classification;
|
|
2835
|
-
if (bitJson.availableClassifications == null)
|
|
2836
|
-
delete bitJson.availableClassifications;
|
|
2837
|
-
if (bitJson.allowedBit == null)
|
|
2838
|
-
delete bitJson.allowedBit;
|
|
2839
|
-
if (bitJson.tableFixedHeader == null)
|
|
2840
|
-
delete bitJson.tableFixedHeader;
|
|
2841
|
-
if (bitJson.tableSearch == null)
|
|
2842
|
-
delete bitJson.tableSearch;
|
|
2843
|
-
if (bitJson.tableSort == null)
|
|
2844
|
-
delete bitJson.tableSort;
|
|
2845
|
-
if (bitJson.tablePagination == null)
|
|
2846
|
-
delete bitJson.tablePagination;
|
|
2847
|
-
if (bitJson.tablePaginationLimit == null)
|
|
2848
|
-
delete bitJson.tablePaginationLimit;
|
|
2849
|
-
if (bitJson.tableHeight == null)
|
|
2850
|
-
delete bitJson.tableHeight;
|
|
2851
|
-
if (bitJson.tableWhitespaceNoWrap == null)
|
|
2852
|
-
delete bitJson.tableWhitespaceNoWrap;
|
|
2853
|
-
if (bitJson.tableAutoWidth == null)
|
|
2854
|
-
delete bitJson.tableAutoWidth;
|
|
2855
|
-
if (bitJson.tableResizableColumns == null)
|
|
2856
|
-
delete bitJson.tableResizableColumns;
|
|
2857
|
-
if (bitJson.quizCountItems == null)
|
|
2858
|
-
delete bitJson.quizCountItems;
|
|
2859
|
-
if (bitJson.quizStrikethroughSolutions == null)
|
|
2860
|
-
delete bitJson.quizStrikethroughSolutions;
|
|
2861
|
-
if (bitJson.codeLineNumbers == null)
|
|
2862
|
-
delete bitJson.codeLineNumbers;
|
|
2863
|
-
if (bitJson.codeMinimap == null)
|
|
2864
|
-
delete bitJson.codeMinimap;
|
|
2865
|
-
if (bitJson.stripePricingTableId == null)
|
|
2866
|
-
delete bitJson.stripePricingTableId;
|
|
2867
|
-
if (bitJson.stripePublishableKey == null)
|
|
2868
|
-
delete bitJson.stripePublishableKey;
|
|
2869
|
-
if (bitJson.thumbImage == null)
|
|
2870
|
-
delete bitJson.thumbImage;
|
|
2871
|
-
if (bitJson.scormSource == null)
|
|
2872
|
-
delete bitJson.scormSource;
|
|
2873
|
-
if (bitJson.posterImage == null)
|
|
2874
|
-
delete bitJson.posterImage;
|
|
2875
|
-
if (bitJson.focusX == null)
|
|
2876
|
-
delete bitJson.focusX;
|
|
2877
|
-
if (bitJson.focusY == null)
|
|
2878
|
-
delete bitJson.focusY;
|
|
2879
|
-
if (bitJson.pointerLeft == null)
|
|
2880
|
-
delete bitJson.pointerLeft;
|
|
2881
|
-
if (bitJson.pointerTop == null)
|
|
2882
|
-
delete bitJson.pointerTop;
|
|
2883
|
-
if (bitJson.listItemIndent == null)
|
|
2884
|
-
delete bitJson.listItemIndent;
|
|
2885
|
-
if (bitJson.backgroundWallpaper == null)
|
|
2886
|
-
delete bitJson.backgroundWallpaper;
|
|
2887
|
-
if (bitJson.hasBookNavigation == null)
|
|
2888
|
-
delete bitJson.hasBookNavigation;
|
|
2889
|
-
if (bitJson.duration == null)
|
|
2890
|
-
delete bitJson.duration;
|
|
2891
|
-
if (bitJson.deeplink == null)
|
|
2892
|
-
delete bitJson.deeplink;
|
|
2893
|
-
if (bitJson.externalLink == null)
|
|
2894
|
-
delete bitJson.externalLink;
|
|
2895
|
-
if (bitJson.externalLinkText == null)
|
|
2896
|
-
delete bitJson.externalLinkText;
|
|
2897
|
-
if (bitJson.videoCallLink == null)
|
|
2898
|
-
delete bitJson.videoCallLink;
|
|
2899
|
-
if (bitJson.vendorUrl == null)
|
|
2900
|
-
delete bitJson.vendorUrl;
|
|
2901
|
-
if (bitJson.search == null)
|
|
2902
|
-
delete bitJson.search;
|
|
2903
|
-
if (bitJson.list == null)
|
|
2904
|
-
delete bitJson.list;
|
|
2905
|
-
if (bitJson.textReference == null)
|
|
2906
|
-
delete bitJson.textReference;
|
|
2907
|
-
if (bitJson.isTracked == null)
|
|
2908
|
-
delete bitJson.isTracked;
|
|
2909
|
-
if (bitJson.isInfoOnly == null)
|
|
2910
|
-
delete bitJson.isInfoOnly;
|
|
2911
|
-
if (bitJson.imageFirst == null)
|
|
2912
|
-
delete bitJson.imageFirst;
|
|
2913
|
-
if (bitJson.activityType == null)
|
|
2914
|
-
delete bitJson.activityType;
|
|
2915
|
-
if (bitJson.labelTrue == null)
|
|
2916
|
-
delete bitJson.labelTrue;
|
|
2917
|
-
if (bitJson.labelFalse == null)
|
|
2918
|
-
delete bitJson.labelFalse;
|
|
2919
|
-
if (bitJson.content2Buy == null)
|
|
2920
|
-
delete bitJson.content2Buy;
|
|
2921
|
-
if (bitJson.mailingList == null)
|
|
2922
|
-
delete bitJson.mailingList;
|
|
2923
|
-
if (bitJson.buttonCaption == null)
|
|
2924
|
-
delete bitJson.buttonCaption;
|
|
2925
|
-
if (bitJson.callToActionUrl == null)
|
|
2926
|
-
delete bitJson.callToActionUrl;
|
|
2927
|
-
if (bitJson.caption == null)
|
|
2928
|
-
delete bitJson.caption;
|
|
2929
|
-
if (bitJson.quotedPerson == null)
|
|
2930
|
-
delete bitJson.quotedPerson;
|
|
2931
|
-
if (bitJson.resolved == null)
|
|
2932
|
-
delete bitJson.resolved;
|
|
2933
|
-
if (bitJson.resolvedDate == null)
|
|
2934
|
-
delete bitJson.resolvedDate;
|
|
2935
|
-
if (bitJson.resolvedBy == null)
|
|
2936
|
-
delete bitJson.resolvedBy;
|
|
2937
|
-
if (bitJson.maxCreatedBits == null)
|
|
2938
|
-
delete bitJson.maxCreatedBits;
|
|
2939
|
-
if (bitJson.maxDisplayLevel == null)
|
|
2940
|
-
delete bitJson.maxDisplayLevel;
|
|
2941
|
-
if (bitJson.page == null)
|
|
2942
|
-
delete bitJson.page;
|
|
2943
|
-
if (bitJson.productId == null)
|
|
2944
|
-
delete bitJson.productId;
|
|
2945
|
-
if (bitJson.product == null)
|
|
2946
|
-
delete bitJson.product;
|
|
2947
|
-
if (bitJson.productVideo == null)
|
|
2948
|
-
delete bitJson.productVideo;
|
|
2949
|
-
if (bitJson.productFolder == null)
|
|
2950
|
-
delete bitJson.productFolder;
|
|
2951
|
-
if (bitJson.technicalTerm == null)
|
|
2952
|
-
delete bitJson.technicalTerm;
|
|
2953
|
-
if (bitJson.servings == null)
|
|
2954
|
-
delete bitJson.servings;
|
|
2955
|
-
if (bitJson.ratingLevelStart == null)
|
|
2956
|
-
delete bitJson.ratingLevelStart;
|
|
2957
|
-
if (bitJson.ratingLevelEnd == null)
|
|
2958
|
-
delete bitJson.ratingLevelEnd;
|
|
2959
|
-
if (bitJson.ratingLevelSelected == null)
|
|
2960
|
-
delete bitJson.ratingLevelSelected;
|
|
2961
|
-
// Book data
|
|
2962
|
-
if (bitJson.title == null)
|
|
2963
|
-
delete bitJson.title;
|
|
2964
|
-
if (bitJson.subtitle == null)
|
|
2965
|
-
delete bitJson.subtitle;
|
|
2966
|
-
if (bitJson.level == null)
|
|
2967
|
-
delete bitJson.level;
|
|
2968
|
-
if (bitJson.toc == null)
|
|
2969
|
-
delete bitJson.toc;
|
|
2970
|
-
if (bitJson.progress == null)
|
|
2971
|
-
delete bitJson.progress;
|
|
2972
|
-
if (bitJson.anchor == null)
|
|
2973
|
-
delete bitJson.anchor;
|
|
2974
|
-
if (bitJson.reference == null)
|
|
2975
|
-
delete bitJson.reference;
|
|
2976
|
-
if (bitJson.referenceEnd == null)
|
|
2977
|
-
delete bitJson.referenceEnd;
|
|
2978
|
-
// Item, Lead, Hint, Instruction
|
|
2979
|
-
if (bitJson.item == null)
|
|
2980
|
-
delete bitJson.item;
|
|
2981
|
-
if (bitJson.lead == null)
|
|
2982
|
-
delete bitJson.lead;
|
|
2983
|
-
if (bitJson.pageNumber == null)
|
|
2984
|
-
delete bitJson.pageNumber;
|
|
2985
|
-
if (bitJson.marginNumber == null)
|
|
2986
|
-
delete bitJson.marginNumber;
|
|
2987
|
-
if (bitJson.hint == null)
|
|
2988
|
-
delete bitJson.hint;
|
|
2989
|
-
if (bitJson.instruction == null)
|
|
2990
|
-
delete bitJson.instruction;
|
|
2991
|
-
// Example
|
|
2992
|
-
if (bitJson.example === undefined)
|
|
2993
|
-
delete bitJson.example;
|
|
2994
|
-
if (bitJson.isExample == null)
|
|
2995
|
-
delete bitJson.isExample;
|
|
2996
|
-
// Mark
|
|
2997
|
-
if (bitJson.marks == null)
|
|
2998
|
-
delete bitJson.marks;
|
|
2999
|
-
// Extra Properties
|
|
3000
|
-
if (bitJson.extraProperties == null)
|
|
3001
|
-
delete bitJson.extraProperties;
|
|
3002
|
-
// Body
|
|
3003
|
-
if (bitJson.body == null && textFormat !== TextFormat_1.TextFormat.json)
|
|
3004
|
-
delete bitJson.body;
|
|
3005
|
-
// Placeholders
|
|
3006
|
-
if (bitJson.placeholders == null || Object.keys(bitJson.placeholders).length === 0)
|
|
3007
|
-
delete bitJson.placeholders;
|
|
3008
|
-
// Resource
|
|
3009
|
-
if (bitJson.imagePlaceholder == null)
|
|
3010
|
-
delete bitJson.imagePlaceholder;
|
|
3011
|
-
if (bitJson.resource == null)
|
|
3012
|
-
delete bitJson.resource;
|
|
3013
|
-
if (bitJson.logos == null)
|
|
3014
|
-
delete bitJson.logos;
|
|
3015
|
-
if (bitJson.images == null)
|
|
3016
|
-
delete bitJson.images;
|
|
3017
|
-
// Children
|
|
3018
|
-
if (bitJson.statement == null)
|
|
3019
|
-
delete bitJson.statement;
|
|
3020
|
-
if (bitJson.isCorrect == null)
|
|
3021
|
-
delete bitJson.isCorrect;
|
|
3022
|
-
if (bitJson.sampleSolution == null)
|
|
3023
|
-
delete bitJson.sampleSolution;
|
|
3024
|
-
if (bitJson.additionalSolutions == null)
|
|
3025
|
-
delete bitJson.additionalSolutions;
|
|
3026
|
-
if (bitJson.partialAnswer == null)
|
|
3027
|
-
delete bitJson.partialAnswer;
|
|
3028
|
-
if (bitJson.elements == null)
|
|
3029
|
-
delete bitJson.elements;
|
|
3030
|
-
if (bitJson.cards == null)
|
|
3031
|
-
delete bitJson.cards;
|
|
3032
|
-
if (bitJson.definitions == null)
|
|
3033
|
-
delete bitJson.definitions;
|
|
3034
|
-
if (bitJson.statements == null)
|
|
3035
|
-
delete bitJson.statements;
|
|
3036
|
-
if (bitJson.responses == null)
|
|
3037
|
-
delete bitJson.responses;
|
|
3038
|
-
if (bitJson.quizzes == null)
|
|
3039
|
-
delete bitJson.quizzes;
|
|
3040
|
-
if (bitJson.heading == null)
|
|
3041
|
-
delete bitJson.heading;
|
|
3042
|
-
if (bitJson.pairs == null)
|
|
3043
|
-
delete bitJson.pairs;
|
|
3044
|
-
if (bitJson.matrix == null)
|
|
3045
|
-
delete bitJson.matrix;
|
|
3046
|
-
if (bitJson.table == null)
|
|
3047
|
-
delete bitJson.table;
|
|
3048
|
-
if (bitJson.choices == null)
|
|
3049
|
-
delete bitJson.choices;
|
|
3050
|
-
if (bitJson.questions == null)
|
|
3051
|
-
delete bitJson.questions;
|
|
3052
|
-
if (bitJson.captionDefinitionList == null)
|
|
3053
|
-
delete bitJson.captionDefinitionList;
|
|
3054
|
-
if (bitJson.listItems == null)
|
|
3055
|
-
delete bitJson.listItems;
|
|
3056
|
-
if (bitJson.sections == null)
|
|
3057
|
-
delete bitJson.sections;
|
|
3058
|
-
// Placeholders
|
|
3059
|
-
if (!plainText || bitJson.placeholders == null)
|
|
3060
|
-
delete bitJson.placeholders;
|
|
3061
|
-
// Footer
|
|
3062
|
-
if (bitJson.footer == null)
|
|
3063
|
-
delete bitJson.footer;
|
|
3064
1357
|
return bitJson;
|
|
3065
1358
|
}
|
|
1359
|
+
/**
|
|
1360
|
+
* Convert any bitmark texts to strings.
|
|
1361
|
+
*/
|
|
1362
|
+
convertAllBitmarkTextsToStringsForPlainText(json) {
|
|
1363
|
+
if (!this.options.textAsPlainText)
|
|
1364
|
+
return;
|
|
1365
|
+
const obj = json;
|
|
1366
|
+
for (const key in obj) {
|
|
1367
|
+
const val = obj[key];
|
|
1368
|
+
if (this.isBitmarkText(val)) {
|
|
1369
|
+
const s = this.textGenerator.generateSync(val, TextFormat_1.TextFormat.bitmarkMinusMinus);
|
|
1370
|
+
obj[key] = (Breakscape_1.Breakscape.unbreakscape(s) || '').trim();
|
|
1371
|
+
}
|
|
1372
|
+
else if (typeof obj[key] === 'object') {
|
|
1373
|
+
this.convertAllBitmarkTextsToStringsForPlainText(obj[key]);
|
|
1374
|
+
}
|
|
1375
|
+
}
|
|
1376
|
+
}
|
|
1377
|
+
/**
|
|
1378
|
+
* Remove any property with a key starting with an double underscore.
|
|
1379
|
+
*
|
|
1380
|
+
* @param json
|
|
1381
|
+
*/
|
|
1382
|
+
removeTemporaryProperties(json) {
|
|
1383
|
+
const obj = json;
|
|
1384
|
+
for (const key in obj) {
|
|
1385
|
+
if (key.startsWith('__')) {
|
|
1386
|
+
delete obj[key];
|
|
1387
|
+
}
|
|
1388
|
+
else if (typeof obj[key] === 'object') {
|
|
1389
|
+
this.removeTemporaryProperties(obj[key]);
|
|
1390
|
+
}
|
|
1391
|
+
}
|
|
1392
|
+
}
|
|
3066
1393
|
//
|
|
3067
1394
|
// Writer interface
|
|
3068
1395
|
//
|