文档增加强制重写域名功能

This commit is contained in:
暮光:城中城
2018-12-20 23:28:05 +08:00
parent 28b8b5e6d1
commit 1874d3ed26
8 changed files with 380 additions and 302 deletions

View File

@@ -1,128 +1,130 @@
/**
* 以每个Tag方式生成并展示
* 核心信息控制器
* /api/data/getDataList
* /api/data/getDataDetail
* 跟进控制器
* /api/track/getTrackList
* /api/track/getTrackDetail
*
* 先把树形的写完了再写这个,,
*
* @author 暮光:城中城
* @since 2018年5月26日
*/
function createTreeViewByTag(json, keywords) {
var pathIndex = {};
var paths = json.paths;
var domain = json.domainUrl;// 服务器代理会返回此属性
if(isEmpty(domain)) {
domain = "http://" + json.host + json.basePath;
}
if(domain.endWith("/")) {
domain = domain.substring(0, domain.length - 1);
}
if (isEmptyObject(paths)) {
return;
}
//console.log(paths);
Object.keys(paths).forEach(function(key){
//console.log(key, paths[key]);
if(!findInPathsValue(key, paths[key], keywords)) {
return;
}
setRequestMethodForTag(domain, paths[key], pathIndex, key, "get");
setRequestMethodForTag(domain, paths[key], pathIndex, key, "head");
setRequestMethodForTag(domain, paths[key], pathIndex, key, "post");
setRequestMethodForTag(domain, paths[key], pathIndex, key, "put");
setRequestMethodForTag(domain, paths[key], pathIndex, key, "patch");
setRequestMethodForTag(domain, paths[key], pathIndex, key, "delete");
setRequestMethodForTag(domain, paths[key], pathIndex, key, "options");
setRequestMethodForTag(domain, paths[key], pathIndex, key, "trace");
});
//console.log(pathIndex);
var htmlStr = '<li>';
htmlStr += '<a href="#">'+json.info.title+'</a>';
htmlStr += '<ul>';
htmlStr += getTreeHtmlForTag(pathIndex, projectTreeIdIndex);
htmlStr += '</ul>';
htmlStr += '</li>';
$('#apiPathTree .projects').append(htmlStr);
projectTreeIdIndex++;
}
/**
* 设置对象的各种请求方式,存在则复制
* @param source 资源原始json的paths的指定对象
* @param pathObj 当前的待赋值对象
* @param url url绝对路径
* @param method 请求方式post、get...
* @returns
*/
function setRequestMethodForTag(domain, source, pathObj, url, method) {
if (isEmpty(source[method])) {
return;
}
source[method].tags.forEach(function(val, index) {
var tempObj = pathObj[val];
if(isEmpty(tempObj)) {
tempObj = pathObj[val] = {};
}
var tempUrlObj = tempObj[url];
if(isEmpty(tempUrlObj)) {
tempUrlObj = tempObj[url] = {};
}
var tempPath = projectTreeIdIndex + url + "." + method;
tempUrlObj[method] = source[method];
tempUrlObj[method].path = tempPath;
tempUrlObj[method].url = url;
tempUrlObj[method].method = method;
tempUrlObj[method].domain = domain;
treePathDataMap.set(tempPath, source[method]);
});
}
/**
* 将对象列表递归的方式转换成文档格式html字符串
* @param pathData 处理后的对象列表
* @returns 生成的html字符串
*/
function getTreeHtmlForTag(pathData, treeIdStr) {
var tempStr = "";
var indexNow = 1;
// get, head, post, put, patch, delete, options, trace
var actionArrays = ["get", "head", "post", "put", "patch", "delete", "options", "trace"];
Object.keys(pathData).forEach(function(key){
var tempNode = pathData[key];
var tempTreeId = treeIdStr + "_" + indexNow;
// 只有一个子元素而且有method元素说明是只有一个节点
var nodeSub = getObjectFirstAttributeIfOnly(tempNode);
if(nodeSub != null && isNotEmpty(nodeSub.method)) {
var summary = isEmpty(nodeSub.summary) ? "" : "(" + nodeSub.summary + ")";
if(summary.length > 10){
summary = summary.substring(0, 10)+"...)";// 防止被撑得太长只显示10个字
}
nodeSub.treeId = tempTreeId;
tempStr += '<li m-id="'+tempTreeId+'"><a href="#" class="show-doc" path="'+nodeSub.path+'">'+key+'<span>'+summary+'</span></a></li>';
} else if(haveString(actionArrays, key)) {
//console.log(tempTreeId);
tempNode.treeId = tempTreeId;
var summary = isEmpty(tempNode.summary) ? "" : "("+tempNode.summary+")";
if(summary.length > 10){
summary = summary.substring(0, 10)+"...)";// 防止被撑得太长只显示10个字
}
tempStr += '<li m-id="'+tempTreeId+'"><a href="#" class="show-doc" path="'+tempNode.path+'">'+key+'<span>'+summary+'</span></a></li>';
} else {
tempStr += '<li>';
tempStr += '<a href="#">'+key+'</a>';
tempStr += '<ul>';
tempStr += getTreeHtmlForTag(tempNode, tempTreeId);
tempStr += '</ul>';
tempStr += '</li>';
}
indexNow++;
});
return tempStr;
}
/**
* 以每个Tag方式生成并展示
* 核心信息控制器
* /api/data/getDataList
* /api/data/getDataDetail
* 跟进控制器
* /api/track/getTrackList
* /api/track/getTrackDetail
*
* 先把树形的写完了再写这个,,
*
* @author 暮光:城中城
* @since 2018年5月26日
*/
function createTreeViewByTag(json, keywords) {
var pathIndex = {};
var paths = json.paths;
var domain = json.domainUrl;// 服务器代理会返回此属性
var rewriteDomainUrl = json.rewriteDomainUrl;// 服务器代理会返回此属性
if(isEmpty(domain)) {
domain = "http://" + json.host + json.basePath;
}
if(domain.endWith("/")) {
domain = domain.substring(0, domain.length - 1);
}
if (isEmptyObject(paths)) {
return;
}
//console.log(paths);
Object.keys(paths).forEach(function(key){
//console.log(key, paths[key]);
if(!findInPathsValue(key, paths[key], keywords)) {
return;
}
setRequestMethodForTag(rewriteDomainUrl, domain, paths[key], pathIndex, key, "get");
setRequestMethodForTag(rewriteDomainUrl, domain, paths[key], pathIndex, key, "head");
setRequestMethodForTag(rewriteDomainUrl, domain, paths[key], pathIndex, key, "post");
setRequestMethodForTag(rewriteDomainUrl, domain, paths[key], pathIndex, key, "put");
setRequestMethodForTag(rewriteDomainUrl, domain, paths[key], pathIndex, key, "patch");
setRequestMethodForTag(rewriteDomainUrl, domain, paths[key], pathIndex, key, "delete");
setRequestMethodForTag(rewriteDomainUrl, domain, paths[key], pathIndex, key, "options");
setRequestMethodForTag(rewriteDomainUrl, domain, paths[key], pathIndex, key, "trace");
});
//console.log(pathIndex);
var htmlStr = '<li>';
htmlStr += '<a href="#">'+json.info.title+'</a>';
htmlStr += '<ul>';
htmlStr += getTreeHtmlForTag(pathIndex, projectTreeIdIndex);
htmlStr += '</ul>';
htmlStr += '</li>';
$('#apiPathTree .projects').append(htmlStr);
projectTreeIdIndex++;
}
/**
* 设置对象的各种请求方式,存在则复制
* @param source 资源原始json的paths的指定对象
* @param pathObj 当前的待赋值对象
* @param url url绝对路径
* @param method 请求方式post、get...
* @returns
*/
function setRequestMethodForTag(rewriteDomainUrl, domain, source, pathObj, url, method) {
if (isEmpty(source[method])) {
return;
}
source[method].tags.forEach(function(val, index) {
var tempObj = pathObj[val];
if(isEmpty(tempObj)) {
tempObj = pathObj[val] = {};
}
var tempUrlObj = tempObj[url];
if(isEmpty(tempUrlObj)) {
tempUrlObj = tempObj[url] = {};
}
var tempPath = projectTreeIdIndex + url + "." + method;
tempUrlObj[method] = source[method];
tempUrlObj[method].path = tempPath;
tempUrlObj[method].url = url;
tempUrlObj[method].method = method;
tempUrlObj[method].domain = domain;
tempUrlObj[method].rewriteDomainUrl = rewriteDomainUrl;
treePathDataMap.set(tempPath, source[method]);
});
}
/**
* 将对象列表递归的方式转换成文档格式html字符串
* @param pathData 处理后的对象列表
* @returns 生成的html字符串
*/
function getTreeHtmlForTag(pathData, treeIdStr) {
var tempStr = "";
var indexNow = 1;
// get, head, post, put, patch, delete, options, trace
var actionArrays = ["get", "head", "post", "put", "patch", "delete", "options", "trace"];
Object.keys(pathData).forEach(function(key){
var tempNode = pathData[key];
var tempTreeId = treeIdStr + "_" + indexNow;
// 只有一个子元素而且有method元素说明是只有一个节点
var nodeSub = getObjectFirstAttributeIfOnly(tempNode);
if(nodeSub != null && isNotEmpty(nodeSub.method)) {
var summary = isEmpty(nodeSub.summary) ? "" : "(" + nodeSub.summary + ")";
if(summary.length > 10){
summary = summary.substring(0, 10)+"...)";// 防止被撑得太长只显示10个字
}
nodeSub.treeId = tempTreeId;
tempStr += '<li m-id="'+tempTreeId+'"><a href="#" class="show-doc" path="'+nodeSub.path+'">'+key+'<span>'+summary+'</span></a></li>';
} else if(haveString(actionArrays, key)) {
//console.log(tempTreeId);
tempNode.treeId = tempTreeId;
var summary = isEmpty(tempNode.summary) ? "" : "("+tempNode.summary+")";
if(summary.length > 10){
summary = summary.substring(0, 10)+"...)";// 防止被撑得太长只显示10个字
}
tempStr += '<li m-id="'+tempTreeId+'"><a href="#" class="show-doc" path="'+tempNode.path+'">'+key+'<span>'+summary+'</span></a></li>';
} else {
tempStr += '<li>';
tempStr += '<a href="#">'+key+'</a>';
tempStr += '<ul>';
tempStr += getTreeHtmlForTag(tempNode, tempTreeId);
tempStr += '</ul>';
tempStr += '</li>';
}
indexNow++;
});
return tempStr;
}

