Files
zyplayer-doc/zyplayer-doc-swagger/src/main/resources/webjars/open-doc/js/mg-ui.js
2019-01-28 22:26:34 +08:00

1012 lines
32 KiB
JavaScript
Raw Blame History

This file contains ambiguous Unicode characters

This file contains Unicode characters that might be confused with other characters. If you think that this is intentional, you can safely ignore this warning. Use the Escape button to reveal them.

/**
* zyplayer-doc-swagger是swagger的一个前端实现使用简单、解析速度快、走心的设计
* 支持多项目同时展示,多种文档目录的展示方案,多种自定义配置,满足各种使用习惯。
* 使用中您有任何的意见和建议都可到源码地址处反馈哦!
* git地址https://gitee.com/zyplayer/zyplayer-doc
* @author 暮光:城中城
* @since 2018年5月20日
*/
// 参数说明对于的map全局对象
var definitionsDataMap = new Map();
// 依据目录树存储的map全局对象
var treePathDataMap = new Map();
var globalLoadingMessager;
// 树的下表
var projectTreeIdIndex = 1;
// 文档url加载的下标
var projectLoadingIndex = 0;
// 请求到的文档列表
var documentJsonArr = [];
// 调试的全局参数变量
var debugGlobalParam = [];
// 用户的配置对象
var userSettings = {};
// 默认用户的配置对象
var defaultUserSettings = {
autoFillParam : 0,// 自动填充参数0=否 1=智能填充 2=全部填充
onlyUseLastParam : 0,// 是否仅使用上次请求参数
showParamType : 1,// 是否展示字段的类型
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
};
var requestParamObj = {};
// 文档管理的tables
var rightContentTabs;
/**
* 网页加载完毕后的处理
*/
$(document).ready(function(){
globalLoadingMessager = new $.zui.Messager({type: 'primary', close: false, time: 0}).show();
showGlobalLoadingMessage('检查服务中,请稍候...', true);
ajaxTemp("swagger-mg-ui/storage/checkConfig", "post", "json", {
}, function(json){
}, function(msg){
}, function (xhr) {
showGlobalLoadingMessage('服务检查完成,请稍候...', true);
var serverStorage = false;
if (!isEmptyObject(xhr.responseJSON)) {
serverStorage = (xhr.responseJSON.errCode == 200);
}
if (!serverStorage) {
Toast.error("服务器端能力配置有误,新版本必须开启才能使用", 999999);
documentLoadFinish();
} else {
initUserSettings();
}
}
);
// open-doc去掉定义配置的标签页
});
/**
* 获取所有文档列表提供选择
* @returns
*/
function getDocumentListByService() {
// open-doc整个方法不同
showGlobalLoadingMessage('获取文档列表中,请稍候...', true);
var doc = getQueryString("doc");
addDocumentByLocationService(doc);
}
/**
* 增加文档-通过服务器接口
* @returns
*/
function addDocumentByService(choiceDocList) {
// 获取原始的swagger的json对象
showGlobalLoadingMessage('通过服务器端获取文档中,请稍候...', true);
ajaxTemp("swagger-mg-ui/document/docs", "post", "json", {choiceDocList: choiceDocList}, function(json){
//console.log(json);
showGlobalLoadingMessage('文档获取成功,解析中,请稍候...', true);
if(isEmptyObject(json) || json.errCode !== 200) {
Toast.error("获取文档错误,请检查!");
return;
}
for (var i = 0; i < json.data.length; i++) {
showGlobalLoadingMessage('解析第'+(i+1)+'份文档,请稍候...', true);
var tempDoc = deserialize(json.data[i]);
console.log(tempDoc);
documentJsonArr.push(tempDoc);// 加到所有文档
addHomePageDashboard(tempDoc, tempDoc.fullUrl);
createDefinitionsMapByJson(tempDoc);
if(userSettings.catalogShowType == 1) {
createTreeViewByTree(tempDoc);// url分成一层一层的展示
} else if(userSettings.catalogShowType == 2){
createTreeViewByTag(tempDoc);// tag方式整个url显示为一层
} else {
createTreeViewByTree(tempDoc);// url分成一层一层的展示
}
}
documentLoadFinish();
}, function(msg){
Toast.error("获取文档失败,请检查!");
});
}
/**
* 增加文档-通过服务器接口
* @returns
*/
function addDocumentByLocationService(choiceDocList) {
// 获取原始的swagger的json对象
globalLoadingMessager.show();
showGlobalLoadingMessage('通过服务器端获取文档中,请稍候...', true);
// open-doc请求地址不同
ajaxTemp("swagger-mg-ui/open-doc/docs", "post", "json", {choiceLocationList: choiceDocList}, function(json){
//console.log(json);
showGlobalLoadingMessage('文档获取成功,解析中,请稍候...', true);
if(isEmptyObject(json) || json.errCode !== 200) {
Toast.error("获取文档错误,请检查!");
return;
}
documentJsonArr = [];
initDashboard();
for (var i = 0; i < json.data.length; i++) {
showGlobalLoadingMessage('解析第' + (i + 1) + '份文档,请稍候...', true);
var tempDoc = deserialize(json.data[i]);
console.log(tempDoc);
documentJsonArr.push(tempDoc);// 加到所有文档
addHomePageDashboard(tempDoc, tempDoc.fullUrl);
createDefinitionsMapByJson(tempDoc);
if (userSettings.catalogShowType == 1) {
createTreeViewByTree(tempDoc);// url分成一层一层的展示
} else if (userSettings.catalogShowType == 2) {
createTreeViewByTag(tempDoc);// tag方式整个url显示为一层
} else {
createTreeViewByTree(tempDoc);// url分成一层一层的展示
}
}
documentLoadFinish();
}, function(msg){
Toast.error("获取文档失败,请检查!");
});
}
/**
* 自由拖动改变左右框架的宽度
*/
$("#resizableLeftRight").mgResizableWidth({
prev:"#leftContent",
prevWtMin: 120, prevWtMax: 999999,
nextWtMin: 360, nextWtMax: 999999,
onresize:function(prevWNow, nextWNow){
changeContentWidth(prevWNow);
},
onstart:function(){
$("body").addClass("unselect");
$("#rightContentMask").show();
},
onfinish:function(){
$("body").removeClass("unselect");
$("#rightContentMask").hide();
storeUserSettings();
}
});
/**
* 切换导航栏的宽度到最小或最大
*/
$("#changeContentWidth").click(function(){
var isMinWidth = ($("#leftContent").width() == 120);
changeContentWidth(isMinWidth ? 360 : 120);
});
/**
* 切换文档
*/
$("#choiceLocationList").on("click", ".dropdown-menu li", function(){
var text = $(this).find("a").text();
var location = $(this).find("a").data("location");
$("#choiceLocationList .choice-text").text(text);
// 切换文档
addDocumentByLocationService(location);
});
/**
* 搜索框回车事件
*/
$("#searchDocInput").keyup(function(e) {
if (e.keyCode == 13) {
searchDoc();
}
});
/**
* 搜索按钮点击
*/
$("#searchDocBt").click(function(){
searchDoc();
});
/**
* 导出文档-子页面调用-文档地址管理
*/
function exportDocument(){
// 清空
$("#exportDocumentText").val("");
$("#exportDocumentUl").show();
$("#exportDocumentModal .bottom-box").show();
$("#exportDocumentModal .alert").addClass("hidden");
$("#exportDocumentText").addClass("hidden");
$('#exportDocumentUl').empty();
for (var i = 0; i < documentJsonArr.length; i++) {
$("#exportDocumentUl").append('<li index='+i+'>'+decodeURI(documentJsonArr[i].fullUrl)+'</li>');
}
$('#exportDocumentModal').modal({moveable:true, backdrop: 'static'});
$('#exportDocumentModal').modal('ajustPosition', 'fit');
}
/**
* 确认导出
*/
$("#doExportBtn").click(function(){
var jsonStrAll = "";
var mgUiDataArr = "var mgUiDataArr = [";
$('#exportDocumentUl li.checked').each(function(i){
var index = $(this).attr("index");
var jsonObj = documentJsonArr[index];
var jsonStr = JSON.stringify(jsonObj);
jsonStrAll += "var mgUiData" + index + "=" + jsonStr + ";\n\n";
if(i > 0) {
mgUiDataArr += ", ";
}
mgUiDataArr += "mgUiData" + index;
});
if(isEmpty(jsonStrAll)){
Toast.warn("请输选择需要导出的文档");return;
}
jsonStrAll += mgUiDataArr + "];";
$("#exportDocumentText").val(jsonStrAll);
$("#exportDocumentUl").hide();
$("#exportDocumentModal .bottom-box").hide();
$("#exportDocumentModal .alert").removeClass("hidden");
$("#exportDocumentText").removeClass("hidden");
$('#exportDocumentModal').modal('ajustPosition', 'fit');
});
/**
* 切换选中和非选中样式
*/
$(".choise").on("click", "li", function(){
$(this).toggleClass("checked");
});
/**
* 页面导航切换
*/
$("#tabZpagesNavigationUl").on("click", ".page-nav", function(){
var id = $(this).data("id");
var href = $(this).data("href");
var icon = $(this).data("icon");
var reload = $(this).data("reload");
$(".tab-page").hide();
$(".tab-online-debug-page").hide();
$(".tab-zpages").show();
if(reload || $("#tab-"+id).length <= 0) {
var newTab = {id: id, url: href, type: 'iframe', icon: icon};
rightContentTabs.open(newTab);
} else {
$("#tab-nav-item-"+id+" .tab-nav-link").click();
}
});
/**
* 选择文档-确认
*/
$("#choiseDocBtn").click(function(){
var choiseDocList = "", choiseDocListObj = [];
var allDocListObj = [];
$('#choiseDocListUl li').each(function(k){
var tempUrl = $(this).attr("value");
if($(this).hasClass('checked')) {
if(k == 0){
choiseDocList = tempUrl;
}else{
choiseDocList += ',' + tempUrl;
}
choiseDocListObj.push(tempUrl);
}
allDocListObj.push(tempUrl);
});
addDocumentByService(choiseDocList);
$('#choiseDocModal').modal('hide');
});
/**
* 主页li点击事件展示主页
*/
$("#homePageLi").click(function(){
$(".tab-page,.tab-zpages").hide();
$(".tab-home-page").show();
});
/**
* 多行编辑header
*/
$("#bulkEditHeaderCheck").change(function() {
//console.log($(this).prop('checked'));
if($(this).prop('checked')) {
var requestHeaderForm = $("#requestHeaderForm").serializeArray();
var formStr = serializeArrayToBulkEdit(requestHeaderForm);
$("#bulkEditHeader").val(formStr);
$("#bulkEditHeader").show();
$("#requestHeaderForm table").hide();
} else {
var bulkEdit = $("#bulkEditHeader").val();
bulkEditToTable("#tabParamHeader", bulkEdit);
$("#requestHeaderForm table").show();
$("#bulkEditHeader").hide();
}
});
/**
* 多行编辑form
*/
$("#bulkEditFormCheck").change(function() {
//console.log($(this).prop('checked'));
if($(this).prop('checked')) {
var requestParamForm = $("#requestParamForm").serializeArray();
var formStr = serializeArrayToBulkEdit(requestParamForm);
$("#bulkEditForm").val(formStr);
$("#bulkEditForm").show();
$("#tabParamTypeForm table").hide();
} else {
var bulkEdit = $("#bulkEditForm").val();
bulkEditToTable("#tabParamTypeForm", bulkEdit);
$("#tabParamTypeForm table").show();
$("#bulkEditForm").hide();
}
});
$('[data-tab]').on('shown.zui.tab', function(e) {
var href = $(e.target).attr("href");
if("#tabParamTypeForm" == href) {
$(".form-to-url").show();
} else if("#tabParamTypeBody" == href) {
$(".form-to-url").hide();
}
//console.log('当前被激活的标签页', e.target);
//console.log('上一个标签页', e.relatedTarget);
});
/**
* api文档最后的节点点击展示文档页面
*/
$("#apiPathTree").on("click", ".show-doc", function(){
$(".tab-page").hide();
$(".tab-document").show();
var path = $(this).attr("path");
var data = treePathDataMap.get(path);
var docInfo = getNotEmptyStr(data.description);
var docUrl = getNotEmptyStr(data.url);
if(isEmpty(docInfo)) {
docInfo = getNotEmptyStr(data.summary);
}
// 处理在线调试
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");
$("#simulationResultUrlTest").attr("href", data.domain + docUrl + "?zyplayerApiTest=1");
$("#simulationResultText").val("");
// open-doc去掉了模拟返回
// 处理在线文档
$("#docUrl").text(docUrl);
$("#docRequestMethod").text(getNotEmptyStr(data.method));
$("#docInfo").text(docInfo);
$("#docConsumes").text(arrToString(data.consumes));
$("#docProduces").text(arrToString(data.produces));
$("#debugRequstType .btn .options").text(data.method.toUpperCase());
$("#tabParamTypeBody textarea").val("");
// 遍历参数列表
$("#docRequestParam table tbody").empty();
$("#docRequestExample table tbody").empty();
requestParamObj = {};
Formatjson.annotationObject = {};
//addRequestParamObj(requestParamObj, "Content-Type", "string", "header", false, "", arrToString(data.consumes));
if(isNotEmpty(data.parameters)) {
Object.keys(data.parameters).forEach(function(key){
var tempParameters = data.parameters[key];
var htmlStr = "", htmlStrExample = "";
var responsesJson = [];
var responsesExample = [];
var tempRequestParamObj = [];
var required = tempParameters.required;
var paramName = getNotEmptyStr(tempParameters.name);
var paramType = getNotEmptyStr(tempParameters.type);
var paramDesc = getNotEmptyStr(tempParameters.description);
var paramIn = getNotEmptyStr(tempParameters.in);
var example = getNotEmptyStr(tempParameters.example, tempParameters.default);
if (isNotEmpty(tempParameters.items)) {
// 判断文件类型
var refTmp = getNotEmptyStr(tempParameters.items.$ref).toLowerCase();
if (refTmp == '#/definitions/multipartfile'
|| refTmp == '#/definitions/file') {
htmlStr = paramName;
htmlStrExample = paramName;
paramType = 'file';
addRequestParamObj(requestParamObj, paramName, paramType, paramIn, required, paramDesc, example);
} else {
htmlStr = paramName + "[]";
htmlStrExample = paramName + "[]";
}
} else if(isNotEmpty(tempParameters.schema)) {
if("array" == tempParameters.schema.type) {
var responsesObj = definitionsDataMap.get(tempParameters.schema.items.$ref);
if(responsesObj != null) {
responsesJson[0] = getResponsesJson(responsesObj, "", false, 1);
responsesExample[0] = getResponsesJson(responsesObj, "", true, 1);
tempRequestParamObj[0] = getRequestParamObj(responsesObj, "");
} else {
responsesJson = [""];
responsesExample = [""];
tempRequestParamObj = [""];
if(tempParameters.schema.items.type == "boolean") {
responsesJson = [true];
responsesExample = [true];
tempRequestParamObj = [true];
} else if(tempParameters.schema.items.type == "integer") {
responsesJson = [0];
responsesExample = [0];
tempRequestParamObj = [0];
}
}
requestParamObj["p-body-obj"] = tempRequestParamObj;
var arrTmp = tempParameters.schema.$ref.split("/");
paramType = arrTmp[arrTmp.length - 1];
htmlStr = Formatjson.processObjectToHtmlPre(responsesJson, 0, false, false, false, true);
htmlStrExample = Formatjson.processObjectToHtmlPre(responsesExample, 0, false, false, false, false);
} else if(isNotEmpty(tempParameters.schema.$ref)){
var responsesObj = definitionsDataMap.get(tempParameters.schema.$ref);
var arrTmp = tempParameters.schema.$ref.split("/");
paramType = arrTmp[arrTmp.length - 1];
if(isNotEmpty(responsesObj)) {
responsesJson = getResponsesJson(responsesObj, "", false, 1);
responsesExample = getResponsesJson(responsesObj, "", true, 1);
htmlStr = Formatjson.processObjectToHtmlPre(responsesJson, 0, false, false, false, true);
htmlStrExample = Formatjson.processObjectToHtmlPre(responsesExample, 0, false, false, false, false);
tempRequestParamObj = getRequestParamObj(responsesObj, "");
requestParamObj["p-body-obj"] = tempRequestParamObj;
} else {
htmlStr = paramName;
htmlStrExample = paramName;
addRequestParamObj(requestParamObj, paramName, paramType, paramIn, required, paramDesc, example);
}
} else if("string" == tempParameters.schema.type) {
htmlStr = paramName;
htmlStrExample = paramName;
addRequestParamObj(requestParamObj, paramName, paramType, paramIn, required, paramDesc, example);
} else {
htmlStr = paramName;
htmlStrExample = paramName;
addRequestParamObj(requestParamObj, paramName, paramType, paramIn, required, paramDesc, example);
}
} else {
htmlStr = paramName;
htmlStrExample = paramName;
addRequestParamObj(requestParamObj, paramName, paramType, paramIn, required, paramDesc, example);
}
$("#docRequestParam table tbody").append(
'<tr>'
+'<td>' + htmlStr + '</td>'
+'<td>' + paramDesc + '</td>'
+'<td>' + paramType + '</td>'
+'<td>' + paramIn + '</td>'
+'<td>' + required + '</td>'
+'</tr>'
);
$("#docRequestExample table tbody").append(
'<tr>'
+'<td>' + htmlStrExample + '</td>'
+'<td>' + paramDesc + '</td>'
+'<td>' + paramType + '</td>'
+'<td>' + paramIn + '</td>'
+'<td>' + required + '</td>'
+'</tr>'
);
});
}
// console.log(requestParamObj);
// var htmlStrTemp = Formatjson.processObjectToHtmlPre(requestParamObj, 0, false, false, false);
// $("#htmlStrTemp").html(htmlStrTemp);
$("#htmlStrTemp").parents("tr").hide();
createOnlineDebugRequestParam(requestParamObj, getNotEmptyStr(data.url));
// 遍历结果集列表
$("#docResponseModel table tbody").empty();
$("#docResponseExample table tbody").empty();
Formatjson.annotationObject = {};
if(isNotEmpty(data.responses)) {
Object.keys(data.responses).forEach(function(key){
var tempRespones = data.responses[key];
if(isNotEmpty(tempRespones.schema)) {
var responsesJson, responsesExample;
if("array" == tempRespones.schema.type) {
responsesJson = [];
responsesExample = [];
var responsesObj = definitionsDataMap.get(tempRespones.schema.items.$ref);
if(responsesObj != null) {
responsesJson[0] = getResponsesJson(responsesObj, "", false, 1);
responsesExample[0] = getResponsesJson(responsesObj, "", true, 1);
} else {
responsesJson = [""];
responsesExample = [""];
if(tempParameters.schema.items.type == "boolean") {
responsesJson = [true];
responsesExample = [true];
} else if(tempParameters.schema.items.type == "integer") {
responsesJson = [0];
responsesExample = [0];
}
}
} else if(isNotEmpty(tempRespones.schema.$ref)){
var responsesObj = definitionsDataMap.get(tempRespones.schema.$ref);
if(isEmptyObject(responsesObj)) {
var arrTmp = tempRespones.schema.$ref.split("/");
var lastObjName = arrTmp[arrTmp.length - 1];
responsesJson = lastObjName;
responsesExample = lastObjName;
} else {
responsesJson = getResponsesJson(responsesObj, "", false, 1);
responsesExample = getResponsesJson(responsesObj, "", true, 1);
}
} else {
responsesJson = "";
responsesExample = "";
}
if(isEmptyObject(responsesJson)) {
return;
}
//console.log(Formatjson.annotationObject);
var htmlStr = Formatjson.processObjectToHtmlPre(responsesJson, 0, false, false, false, true);
$("#docResponseModel table tbody").append(
'<tr>'
+'<td>' + key + '</td>'
+'<td>' + htmlStr + '</td>'
+'</tr>'
);
htmlStr = Formatjson.processObjectToHtmlPre(responsesExample, 0, false, false, false, false);
$("#docResponseExample table tbody").append(
'<tr>'
+'<td>' + key + '</td>'
+'<td>' + htmlStr + '</td>'
+'</tr>'
);
}
});
}
});
/**
* 新增全局请求参数对象
*/
function addRequestParamObj(paramObj, paramName, paramType, paramIn, required, paramDesc, value) {
var tempObj = {};
tempObj.paramType = paramType;
tempObj.paramIn = paramIn;
tempObj.required = required;
tempObj.paramDesc = paramDesc;
tempObj.isParamObj = true;
tempObj.value = value;
paramObj[paramName] = tempObj;
}
/**
* 搜索文档
* @returns
*/
function searchDoc() {
var keywords = $("#searchDocInput").val();
// 重新生成
regeneratePathTree(keywords);
if (isEmpty(keywords)){
return;
}
$('#apiPathTree .projects').tree('expand');
// // 先全部收起
// $('#apiPathTree .projects').tree('collapse');
// for (var mapData of treePathDataMap) {
// if (mapData[0].toLowerCase().indexOf(keywords.toLowerCase()) >= 0) {
// var treeNode = $('#apiPathTree .projects').find("[m-id="+mapData[1].treeId+"]");
// $('#apiPathTree .projects').tree('show', treeNode);
// }
// }
}
/**
* 重新生成文档
*/
function regeneratePathTree(keywords){
projectTreeIdIndex = 1;
treePathDataMap = new Map();
$('#apiPathTree').empty();
$('#apiPathTree').append('<ul class="tree tree-lines projects"></ul>');
for (var i = 0; i < documentJsonArr.length; i++) {
var json = documentJsonArr[i];
if(userSettings.catalogShowType == 1) {
createTreeViewByTree(json, keywords);// url分成一层一层的展示
} else if(userSettings.catalogShowType == 2){
createTreeViewByTag(json, keywords);// tag方式整个url显示为一层
} else {
createTreeViewByTree(json, keywords);// url分成一层一层的展示
}
}
$('#apiPathTree .projects').tree();
updateTreeShowType();
}
function findInPathsValue(key, pathsValue, keywords) {
if(isEmpty(keywords) || isEmpty(key)) {
return true;
}
key = key.toLowerCase();
keywords = keywords.toLowerCase();
// 路径中有就不用再去找了
if(key.indexOf(keywords) >= 0) {
return true;
}
for ( var subKey in pathsValue) {
// 找路径和说明里面包含关键字的
var tagsTmp = pathsValue[subKey].tags;
var pathTmp = pathsValue[subKey].path;
var summaryTmp = pathsValue[subKey].summary;
var descriptionTmp = pathsValue[subKey].description;
if(isNotEmpty(pathTmp) && pathTmp.toLowerCase().indexOf(keywords) >= 0) {
return true;
}
if(isNotEmpty(summaryTmp) && summaryTmp.toLowerCase().indexOf(keywords) >= 0) {
return true;
}
if(isNotEmpty(descriptionTmp) && descriptionTmp.toLowerCase().indexOf(keywords) >= 0) {
return true;
}
if(isNotEmpty(tagsTmp) && arrToString(tagsTmp).toLowerCase().indexOf(keywords) >= 0) {
return true;
}
}
return false;
}
function getResponsesJson(responsesObj, prevRef, isExample, recursiveCount) {
var responsesJson = {};
recursiveCount++;// 多层递归最多递归10层防止无限递归
if(isEmpty(responsesObj) || isEmpty(responsesObj.properties) || recursiveCount > 10) {
return responsesJson;
}
var requiredArr = responsesObj.required;
Object.keys(responsesObj.properties).forEach(function(prop){
var tmpData = responsesObj.properties[prop];
if("array" == tmpData.type) {// 数组
Formatjson.annotationObject[prop] = getNotEmptyStr(tmpData.description);
if(prevRef != tmpData.items.$ref) {
var tempObj = definitionsDataMap.get(tmpData.items.$ref);
if(tempObj != null) {
var tempArr = responsesJson[prop] = [];
tempArr[0] = getResponsesJson(tempObj, tmpData.items.$ref, isExample, recursiveCount);
} else {
var responsesJsonSub = [];
var bodyFor = responsesJsonSub;
var items = tmpData.items;
for (var i = 0; i < 10; i++) {
if("array" == items.type) {
bodyFor = bodyFor[0] = [];
items = items.items;
} else {
tempObj = definitionsDataMap.get(items.$ref);
if(tempObj != null) {
bodyFor[0] = getResponsesJson(tempObj, items.$ref, isExample, recursiveCount);
} else {
if(items.type == "boolean") {
bodyFor[0] = true;
} else if(items.type == "integer") {
bodyFor[0] = 0;
} else {
bodyFor[0] = "";
}
}
break;
}
}
responsesJson[prop] = responsesJsonSub;
}
} else {
responsesJson[prop] = "{}" + getNotEmptyStr(tmpData.description);
}
} else if(isNotEmpty(tmpData.$ref)) {// 对象
Formatjson.annotationObject[prop] = getNotEmptyStr(tmpData.description);
if(prevRef != tmpData.$ref) {
var tempObj = definitionsDataMap.get(tmpData.$ref);
responsesJson[prop] = getResponsesJson(tempObj, tmpData.$ref, isExample, recursiveCount);
} else {
responsesJson[prop] = "{}" + getNotEmptyStr(tmpData.description);
}
} else {// 字段
var enumExample = "";
var enumObj = tmpData["enum"];
if(!isEmptyObject(enumObj) && enumObj.length > 0) {
enumExample = "枚举值:";
for (var i = 0; i < enumObj.length; i++) {
if(i > 0) {enumExample += "、";}
enumExample += enumObj[i];
}
}
var typeStr = getNotEmptyStr(tmpData.format);
if(isEmpty(typeStr)) {
typeStr = getNotEmptyStr(tmpData.type);
}
if(isExample) {
var tempVal = getNotEmptyStr(tmpData.example);
if(isEmpty(tempVal)) {
tempVal = getAutoFillValue(typeStr, prop);
}
if(isNotEmpty(tempVal) && isNotEmpty(enumExample)) {
tempVal = tempVal + "" + enumExample;
}
responsesJson[prop] = tempVal;
} else {
if(userSettings.showParamType == 1) {
if(haveString(requiredArr, prop)) {
typeStr = (isNotEmpty(typeStr) ? typeStr + "," : "") + "required";
}
if(isNotEmpty(typeStr)) {
typeStr = "(" + typeStr + ")";
}
}
var descriptionStr = typeStr + getNotEmptyStr(tmpData.description);
if(isNotEmpty(descriptionStr) && isNotEmpty(enumExample)) {
descriptionStr = descriptionStr + "" + enumExample;
}
responsesJson[prop] = descriptionStr;
}
}
});
return responsesJson;
}
function getRequestParamObj(responsesObj, prevRef) {
var responsesJson = {};
if(isEmpty(responsesObj) || isEmpty(responsesObj.properties)) {
return responsesJson;
}
var requiredArr = responsesObj.required;
Object.keys(responsesObj.properties).forEach(function(prop){
var tmpData = responsesObj.properties[prop];
if("array" == tmpData.type) {// 数组
if(prevRef != tmpData.items.$ref) {
var tempObj = definitionsDataMap.get(tmpData.items.$ref);
if(tempObj != null) {
var tempArr = responsesJson[prop] = [];
tempArr[0] = getRequestParamObj(tempObj, tmpData.items.$ref);
} else {
var responsesJsonSub = [];
var bodyFor = responsesJsonSub;
var items = tmpData.items;
for (var i = 0; i < 10; i++) {
if("array" == items.type) {
bodyFor = bodyFor[0] = [];
items = items.items;
} else {
tempObj = definitionsDataMap.get(items.$ref);
if(tempObj != null) {
bodyFor[0] = getRequestParamObj(tempObj, items.$ref);
} else {
if(items.type == "boolean") {
bodyFor[0] = true;
} else if(items.type == "integer") {
bodyFor[0] = 0;
} else {
bodyFor[0] = "";
}
}
break;
}
}
responsesJson[prop] = responsesJsonSub;
}
} else {
var required = haveString(requiredArr, prop);
var paramType = getNotEmptyStr(tmpData.format);
var paramDesc = getNotEmptyStr(tmpData.description);
var example = getNotEmptyStr(tmpData.example, tmpData.default);
if(isEmpty(paramType)) {
paramType = getNotEmptyStr(tmpData.type);
}
addRequestParamObj(responsesJson, prop, paramType, "", required, paramDesc, example);
}
} else if(isNotEmpty(tmpData.$ref)) {// 对象
if(prevRef != tmpData.$ref) {
var tempObj = definitionsDataMap.get(tmpData.$ref);
responsesJson[prop] = getRequestParamObj(tempObj, tmpData.$ref);
} else {
var required = haveString(requiredArr, prop);
var paramType = getNotEmptyStr(tmpData.format);
var paramDesc = getNotEmptyStr(tmpData.description);
var example = getNotEmptyStr(tmpData.example, tmpData.default);
if(isEmpty(paramType)) {
paramType = getNotEmptyStr(tmpData.type);
}
addRequestParamObj(responsesJson, prop, paramType, "", required, paramDesc, example);
}
} else {// 字段
var required = haveString(requiredArr, prop);
var paramType = getNotEmptyStr(tmpData.format);
var paramDesc = getNotEmptyStr(tmpData.description);
var example = getNotEmptyStr(tmpData.example, tmpData.default);
if(isEmpty(paramType)) {
paramType = getNotEmptyStr(tmpData.type);
}
addRequestParamObj(responsesJson, prop, paramType, "", required, paramDesc, example);
}
});
return responsesJson;
}
/**
* 修改左右框架的宽度
* @param width 左侧导航栏的宽度
* @returns
*/
function changeContentWidth(width) {
$("#leftContent").css("width", width + 'px');
$("#resizableLeftRight").css("left", width + 'px');
$("#rightContent").css("left", width + 'px');
var logoText = "zyplayer-doc-swagger";
if(width < 370 && width > 290){
logoText = "zyplayer-doc";
} else if(width < 290){
logoText = "doc";
}
$("#logoText").text(logoText);
userSettings.prevWNow = width;
}
/**
* 通过原始json生成引用的字典Map
* @param json swagger的原始json
* @returns
*/
function createDefinitionsMapByJson(json) {
var pathIndex = {};
var definitions = json.definitions;
//console.log(paths);
if(isNotEmpty(definitions)) {
Object.keys(definitions).forEach(function(key){
//console.log(key);
definitionsDataMap.set("#/definitions/" + key, definitions[key]);
});
}
}
/**
* 增加项目文档
* @param json
* @returns
*/
function addHomePageDashboard(json, fullUrl) {
var info = json.info||{};
var contactName = "";
if(isNotEmpty(info.contact)) {
contactName = "昵称:" + getNotEmptyStr(info.contact.name, "-");
contactName += "<br/>邮箱:" + getNotEmptyStr(info.contact.email, "-");
contactName += "<br/>网站:" + getNotEmptyStr(info.contact.url, "-");
}
$("#homePageDashboard section").append(
'<div class="col-md-6 col-sm-6">'
+'<div class="panel" data-id="'+fullUrl+'">'
+'<div class="panel-heading">'
+'<div class="title">'+info.title+'</div>'
+'<div class="panel-actions">'
// +'<button type="button" class="btn remove-panel" data-placement="bottom">'
// +'<i class="icon-remove"></i>'
// +'</button>'
+'</div>'
+'</div>'
+'<div class="panel-body">'
+'<div class="content">'
+'<table class="table table-bordered setting-table">'
+'<tr>'
+'<td class="info">简介</td>'
+'<td>'+info.description+'</td>'
+'</tr>'
+'<tr>'
+'<td class="info">作者</td>'
+'<td>'+contactName+'</td>'
+'</tr>'
+'<tr>'
+'<td class="info">版本</td>'
+'<td>'+info.version+'</td>'
+'</tr>'
+'<tr>'
+'<td class="info">地址</td>'
+'<td>'+decodeURI(fullUrl)+'</td>'
+'</tr>'
+'</table>'
+'</div>'
+'</div>'
+'</div>'
+'</div>'
);
}
/**
* 修改树形菜单展示类型
* @param
* @returns
*/
function updateTreeShowType() {
$('#apiPathTree .projects').removeClass("tree-angles tree-menu tree-folders tree-chevrons");
//tree-angles、2=tree-menu、3=默认4=tree-folders、5=tree-chevrons
$('#apiPathTree .projects').addClass("tree-lines");
var treeShowType = "tree-angles";
if(userSettings.treeShowType == 1) {
treeShowType = "tree-angles";
} else if(userSettings.treeShowType == 2) {
treeShowType = "tree-menu";
$('#apiPathTree .projects').removeClass("tree-lines");
} else if(userSettings.treeShowType == 3) {
treeShowType = "";
} else if(userSettings.treeShowType == 4) {
treeShowType = "tree-folders";
} else if(userSettings.treeShowType == 5) {
treeShowType = "tree-chevrons";
} else {
userSettings.treeShowType = 1;
}
if(isNotEmpty(treeShowType)) {
$('#apiPathTree .projects').addClass(treeShowType);
}
}
/**
* 初始化用户的设置
* @param
* @returns
*/
function documentLoadFinish() {
showGlobalLoadingMessage('文档解析完成!', false);
// 隐藏提示框
setTimeout(function() {
globalLoadingMessager.hide();
}, 1000);
regeneratePathTree();
//$('#apiPathTree .projects').tree();
$('#homePageDashboard .dashboard').dashboard({draggable: false});
}
/**
* 存储用户设置
*/
function storeUserSettings() {
// open-doc去掉存储设置
}
/**
* 更新用户设置
*/
function updateUserSettings(newSetting) {
userSettings = newSetting;
}
/**
* 初始化用户的设置
* @param
* @returns
*/
function initUserSettings() {
// open-doc去掉了获取配置和全局参数
userSettings = defaultUserSettings;
changeContentWidth(userSettings.prevWNow);
updateTreeShowType();
// 增加文档
getDocumentListByService();
}
function showGlobalLoadingMessage(text, loading) {
if(loading) {
text += '<i class="icon icon-spin icon-spinner-snake hide"></i>';
}
globalLoadingMessager.$.find(".messager-content").html(text);
}
function initDashboard(){
var template = $('#homePageDashboardTemplate').html();
$('#homePageDashboard').empty();
$('#homePageDashboard').append('<div class="dashboard" data-height="320"></div>');
$('#homePageDashboard .dashboard').append(template);
}