sectiondemo.html 11 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181
  1. <!DOCTYPE HTML>
  2. <html>
  3. <head>
  4. <title>目录大纲demo</title>
  5. <meta http-equiv="Content-Type" content="text/html;charset=utf-8"/>
  6. <script type="text/javascript" charset="utf-8" src="../ueditor.config.js"></script>
  7. <script type="text/javascript" charset="utf-8" src="editor_api.js"></script>
  8. <script type="text/javascript" charset="utf-8" src="../lang/zh-cn/zh-cn.js"></script>
  9. <script type="text/javascript" charset="utf-8" src="../third-party/jquery-1.10.2.min.js"></script>
  10. <style>
  11. #directionContainer ul{
  12. margin:0px;
  13. padding: 0px 0px 0px 20px;
  14. }
  15. .main{
  16. width:1024px;
  17. }
  18. .left{
  19. width:250px;
  20. height: 50px;
  21. float:left;
  22. margin-right:4px;
  23. }
  24. .right{
  25. width:730px;
  26. float:left;
  27. }
  28. #directionWrapper{
  29. padding:15px 7px;
  30. width:234px;
  31. border:1px solid #CCC;
  32. }
  33. .directionTitle{
  34. font-weight: bold;
  35. font-size: 14px;
  36. padding-bottom:3px;
  37. border-bottom: 1px dashed #ccc;
  38. }
  39. .sectionItem{
  40. height:20px;
  41. padding: 4px;
  42. }
  43. .sectionItem span{
  44. *zoom:1;
  45. display:inline-block;
  46. }
  47. .itemTitle{
  48. _float:left;
  49. }
  50. .selectIcon,.deleteIcon,.moveUp,.moveDown{
  51. float:right;
  52. color:red;
  53. font-size:0px;
  54. line-height: 20px;
  55. height:20px;
  56. text-align: center;
  57. cursor: pointer;
  58. }
  59. .selectIcon,.moveUp,.moveDown{
  60. width:14px;
  61. font-size:10px;
  62. }
  63. .selectIcon:hover,.moveUp:hover,.moveDown:hover{
  64. text-decoration: underline;
  65. }
  66. .deleteIcon{
  67. width:20px;
  68. margin-left:3px;
  69. background: url(../themes/default/images/icons-all.gif) 0 -89px;
  70. }
  71. .fixTop{
  72. position: fixed;
  73. top: -1px;
  74. }
  75. </style>
  76. </head>
  77. <body>
  78. <div class="main">
  79. <h1>目录大纲demo</h1>
  80. <div class="left">
  81. <div id="directionWrapper">
  82. <div class="directionTitle">目录:</div>
  83. <div id="directionContainer"></div>
  84. </div>
  85. </div>
  86. <div class="right">
  87. <script id="editor" type="text/plain" style="width:730px;height:500px;">
  88. <p style="text-indent: 2em;"><strong>UEditor</strong>是由百度WEB前端研发部开发的所见即所得的开源富文本编辑器,具有轻量、可定制、用户体验优秀等特点。开源基于BSD协议,所有源代码在协议允许范围内可自由修改和使用。百度UEditor的推出,可以帮助不少网站开者在开发富文本编辑器所遇到的难题,节约开发者因开发富文本编辑器所需要的大量时间,有效降低了企业的开发成本。</p><h2>特点 </h2><p>UEditor在设计上采用了经典的分层架构设计理念,尽量做到功能层次之间的轻度耦合。具体来讲,整个系统分为了核心层、命令插件层和UI层这样三个低耦合的层次。</p><h2 index="3"> 应用领域 </h2> <h3 index="3_1"> 百度产品线 </h3><p>百度百科、百度空间、百度经验、百度旅游、百度知道、百度贴吧、百度新知</p><h3 index="3_2"> 其他公司产品 </h3><p>麦库记事、网易lofter</p><h2 index="4"> 更新记录 </h2> <h3 index="4_3"> 1.2.6.1版本 </h3> <h4> 新增功能 </h4> <ul class=" list-paddingleft-2" style="list-style-type: disc;"> <li> <p>查找替换支持正则表达式</p></li><li><p>增加类似word中的快捷菜单,默认关闭</p></li><li><p>针对默认过滤回转换div为p标签,提供了配置开关allowDivTransToP,默认为true</p></li><li><p>工具栏支持指定位置折行,&#39;|&#39;表示分割符,&#39;||&#39;表示折行</p></li> </ul> <h4> 优化修复 </h4> <ul class=" list-paddingleft-2" style="list-style-type: disc;"> <li> <p>修复了ie67下初始化宽高给定百分比</p></li><li><p>修复了在ie下删除分割线后光标定位的问题</p></li><li><p>提供了手动加载语言文件,避免ie下有时会因语言文件加载失败导致编辑器加载失败,提示&quot;not import language file&quot;的错误</p></li><li><p>优化了编辑器初始化时获得contentWindow可能不存在的情况</p></li><li><p>优化了编辑器加载自定义样式的问题,默认initialStyle传入的css样式优先级最高,其次是指定的外部css文件</p></li><li><p>表格操作功能升级,优化了对表格的拖拉及双击操作,并且支持IE6+浏览器</p></li><li><p>修复编辑器在禁用状态下仍然可以拖动表格边框的bug</p></li><li><p>修复了分割线不能删除的问题</p></li><li><p>修复了初始化内容过多时,编辑器不自动长高,要点击编辑器才会长高的问题</p></li><li><p>优化了添加字符边框的展示效果,避免出现重叠的问题</p></li><li><p>修复下拉菜单超出屏幕的bug</p></li><li><p>修复table属性初始化时table布局错误的bug</p></li><li><p>优化了选择工具栏上下拉菜单类型的操作命令时,选区会有闪动的问题</p></li><li><p>优化了关于swfupload的一个xss漏洞</p></li><li><p>优化了对于ie9,10的支持</p></li> </ul> <h3 index="4_5"> 1.2.5版本 </h3> <h4> 新增功能 </h4> <ul class=" list-paddingleft-2" style="list-style-type: disc;"> <li><p>table整体重构</p></li><li><p> table支持插入表头和标题</p></li><li><p> table支持拷贝</p></li><li><p> table支持任意调整宽高</p></li><li><p> ...</p></li> </ul> <h3 index="4_6"> 1.2.4版本 </h3> <h4> 新增功能 </h4> <ul class=" list-paddingleft-2" style="list-style-type: disc;"> <li><p>官网新增API文档</p></li><li><p> CSS按照UI结构进行了模块化拆分</p></li><li><p> 新增皮肤切换功能,并提供一套新皮肤(可通过配置项theme来设置)</p></li><li><p> ...</p></li> </ul> <h2 index="5"> 正式版 </h2> <h3 index="5_11"> 新增功能 </h3> <ul class=" list-paddingleft-2" style="list-style-type: disc;"> <li> <p>新增了编辑器路径的设置,可以不用手动设置路径,自动识别相关路径,解决路径设置繁琐的问题</p></li><li><p>重写了过滤粘贴机制,采用黑白名单,可以书写符合自己需求的过滤规则,可以完全定义标签的属性,甚至是style上的某个属性及其数值</p></li><li><p>数据同步改为失去焦点就执行,可以不再使用sync方法手动同步数据</p></li><li><p>改使用closure的压缩工具</p></li><li><p>表格支持排序和隔行显示</p></li><li><p>优化了undo/redo操作</p></li><li><p>优化了ui界面</p></li><li><p>添加了字体边框</p></li> </ul> <h3 index="5_12"> 优化修复 </h3> <ul class=" list-paddingleft-2" style="list-style-type: disc;"> <li> <p>优化了拖拽机制,处理浮动图片拖拽不能跟指定的某行对齐</p></li><li><p>优化了backspace/del键的操作</p></li><li><p>重写了插入代码功能,插入代码编写支持tab和回车键</p></li><li><p>列表粘贴优化,模仿word的列表粘贴</p></li><li><p>修复jsp后台8080端口,截屏插件返回错误的问题</p></li><li><p>修复firefox下编辑状态切换的问题</p></li><li><p>修复查找替换报错</p></li><li><p>修复表格新增行后宽度丢失问题</p></li><li><p>修复表格底纹和表格排序多语言配置遗漏</p></li><li><p>解决右键,粘贴,对话框内容报错</p></li><li><p>修复设置单元格颜色问题</p></li><li><p>优化大字号下的显示问题</p></li><li><p>解决IE下表格粘贴失效问题</p></li><li><p>修复选中内容设置成代码,出现多余字符的问题</p></li><li><p>修复从word粘贴内容到编辑器,过滤失效的问题</p></li><li><p>修复光标闭合,多次点击字符边框按钮,会出现多余的字符“font”的问题</p></li><li><p>修复字符边框效果错误的问题</p></li> <li><p>以及其他的一些问题.</p></li> </ul><p><br/></p>
  89. </script>
  90. </div>
  91. </div>
  92. </body>
  93. <script type="text/javascript">
  94. //实例化编辑器
  95. var ue = UE.getEditor('editor');
  96. ue.ready(function(){
  97. ue.addListener('updateSections', resetHandler);
  98. });
  99. var resetHandler = function(){
  100. var dirmap = {}, dir = ue.execCommand('getsections');
  101. // 更新目录树
  102. $('#directionContainer').html(traversal(dir) || null);
  103. // 删除章节按钮
  104. $('.deleteIcon').click(function(e){
  105. var $target = $(this),
  106. address = $target.parent().attr('data-address');
  107. ue.execCommand('deletesection', dirmap[address]);
  108. });
  109. // 选中章节按钮
  110. $('.selectIcon').click(function(e){
  111. var $target = $(this),
  112. address = $target.parent().attr('data-address');
  113. ue.execCommand('selectsection', dirmap[address], true);
  114. });
  115. // 章节上移
  116. $('.moveUp,.moveDown').click(function(e){
  117. var $target = $(this),
  118. address = $target.parent().attr('data-address'),
  119. moveUp = $target.hasClass('moveUp') ? true:false;
  120. if($target.hasClass('moveUp')) {
  121. ue.execCommand('movesection', dirmap[address], dirmap[address].previousSection);
  122. } else {
  123. ue.execCommand('movesection', dirmap[address], dirmap[address].nextSection, true);
  124. }
  125. });
  126. // 页面网上滚动时,让目录固定在顶部
  127. $(window).scroll(function(e) {
  128. if($('.left').offset().top < (document.body.scrollTop||document.documentElement.scrollTop)) {
  129. $('#directionWrapper').addClass('fixTop');
  130. } else {
  131. $('#directionWrapper').removeClass('fixTop');
  132. }
  133. });
  134. function traversal(section) {
  135. var $list, $item, $itemContent, child, childList;
  136. if(section.children.length) {
  137. $list = $('<ul>');
  138. for(var i = 0; i< section.children.length; i++) {
  139. child = section.children[i];
  140. //设置目录节点内容标签
  141. var title = getSubStr(child['title'], 18);
  142. $itemContent = $('<div class="sectionItem"></div>').html($('<span class="itemTitle">' + title + '</span>'));
  143. $itemContent.attr('data-address', child['startAddress'].join(','));
  144. $itemContent.append($('<span class="deleteIcon">删</span>' +
  145. '<span class="selectIcon">选</span>' +
  146. '<span class="moveUp">↑</span>' +
  147. '<span class="moveDown">↓</span>'));
  148. dirmap[child['startAddress'].join(',')] = child;
  149. //设置目录节点容器标签
  150. $item = $('<li>');
  151. $item.append($itemContent);
  152. //继续遍历子节点
  153. if($item.children.length) {
  154. childList = traversal(child);
  155. childList && $item.append(childList);
  156. }
  157. $list.append($item);
  158. }
  159. }
  160. return $list;
  161. }
  162. }
  163. function getSubStr(s,l){
  164. var i=0,len=0;
  165. for(i;i<s.length;i++){
  166. if(s.charAt(i).match(/[^\x00-\xff]/g)!=null){
  167. len+=2;
  168. }else{
  169. len++;
  170. }
  171. if(len>l){ break; }
  172. }return s.substr(0,i);
  173. };
  174. </script>
  175. </html>