Catalog.js 8.5 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213
  1. Namespace.register("U.MD.O.W.O.O"); // 大纲视图
  2. /*
  3. //目录模板功能。原名U.O.W.Catalog,缩写:U.O.W.CL
  4. Namespace.register("U.O.W.CL");
  5. */
  6. Namespace.register("U.MD.O.W.O.O"); // 大纲视图
  7. //window.onload = function () {
  8. // U.MD.O.W.O.O.BindEle();
  9. //}
  10. U.MD.O.W.O.O.Flag = true; // 只运行一次
  11. /* 加载目录 */
  12. U.MD.O.W.O.O.Load = function (pos) {
  13. //window.onload 调用 UW.U.OU.R = U.UF.E.GetSelectionRange(window, 需要聚焦的元素, {CB : function(){} ,TF : 'sbzzm' });
  14. //onmousedown 不要用 onclick UW.U.OU.R.Parent() 当前所在的元素
  15. //onmousedown UW.U.OU.R.Replace(<span style=>标题一</span>)
  16. var UW = U.MD.O.getOfficeWindow();
  17. if (UW.$(".U_MD_O_W_Font_C_Txt")[0] && !arguments[1]) {
  18. return
  19. };
  20. // $(".U_MD_O_W_Font_Cat")[0].innerHTML = '';
  21. var i = 0, // 循环
  22. j = 0; // 处理相同id的元素
  23. Udiv = UW.$("#U_MD_O_W_E_body div"),
  24. Child = null, // 选中元素的所有兄弟节点
  25. pos = pos || UW.$(".U_MD_O_H_body_main_text")[0]; // 目录生成位置
  26. if (!UW.$(".U_Boom_Box")[0]) { // 判断目录是否已经生成过
  27. var U_Boom_Box = $$("div",{"className": "U_Boom_Box","contenteditable": "false"});
  28. pos.insertBefore(U_Boom_Box, pos.children[0]);
  29. }
  30. UW.$(".U_Boom_Box")[0].innerHTML = "";
  31. var U_Boom_Box = UW.$(".U_Boom_Box")[0];
  32. var U_MD_O_W_Font_C_Txt = $$("div",{"class": "U_MD_O_W_Font_C_Txt","innerText": "目录"}, U_Boom_Box);
  33. var U_MD_O_W_Font_C_Wrap = $$("div",{"class": "U_MD_O_W_Font_C_Wrap"}, U_Boom_Box)
  34. // 遍历div标签
  35. for (; i < Udiv.length; i++) {
  36. if (Udiv[i].className) {
  37. j = i;
  38. Child = Udiv[i];
  39. if (Child.id) {
  40. // 解决用户回车生成多个同id元素重复循环
  41. if (i >= 1 && Child.id == Udiv[--j].id && Child.textContent.trim() != "") {
  42. Child.id = "T" + Date.parse(new Date());
  43. };
  44. if (Child.childNodes[0] !== undefined && Child.childNodes[0].nodeValue != null) { // 解决空标题
  45. var U_MD_O_W_Font_C_Box = $$("div", {
  46. "class": "U_MD_O_W_Font_C_Box"
  47. }, U_MD_O_W_Font_C_Wrap);
  48. var a = $$("a", {
  49. "class": "U_MD_O_W_Font_C_Name",
  50. "style": {
  51. "margin-left": Child.className.match(/\d+$/)[0]
  52. },
  53. "href": "#" + Child.id
  54. }, U_MD_O_W_Font_C_Box);
  55. // var span = $$("span", {
  56. // "innerText": "",
  57. // "style": {
  58. // "margin-left": "5px",
  59. // "float": "left"
  60. // }
  61. // }, U_MD_O_W_Font_C_Box);
  62. a.innerHTML = Child.childNodes[0].nodeValue;
  63. $$("div", {"class": "U_MD_O_W_Font_C_Dash","style":{"width": "80%"}}, U_MD_O_W_Font_C_Box);
  64. $$("div",{"class": "U_MD_O_W_Font_C_Number","innerText": U.MD.O.W.O.O.UpPageNum(Child),"style":{"width": "auto"}}, U_MD_O_W_Font_C_Box);
  65. };
  66. };
  67. };
  68. };
  69. }
  70. /* 按钮点击 */
  71. U.MD.O.W.O.O.Click = function (e) {
  72. // if (U.MD.O.W.O.O.Flag) {
  73. // UW.U.OU.R = U.UF.E.GetSelectionRange(window, $("#K")[0].contentWindow.$("#U_MD_O_W_E_body")[0], {
  74. // SO: $("#K")[0].contentWindow.$("#U_MD_O_W_E_body")[0],
  75. // "TF": "Title1"
  76. // })
  77. // U.MD.O.W.O.O.Flag = false;
  78. // };
  79. // var UW = U.MD.O.getOfficeWindow($("#K"));
  80. // U.OU.R.CreateR();
  81. switch (e) {
  82. case "一级目录":
  83. U.MD.O.W.O.O.NewTitle("U_MD_O_W_Font_25px_0");
  84. break;
  85. case "二级目录":
  86. U.MD.O.W.O.O.NewTitle("U_MD_O_W_Font_22px_40");
  87. break;
  88. case "三级目录":
  89. U.MD.O.W.O.O.NewTitle("U_MD_O_W_Font_20px_60");
  90. break;
  91. case "生成目录":
  92. U.MD.O.W.O.O.Load(U.MD.O.getOfficeWindow().$("#U_MD_O_W_E_body .U_MD_O_H_body_main_text")[0]);
  93. break;
  94. case "更新目录":
  95. U.MD.O.W.O.O.Load(null, 'update');
  96. break;
  97. case "正文":
  98. U.MD.O.W.O.O.NewTitle();
  99. break;
  100. default:
  101. break;
  102. }
  103. }
  104. /* 绑定事件 */
  105. U.MD.O.W.O.O.BindEle = function () {
  106. // 更新目录
  107. $(".U_MD_O_W_Font_F_Update").bind("mousedown", function () {
  108. U.MD.O.W.O.O.Load(null, 'update');
  109. });
  110. // 解决失焦问题
  111. $("#K")[0].contentWindow.$("#U_MD_O_W_E_body").bind("click", function () {
  112. U.OU.R.CreateR();
  113. })
  114. }
  115. /* 创建标题 */
  116. U.MD.O.W.O.O.NewTitle = function (className) {
  117. var UW = U.MD.O.getOfficeWindow();
  118. var div = $$("div", {"innerText": "请输入正文"}),
  119. inText = UW.U.OU.R.Parent().innerText || UW.U.OU.R.Parent().nodeValue;
  120. var NowDate = Date.parse(new Date());
  121. if (className) {
  122. div = $$("div", {"id": "T" + NowDate,"contenteditable": true,"class": className,"innerText": inText});
  123. };
  124. // 在当前行有文字的基础上运行代码
  125. if (UW.U.OU.R.R.endContainer.nodeValue !== null) {
  126. // 若选中文字 设置文字样式
  127. if (UW.U.OU.R.GetSelectedText().trim() !== "" && className !== undefined) {
  128. // 解决标题重复嵌套导致布局错乱问题
  129. if (UW.U.OU.R.R.endContainer.parentNode.id) {
  130. UW.U.OU.R.R.endContainer.parentNode.className = className;
  131. UW.U.OU.R.R.endContainer.parentNode.innerText = UW.U.OU.R.GetSelectedText();
  132. return
  133. };
  134. div.innerText = UW.U.OU.R.GetSelectedText();
  135. UW.U.OU.R.Replace(div);
  136. return;
  137. };
  138. // 解决空文本嵌套标题bug
  139. if (UW.U.OU.R.Parent().nodeName === "DIV" && className !== undefined && UW.U.OU.R.GetSelectedText().trim() !== "") {
  140. UW.U.OU.R.Parent().id = "T" + NowDate;
  141. UW.U.OU.R.Parent().className = className;
  142. return;
  143. };
  144. // 若当前元素是div 则直接在该div上添加样式
  145. if (UW.U.OU.R.Parent().parentNode.nodeName === "DIV" && className !== undefined && UW.U.OU.R.Parent().parentNode.id !== "U_MD_O_W_E_body") {
  146. UW.U.OU.R.Parent().parentNode.id = "T" + NowDate;
  147. UW.U.OU.R.Parent().parentNode.className = className;
  148. return;
  149. };
  150. // 若设置为正文 删除当前元素的id class
  151. if (UW.U.OU.R.Parent().parentNode.id && className === undefined) {
  152. UW.U.OU.R.Parent().parentNode.removeAttribute("id");
  153. UW.U.OU.R.Parent().parentNode.removeAttribute("class")
  154. return;
  155. };
  156. };
  157. // 解决空白行插入正文bug
  158. if (UW.U.OU.R.R.endContainer.nodeValue === null && UW.U.OU.R.GetSelectedText().trim() === "" && className === undefined && UW.U.OU.R.Parent().id !== "U_MD_O_W_E_body") {
  159. // 插入文字同时清空样式
  160. UW.U.OU.R.R.endContainer.className = "";
  161. UW.U.OU.R.Replace("请输入正文");
  162. return
  163. };
  164. // 当前行内有文字 点击正文清除样式
  165. if (UW.U.OU.R.R.endContainer.nodeValue !== null && className === undefined) {
  166. UW.U.OU.R.R.endContainer.parentNode.className = "";
  167. return
  168. };
  169. // 当前行无文字不给予处理
  170. if (div.innerText.trim() == "" && UW.U.OU.R.R.endContainer.nodeValue === null) {
  171. UW.U.OU.R.Replace("");
  172. return
  173. }
  174. UW.U.OU.R.Replace(div, UW.U.OU.R.QX());
  175. }
  176. /* 阅览模式 */
  177. U.MD.O.W.O.O.Read = function (dis, boolen) {
  178. var dis = dis || "none",
  179. boolen = boolen || 'false';
  180. var Wrap = $(".U_MD_O_W_Font_Content"),
  181. i = 0;
  182. $(".U_MD_O_W_Font_Features")[0].style.display = dis;
  183. for (; i < Wrap.length; i++) {
  184. Wrap[i].setAttribute('contenteditable', boolen)
  185. };
  186. }
  187. /* 更新页码 */
  188. U.MD.O.W.O.O.UpPageNum = function (child) {
  189. var UW = U.MD.O.getOfficeWindow();
  190. var Paper = UW.$("#U_MD_O_W_E_body"),
  191. i = 0;
  192. for (; i < Paper.length; i++) {
  193. if (U.UF.EL.isChild(Paper[i], child)) {
  194. return ++i
  195. }
  196. };
  197. }