View File

@@ -1,141 +1,143 @@
/**
* 以树形方式生成并展示:
* /api
* /data
* /getDateList
* post
* get
* @author 暮光:城中城
* @since 2018年5月26日
*/
/**
* 把原始的json字符串转换成对象列表的方式方便后续使用
* @param json swagger的原始对象
* @returns
*/
function createTreeViewByTree(json, keywords) {
var pathIndex = {};
var paths = json.paths;
var domain = json.domainUrl;// 服务器代理会返回此属性
if(isEmpty(domain)) {
domain = "http://" + json.host + json.basePath;
}
if(domain.endWith("/")) {
domain = domain.substring(0, domain.length - 1);
}
if (isEmptyObject(paths)) {
return;
}
//console.log(paths);
Object.keys(paths).forEach(function(key){
//console.log(key, paths[key]);
if(!findInPathsValue(key, paths[key], keywords)) {
return;
}
var keyArr = key.split("/");
var nowPathObj = null;
keyArr.forEach(function(val, index) {
//console.log(val, index);
if(isEmpty(val) && index == 0) {
return;
}
var nowPath = "/" + val;
if(nowPathObj == null) {
nowPathObj = {};
nowPathObj[nowPath] = pathIndex[nowPath];
if(nowPathObj[nowPath] == null) {
nowPathObj[nowPath] = {};
pathIndex[nowPath] = nowPathObj[nowPath];
}
}
var tempPathObj = nowPathObj[nowPath];
if(isEmpty(tempPathObj)) {
tempPathObj = nowPathObj[nowPath] = {};
}
nowPathObj = tempPathObj;
if(index == keyArr.length - 1) {
//get, head, post, put, patch, delete, options, trace
setRequestMethodForTree(domain, paths[key], tempPathObj, key, "get");
setRequestMethodForTree(domain, paths[key], tempPathObj, key, "head");
setRequestMethodForTree(domain, paths[key], tempPathObj, key, "post");
setRequestMethodForTree(domain, paths[key], tempPathObj, key, "put");
setRequestMethodForTree(domain, paths[key], tempPathObj, key, "patch");
setRequestMethodForTree(domain, paths[key], tempPathObj, key, "delete");
setRequestMethodForTree(domain, paths[key], tempPathObj, key, "options");
setRequestMethodForTree(domain, paths[key], tempPathObj, key, "trace");
}
});
});
var htmlStr = '<li>';
htmlStr += '<a href="#">'+json.info.title+'</a>';
htmlStr += '<ul>';
htmlStr += getTreeHtmlForTree(pathIndex, projectTreeIdIndex);
htmlStr += '</ul>';
htmlStr += '</li>';
$('#apiPathTree .projects').append(htmlStr);
projectTreeIdIndex++;
}
/**
* 设置对象的各种请求方式,存在则复制
* @param source 资源原始json的paths的指定对象
* @param pathObj 当前的待赋值对象
* @param url url绝对路径
* @param method 请求方式post、get...
* @returns
*/
function setRequestMethodForTree(domain, source, pathObj, url, method) {
if (isEmpty(source[method])) {
return;
}
var tempPath = projectTreeIdIndex + url + "." + method;
pathObj[method] = source[method];
pathObj[method].path = tempPath;
pathObj[method].url = url;
pathObj[method].method = method;
pathObj[method].domain = domain;
treePathDataMap.set(tempPath, source[method]);
}
/**
* 将对象列表递归的方式转换成文档格式html字符串
* @param pathData 处理后的对象列表
* @returns 生成的html字符串
*/
function getTreeHtmlForTree(pathData, treeIdStr) {
var tempStr = "";
var indexNow = 1;
Object.keys(pathData).forEach(function(key){
var tempNode = pathData[key];
var tempTreeId = treeIdStr + "_" + indexNow;
var nodeSub = getObjectFirstAttributeIfOnly(tempNode);
if(nodeSub != null && isNotEmpty(nodeSub.method)) {
//console.log(nodeSub);
nodeSub.treeId = tempTreeId;
var summary = isEmpty(nodeSub.summary) ? "" : "("+nodeSub.summary+")";
if(summary.length > 10){
summary = summary.substring(0, 10)+"...)";// 防止被撑得太长只显示10个字
}
tempStr += '<li m-id="'+tempTreeId+'"><a href="#" class="show-doc" path="'+nodeSub.path+'">'+key+'<span>'+summary+'</span></a></li>';
} else if(key.indexOf("/") < 0) {
//console.log(tempTreeId);
tempNode.treeId = tempTreeId;
var summary = isEmpty(tempNode.summary) ? "" : "("+tempNode.summary+")";
if(summary.length > 10){
summary = summary.substring(0, 10)+"...)";// 防止被撑得太长只显示10个字
}
tempStr += '<li m-id="'+tempTreeId+'"><a href="#" class="show-doc" path="'+tempNode.path+'">'+key+'<span>'+summary+'</span></a></li>';
} else {
tempStr += '<li>';
tempStr += '<a href="#">'+key+'</a>';
tempStr += '<ul>';
tempStr += getTreeHtmlForTree(tempNode, tempTreeId);
tempStr += '</ul>';
tempStr += '</li>';
}
indexNow++;
});
return tempStr;
}
/**
* 以树形方式生成并展示:
* /api
* /data
* /getDateList
* post
* get
* @author 暮光:城中城
* @since 2018年5月26日
*/
/**
* 把原始的json字符串转换成对象列表的方式方便后续使用
* @param json swagger的原始对象
* @returns
*/
function createTreeViewByTree(json, keywords) {
var pathIndex = {};
var paths = json.paths;
var domain = json.domainUrl;// 服务器代理会返回此属性
var rewriteDomainUrl = json.rewriteDomainUrl;// 服务器代理会返回此属性
if(isEmpty(domain)) {
domain = "http://" + json.host + json.basePath;
}
if(domain.endWith("/")) {
domain = domain.substring(0, domain.length - 1);
}
if (isEmptyObject(paths)) {
return;
}
//console.log(paths);
Object.keys(paths).forEach(function(key){
//console.log(key, paths[key]);
if(!findInPathsValue(key, paths[key], keywords)) {
return;
}
var keyArr = key.split("/");
var nowPathObj = null;
keyArr.forEach(function(val, index) {
//console.log(val, index);
if(isEmpty(val) && index == 0) {
return;
}
var nowPath = "/" + val;
if(nowPathObj == null) {
nowPathObj = {};
nowPathObj[nowPath] = pathIndex[nowPath];
if(nowPathObj[nowPath] == null) {
nowPathObj[nowPath] = {};
pathIndex[nowPath] = nowPathObj[nowPath];
}
}
var tempPathObj = nowPathObj[nowPath];
if(isEmpty(tempPathObj)) {
tempPathObj = nowPathObj[nowPath] = {};
}
nowPathObj = tempPathObj;
if(index == keyArr.length - 1) {
//get, head, post, put, patch, delete, options, trace
setRequestMethodForTree(rewriteDomainUrl, domain, paths[key], tempPathObj, key, "get");
setRequestMethodForTree(rewriteDomainUrl, domain, paths[key], tempPathObj, key, "head");
setRequestMethodForTree(rewriteDomainUrl, domain, paths[key], tempPathObj, key, "post");
setRequestMethodForTree(rewriteDomainUrl, domain, paths[key], tempPathObj, key, "put");
setRequestMethodForTree(rewriteDomainUrl, domain, paths[key], tempPathObj, key, "patch");
setRequestMethodForTree(rewriteDomainUrl, domain, paths[key], tempPathObj, key, "delete");
setRequestMethodForTree(rewriteDomainUrl, domain, paths[key], tempPathObj, key, "options");
setRequestMethodForTree(rewriteDomainUrl, domain, paths[key], tempPathObj, key, "trace");
}
});
});
var htmlStr = '<li>';
htmlStr += '<a href="#">'+json.info.title+'</a>';
htmlStr += '<ul>';
htmlStr += getTreeHtmlForTree(pathIndex, projectTreeIdIndex);
htmlStr += '</ul>';
htmlStr += '</li>';
$('#apiPathTree .projects').append(htmlStr);
projectTreeIdIndex++;
}
/**
* 设置对象的各种请求方式,存在则复制
* @param source 资源原始json的paths的指定对象
* @param pathObj 当前的待赋值对象
* @param url url绝对路径
* @param method 请求方式post、get...
* @returns
*/
function setRequestMethodForTree(rewriteDomainUrl, domain, source, pathObj, url, method) {
if (isEmpty(source[method])) {
return;
}
var tempPath = projectTreeIdIndex + url + "." + method;
pathObj[method] = source[method];
pathObj[method].path = tempPath;
pathObj[method].url = url;
pathObj[method].method = method;
pathObj[method].domain = domain;
pathObj[method].rewriteDomainUrl = rewriteDomainUrl;
treePathDataMap.set(tempPath, source[method]);
}
/**
* 将对象列表递归的方式转换成文档格式html字符串
* @param pathData 处理后的对象列表
* @returns 生成的html字符串
*/
function getTreeHtmlForTree(pathData, treeIdStr) {
var tempStr = "";
var indexNow = 1;
Object.keys(pathData).forEach(function(key){
var tempNode = pathData[key];
var tempTreeId = treeIdStr + "_" + indexNow;
var nodeSub = getObjectFirstAttributeIfOnly(tempNode);
if(nodeSub != null && isNotEmpty(nodeSub.method)) {
//console.log(nodeSub);
nodeSub.treeId = tempTreeId;
var summary = isEmpty(nodeSub.summary) ? "" : "("+nodeSub.summary+")";
if(summary.length > 10){
summary = summary.substring(0, 10)+"...)";// 防止被撑得太长只显示10个字
}
tempStr += '<li m-id="'+tempTreeId+'"><a href="#" class="show-doc" path="'+nodeSub.path+'">'+key+'<span>'+summary+'</span></a></li>';
} else if(key.indexOf("/") < 0) {
//console.log(tempTreeId);
tempNode.treeId = tempTreeId;
var summary = isEmpty(tempNode.summary) ? "" : "("+tempNode.summary+")";
if(summary.length > 10){
summary = summary.substring(0, 10)+"...)";// 防止被撑得太长只显示10个字
}
tempStr += '<li m-id="'+tempTreeId+'"><a href="#" class="show-doc" path="'+tempNode.path+'">'+key+'<span>'+summary+'</span></a></li>';
} else {
tempStr += '<li>';
tempStr += '<a href="#">'+key+'</a>';
tempStr += '<ul>';
tempStr += getTreeHtmlForTree(tempNode, tempTreeId);
tempStr += '</ul>';
tempStr += '</li>';
}
indexNow++;
});
return tempStr;
}

