diff --git a/src/java/com/claro/module_system/clarodocs/ClaroDocsCLIOptions.java b/src/java/com/claro/module_system/clarodocs/ClaroDocsCLIOptions.java index 513f8e2d..b13df16f 100644 --- a/src/java/com/claro/module_system/clarodocs/ClaroDocsCLIOptions.java +++ b/src/java/com/claro/module_system/clarodocs/ClaroDocsCLIOptions.java @@ -31,4 +31,10 @@ public class ClaroDocsCLIOptions extends OptionsBase { defaultValue = "" ) public String treejs_css; + @Option( + name = "clarodocs_css", + help = "Path to ClaroDoc's CSS stylesheet.", + defaultValue = "" + ) + public String clarodocs_css; } \ No newline at end of file diff --git a/src/java/com/claro/module_system/clarodocs/ClaroDocsGenerator.java b/src/java/com/claro/module_system/clarodocs/ClaroDocsGenerator.java index 44de11fa..cd8e7148 100644 --- a/src/java/com/claro/module_system/clarodocs/ClaroDocsGenerator.java +++ b/src/java/com/claro/module_system/clarodocs/ClaroDocsGenerator.java @@ -72,13 +72,16 @@ public static void main(String[] args) throws IOException { res.append( serializedClaroModule.getExportedProcedureDefinitionsList().stream() .map(ProcedureHtml::generateProcedureHtml) + // TODO(steving) Temporary until migrate to using SanitizedContent here. + .map(Object::toString) .collect(Collectors.joining("\n"))); return res.toString(); } )), typeDefHtmlByModuleNameAndTypeNameBuilder.build(), getFileInputStream(options.treejs), - getFileInputStream(options.treejs_css) + getFileInputStream(options.treejs_css), + getFileInputStream(options.clarodocs_css) ); createOutputFile(options.out); diff --git a/src/java/com/claro/module_system/clarodocs/clarodocs_rules.bzl b/src/java/com/claro/module_system/clarodocs/clarodocs_rules.bzl index 1e71ab60..f970d602 100644 --- a/src/java/com/claro/module_system/clarodocs/clarodocs_rules.bzl +++ b/src/java/com/claro/module_system/clarodocs/clarodocs_rules.bzl @@ -24,6 +24,7 @@ def _clarodocs_impl(ctx): treejs_deps = {name: path for path, name in ctx.attr._treejs_deps.items()} args.add("--treejs", treejs_deps["tree.min.js"].files.to_list()[0]) args.add("--treejs_css", treejs_deps["treejs.min.css"].files.to_list()[0]) + args.add("--clarodocs_css", treejs_deps["clarodocs.css"].files.to_list()[0]) args.add("--out", ctx.outputs.out.path) @@ -68,6 +69,7 @@ _clarodocs_rule = rule( default = { "//src/java/com/claro/module_system/clarodocs/html_rendering/homepage/treejs:tree.min.js": "tree.min.js", "//src/java/com/claro/module_system/clarodocs/html_rendering/homepage/treejs:treejs.min.css": "treejs.min.css", + "//src/java/com/claro/module_system/clarodocs/html_rendering/homepage:clarodocs.css": "clarodocs.css", } ), }, diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/BUILD b/src/java/com/claro/module_system/clarodocs/html_rendering/BUILD index ac20abb6..e9a30670 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/BUILD +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/BUILD @@ -2,13 +2,7 @@ load("@io_bazel_rules_closure//closure:defs.bzl", "closure_java_template_library closure_java_template_library( name = "html_soy", - srcs = [ - "code_block.soy", - "procedures.soy", - "tokens.soy", - "types.soy", - "utils.soy", - ], + srcs = glob(["*.soy"]), java_package = "com.claro.module_system.clarodocs.html_rendering", visibility = ["//src/java/com/claro/module_system/clarodocs/html_rendering:__subpackages__"], ) @@ -16,6 +10,9 @@ closure_java_template_library( java_library( name = "util", srcs = ["Util.java"], - deps = [":html_soy"], + deps = [ + ":html_soy", + "//:guava", + ], visibility = ["//src/java/com/claro/module_system/clarodocs/html_rendering:__subpackages__"], ) \ No newline at end of file diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/Util.java b/src/java/com/claro/module_system/clarodocs/html_rendering/Util.java index 9e206a18..643555fa 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/Util.java +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/Util.java @@ -1,6 +1,8 @@ package com.claro.module_system.clarodocs.html_rendering; +import com.google.common.collect.ImmutableMap; import com.google.template.soy.SoyFileSet; +import com.google.template.soy.data.SanitizedContent; import com.google.template.soy.tofu.SoyTofu; import java.util.Arrays; @@ -14,6 +16,7 @@ public class Util { public static final SoyTofu SOY = SoyFileSet.builder() .add(Util.class.getResource("code_block.soy")) + .add(Util.class.getResource("contracts.soy")) .add(Util.class.getResource("procedures.soy")) .add(Util.class.getResource("tokens.soy")) .add(Util.class.getResource("types.soy")) @@ -21,6 +24,10 @@ public class Util { .build() .compileToTofu(); + public static SanitizedContent renderSoy(SoyTofu soy, String templateName, ImmutableMap args) { + return soy.newRenderer("." + templateName).setData(args).renderHtml(); + } + public enum CssClass { TOKEN_GROUP_1("tokenGroup1"), TOKEN_GROUP_2("tokenGroup2"), diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/contracts.soy b/src/java/com/claro/module_system/clarodocs/html_rendering/contracts.soy new file mode 100644 index 00000000..c8c11001 --- /dev/null +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/contracts.soy @@ -0,0 +1,42 @@ +{namespace contracts} + +{template .contractDef} + {@param name: string} + {@param genericTypeParams: list} + {@param signatures: list} + + {call codeblock.code} + {param class: 'contract-def' /} + {param id: '{$name}' /} + {param codeContent kind="html"} + {call tokens.CONTRACT /}{sp}{$name} + {call tokens.LT /} + {call utils.commaSep} + {param elems: $genericTypeParams /} + {/call} + {call tokens.GT /} + {sp}{lb} + {for $sig in $signatures} + {$sig} + {/for} + {rb} + {/param} + {/call} +{/template} + +{template .contractImpl} + {@param name: string} + {@param genericTypeParams: list} + + {call codeblock.code} + {param class: 'contract-impl' /} + {param id: '{$name}' /} + {param codeContent kind="html"} + {call tokens.IMPLEMENT /} {$name} {call tokens.LT /} + {call utils.commaSep} + {param elems: $genericTypeParams /} + {/call} + {call tokens.GT /}{call tokens.SEMICOLON /} + {/param} + {/call} +{/template} \ No newline at end of file diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/contracts/BUILD b/src/java/com/claro/module_system/clarodocs/html_rendering/contracts/BUILD index d3721240..35ff71f0 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/contracts/BUILD +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/contracts/BUILD @@ -5,6 +5,7 @@ java_library( deps = [ "//:guava", "//src/java/com/claro/intermediate_representation/types:types", + "//src/java/com/claro/module_system/clarodocs/html_rendering:html_soy", "//src/java/com/claro/module_system/clarodocs/html_rendering:util", "//src/java/com/claro/module_system/clarodocs/html_rendering/procedures:procedure_html", "//src/java/com/claro/module_system/clarodocs/html_rendering/typedefs:type_html", diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/contracts/ContractHtml.java b/src/java/com/claro/module_system/clarodocs/html_rendering/contracts/ContractHtml.java index d793df3b..e1e5c657 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/contracts/ContractHtml.java +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/contracts/ContractHtml.java @@ -5,40 +5,38 @@ import com.claro.module_system.clarodocs.html_rendering.procedures.ProcedureHtml; import com.claro.module_system.clarodocs.html_rendering.typedefs.TypeHtml; import com.claro.module_system.module_serialization.proto.SerializedClaroModule; -import com.google.common.base.Joiner; - -import java.util.stream.Collectors; - -import static com.claro.module_system.clarodocs.html_rendering.Util.GrammarPart.*; +import com.google.common.collect.ImmutableList; +import com.google.common.collect.ImmutableMap; +import com.google.template.soy.tofu.SoyTofu; public class ContractHtml { - - private static final String CONTRACT_DEF_CLASS_NAME = "contract-def"; - private static final String CONTRACT_DEF_TEMPLATE = CONTRACT + " %s" + LT + "%s" + GT + " {\n%s\n}"; - private static final String CONTRACT_IMPL_CLASS_NAME = "contract-def"; - private static final String CONTRACT_IMPL_TEMPLATE = IMPLEMENT + " %s" + LT + "%s" + GT + SEMICOLON; + private static final SoyTofu SOY = Util.SOY.forNamespace("contracts"); public static void renderContractDefHtml( StringBuilder res, SerializedClaroModule.ExportedContractDefinition contractDef) { - res.append(String.format( - Util.wrapAsDefaultCodeBlock(CONTRACT_DEF_CLASS_NAME, contractDef.getName(), CONTRACT_DEF_TEMPLATE), - contractDef.getName().substring(0, contractDef.getName().indexOf('$')), - Joiner.on(", ").join(contractDef.getTypeParamNamesList()), - contractDef.getSignaturesList().stream() - .map(ProcedureHtml::generateProcedureHtml) - .collect(Collectors.joining("\n")) - )); + ImmutableMap.Builder args = ImmutableMap.builder(); + args.put("name", contractDef.getName().substring(0, contractDef.getName().indexOf('$'))) + .put("genericTypeParams", ImmutableList.copyOf(contractDef.getTypeParamNamesList())) + .put( + "signatures", + contractDef.getSignaturesList().stream() + .map(ProcedureHtml::generateProcedureHtml) + .collect(ImmutableList.toImmutableList()) + ); + res.append(Util.renderSoy(SOY, "contractDef", args.build())); } public static void renderContractImplHtml( StringBuilder res, SerializedClaroModule.ExportedContractImplementation contractImpl) { String implementedContractName = contractImpl.getImplementedContractName(); - res.append(String.format( - Util.wrapAsDefaultCodeBlock(CONTRACT_IMPL_CLASS_NAME, implementedContractName, CONTRACT_IMPL_TEMPLATE), - implementedContractName.substring(0, implementedContractName.indexOf('$')), - contractImpl.getConcreteTypeParamsList().stream() - .map(t -> TypeHtml.renderTypeHtml(Types.parseTypeProto(t)).toString()) - .collect(Collectors.joining(", ")) - )); + ImmutableMap.Builder args = ImmutableMap.builder(); + args.put("name", implementedContractName.substring(0, implementedContractName.indexOf('$'))) + .put( + "genericTypeParams", + contractImpl.getConcreteTypeParamsList().stream() + .map(t -> TypeHtml.renderTypeHtml(Types.parseTypeProto(t))) + .collect(ImmutableList.toImmutableList()) + ); + res.append(Util.renderSoy(SOY, "contractImpl", args.build())); } } diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/homepage/BUILD b/src/java/com/claro/module_system/clarodocs/html_rendering/homepage/BUILD index d124cced..9a269394 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/homepage/BUILD +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/homepage/BUILD @@ -1,3 +1,4 @@ +exports_files(["clarodocs.css"]) java_library( name = "homepage_html", diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/homepage/HomePageHtml.java b/src/java/com/claro/module_system/clarodocs/html_rendering/homepage/HomePageHtml.java index fabc4f6e..8e31c618 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/homepage/HomePageHtml.java +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/homepage/HomePageHtml.java @@ -13,9 +13,11 @@ public static String renderHomePage( ImmutableMap moduleDocsByUniqueModuleName, ImmutableTable typeDefHtmlByModuleNameAndTypeName, InputStream treeJSInputStream, - InputStream treeJSCSSInputStream) { + InputStream treeJSCSSInputStream, + InputStream claroDocsCSSInputStream) { String treeJS = readInputStream(treeJSInputStream); String treeJSCSS = readInputStream(treeJSCSSInputStream); + String claroDocsCSS = readInputStream(claroDocsCSSInputStream); return "\n" + "\n" + @@ -24,85 +26,7 @@ public static String renderHomePage( "\n" + "\n" + "\n" + diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/homepage/clarodocs.css b/src/java/com/claro/module_system/clarodocs/html_rendering/homepage/clarodocs.css new file mode 100644 index 00000000..c74e5297 --- /dev/null +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/homepage/clarodocs.css @@ -0,0 +1,85 @@ +.tokenGroup1 { + color: #CC7832; +} +.tokenGroup2 { + color: #3C85BA; +} +.tokenGroup3 { + color: #0F9795; +} +.tokenGroup4 { + color: #86A659; +} +.type-link { + text-decoration: underline; +} +.type-link:hover { + cursor: pointer; + background-color: #ccc; +} +.floating-div { + display: none; + position: absolute; + background-color: #272822; + color: #f8f8f2; + border: 2px dashed #ccc; + font-family: monospace; + padding: 10px; + z-index: 999; +} +.module-docs { + height: 100%; + margin-left: 300px; /* Same as the width of the sidenav */ + font-family: monospace; + white-space: pre; + tab-size: 4; + background-color: #272822; + color: #f8f8f2; + overflow-x: scroll; +} +.type-def { + margin-left: 30px; +} +.procedure-def { + margin-left: 30px; +} +.initializers { + margin-left: 30px; +} +.unwrappers { + margin-left: 30px; +} +.contract-def { + margin-left: 30px; +} +.contract-impl { + margin-left: 30px; +} +.initializers .procedure-def { + margin-left: 60px; +} +.unwrappers .procedure-def { + margin-left: 60px; +} +.contract-def .procedure-def { + margin-left: 60px; +} + +.tj_container { + height: 100%; + width: 300px; + position: fixed; + z-index: 1; + top: 0; + left: 0; + background-color: #111; + overflow-x: scroll; + padding-top: 20px; +} +.tj_container li { + color: white; +} +@media screen and (max-height: 450px) { + .sidenav {padding-top: 15px;} + .sidenav a {font-size: 18px;} +} \ No newline at end of file diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/initializers/InitializersHtml.java b/src/java/com/claro/module_system/clarodocs/html_rendering/initializers/InitializersHtml.java index e1576f95..4258f258 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/initializers/InitializersHtml.java +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/initializers/InitializersHtml.java @@ -31,6 +31,8 @@ public static void renderInitializersBlock( initializedTypeName, procedures.getProceduresList().stream() .map(ProcedureHtml::generateProcedureHtml) + // TODO(steving) Temporary until migrate to using SanitizedContent here. + .map(Object::toString) .collect(Collectors.joining("\n")) ) )); diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/procedures/ProcedureHtml.java b/src/java/com/claro/module_system/clarodocs/html_rendering/procedures/ProcedureHtml.java index 96cbdf5f..733d1f0c 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/procedures/ProcedureHtml.java +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/procedures/ProcedureHtml.java @@ -7,6 +7,7 @@ import com.claro.module_system.module_serialization.proto.claro_types.TypeProtos; import com.google.common.collect.ImmutableList; import com.google.common.collect.ImmutableMap; +import com.google.template.soy.data.SanitizedContent; import com.google.template.soy.tofu.SoyTofu; import java.util.List; @@ -17,7 +18,7 @@ public class ProcedureHtml { private static final SoyTofu.Renderer PROCEDURES_TEMPLATE = Util.SOY.newRenderer("procedures.exportedProcedure"); - public static String generateProcedureHtml(SerializedClaroModule.Procedure procedure) { + public static SanitizedContent generateProcedureHtml(SerializedClaroModule.Procedure procedure) { switch (procedure.getProcedureTypeCase()) { case FUNCTION: return renderFunction(procedure.getName(), procedure.getFunction()); @@ -30,7 +31,7 @@ public static String generateProcedureHtml(SerializedClaroModule.Procedure proce } } - public static String renderFunction(String name, TypeProtos.FunctionType function) { + public static SanitizedContent renderFunction(String name, TypeProtos.FunctionType function) { ImmutableMap.Builder args = ImmutableMap.builder(); args.put("name", name) .put( @@ -43,10 +44,10 @@ public static String renderFunction(String name, TypeProtos.FunctionType functio .put("outputType", TypeHtml.renderTypeHtml(Types.parseTypeProto(function.getOutputType()))); setOptionalRequiredContracts(function.getRequiredContractsList(), args); setOptionalGenericTypeParams(ImmutableList.copyOf(function.getOptionalGenericTypeParamNamesList()), args); - return PROCEDURES_TEMPLATE.setData(args.build()).render(); + return PROCEDURES_TEMPLATE.setData(args.build()).renderHtml(); } - public static String renderConsumer(String name, TypeProtos.ConsumerType consumer) { + public static SanitizedContent renderConsumer(String name, TypeProtos.ConsumerType consumer) { ImmutableMap.Builder args = ImmutableMap.builder(); args.put("name", name) .put( @@ -58,16 +59,16 @@ public static String renderConsumer(String name, TypeProtos.ConsumerType consume ); setOptionalRequiredContracts(consumer.getRequiredContractsList(), args); setOptionalGenericTypeParams(ImmutableList.copyOf(consumer.getOptionalGenericTypeParamNamesList()), args); - return PROCEDURES_TEMPLATE.setData(args.build()).render(); + return PROCEDURES_TEMPLATE.setData(args.build()).renderHtml(); } - public static String renderProvider(String name, TypeProtos.ProviderType provider) { + public static SanitizedContent renderProvider(String name, TypeProtos.ProviderType provider) { ImmutableMap.Builder args = ImmutableMap.builder(); args.put("name", name) .put("outputType", TypeHtml.renderTypeHtml(Types.parseTypeProto(provider.getOutputType()))); setOptionalRequiredContracts(provider.getRequiredContractsList(), args); setOptionalGenericTypeParams(ImmutableList.copyOf(provider.getOptionalGenericTypeParamNamesList()), args); - return PROCEDURES_TEMPLATE.setData(args.build()).render(); + return PROCEDURES_TEMPLATE.setData(args.build()).renderHtml(); } private static void setOptionalGenericTypeParams( diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/typedefs/TypeHtml.java b/src/java/com/claro/module_system/clarodocs/html_rendering/typedefs/TypeHtml.java index 37dcd4ed..5bb0fec9 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/typedefs/TypeHtml.java +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/typedefs/TypeHtml.java @@ -10,36 +10,29 @@ import java.util.stream.Collectors; -import static com.claro.module_system.clarodocs.html_rendering.Util.GrammarPart.*; public class TypeHtml { private static final SoyTofu SOY = Util.SOY.forNamespace("types"); - private static final String TYPEDEF_TEMPLATE = - "
\n" +
-      "  \n" +
-      "    " + NEWTYPE + " " + "%s%s " + COLON + " %s\n" +
-      "  \n" +
-      "
"; public static StringBuilder renderTypeDef( StringBuilder res, String typeName, SerializedClaroModule.ExportedTypeDefinitions.NewTypeDef newTypeDef) { - res.append( - String.format( - TYPEDEF_TEMPLATE, - typeName, - typeName, - newTypeDef.getTypeParamNamesCount() == 0 - ? "" - : String.format("%s%s%s", LT, String.join(", ", newTypeDef.getTypeParamNamesList()), GT), + ImmutableMap.Builder args = ImmutableMap.builder(); + args.put("typeName", typeName) + .put( + "wrappedType", renderTypeHtml(Types.parseTypeProto(newTypeDef.getWrappedType())) - )); + ); + if (newTypeDef.getTypeParamNamesCount() > 0) { + args.put("genericTypeParams", newTypeDef.getTypeParamNamesList()); + } + res.append(Util.renderSoy(SOY, "typedef", args.build())); return res; } public static SanitizedContent renderTypeHtml(Type type) { switch (type.baseType()) { case ATOM: - return renderSoy("atom", ImmutableMap.of("name", ((Types.AtomType) type).getName())); + return Util.renderSoy(SOY, "atom", ImmutableMap.of("name", ((Types.AtomType) type).getName())); case INTEGER: return renderToken("INT"); case FLOAT: @@ -50,7 +43,8 @@ public static SanitizedContent renderTypeHtml(Type type) { return renderToken("STRING"); case LIST: Types.ListType listType = (Types.ListType) type; - return renderSoy( + return Util.renderSoy( + SOY, "list", ImmutableMap.of( "elemsType", renderTypeHtml(listType.getElementType()), @@ -59,7 +53,8 @@ public static SanitizedContent renderTypeHtml(Type type) { ); case TUPLE: Types.TupleType tupleType = (Types.TupleType) type; - return renderSoy( + return Util.renderSoy( + SOY, "tuple", ImmutableMap.of( "elemsTypes", tupleType.getValueTypes() @@ -70,7 +65,8 @@ public static SanitizedContent renderTypeHtml(Type type) { ) ); case SET: - return renderSoy( + return Util.renderSoy( + SOY, "set", ImmutableMap.of( "elemsType", renderTypeHtml(type.parameterizedTypeArgs().get(Types.SetType.PARAMETERIZED_TYPE)), @@ -78,7 +74,8 @@ public static SanitizedContent renderTypeHtml(Type type) { ) ); case MAP: - return renderSoy( + return Util.renderSoy( + SOY, "map", ImmutableMap.of( "keyType", renderTypeHtml(type.parameterizedTypeArgs().get(Types.MapType.PARAMETERIZED_TYPE_KEYS)), @@ -88,7 +85,8 @@ public static SanitizedContent renderTypeHtml(Type type) { ); case STRUCT: Types.StructType structType = (Types.StructType) type; - return renderSoy( + return Util.renderSoy( + SOY, "struct", ImmutableMap.builder() .put("fieldNames", structType.getFieldNames()) @@ -101,7 +99,8 @@ public static SanitizedContent renderTypeHtml(Type type) { ).put("isMut", ((Types.StructType) type).isMutable()).build() ); case ONEOF: - return renderSoy( + return Util.renderSoy( + SOY, "oneof", ImmutableMap.of( "variantTypes", @@ -113,7 +112,8 @@ public static SanitizedContent renderTypeHtml(Type type) { ); case FUNCTION: Types.ProcedureType procedureType = (Types.ProcedureType) type; - return renderSoy( + return Util.renderSoy( + SOY, "function", ImmutableMap.of( "argTypes", @@ -123,7 +123,8 @@ public static SanitizedContent renderTypeHtml(Type type) { ); case CONSUMER_FUNCTION: procedureType = (Types.ProcedureType) type; - return renderSoy( + return Util.renderSoy( + SOY, "consumer", ImmutableMap.of( "argTypes", @@ -132,13 +133,15 @@ public static SanitizedContent renderTypeHtml(Type type) { ); case PROVIDER_FUNCTION: procedureType = (Types.ProcedureType) type; - return renderSoy( + return Util.renderSoy( + SOY, "provider", ImmutableMap.of("outputType", renderTypeHtml(procedureType.getReturnType()) ) ); case FUTURE: - return renderSoy( + return Util.renderSoy( + SOY, "future", ImmutableMap.of( "wrappedType", @@ -159,21 +162,24 @@ public static SanitizedContent renderTypeHtml(Type type) { .collect(Collectors.toList()) ); } - return renderSoy("userDefinedType", args.build()); + return Util.renderSoy(SOY, "userDefinedType", args.build()); case HTTP_SERVICE: - return renderSoy( + return Util.renderSoy( + SOY, "httpService", ImmutableMap.of("serviceName", ((Types.HttpServiceType) type).getServiceName()) ); case HTTP_CLIENT: - return renderSoy( + return Util.renderSoy( + SOY, "httpClient", ImmutableMap.of("serviceName", ((Types.HttpClientType) type).getServiceName()) ); case HTTP_RESPONSE: - return renderSoy("httpResponse", ImmutableMap.of()); + return Util.renderSoy(SOY, "httpResponse", ImmutableMap.of()); case $GENERIC_TYPE_PARAM: - return renderSoy( + return Util.renderSoy( + SOY, "genericTypeParam", ImmutableMap.of("paramName", ((Types.$GenericTypeParam) type).getTypeParamName()) ); @@ -186,7 +192,4 @@ public static SanitizedContent renderToken(String templateName) { return Util.SOY.newRenderer("tokens." + templateName).renderHtml(); } - public static SanitizedContent renderSoy(String templateName, ImmutableMap args) { - return SOY.newRenderer("." + templateName).setData(args).renderHtml(); - } } diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/types.soy b/src/java/com/claro/module_system/clarodocs/html_rendering/types.soy index 66d961b0..21ce8676 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/types.soy +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/types.soy @@ -1,5 +1,26 @@ {namespace types} +{template .typedef} + {@param typeName: string} + {@param? genericTypeParams: list} + {@param wrappedType: html} + {call codeblock.code} + {param codeContent kind="html"} + {call tokens.NEWTYPE /}{sp}{$typeName} + {if $genericTypeParams} + {call tokens.LT /} + {call utils.commaSep} + {param elems: $genericTypeParams /} + {/call} + {call tokens.GT /} + {/if} + {sp}{call tokens.COLON /}{sp}{$wrappedType} + {/param} + {param class: 'type-def' /} + {param id: '{$typeName}' /} + {/call} +{/template} + {template .atom} {@param name: string} {$name} diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/unwrappers/UnwrappersHtml.java b/src/java/com/claro/module_system/clarodocs/html_rendering/unwrappers/UnwrappersHtml.java index 0c202d98..c3b173f7 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/unwrappers/UnwrappersHtml.java +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/unwrappers/UnwrappersHtml.java @@ -26,6 +26,8 @@ public static void renderUnwrappersBlock( unwrappedTypeName, procedures.getProceduresList().stream() .map(ProcedureHtml::generateProcedureHtml) + // TODO(steving) Temporary until migrate to using SanitizedContent here. + .map(Object::toString) .collect(Collectors.joining("\n")) ) )); diff --git a/src/java/com/claro/module_system/clarodocs/html_rendering/utils.soy b/src/java/com/claro/module_system/clarodocs/html_rendering/utils.soy index e6f16fc2..2799207c 100644 --- a/src/java/com/claro/module_system/clarodocs/html_rendering/utils.soy +++ b/src/java/com/claro/module_system/clarodocs/html_rendering/utils.soy @@ -1,7 +1,7 @@ {namespace utils} {template .commaSep} - {@param elems: list} + {@param elems: list} {for $e, $i in $elems} {if $i > 0}, {/if} {$e}