kancloud.js 6.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207
  1. /***
  2. * 加载文档到阅读区
  3. * @param $url
  4. * @param $id
  5. * @param $callback
  6. */
  7. function loadDocument($url,$id,$callback) {
  8. $.ajax({
  9. url : $url,
  10. type : "GET",
  11. beforeSend :function (xhr) {
  12. var body = events.data('body_' + $id);
  13. var title = events.data('title_' + $id);
  14. var doc_title = events.data('doc_title_' + $id);
  15. if(body && title && doc_title){
  16. if (typeof $callback === "function") {
  17. body = $callback(body);
  18. }
  19. $("#page-content").html(body);
  20. $("title").text(title);
  21. $("#article-title").text(doc_title);
  22. events.trigger('article.open',{ $url : $url, $init : false , $id : $id });
  23. return false;
  24. }
  25. NProgress.start();
  26. },
  27. success : function (res) {
  28. if(res.errcode === 0){
  29. var body = res.data.body;
  30. var doc_title = res.data.doc_title;
  31. var title = res.data.title;
  32. $body = body;
  33. if (typeof $callback === "function" ){
  34. $body = $callback(body);
  35. }
  36. $("#page-content").html($body);
  37. $("title").text(title);
  38. $("#article-title").text(doc_title);
  39. events.data('body_' + $id,body);
  40. events.data('title_' + $id,title);
  41. events.data('doc_title_' + $id,doc_title);
  42. events.trigger('article.open',{ $url : $url, $init : true, $id : $id });
  43. }else{
  44. layer.msg("加载失败");
  45. }
  46. },
  47. complete : function () {
  48. NProgress.done();
  49. }
  50. });
  51. }
  52. function initHighlighting() {
  53. $('pre code').each(function (i, block) {
  54. hljs.highlightBlock(block);
  55. });
  56. hljs.initLineNumbersOnLoad();
  57. }
  58. var events = $("body");
  59. $(function () {
  60. $(".view-backtop").on("click", function () {
  61. $('.manual-right').animate({ scrollTop: '0px' }, 200);
  62. });
  63. $(".manual-right").scroll(function () {
  64. var top = $(".manual-right").scrollTop();
  65. if(top > 100){
  66. $(".view-backtop").addClass("active");
  67. }else{
  68. $(".view-backtop").removeClass("active");
  69. }
  70. });
  71. window.isFullScreen = false;
  72. initHighlighting();
  73. window.jsTree = $("#sidebar").jstree({
  74. 'plugins':["wholerow","types"],
  75. "types": {
  76. "default" : {
  77. "icon" : false // 删除默认图标
  78. }
  79. },
  80. 'core' : {
  81. 'check_callback' : true,
  82. "multiple" : false ,
  83. 'animation' : 0
  84. }
  85. }).on('select_node.jstree',function (node,selected,event) {
  86. $(".m-manual").removeClass('manual-mobile-show-left');
  87. var url = selected.node.a_attr.href;
  88. if(url === window.location.href){
  89. return false;
  90. }
  91. loadDocument(url,selected.node.id);
  92. });
  93. $("#slidebar").on("click",function () {
  94. $(".m-manual").addClass('manual-mobile-show-left');
  95. });
  96. $(".manual-mask").on("click",function () {
  97. $(".m-manual").removeClass('manual-mobile-show-left');
  98. });
  99. /**
  100. * 关闭侧边栏
  101. */
  102. $(".manual-fullscreen-switch").on("click",function () {
  103. isFullScreen = !isFullScreen;
  104. if (isFullScreen) {
  105. $(".m-manual").addClass('manual-fullscreen-active');
  106. } else {
  107. $(".m-manual").removeClass('manual-fullscreen-active');
  108. }
  109. });
  110. //处理打开事件
  111. events.on('article.open', function (event, $param) {
  112. if ('pushState' in history) {
  113. if ($param.$init === false) {
  114. window.history.replaceState($param , $param.$id , $param.$url);
  115. } else {
  116. window.history.pushState($param, $param.$id , $param.$url);
  117. }
  118. } else {
  119. window.location.hash = $param.$url;
  120. }
  121. initHighlighting();
  122. $(".manual-right").scrollTop(0);
  123. });
  124. $(".navg-item[data-mode]").on("click",function () {
  125. var mode = $(this).data('mode');
  126. $(this).siblings().removeClass('active').end().addClass('active');
  127. $(".m-manual").removeClass("manual-mode-view manual-mode-collect manual-mode-search").addClass("manual-mode-" + mode);
  128. });
  129. /**
  130. * 项目内搜索
  131. */
  132. $("#searchForm").ajaxForm({
  133. beforeSubmit : function () {
  134. var keyword = $.trim($("#searchForm").find("input[name='keyword']").val());
  135. if(keyword === ""){
  136. $(".search-empty").show();
  137. $("#searchList").html("");
  138. return false;
  139. }
  140. $("#btnSearch").attr("disabled","disabled").find("i").removeClass("fa-search").addClass("loading");
  141. window.keyword = keyword;
  142. },
  143. success :function (res) {
  144. var html = "";
  145. if(res.errcode === 0){
  146. for(var i in res.data){
  147. var item = res.data[i];
  148. html += '<li><a href="javascript:;" title="'+ item.doc_name +'" data-id="'+ item.doc_id+'"> '+ item.doc_name +' </a></li>';
  149. }
  150. }
  151. if(html !== ""){
  152. $(".search-empty").hide();
  153. }else{
  154. $(".search-empty").show();
  155. }
  156. $("#searchList").html(html);
  157. },
  158. complete : function () {
  159. $("#btnSearch").removeAttr("disabled").find("i").removeClass("loading").addClass("fa-search");
  160. }
  161. });
  162. window.onpopstate = function (e) {
  163. var $param = e.state;
  164. console.log($param);
  165. if($param.hasOwnProperty("$url")) {
  166. window.jsTree.jstree().deselect_all();
  167. window.jsTree.jstree().select_node({ id : $param.$id });
  168. $param.$init = false;
  169. //events.trigger('article.open', $param );
  170. }else{
  171. console.log($param);
  172. }
  173. };
  174. // var $node = window.jsTree.jstree().get_selected();
  175. //
  176. // if(typeof $node === "object") {
  177. // $node = window.jsTree.jstree().get_node({ id : $node[0] });
  178. // events.trigger('article.open',{ $url : $node.a_attr.href , $init : false, $id : $node.a_attr.id });
  179. // }
  180. });