View File

@@ -28,8 +28,9 @@ var defaultUserSettings = {
autoFillParam : 0,// 自动填充参数0=否 1=智能填充 2=全部填充
onlyUseLastParam : 0,// 是否仅使用上次请求参数
showParamType : 1,// 是否展示字段的类型
catalogShowType : 1,// 目录的展示方式1=url分成一层一层的展示、2=整个url显示为一层展示
catalogShowType : 2,// 目录的展示方式1=url分成一层一层的展示、2=整个url显示为一层展示
treeShowType : 1,// 树形菜单展示方式1=tree-angles、2=tree-menu、3=默认4=tree-folders、5=tree-chevrons
forceRewriteDomain: 0,// 强制重写域名 0=否 1=是
projects : [],// 所有的项目列表
removedProjects : [],// 被移除的项目列表
prevWNow : 360
@@ -331,7 +332,11 @@ $("#apiPathTree").on("click", ".show-doc", function(){
docInfo = getNotEmptyStr(data.summary);
}
// 处理在线调试
$("#postUrlInput").val(data.domain + docUrl);
if (userSettings.forceRewriteDomain == 1 && isNotEmpty(data.rewriteDomainUrl)) {
$("#postUrlInput").val(data.rewriteDomainUrl + docUrl);
} else {
$("#postUrlInput").val(data.domain + docUrl);
}
// 处理模拟返回
$("#simulationResultUrl").text(docUrl);
$("#simulationResultUrlTest").text(data.domain + docUrl + "?zyplayerApiTest=1");
@@ -891,19 +896,6 @@ function documentLoadFinish() {
$('#homePageDashboard').dashboard({draggable: false});
}
/**
* 修改用户的选项的显示
* @param
* @returns
*/
function updateUserSettingsUi() {
$("input[name='treeShowType'][value='"+userSettings.treeShowType+"']").prop("checked",true);
$("input[name='catalogShowType'][value='"+userSettings.catalogShowType+"']").prop("checked",true);
$("input[name='showParamType'][value='"+userSettings.showParamType+"']").prop("checked",true);
$("input[name='onlyUseLastParam'][value='"+userSettings.onlyUseLastParam+"']").prop("checked",true);
$("input[name='autoFillParam'][value='"+userSettings.autoFillParam+"']").prop("checked",true);
}
/**
* 修改树形菜单展示类型
* @param
@@ -960,7 +952,6 @@ function initUserSettings() {
}
changeContentWidth(userSettings.prevWNow);
updateTreeShowType();
updateUserSettingsUi();
// 增加文档
getDocumentListByService();
});