From c81b57b7b37b74c16e1d2892a00a99726d506bc8 Mon Sep 17 00:00:00 2001 From: oppofind <836575280@qq.com> Date: Sat, 19 Dec 2020 18:18:30 +0800 Subject: [PATCH] complete search --- .../power/doc/builder/DocBuilderTemplate.java | 4 +- .../power/doc/builder/HtmlApiDocBuilder.java | 24 +++++----- .../builder/rpc/RpcDocBuilderTemplate.java | 9 +++- .../power/doc/builder/rpc/RpcHtmlBuilder.java | 1 - .../doc/constants/DocGlobalConstants.java | 20 +++++--- .../{mock-all.html => debug-all.html} | 6 ++- .../template/dubbo/DubboAllInOne.html | 46 +++++++++++-------- .../resources/template/dubbo/DubboSearch.btl | 15 +++--- src/main/resources/template/html/debug.html | 5 ++ src/main/resources/template/html/index.html | 2 +- src/main/resources/template/html/mock.html | 1 - .../template/js/{mock.js => debug.js} | 0 src/main/resources/template/js/search.js.btl | 19 ++++---- .../resources/template/js/search_all.js.btl | 17 ++++--- 14 files changed, 104 insertions(+), 65 deletions(-) rename src/main/resources/template/{mock-all.html => debug-all.html} (99%) create mode 100644 src/main/resources/template/html/debug.html delete mode 100644 src/main/resources/template/html/mock.html rename src/main/resources/template/js/{mock.js => debug.js} (100%) diff --git a/src/main/java/com/power/doc/builder/DocBuilderTemplate.java b/src/main/java/com/power/doc/builder/DocBuilderTemplate.java index 0659a4d..b289dc6 100644 --- a/src/main/java/com/power/doc/builder/DocBuilderTemplate.java +++ b/src/main/java/com/power/doc/builder/DocBuilderTemplate.java @@ -40,7 +40,7 @@ import java.util.Map; import java.util.Objects; import static com.power.doc.constants.DocGlobalConstants.FILE_SEPARATOR; -import static com.power.doc.constants.DocGlobalConstants.SEARCH_JS; +import static com.power.doc.constants.DocGlobalConstants.SEARCH_JS_OUT; /** * @author yu 2019/9/26. @@ -186,7 +186,7 @@ public class DocBuilderTemplate extends BaseDocBuilderTemplate { apiDoc1.setList(methodDocs); apiDocs.add(apiDoc1); tpl.binding(TemplateVariable.API_DOC_LIST.getVariable(), apiDocs); - FileUtil.nioWriteFile(tpl.render(), config.getOutPath() + FILE_SEPARATOR + SEARCH_JS); + FileUtil.nioWriteFile(tpl.render(), config.getOutPath() + FILE_SEPARATOR + SEARCH_JS_OUT); } diff --git a/src/main/java/com/power/doc/builder/HtmlApiDocBuilder.java b/src/main/java/com/power/doc/builder/HtmlApiDocBuilder.java index f2838de..3f6e548 100644 --- a/src/main/java/com/power/doc/builder/HtmlApiDocBuilder.java +++ b/src/main/java/com/power/doc/builder/HtmlApiDocBuilder.java @@ -45,10 +45,12 @@ public class HtmlApiDocBuilder { private static long now = System.currentTimeMillis(); - private static final String STR_TIME = DateTimeUtil.long2Str(now, DateTimeUtil.DATE_FORMAT_SECOND); - private static String INDEX_HTML = "index.html"; + private static final String ERROR_CODE_HTML = "error.html"; + + private static final String DICT_HTML = "dict.html"; + /** * build controller api @@ -81,28 +83,28 @@ public class HtmlApiDocBuilder { } if (config.isCreateDebugPage()) { builderTemplate.buildAllInOne(apiDocList, config, javaProjectBuilder, DEBUG_PAGE_ALL_TPL, DEBUG_PAGE_ALL_TPL); - Template mockJs = BeetlTemplateUtil.getByName("js/mock.js"); - FileUtil.nioWriteFile(mockJs.render(), config.getOutPath() + FILE_SEPARATOR + "mock.js"); + Template mockJs = BeetlTemplateUtil.getByName(DEBUG_JS_TPL); + FileUtil.nioWriteFile(mockJs.render(), config.getOutPath() + FILE_SEPARATOR + DEBUG_JS_OUT); } else { builderTemplate.buildAllInOne(apiDocList, config, javaProjectBuilder, ALL_IN_ONE_HTML_TPL, INDEX_HTML); } - builderTemplate.buildSearchJs(config, javaProjectBuilder, apiDocList, "js/search_all.js.btl"); + builderTemplate.buildSearchJs(config, javaProjectBuilder, apiDocList, SEARCH_ALL_JS_TPL); } else { String indexAlias; if (config.isCreateDebugPage()) { - indexAlias = "mock"; + indexAlias = "debug"; buildDoc(builderTemplate, apiDocList, config, javaProjectBuilder, DEBUG_PAGE_SINGLE_TPL, indexAlias); - Template mockJs = BeetlTemplateUtil.getByName("js/mock.js"); - FileUtil.nioWriteFile(mockJs.render(), config.getOutPath() + FILE_SEPARATOR + "mock.js"); + Template mockJs = BeetlTemplateUtil.getByName(DEBUG_JS_TPL); + FileUtil.nioWriteFile(mockJs.render(), config.getOutPath() + FILE_SEPARATOR + DEBUG_JS_OUT); } else { indexAlias = "api"; buildDoc(builderTemplate, apiDocList, config, javaProjectBuilder, SINGLE_INDEX_HTML_TPL, indexAlias); } builderTemplate.buildErrorCodeDoc(config, javaProjectBuilder, apiDocList, SINGLE_ERROR_HTML_TPL, - "error.html", indexAlias); + ERROR_CODE_HTML, indexAlias); builderTemplate.buildDirectoryDataDoc(config, javaProjectBuilder, apiDocList, - SINGLE_DICT_HTML_TPL, "dict.html", indexAlias); - builderTemplate.buildSearchJs(config, javaProjectBuilder, apiDocList, "js/search.js.btl"); + SINGLE_DICT_HTML_TPL, DICT_HTML, indexAlias); + builderTemplate.buildSearchJs(config, javaProjectBuilder, apiDocList, SEARCH_JS_TPL); } } diff --git a/src/main/java/com/power/doc/builder/rpc/RpcDocBuilderTemplate.java b/src/main/java/com/power/doc/builder/rpc/RpcDocBuilderTemplate.java index e3a063d..dbcbddf 100644 --- a/src/main/java/com/power/doc/builder/rpc/RpcDocBuilderTemplate.java +++ b/src/main/java/com/power/doc/builder/rpc/RpcDocBuilderTemplate.java @@ -45,6 +45,7 @@ import java.util.Map; import java.util.Objects; import static com.power.doc.constants.DocGlobalConstants.FILE_SEPARATOR; +import static com.power.doc.constants.DocGlobalConstants.RPC_OUT_DIR; /** * @author yu 2020/5/16. @@ -55,6 +56,12 @@ public class RpcDocBuilderTemplate extends BaseDocBuilderTemplate { private static final String DEPENDENCY_TITLE = "Add dependency"; + + public void checkAndInit(ApiConfig config) { + super.checkAndInit(config); + config.setOutPath(config.getOutPath() + FILE_SEPARATOR + RPC_OUT_DIR); + } + /** * Generate api documentation for all controllers. * @@ -106,7 +113,7 @@ public class RpcDocBuilderTemplate extends BaseDocBuilderTemplate { tpl.binding(TemplateVariable.CREATE_TIME.getVariable(), strTime); tpl.binding(TemplateVariable.PROJECT_NAME.getVariable(), config.getProjectName()); tpl.binding(TemplateVariable.RPC_CONSUMER_CONFIG.getVariable(), rpcConfigConfigContent); - + setDirectoryLanguageVariable(config, tpl); FileUtil.nioWriteFile(tpl.render(), outPath + FILE_SEPARATOR + outPutFileName); } diff --git a/src/main/java/com/power/doc/builder/rpc/RpcHtmlBuilder.java b/src/main/java/com/power/doc/builder/rpc/RpcHtmlBuilder.java index fbafa78..d9af0d1 100644 --- a/src/main/java/com/power/doc/builder/rpc/RpcHtmlBuilder.java +++ b/src/main/java/com/power/doc/builder/rpc/RpcHtmlBuilder.java @@ -67,7 +67,6 @@ public class RpcHtmlBuilder { config.setShowJavaType(true); RpcDocBuilderTemplate builderTemplate = new RpcDocBuilderTemplate(); builderTemplate.checkAndInit(config); - builderTemplate.checkAndInit(config); ProjectDocConfigBuilder configBuilder = new ProjectDocConfigBuilder(config, javaProjectBuilder); RpcDocBuildTemplate docBuildTemplate = new RpcDocBuildTemplate(); List apiDocList = docBuildTemplate.getApiData(configBuilder); diff --git a/src/main/java/com/power/doc/constants/DocGlobalConstants.java b/src/main/java/com/power/doc/constants/DocGlobalConstants.java index dd700f2..38567aa 100644 --- a/src/main/java/com/power/doc/constants/DocGlobalConstants.java +++ b/src/main/java/com/power/doc/constants/DocGlobalConstants.java @@ -6,6 +6,7 @@ package com.power.doc.constants; public interface DocGlobalConstants { int API_ORDER = 0; + String FILE_SEPARATOR = System.getProperty("file.separator"); String HTML_DOC_OUT_PATH = "src/main/resources/static/doc"; @@ -46,20 +47,21 @@ public interface DocGlobalConstants { String DICT_LIST_ADOC_TPL = "Dictionary.btl"; - String INDEX_TPL = "Index.btl"; + String SEARCH_ALL_JS_TPL = "js/search_all.js.btl"; - String INDEX_CSS_TPL = "index.css"; + String SEARCH_JS_TPL = "js/search.js.btl"; - String MARKDOWN_CSS_TPL = "markdown.css"; + String SEARCH_JS_OUT = "search.js"; - String SEARCH_JS = "search.js"; + String DEBUG_JS_TPL = "js/debug.js"; + + String DEBUG_JS_OUT = "debug.js"; String DEBUG_PAGE_TPL = "mock.html"; + String DEBUG_PAGE_ALL_TPL = "debug-all.html"; - String DEBUG_PAGE_ALL_TPL = "mock-all.html"; - - String DEBUG_PAGE_SINGLE_TPL = "html/mock.html"; + String DEBUG_PAGE_SINGLE_TPL = "html/debug.html"; String SINGLE_INDEX_HTML_TPL = "html/index.html"; @@ -69,6 +71,8 @@ public interface DocGlobalConstants { String ALL_IN_ONE_CSS = "AllInOne.css"; + String RPC_OUT_DIR = "rpc"; + String RPC_API_DOC_ADOC_TPL = "dubbo/Dubbo.adoc"; String RPC_ALL_IN_ONE_ADOC_TPL = "dubbo/DubboAllInOne.adoc"; @@ -168,6 +172,8 @@ public interface DocGlobalConstants { String EMPTY = ""; String ENUM = "enum"; + String YAPI_RESULT_TPL = "yapiJson.btl"; + String YAPI_JSON="/yapi.json"; } diff --git a/src/main/resources/template/mock-all.html b/src/main/resources/template/debug-all.html similarity index 99% rename from src/main/resources/template/mock-all.html rename to src/main/resources/template/debug-all.html index 38705ed..993f6a3 100644 --- a/src/main/resources/template/mock-all.html +++ b/src/main/resources/template/debug-all.html @@ -1 +1,5 @@ -<%if(isNotEmpty(projectName)){%>${projectName}<%}else{%>API Reference<%}%>
<%if(isNotEmpty(revisionLogList)){%>
<%for(revisionLog in revisionLogList){%><%}%>
VersionUpdate TimeStatusAuthorDescription

${revisionLog.version}

${revisionLog.revisionTime}

${revisionLog.status}

${revisionLog.author}

${revisionLog.remarks}

<%}%><%for(api in apiDocList){%>

${api.order}. ${api.desc}

<%for(doc in api.list){%>

<%if(doc.deprecated){%>${api.order}.${doc.order}. ${doc.desc}<%}else{%>${api.order}.${doc.order}. ${doc.desc}<%}%>

Type: ${doc.type}

<%if(isNotEmpty(doc.author)){%>

Author: ${doc.author}

<%}%>

Content-Type: ${doc.contentType}

Description: ${doc.detail}

<%if(isNotEmpty(doc.requestHeaders)){%>

Request-headers:

<%for(header in doc.requestHeaders){%><%}%>
HeaderValueTypeRequiredDescription

${header.name}

${header.type}

${header.required}

${header.desc}

<%}%><%if(isNotEmpty(doc.pathParams)){%>

Path-parameters:

<%for(param in doc.pathParams){%><%}%>
ParameterValueTypeRequiredDescription

${param.field}

${param.type}

${param.required}

${param.desc}

<%}%><%if(isNotEmpty(doc.queryParams)){%>

Query-parameters:

<%for(param in doc.queryParams){%><%}%>
ParameterValueTypeRequiredDescription

${param.field}

<%if(param.type=="file"){%><%}else{%><%}%>

${param.type}

${param.required}

${param.desc}

<%}%><%if(isNotEmpty(doc.requestParams)){%>

Body-parameters:

<%for(param in doc.requestParams){%><%}%>
ParameterTypeRequiredDescription

${param.field}

${param.type}

${param.required}

${param.desc}

<%}%><%if(isNotEmpty(doc.requestExample.jsonBody)&&isRequestExample){%>

Request-body:

<%}%><%if(isNotEmpty(doc.responseParams)){%>

Response-fields:

<%for(param in doc.responseParams){%><%}%>
FieldTypeDescriptionSince

${param.field}

${param.type}

${param.desc}

${param.version}

<%}%>

<%if(isNotEmpty(doc.responseUsage)&&isResponseExample){%>

Response-example:

${doc.responseUsage}
<%}%><%if(isNotEmpty(doc.requestUsage)&&isRequestExample){%>

Curl-example:

${doc.requestUsage}
<%}%>
<%}%>
<%}%><%if(isNotEmpty(errorCodeList)){%>

${apiDocList.~size+1}. ${errorListTitle}

<%for(error in errorCodeList){%><%}%>
Error codeDescription

${error.value}

${error.desc}

<%}%><%if(isNotEmpty(dictList)){%>

${dictListOrder}. ${dictListTitle}

<% for(dict in dictList){ %>

${dictListOrder}.${dict.order}. ${dict.title}

<%for(dataDict in dict.dataDictList){%><%}%>
CodeTypeDescription

${dataDict.value}

${dataDict.type}

${dataDict.desc}

<%}%>
<%}%>
Generated by smart-doc at ${createTime}Suggestions,contact,support and error reporting on Gitee or Github
\ No newline at end of file +<%if(isNotEmpty(projectName)){%>${projectName}<%}else{%>API Reference<%}%>
<%if(isNotEmpty(revisionLogList)){%>
<%for(revisionLog in revisionLogList){%><%}%>
VersionUpdate TimeStatusAuthorDescription

${revisionLog.version}

${revisionLog.revisionTime}

${revisionLog.status}

${revisionLog.author}

${revisionLog.remarks}

<%}%><%for(api in apiDocList){%>

${api.order}. ${api.desc}

<%for(doc in api.list){%>

<%if(doc.deprecated){%>${api.order}.${doc.order}. ${doc.desc}<%}else{%>${api.order}.${doc.order}. ${doc.desc}<%}%>

Type: ${doc.type}

<%if(isNotEmpty(doc.author)){%>

Author: ${doc.author}

<%}%>

Content-Type: ${doc.contentType}

Description: ${doc.detail}

<%if(isNotEmpty(doc.requestHeaders)){%>

Request-headers:

<%for(header in doc.requestHeaders){%><%}%>
HeaderValueTypeRequiredDescription

${header.name}

${header.type}

${header.required}

${header.desc}

<%}%><%if(isNotEmpty(doc.pathParams)){%>

Path-parameters:

<%for(param in doc.pathParams){%><%}%>
ParameterValueTypeRequiredDescription

${param.field}

${param.type}

${param.required}

${param.desc}

<%}%><%if(isNotEmpty(doc.queryParams)){%>

Query-parameters:

<%for(param in doc.queryParams){%><%}%>
ParameterValueTypeRequiredDescription

${param.field}

<%if(param.type=="file"){%><%}else{%><%}%>

${param.type}

${param.required}

${param.desc}

<%}%><%if(isNotEmpty(doc.requestParams)){%>

Body-parameters:

<%for(param in doc.requestParams){%><%}%>
ParameterTypeRequiredDescription

${param.field}

${param.type}

${param.required}

${param.desc}

<%}%><%if(isNotEmpty(doc.requestExample.jsonBody)&&isRequestExample){%>

Request-body:

<%}%><%if(isNotEmpty(doc.responseParams)){%>

Response-fields:

<%for(param in doc.responseParams){%><%}%>
FieldTypeDescriptionSince

${param.field}

${param.type}

${param.desc}

${param.version}

<%}%>

<%if(isNotEmpty(doc.responseUsage)&&isResponseExample){%>

Response-example:

${doc.responseUsage}
<%}%><%if(isNotEmpty(doc.requestUsage)&&isRequestExample){%>

Curl-example:

${doc.requestUsage}
<%}%>
<%}%>
<%}%><%if(isNotEmpty(errorCodeList)){%>

${apiDocList.~size+1}. ${errorListTitle}

<%for(error in errorCodeList){%><%}%>
Error codeDescription

${error.value}

${error.desc}

<%}%><%if(isNotEmpty(dictList)){%>

${dictListOrder}. ${dictListTitle}

<% for(dict in dictList){ %>

${dictListOrder}.${dict.order}. ${dict.title}

<%for(dataDict in dict.dataDictList){%><%}%>
CodeTypeDescription

${dataDict.value}

${dataDict.type}

${dataDict.desc}

<%}%>
<%}%>
Generated by smart-doc at ${createTime}Suggestions,contact,support and error reporting on Gitee or Github
+ + + + \ No newline at end of file diff --git a/src/main/resources/template/dubbo/DubboAllInOne.html b/src/main/resources/template/dubbo/DubboAllInOne.html index 197aee9..cc69df1 100644 --- a/src/main/resources/template/dubbo/DubboAllInOne.html +++ b/src/main/resources/template/dubbo/DubboAllInOne.html @@ -1,24 +1,32 @@ -<%if(isNotEmpty(projectName)){%>${projectName}<%}else{%>API Reference<%}%>
<%if(isNotEmpty(revisionLogList)){%>
<%for(revisionLog in revisionLogList){%><%}%>
VersionUpdate TimeStatusAuthorDescription

${revisionLog.version}

${revisionLog.revisionTime}

${revisionLog.status}

${revisionLog.author}

${revisionLog.remarks}

<%}%><%if(isNotEmpty(dependencyList)){%>

1. Add dependency

<%for(dp in dependencyList){%><dependency>    <groupId>${dp.groupId}</groupId>    <artifactId>${dp.artifactId}</artifactId>    <version>${dp.version}</version></dependency><%}%>
<%if(isNotEmpty(consumerConfigExample)){%>

Consumer config

${consumerConfigExample}
<%}%>
<%}%><%for(api in apiDocList){%>

${api.order+1}. ${api.desc}

URI: ${api.uri}

Service: ${api.name}

Protocol: ${api.protocol}

Author: ${api.author}

Version: ${api.version}

<%for(doc in api.list){%>

<%if(doc.deprecated){%>${api.order+1}.${doc.order}. ${doc.desc}<%}else{%>${api.order+1}.${doc.order}. ${doc.desc}<%}%>

Definition: ${doc.escapeMethodDefinition}

Description: ${doc.detail}

<%if(isNotEmpty(doc.requestParams)){%>

Invoke-parameters:

<%for(param in doc.requestParams){%><%}%>
ParameterTypeDescriptionRequiredSince

${param.field}

${param.type}

${param.desc}

${param.required}

${param.version}

<%}%><%if(isNotEmpty(doc.responseParams)){%>

Response-fields:

<%for(param in doc.responseParams){%><%}%>
FieldTypeDescriptionSince

${param.field}

${param.type}

${param.desc}

${param.version}

<%}%>
<%}%>
<%}%><%if(isNotEmpty(errorCodeList)){%>

${apiDocList.~size+2}. ${errorListTitle}

<%for(error in errorCodeList){%><%}%>
Error codeDescription

${error.value}

${error.desc}

<%}%>
Generated by smart-doc at ${createTime}Suggestions,contact,support and error reporting on Gitee or Github
+<%if(isNotEmpty(projectName)){%>${projectName}<%}else{%>API Reference<%}%>
<%if(isNotEmpty(revisionLogList)){%>
<%for(revisionLog in revisionLogList){%><%}%>
VersionUpdate TimeStatusAuthorDescription

${revisionLog.version}

${revisionLog.revisionTime}

${revisionLog.status}

${revisionLog.author}

${revisionLog.remarks}

<%}%><%if(isNotEmpty(dependencyList)){%>

1. Add dependency

+
<%for(dp in dependencyList){%><dependency>
+    <groupId>${dp.groupId}</groupId>
+    <artifactId>${dp.artifactId}</artifactId>
+    <version>${dp.version}</version>
+</dependency>
+<%}%>
+
+
<%if(isNotEmpty(consumerConfigExample)){%>

Consumer config

${consumerConfigExample}
<%}%>
<%}%><%for(api in apiDocList){%>

${api.order+1}. ${api.desc}

URI: ${api.uri}

Service: ${api.name}

Protocol: ${api.protocol}

Author: ${api.author}

Version: ${api.version}

<%for(doc in api.list){%>

<%if(doc.deprecated){%>${api.order+1}.${doc.order}. ${doc.desc}<%}else{%>${api.order+1}.${doc.order}. ${doc.desc}<%}%>

Definition: ${doc.escapeMethodDefinition}

Description: ${doc.detail}

<%if(isNotEmpty(doc.requestParams)){%>

Invoke-parameters:

<%for(param in doc.requestParams){%><%}%>
ParameterTypeDescriptionRequiredSince

${param.field}

${param.type}

${param.desc}

${param.required}

${param.version}

<%}%><%if(isNotEmpty(doc.responseParams)){%>

Response-fields:

<%for(param in doc.responseParams){%><%}%>
FieldTypeDescriptionSince

${param.field}

${param.type}

${param.desc}

${param.version}

<%}%>
<%}%>
<%}%><%if(isNotEmpty(errorCodeList)){%>

${apiDocList.~size+2}. ${errorListTitle}

<%for(error in errorCodeList){%><%}%>
Error codeDescription

${error.value}

${error.desc}

<%}%>
Generated by smart-doc at ${createTime}Suggestions,contact,support and error reporting on Gitee or Github
\ No newline at end of file diff --git a/src/main/resources/template/dubbo/DubboSearch.btl b/src/main/resources/template/dubbo/DubboSearch.btl index ac841b6..d803798 100644 --- a/src/main/resources/template/dubbo/DubboSearch.btl +++ b/src/main/resources/template/dubbo/DubboSearch.btl @@ -16,7 +16,7 @@ api[${apiLP.dataIndex}].list.push({ <%}%> document.onkeydown = keyDownSearch; function keyDownSearch(e) { - const theEvent = e || window.event; + const theEvent = e; const code = theEvent.keyCode || theEvent.which || theEvent.charCode; if (code == 13) { const search = document.getElementById('search'); @@ -56,11 +56,14 @@ function keyDownSearch(e) { } let html; if (searchValue == '') { - html = buildAccordion(api); - console.log(html); + const liClass = ""; + const display = "display: none"; + html = buildAccordion(api,liClass,display); document.getElementById('accordion').innerHTML = html; } else { - html = buildAccordion(searchArr); + const liClass = "open"; + const display = "display: block"; + html = buildAccordion(searchArr,liClass,display); document.getElementById('accordion').innerHTML = html; } const Accordion = function (el, multiple) { @@ -87,9 +90,9 @@ function buildAccordion(apiData) { let doc; if (apiData.length > 0) { for (let j = 0; j < apiData.length; j++) { - html += '
  • '; + html += '
  • '; html += ' ' + apiData[j].order + '. ' + apiData[j].desc + ''; - html += '