/**
* 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('
'+decodeURI(documentJsonArr[i].fullUrl)+'');
}
$('#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(
''
+'| ' + htmlStr + ' | '
+'' + paramDesc + ' | '
+'' + paramType + ' | '
+'' + paramIn + ' | '
+'' + required + ' | '
+'
'
);
$("#docRequestExample table tbody").append(
''
+'| ' + htmlStrExample + ' | '
+'' + paramDesc + ' | '
+'' + paramType + ' | '
+'' + paramIn + ' | '
+'' + required + ' | '
+'
'
);
});
}
// 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(
''
+'| ' + key + ' | '
+'' + htmlStr + ' | '
+'
'
);
htmlStr = Formatjson.processObjectToHtmlPre(responsesExample, 0, false, false, false, false);
$("#docResponseExample table tbody").append(
''
+'| ' + key + ' | '
+'' + htmlStr + ' | '
+'
'
);
}
});
}
});
/**
* 新增全局请求参数对象
*/
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('');
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 += "
邮箱:" + getNotEmptyStr(info.contact.email, "-");
contactName += "
网站:" + getNotEmptyStr(info.contact.url, "-");
}
$("#homePageDashboard section").append(
''
+'
'
+'
'
+'
'+info.title+'
'
+'
'
// +''
+'
'
+'
'
+'
'
+'
'
+'
'
+''
+'| 简介 | '
+''+info.description+' | '
+'
'
+''
+'| 作者 | '
+''+contactName+' | '
+'
'
+''
+'| 版本 | '
+''+info.version+' | '
+'
'
+''
+'| 地址 | '
+''+decodeURI(fullUrl)+' | '
+'
'
+'
'
+'
'
+'
'
+'
'
+'
'
);
}
/**
* 修改树形菜单展示类型
* @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 += '';
}
globalLoadingMessager.$.find(".messager-content").html(text);
}
function initDashboard(){
var template = $('#homePageDashboardTemplate').html();
$('#homePageDashboard').empty();
$('#homePageDashboard').append('');
$('#homePageDashboard .dashboard').append(template);
}