edit.js 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427
  1. var editormd;
  2. var template_list ;
  3. var json_table_data='|'+lang["params"]+'|'+lang["type"]+'|'+lang["description"]+'|\n'+
  4. '|:-------|:-------|:-------|\n';
  5. $(function() {
  6. //给按钮文字加上颜色,点击后则去掉颜色
  7. if (is_showdoc_online()) {
  8. set_text_color( "runapi" , "red");
  9. };
  10. /*加载目录*/
  11. secondCatList();
  12. function secondCatList() {
  13. var default_second_cat_id = $("#default_second_cat_id").val();
  14. var item_id = $("#item_id").val();
  15. $.post(
  16. "?s=home/catalog/secondCatList",
  17. {
  18. "item_id": item_id,
  19. },
  20. function(data) {
  21. $("#cat_id").html('<OPTION value="0">'+lang["none"]+'</OPTION>');
  22. if (data.error_code == 0) {
  23. json = data.data;
  24. console.log(json);
  25. for (var i = 0; i < json.length; i++) {
  26. cat_html = '<OPTION value="' + json[i].cat_id + '" ';
  27. if (default_second_cat_id == json[i].cat_id) {
  28. cat_html += ' selected ';
  29. }
  30. cat_html += ' ">' + json[i].cat_name + '</OPTION>';
  31. $("#cat_id").append(cat_html);
  32. };
  33. getChildCatList();
  34. };
  35. },
  36. "json"
  37. );
  38. }
  39. function getChildCatList() {
  40. var cat_id = $("#cat_id").val();
  41. var default_child_cat_id = $("#default_child_cat_id").val();
  42. $.post(
  43. "?s=home/catalog/childCatList", {
  44. "cat_id": cat_id
  45. },
  46. function(data) {
  47. $("#parent_cat_id").html('<OPTION value="0">'+lang["none"]+'</OPTION>');
  48. if (data.error_code == 0) {
  49. json = data.data;
  50. console.log(json);
  51. for (var i = 0; i < json.length; i++) {
  52. cat_html = '<OPTION value="' + json[i].cat_id + '" ';
  53. if (default_child_cat_id == json[i].cat_id) {
  54. cat_html += ' selected ';
  55. }
  56. cat_html += ' ">' + json[i].cat_name + '</OPTION>';
  57. $("#parent_cat_id").append(cat_html);
  58. };
  59. }else{
  60. }
  61. },
  62. "json"
  63. );
  64. }
  65. //监听是否选择了目录。如果选择了,则跟后台判断是否还子目录
  66. $("#cat_id").change(function(){
  67. getChildCatList();
  68. });
  69. var keyMap = {
  70. // 保存
  71. "Ctrl-S": function() {
  72. $("#save").click();
  73. }
  74. };
  75. initEditorOutsideKeys();
  76. function initEditorOutsideKeys() {
  77. if (!editormd) return;
  78. var $doc = $(document);
  79. $.each(keyMap, function(key, fn) {
  80. $doc.on('keydown', null, key.replace('-', '+'), function(e) {
  81. e.preventDefault();
  82. fn();
  83. });
  84. });
  85. }
  86. // 如果是新增页面,则光标为标题文本框
  87. if (location.href.indexOf('type=new') !== -1) {
  88. setTimeout(function() {
  89. $('#page_title').focus();
  90. }, 1000);
  91. }
  92. /*初始化编辑器*/
  93. editormd = editormd("editormd", {
  94. width: "90%",
  95. height: 1000,
  96. syncScrolling: "single",
  97. path: DocConfig.pubile + "/editor.md/lib/",
  98. placeholder: lang["editormd_placeholder"] ,
  99. imageUpload: true,
  100. imageFormats: ["jpg", "jpeg", "gif", "png", "bmp", "webp", "JPG", "JPEG", "GIF", "PNG", "BMP", "WEBP"],
  101. imageUploadURL: "?s=home/page/uploadImg",
  102. onload: function() {
  103. this.addKeyMap(keyMap);
  104. }
  105. });
  106. /*插入API接口模板*/
  107. $("#api-doc").click(function() {
  108. var tmpl = $("#api-doc-templ").html();
  109. editormd.insertValue(tmpl);
  110. });
  111. /*插入数据字典模板*/
  112. $("#database-doc").click(function() {
  113. var tmpl = $("#database-doc-templ").html();
  114. editormd.insertValue(tmpl);
  115. });
  116. /*JSON转参数表格*/
  117. $("#jsons").click(function() {
  118. $("#json-templ").show();
  119. });
  120. /*JSON格式美化*/
  121. $("#beautify-json").click(function() {
  122. $("#beautify-json-dialog").show();
  123. });
  124. $("#json-templ .editormd-enter-btn").click(function(){
  125. var datas=$("#json-templ .jsons").val();
  126. try{
  127. Change($.parseJSON(datas));
  128. }
  129. catch(e){
  130. alert(lang["json_fail"] + e);
  131. }
  132. //datas=processJSONImport(datas);
  133. //alert(datas);
  134. /*var datas='|键|值|类型|空|注释|\n'+
  135. '|:-------|:-------|:-------|:-------|:-------|\n'+
  136. '|uid|int(10)|否|||\n'+
  137. '|username|varchar(20)|否||用户名|';*/
  138. //alert(json_table_data);return;
  139. editormd.insertValue(json_table_data);
  140. json_table_data='|'+lang["filed"]+'|'+lang["type"]+'|'+lang["description"]+'|\n'+
  141. '|:-------|:-------|:-------|\n';
  142. $("#json-templ .jsons").val("");
  143. $("#json-templ").hide();
  144. });
  145. $("#beautify-json-dialog .editormd-enter-btn").click(function(){
  146. var data = $("#beautify-json-dialog .jsons").val();
  147. try{
  148. var text="\n ``` \n \{ \n"+dump(JSON.parse(data))+" \} \n\n ```\n\n";//整体加个大括号
  149. //$("#beautify-json-dialog .jsons").val(text);
  150. $("#beautify-json-dialog .jsons").val("");
  151. editormd.insertValue(text);
  152. }catch(e){
  153. //非json数据直接显示
  154. //$("#beautify-json-dialog .jsons").val(data);
  155. $("#beautify-json-dialog .jsons").val("");
  156. editormd.insertValue(data);
  157. }
  158. $("#beautify-json-dialog").hide();
  159. });
  160. //{"dgfgdfg":"gdfgdfg"}
  161. //格式化json数据
  162. function dump(arr,level) {
  163. var dumped_text = "";
  164. if(!level) level = 0;
  165. //The padding given at the beginning of the line.
  166. var level_padding = "";
  167. for(var j=0;j<level+1;j++) level_padding += " ";
  168. if(typeof(arr) == 'object') { //Array/Hashes/Objects
  169. var i=0;
  170. for(var item in arr) {
  171. var value = arr[item];
  172. if(typeof(value) == 'object') { //If it is an array,
  173. dumped_text += level_padding + "\"" + item + "\" : \{ \n";
  174. dumped_text += dump(value,level+1);
  175. dumped_text +=level_padding +"\}";
  176. } else {
  177. dumped_text += level_padding + "\"" + item + "\" : \"" + value + "\"";
  178. }
  179. if(i<Object.getOwnPropertyNames(arr).length-1){
  180. dumped_text+=", \n";
  181. }else{
  182. dumped_text+=" \n";
  183. }
  184. i++;
  185. }
  186. } else { //Stings/Chars/Numbers etc.
  187. dumped_text = "===>"+arr+"<===("+typeof(arr)+")";
  188. }
  189. return dumped_text;
  190. }
  191. /*保存*/
  192. var saving = false;
  193. $("#save").click(function() {
  194. if (saving) return false;
  195. var page_id = $("#page_id").val();
  196. var item_id = $("#item_id").val();
  197. var page_title = $("#page_title").val();
  198. var page_comments = $("#page_comments").val();
  199. var page_content = $("#page_content").val();
  200. var item_id = $("#item_id").val();
  201. var s_number = $("#s_number").val();
  202. var cat_id = $("#cat_id").val();
  203. var parent_cat_id = $("#parent_cat_id").val();
  204. if (parent_cat_id > 0 ) {
  205. cat_id = parent_cat_id ;
  206. };
  207. saving = true;
  208. $.post(
  209. "?s=home/page/save", {
  210. "page_id": page_id,
  211. "cat_id": cat_id,
  212. "s_number": s_number,
  213. "page_content": page_content,
  214. "page_title": page_title,
  215. "page_comments": page_comments,
  216. "item_id": item_id
  217. },
  218. function(data) {
  219. if (data.error_code == 0) {
  220. $.bootstrapGrowl(lang["save_success"]);
  221. window.location.href = "?s=home/item/show&page_id=" + data.data.page_id + "&item_id=" + item_id;
  222. } else {
  223. $.bootstrapGrowl(lang["save_fail"]);
  224. }
  225. saving = false;
  226. },
  227. 'json'
  228. )
  229. });
  230. $(".editormd-preview-container").bind('DOMNodeInserted', function(e){
  231. $(".editormd-preview-container table thead tr").css({"background-color":"#08c","color":"#fff"});
  232. $(".editormd-preview-container table tr").eq(0).css({"background-color":"#08c","color":"#fff"});
  233. $(".editormd-preview-container table tr").each(function(){
  234. if($(this).find("td").eq(1).html()=="object")
  235. {
  236. $(this).css({"background-color":"#99CC99","color":"#000"});
  237. }
  238. });
  239. });
  240. });
  241. function closeDiv(target)
  242. {
  243. $(target).hide();
  244. }
  245. function Change(data)
  246. {
  247. var level_str="- ";
  248. if(arguments.length>1)
  249. {
  250. var level;
  251. arguments[1]>0?level=arguments[1]:level=1;
  252. for(var i=0;i<level;i++)
  253. {
  254. level_str+="- ";
  255. }
  256. }
  257. for(var key in data)
  258. {
  259. var value = data[key];
  260. var type = typeof(value);
  261. if(type == "object")
  262. {
  263. json_table_data+='| '+level_str+key+' |'+type+' | '+lang["none"]+' |\n';
  264. if(value instanceof Array)
  265. {
  266. var j=level+1;
  267. Change(value[0],j);
  268. continue;
  269. }
  270. //else
  271. //{
  272. Change(value,level);
  273. //}
  274. }
  275. else
  276. {
  277. json_table_data+='| '+key+' | '+type+'| '+lang["none"]+' |\n';
  278. }
  279. }
  280. }
  281. //{"Result":[{"name":"test1","list":{"pros":"prosfsf","ppps":{"images":[{"22":"22"}]}}}]}
  282. $("#save-to-templ").click(function(){
  283. var template_title =prompt(lang["save_templ_title"],"");
  284. if (template_title!=null && template_title!="")
  285. {
  286. var template_content = $("#page_content").val();
  287. $.post(
  288. "?s=home/template/save",
  289. {"template_title":template_title,"template_content":template_content},
  290. function(data){
  291. if (data.error_code == 0) {
  292. alert(lang["saved_templ_msg1"]+template_title+lang["saved_templ_msg2"]);
  293. } else {
  294. $.bootstrapGrowl(lang["save_fail"]);
  295. }
  296. },
  297. "json"
  298. );
  299. }
  300. $("#save-btn-group").removeClass("open");
  301. return false;
  302. });
  303. $("#more-templ").click(function(){
  304. $.post(
  305. "?s=home/template/getList",
  306. {},
  307. function(data){
  308. if (data.error_code == 0) {
  309. var html = '<TR><td>'+lang["save_time"]+'</td><td>'+lang["templ_title"]+'</td><td>'+lang["operation"]+'</td></TR>';
  310. template_list = data.data;
  311. json = data.data;
  312. for (var i = 0; i < json.length; i++) {
  313. html += '<TR><td>'+json[i]['addtime']+'</td>';
  314. html += '<td>'+json[i]['template_title']+'</td>';
  315. html += '<td><a href="javascript:use_template('+json[i]['id']+')">'+lang["use_this_template"]+'</a> | <a href="javascript:delete_template('+json[i]['id']+')">'+lang["delete_this_template"]+'</a></td>';
  316. html +='</TR>';
  317. };
  318. $("#templ-table").html(html);
  319. } else {
  320. //$.bootstrapGrowl("获取模板列表失败");
  321. $("#templ-table").html(lang["no_templ_msg"]);
  322. }
  323. $("#more-templ-modal").modal();
  324. },
  325. "json"
  326. );
  327. });
  328. //使用模板
  329. function use_template(id){
  330. for (var i = 0; i < template_list.length; i++) {
  331. if (id > 0 && id == template_list[i]['id']) {
  332. editormd.insertValue(template_list[i]['template_content']);
  333. $("#more-templ-modal").modal("hide");
  334. };
  335. };
  336. }
  337. //删除模板
  338. function delete_template(id){
  339. $.post(
  340. "?s=home/template/delete",
  341. {"id":id},
  342. function(data){
  343. if (data.error_code == 0) {
  344. $("#more-templ").click();
  345. } else {
  346. $.bootstrapGrowl(lang["save_fail"]);
  347. }
  348. },
  349. "json"
  350. );
  351. }
  352. $("#add-page-comments").click(function(){
  353. var page_comments =prompt(lang["add_page_comments_msg"],"");
  354. if (page_comments!=null && page_comments!="")
  355. {
  356. $("#page_comments").val(page_comments);
  357. $("#save").click();
  358. }
  359. $("#save-btn-group").removeClass("open");
  360. return false;
  361. });