U.Word.O.O.js 8.4 KB

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