/** * 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); }