zhangfisher %!s(int64=12) %!d(string=hai) anos
pai
achega
e57cf86264
Modificáronse 98 ficheiros con 1041 adicións e 36028 borrados
  1. 79 137
      .idea/workspace.xml
  2. 0 166
      DjangoUeditor/static/ueditor/dialogs/attachment/callbacks.js
  3. 0 29
      DjangoUeditor/static/ueditor/dialogs/attachment/fileTypeMaps.js
  4. BIN=BIN
      DjangoUeditor/static/ueditor/dialogs/image/imageUploader.swf
  5. BIN=BIN
      DjangoUeditor/static/ueditor/dialogs/image/images/center_focus.jpg
  6. BIN=BIN
      DjangoUeditor/static/ueditor/dialogs/image/images/left_focus.jpg
  7. BIN=BIN
      DjangoUeditor/static/ueditor/dialogs/image/images/none_focus.jpg
  8. BIN=BIN
      DjangoUeditor/static/ueditor/dialogs/image/images/right_focus.jpg
  9. 0 1495
      DjangoUeditor/static/ueditor/dialogs/tangram.js
  10. 0 166
      DjangoUeditor/static/ueditor/dialogs/video/callbacks.js
  11. BIN=BIN
      DjangoUeditor/static/ueditor/lang/en/images/imglabel.png
  12. BIN=BIN
      DjangoUeditor/static/ueditor/lang/zh-cn/images/imglabel.png
  13. 0 1773
      DjangoUeditor/static/ueditor/themes/gorgeous/css/ueditor.css
  14. 0 128
      DjangoUeditor/static/ueditor/themes/gorgeous/dialogbase.css
  15. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/anchor.gif
  16. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/arrow.png
  17. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/bottom.png
  18. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/button-bg.gif
  19. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/cancelbutton.gif
  20. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/cursor_h.gif
  21. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/cursor_v.gif
  22. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/dialog-title-bg.png
  23. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/dialog_title.png
  24. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/filescan.png
  25. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/highlighted.gif
  26. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-all.gif
  27. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-all.png
  28. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-checked.gif
  29. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-checked.png
  30. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-hover.gif
  31. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-hover.png
  32. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/icons.gif
  33. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/icons.png
  34. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/lock.gif
  35. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/neweditor-tab-bg.png
  36. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/pagebreak.gif
  37. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/scale.png
  38. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/spacer.gif
  39. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/sparator_v.png
  40. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/toolbar-bg.png
  41. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/unhighlighted.gif
  42. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/upload.png
  43. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/videologo.gif
  44. BIN=BIN
      DjangoUeditor/static/ueditor/themes/gorgeous/images/word.gif
  45. 0 1834
      DjangoUeditor/static/ueditor/themes/modern/css/ueditor.css
  46. 0 128
      DjangoUeditor/static/ueditor/themes/modern/dialogbase.css
  47. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/anchor.gif
  48. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/arrow.png
  49. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/bottom.png
  50. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/button-bg.gif
  51. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/cancelbutton.gif
  52. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/cursor_h.gif
  53. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/cursor_v.gif
  54. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/dialog-title-bg.png
  55. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/dialog_title.png
  56. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/filescan.png
  57. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/highlighted.gif
  58. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/icons-all.gif
  59. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/icons-all.png
  60. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/icons-checked.gif
  61. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/icons-checked.png
  62. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/icons-hover.gif
  63. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/icons-hover.png
  64. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/icons.gif
  65. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/icons.png
  66. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/lock.gif
  67. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/neweditor-tab-bg.png
  68. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/pagebreak.gif
  69. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/scale.png
  70. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/spacer.gif
  71. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/sparator_v.png
  72. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/toolbar-bg.png
  73. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/unhighlighted.gif
  74. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/upload.png
  75. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/videologo.gif
  76. BIN=BIN
      DjangoUeditor/static/ueditor/themes/modern/images/word.gif
  77. 0 215
      DjangoUeditor/static/ueditor/third-party/swfupload/fileprogress.js
  78. 0 53
      DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.cookies.js
  79. 0 1126
      DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.js
  80. 0 96
      DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.proxy.js
  81. 0 98
      DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.queue.js
  82. 0 346
      DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.speed.js
  83. BIN=BIN
      DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.swf
  84. BIN=BIN
      DjangoUeditor/static/ueditor/third-party/swfupload/swfupload_fp9.swf
  85. 0 27535
      DjangoUeditor/static/ueditor/ueditor_all.js
  86. 0 28
      DjangoUeditor/static/ueditor/uparse.js
  87. 0 663
      DjangoUeditor/static/ueditor/标签div不转p_不过滤style_script的editor_all_min.js
  88. 16 12
      DjangoUeditor/views.py
  89. 0 0
      build/lib/DjangoUeditor/__init__.py
  90. 182 0
      build/lib/DjangoUeditor/commands.py
  91. 34 0
      build/lib/DjangoUeditor/forms.py
  92. 33 0
      build/lib/DjangoUeditor/models.py
  93. 112 0
      build/lib/DjangoUeditor/settings.py
  94. 12 0
      build/lib/DjangoUeditor/urls.py
  95. 122 0
      build/lib/DjangoUeditor/utils.py
  96. 295 0
      build/lib/DjangoUeditor/views.py
  97. 151 0
      build/lib/DjangoUeditor/widgets.py
  98. 5 0
      readme.md

+ 79 - 137
.idea/workspace.xml

@@ -2,7 +2,16 @@
 <project version="4">
   <component name="ChangeListManager">
     <list default="true" id="a277f214-fdc3-4d56-a982-825f5989727e" name="Default" comment="">
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/DUSite/templates/test2.html" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/DUSite/data/cool/admin_privilege_20140627165232_276.png" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/build/lib/DjangoUeditor/__init__.py" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/build/lib/DjangoUeditor/commands.py" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/build/lib/DjangoUeditor/forms.py" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/build/lib/DjangoUeditor/models.py" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/build/lib/DjangoUeditor/settings.py" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/build/lib/DjangoUeditor/urls.py" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/build/lib/DjangoUeditor/utils.py" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/build/lib/DjangoUeditor/views.py" />
+      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/build/lib/DjangoUeditor/widgets.py" />
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\dialogs\attachment\callbacks.js" afterPath="" />
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\dialogs\attachment\fileTypeMaps.js" afterPath="" />
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\dialogs\image\imageUploader.swf" afterPath="" />
@@ -89,17 +98,8 @@
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\ueditor_all.js" afterPath="" />
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\uparse.js" afterPath="" />
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\标签div不转p_不过滤style_script的editor_all_min.js" afterPath="" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/dist/DjangoUeditor-1.5.143.zip" afterPath="$PROJECT_DIR$/dist/DjangoUeditor-1.5.143.zip" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DUSite/test.db" afterPath="$PROJECT_DIR$/DUSite/test.db" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DjangoUeditor/forms.py" afterPath="$PROJECT_DIR$/DjangoUeditor/forms.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/TestApp/forms.py" afterPath="$PROJECT_DIR$/TestApp/forms.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DjangoUeditor/models.py" afterPath="$PROJECT_DIR$/DjangoUeditor/models.py" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/readme.md" afterPath="$PROJECT_DIR$/readme.md" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/setup.py" afterPath="$PROJECT_DIR$/setup.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DjangoUeditor/templates/ueditor.html" afterPath="$PROJECT_DIR$/DjangoUeditor/templates/ueditor.html" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DUSite/urls.py" afterPath="$PROJECT_DIR$/DUSite/urls.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/TestApp/views.py" afterPath="$PROJECT_DIR$/TestApp/views.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DjangoUeditor/widgets.py" afterPath="$PROJECT_DIR$/DjangoUeditor/widgets.py" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DjangoUeditor/views.py" afterPath="$PROJECT_DIR$/DjangoUeditor/views.py" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
     </list>
     <ignored path="DjangoUeditor.iws" />
@@ -126,8 +126,8 @@
       <file leaf-file-name="widgets.py" pinned="false" current="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/DjangoUeditor/widgets.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0" vertical-offset="1116" max-vertical-offset="3300">
-              <caret line="30" column="8" selection-start-line="30" selection-start-column="8" selection-end-line="30" selection-end-column="8" />
+            <state vertical-scroll-proportion="0.0" vertical-offset="261" max-vertical-offset="3300">
+              <caret line="42" column="36" selection-start-line="42" selection-start-column="36" selection-end-line="42" selection-end-column="36" />
               <folding />
             </state>
           </provider>
@@ -138,9 +138,7 @@
           <provider selected="true" editor-type-id="text-editor">
             <state vertical-scroll-proportion="0.0" vertical-offset="122" max-vertical-offset="946">
               <caret line="13" column="0" selection-start-line="13" selection-start-column="0" selection-end-line="13" selection-end-column="0" />
-              <folding>
-                <element signature="e#14#76#0" expanded="true" />
-              </folding>
+              <folding />
             </state>
           </provider>
         </entry>
@@ -148,7 +146,7 @@
       <file leaf-file-name="test2.html" pinned="false" current="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/DUSite/templates/test2.html">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="-5.677419" vertical-offset="0" max-vertical-offset="462">
+            <state vertical-scroll-proportion="0.0" vertical-offset="176" max-vertical-offset="462">
               <caret line="8" column="29" selection-start-line="8" selection-start-column="29" selection-end-line="8" selection-end-column="29" />
               <folding />
             </state>
@@ -160,9 +158,7 @@
           <provider selected="true" editor-type-id="text-editor">
             <state vertical-scroll-proportion="0.0" vertical-offset="88" max-vertical-offset="726">
               <caret line="17" column="31" selection-start-line="17" selection-start-column="31" selection-end-line="17" selection-end-column="31" />
-              <folding>
-                <element signature="e#14#65#0" expanded="true" />
-              </folding>
+              <folding />
             </state>
           </provider>
         </entry>
@@ -170,8 +166,8 @@
       <file leaf-file-name="readme.md" pinned="false" current="true" current-in-tab="true">
         <entry file="file://$PROJECT_DIR$/readme.md">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.37288135" vertical-offset="66" max-vertical-offset="5896">
-              <caret line="8" column="0" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" />
+            <state vertical-scroll-proportion="0.3378119" vertical-offset="0" max-vertical-offset="6006">
+              <caret line="8" column="25" selection-start-line="8" selection-start-column="25" selection-end-line="8" selection-end-column="25" />
               <folding />
             </state>
           </provider>
@@ -180,55 +176,41 @@
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="test.html" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/DUSite/templates/test.html">
+      <file leaf-file-name="utils.py" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/DjangoUeditor/utils.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="-2.1290324" vertical-offset="0" max-vertical-offset="462">
-              <caret line="3" column="6" selection-start-line="0" selection-start-column="0" selection-end-line="15" selection-end-column="7" />
+            <state vertical-scroll-proportion="0.0" vertical-offset="22" max-vertical-offset="2816">
+              <caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="ueditor.html" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/DjangoUeditor/templates/ueditor.html">
-          <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="-4.967742" vertical-offset="0" max-vertical-offset="330">
-              <caret line="7" column="38" selection-start-line="7" selection-start-column="38" selection-end-line="7" selection-end-column="38" />
-              <folding>
-                <element signature="n#style#0;n#script#0;n#!!top" expanded="true" />
-              </folding>
-            </state>
-          </provider>
-        </entry>
-      </file>
-      <file leaf-file-name="forms.py" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/TestApp/forms.py">
+      <file leaf-file-name="urls.py" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/DjangoUeditor/urls.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="528">
-              <caret line="12" column="61" selection-start-line="12" selection-start-column="61" selection-end-line="12" selection-end-column="61" />
-              <folding>
-                <element signature="e#15#39#0" expanded="true" />
-              </folding>
+            <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="374">
+              <caret line="11" column="1" selection-start-line="11" selection-start-column="1" selection-end-line="11" selection-end-column="1" />
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="ueditor_old.html" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/DjangoUeditor/templates/ueditor_old.html">
+      <file leaf-file-name="ueditor.html" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/DjangoUeditor/templates/ueditor.html">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="-0.0" vertical-offset="0" max-vertical-offset="638">
-              <caret line="0" column="86" selection-start-line="0" selection-start-column="66" selection-end-line="0" selection-end-column="86" />
+            <state vertical-scroll-proportion="0.0" vertical-offset="154" max-vertical-offset="330">
+              <caret line="7" column="38" selection-start-line="7" selection-start-column="38" selection-end-line="7" selection-end-column="38" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="index.html" pinned="false" current="false" current-in-tab="false">
-        <entry file="file://$PROJECT_DIR$/DjangoUeditor/static/ueditor/index.html">
+      <file leaf-file-name="forms.py" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/TestApp/forms.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="1.4193548" vertical-offset="198" max-vertical-offset="3960">
-              <caret line="7" column="55" selection-start-line="7" selection-start-column="55" selection-end-line="7" selection-end-column="55" />
+            <state vertical-scroll-proportion="0.0" vertical-offset="264" max-vertical-offset="528">
+              <caret line="12" column="61" selection-start-line="12" selection-start-column="61" selection-end-line="12" selection-end-column="61" />
               <folding />
             </state>
           </provider>
@@ -257,7 +239,6 @@
         <option value="$PROJECT_DIR$/DUSite/templates/test.html" />
         <option value="$PROJECT_DIR$/DjangoUeditor/static/ueditor/ueditor.config.js" />
         <option value="$PROJECT_DIR$/DjangoUeditor/utils.py" />
-        <option value="$PROJECT_DIR$/DjangoUeditor/views.py" />
         <option value="$PROJECT_DIR$/DjangoUeditor/settings.py" />
         <option value="$PROJECT_DIR$/TestApp/models.py" />
         <option value="$PROJECT_DIR$/DjangoUeditor/commands.py" />
@@ -269,6 +250,7 @@
         <option value="$PROJECT_DIR$/TestApp/views.py" />
         <option value="$PROJECT_DIR$/TestApp/forms.py" />
         <option value="$PROJECT_DIR$/DjangoUeditor/templates/ueditor.html" />
+        <option value="$PROJECT_DIR$/DjangoUeditor/views.py" />
         <option value="$PROJECT_DIR$/readme.md" />
       </list>
     </option>
@@ -333,20 +315,6 @@
               <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
             </PATH_ELEMENT>
           </PATH>
-          <PATH>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="DjangoUeditor" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.ProjectViewProjectNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="DjangoUeditor" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-            <PATH_ELEMENT>
-              <option name="myItemId" value="dist" />
-              <option name="myItemType" value="com.intellij.ide.projectView.impl.nodes.PsiDirectoryNode" />
-            </PATH_ELEMENT>
-          </PATH>
         </subPane>
       </pane>
     </panes>
@@ -598,15 +566,15 @@
   </component>
   <component name="ToolWindowManager">
     <frame x="-8" y="-8" width="1382" height="744" extended-state="6" />
-    <editor active="true" />
+    <editor active="false" />
     <layout>
       <window_info id="Changes" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32991454" sideWeight="0.5" order="7" side_tool="false" content_ui="tabs" />
       <window_info id="Terminal" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="8" side_tool="false" content_ui="tabs" />
       <window_info id="TODO" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="6" side_tool="false" content_ui="tabs" />
       <window_info id="Database" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Structure" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.19637462" sideWeight="0.6319613" order="1" side_tool="true" content_ui="tabs" />
-      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.1978852" sideWeight="0.36784142" order="0" side_tool="false" content_ui="combo" />
-      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.3850085" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.20392749" sideWeight="0.36784142" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.3848684" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
       <window_info id="Favorites" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.1918429" sideWeight="0.62995595" order="2" side_tool="true" content_ui="tabs" />
       <window_info id="Event Log" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.46324787" sideWeight="0.5" order="7" side_tool="true" content_ui="tabs" />
       <window_info id="Run" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32820514" sideWeight="0.5" order="2" side_tool="false" content_ui="tabs" />
@@ -669,7 +637,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.33333334" vertical-offset="3202" max-vertical-offset="16126">
           <caret line="154" column="0" selection-start-line="154" selection-start-column="0" selection-end-line="154" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -677,7 +644,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="4260" max-vertical-offset="4554">
           <caret line="214" column="0" selection-start-line="214" selection-start-column="0" selection-end-line="214" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -685,7 +651,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.33333334" vertical-offset="1684" max-vertical-offset="9944">
           <caret line="85" column="0" selection-start-line="85" selection-start-column="0" selection-end-line="85" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -693,7 +658,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="1180" max-vertical-offset="1474">
           <caret line="66" column="0" selection-start-line="66" selection-start-column="0" selection-end-line="66" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -737,7 +701,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.33333334" vertical-offset="10698" max-vertical-offset="14960">
           <caret line="493" column="0" selection-start-line="493" selection-start-column="0" selection-end-line="493" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -798,7 +761,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.33333334" vertical-offset="1997" max-vertical-offset="6138">
           <caret line="112" column="0" selection-start-line="112" selection-start-column="0" selection-end-line="112" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -862,14 +824,6 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/DjangoUeditor/urls.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="32" max-vertical-offset="374">
-          <caret line="7" column="18" selection-start-line="7" selection-start-column="18" selection-end-line="7" selection-end-column="18" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://$PROJECT_DIR$/DjangoUeditor/static/ueditor/ueditor.config.js">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="1452" max-vertical-offset="9152">
@@ -877,26 +831,10 @@
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/DjangoUeditor/utils.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="2816">
-          <caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/DjangoUeditor/views.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="4351" max-vertical-offset="6490">
-          <caret line="218" column="55" selection-start-line="218" selection-start-column="55" selection-end-line="218" selection-end-column="55" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
     <entry file="file://C:/Python27/Lib/site-packages/django/forms/forms.py">
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.33333334" vertical-offset="4448" max-vertical-offset="12672">
           <caret line="222" column="0" selection-start-line="222" selection-start-column="0" selection-end-line="222" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -904,7 +842,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="498" max-vertical-offset="3630">
           <caret line="28" column="40" selection-start-line="28" selection-start-column="40" selection-end-line="28" selection-end-column="40" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -912,7 +849,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="2244" max-vertical-offset="4092">
           <caret line="111" column="45" selection-start-line="111" selection-start-column="45" selection-end-line="111" selection-end-column="45" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -920,7 +856,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.13432837" vertical-offset="3255" max-vertical-offset="18942">
           <caret line="164" column="8" selection-start-line="164" selection-start-column="8" selection-end-line="164" selection-end-column="8" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -936,7 +871,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.3313433" vertical-offset="2375" max-vertical-offset="7106">
           <caret line="123" column="0" selection-start-line="123" selection-start-column="0" selection-end-line="123" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -944,7 +878,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="1275" max-vertical-offset="1738">
           <caret line="65" column="0" selection-start-line="65" selection-start-column="0" selection-end-line="65" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -952,7 +885,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="330">
           <caret line="9" column="0" selection-start-line="9" selection-start-column="0" selection-end-line="9" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -968,7 +900,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="5745" max-vertical-offset="7172">
           <caret line="280" column="0" selection-start-line="280" selection-start-column="0" selection-end-line="280" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -976,7 +907,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="284" max-vertical-offset="814">
           <caret line="26" column="0" selection-start-line="26" selection-start-column="0" selection-end-line="26" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -984,7 +914,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="12" max-vertical-offset="836">
           <caret line="9" column="58" selection-start-line="9" selection-start-column="58" selection-end-line="9" selection-end-column="58" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -992,7 +921,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="1.4193548" vertical-offset="198" max-vertical-offset="3960">
           <caret line="7" column="55" selection-start-line="7" selection-start-column="55" selection-end-line="7" selection-end-column="55" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1000,7 +928,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="-0.0" vertical-offset="0" max-vertical-offset="638">
           <caret line="0" column="86" selection-start-line="0" selection-start-column="66" selection-end-line="0" selection-end-column="86" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1008,21 +935,12 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="-2.1290324" vertical-offset="0" max-vertical-offset="462">
           <caret line="3" column="6" selection-start-line="0" selection-start-column="0" selection-end-line="15" selection-end-column="7" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/DjangoUeditor/widgets.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="324" max-vertical-offset="3300">
-          <caret line="30" column="8" selection-start-line="30" selection-start-column="8" selection-end-line="30" selection-end-column="8" />
-          <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/DUSite/templates/test2.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="-5.677419" vertical-offset="0" max-vertical-offset="462">
+        <state vertical-scroll-proportion="0.0" vertical-offset="176" max-vertical-offset="462">
           <caret line="8" column="29" selection-start-line="8" selection-start-column="29" selection-end-line="8" selection-end-column="29" />
           <folding />
         </state>
@@ -1032,19 +950,15 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="88" max-vertical-offset="726">
           <caret line="17" column="31" selection-start-line="17" selection-start-column="31" selection-end-line="17" selection-end-column="31" />
-          <folding>
-            <element signature="e#14#65#0" expanded="true" />
-          </folding>
+          <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/DjangoUeditor/templates/ueditor.html">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="-4.967742" vertical-offset="0" max-vertical-offset="330">
+        <state vertical-scroll-proportion="0.0" vertical-offset="154" max-vertical-offset="330">
           <caret line="7" column="38" selection-start-line="7" selection-start-column="38" selection-end-line="7" selection-end-column="38" />
-          <folding>
-            <element signature="n#style#0;n#script#0;n#!!top" expanded="true" />
-          </folding>
+          <folding />
         </state>
       </provider>
     </entry>
@@ -1052,9 +966,7 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="528">
           <caret line="12" column="61" selection-start-line="12" selection-start-column="61" selection-end-line="12" selection-end-column="61" />
-          <folding>
-            <element signature="e#15#39#0" expanded="true" />
-          </folding>
+          <folding />
         </state>
       </provider>
     </entry>
@@ -1062,16 +974,46 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="122" max-vertical-offset="946">
           <caret line="13" column="0" selection-start-line="13" selection-start-column="0" selection-end-line="13" selection-end-column="0" />
-          <folding>
-            <element signature="e#14#76#0" expanded="true" />
-          </folding>
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/DjangoUeditor/utils.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="2816">
+          <caret line="1" column="0" selection-start-line="1" selection-start-column="0" selection-end-line="1" selection-end-column="0" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/DjangoUeditor/widgets.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0" vertical-offset="261" max-vertical-offset="3300">
+          <caret line="42" column="36" selection-start-line="42" selection-start-column="36" selection-end-line="42" selection-end-column="36" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/DjangoUeditor/views.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="1.5172414" vertical-offset="0" max-vertical-offset="6578">
+          <caret line="42" column="33" selection-start-line="42" selection-start-column="33" selection-end-line="42" selection-end-column="33" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/DjangoUeditor/urls.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="374">
+          <caret line="11" column="1" selection-start-line="11" selection-start-column="1" selection-end-line="11" selection-end-column="1" />
+          <folding />
         </state>
       </provider>
     </entry>
     <entry file="file://$PROJECT_DIR$/readme.md">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.37288135" vertical-offset="66" max-vertical-offset="5896">
-          <caret line="8" column="0" selection-start-line="8" selection-start-column="0" selection-end-line="8" selection-end-column="0" />
+        <state vertical-scroll-proportion="0.3378119" vertical-offset="0" max-vertical-offset="6006">
+          <caret line="8" column="25" selection-start-line="8" selection-start-column="25" selection-end-line="8" selection-end-column="25" />
           <folding />
         </state>
       </provider>

+ 0 - 166
DjangoUeditor/static/ueditor/dialogs/attachment/callbacks.js

@@ -1,166 +0,0 @@
-/* Demo Note:  This demo uses a FileProgress class that handles the UI for displaying the file name and percent complete.
-The FileProgress class is not part of SWFUpload.
-*/
-
-
-/* **********************
-   Event Handlers
-   These are my custom event handlers to make my
-   web application behave the way I went when SWFUpload
-   completes different tasks.  These aren't part of the SWFUpload
-   package.  They are part of my application.  Without these none
-   of the actions SWFUpload makes will show up in my application.
-   ********************** */
-function preLoad() {
-	if (!this.support.loading) {
-		alert(lang.flashVersionError);
-		return false;
-	}
-    return true;
-}
-function loadFailed() {
-	alert(lang.flashLoadingError);
-}
-
-function fileQueued(file) {
-	try {
-		var progress = new FileProgress(file, this.customSettings.progressTarget);
-		progress.setStatus(lang.fileUploadReady);
-		progress.toggleCancel(true, this,lang.delUploadQueue);
-	} catch (ex) {
-		this.debug(ex);
-	}
-
-}
-
-function fileQueueError(file, errorCode, message) {
-	try {
-		if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
-			alert(lang.limitPrompt1+ message +  lang.limitPrompt2);
-			return;
-		}
-
-		var progress = new FileProgress(file, this.customSettings.progressTarget);
-		progress.setError();
-        progress.toggleCancel(true, this,lang.delFailFile);
-
-		switch (errorCode) {
-		case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
-			progress.setStatus(lang.fileSizeLimit);
-			this.debug("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-			break;
-		case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
-			progress.setStatus(lang.emptyFile);
-			this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-			break;
-		case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
-			progress.setStatus(lang.fileTypeError);
-			this.debug("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-			break;
-		default:
-			if (file !== null) {
-				progress.setStatus(lang.unknownError);
-			}
-			this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-			break;
-		}
-	} catch (ex) {
-        this.debug(ex);
-    }
-}
-
-
-
-function uploadStart(file) {
-	try {
-		/* I don't want to do any file validation or anything,  I'll just update the UI and
-		return true to indicate that the upload should start.
-		It's important to update the UI here because in Linux no uploadProgress events are called. The best
-		we can do is say we are uploading.
-		 */
-		var progress = new FileProgress(file, this.customSettings.progressTarget);
-		progress.setStatus(lang.fileUploading);
-		progress.toggleCancel(true, this,lang.cancelUpload);
-	}catch (ex) {}
-
-	return true;
-}
-
-function uploadProgress(file, bytesLoaded, bytesTotal) {
-	try {
-		var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
-
-		var progress = new FileProgress(file, this.customSettings.progressTarget);
-		progress.setProgress(percent);
-		progress.setStatus(lang.fileUploading);
-	} catch (ex) {
-		this.debug(ex);
-	}
-}
-
-
-function uploadError(file, errorCode, message) {
-	try {
-		var progress = new FileProgress(file, this.customSettings.progressTarget);
-		progress.setError();
-		//progress.toggleCancel(false);
-
-		switch (errorCode) {
-		case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
-			progress.setStatus(lang.netError + message);
-			this.debug("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
-			break;
-		case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
-			progress.setStatus(lang.failUpload);
-			this.debug("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-			break;
-		case SWFUpload.UPLOAD_ERROR.IO_ERROR:
-			progress.setStatus(lang.serverIOError);
-			this.debug("Error Code: IO Error, File name: " + file.name + ", Message: " + message);
-			break;
-		case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
-			progress.setStatus(lang.noAuthority);
-			this.debug("Error Code: Security Error, File name: " + file.name + ", Message: " + message);
-			break;
-		case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
-			progress.setStatus(lang.fileNumLimit);
-			this.debug("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-			break;
-		case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
-			progress.setStatus(lang.failCheck);
-			this.debug("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-			break;
-		case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
-			// If there aren't any files left (they were all cancelled) disable the cancel button
-//			if (this.getStats().files_queued === 0) {
-//				document.getElementById(this.customSettings.cancelButtonId).disabled = true;
-//			}
-			progress.setStatus(lang.fileCanceling);
-			progress.setCancelled();
-			break;
-		case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
-			progress.setStatus(lang.stopUploading);
-			break;
-		default:
-			progress.setStatus(lang.unknownError + errorCode);
-			this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-			break;
-		}
-	} catch (ex) {
-        this.debug(ex);
-    }
-}
-
-function uploadComplete(file) {
-    //alert(file);
-    //	if (this.getStats().files_queued === 0) {
-    //		document.getElementById(this.customSettings.cancelButtonId).disabled = true;
-    //	}
-}
-
-// This event comes from the Queue Plugin
-function queueComplete(numFilesUploaded) {
-	var status = document.getElementById("divStatus");
-    var num = status.innerHTML.match(/\d+/g);
-	status.innerHTML = ((num && num[0] ?parseInt(num[0]):0) + numFilesUploaded) +lang.statusPrompt;
-}

+ 0 - 29
DjangoUeditor/static/ueditor/dialogs/attachment/fileTypeMaps.js

@@ -1,29 +0,0 @@
-/**
- * Created by JetBrains PhpStorm.
- * User: taoqili
- * Date: 12-2-10
- * Time: 下午3:50
- * To change this template use File | Settings | File Templates.
- */
-//文件类型图标索引
-var fileTypeMaps = {
-    ".rar":"icon_rar.gif",
-    ".zip":"icon_rar.gif",
-    ".doc":"icon_doc.gif",
-    ".docx":"icon_doc.gif",
-    ".pdf":"icon_pdf.gif",
-    ".mp3":"icon_mp3.gif",
-    ".xls":"icon_xls.gif",
-    ".chm":"icon_chm.gif",
-    ".ppt":"icon_ppt.gif",
-    ".pptx":"icon_ppt.gif",
-    ".avi":"icon_mv.gif",
-    ".rmvb":"icon_mv.gif",
-    ".wmv":"icon_mv.gif",
-    ".flv":"icon_mv.gif",
-    ".swf":"icon_mv.gif",
-    ".rm":"icon_mv.gif",
-    ".exe":"icon_exe.gif",
-    ".psd":"icon_psd.gif",
-    ".txt":"icon_txt.gif"
-};

BIN=BIN
DjangoUeditor/static/ueditor/dialogs/image/imageUploader.swf


BIN=BIN
DjangoUeditor/static/ueditor/dialogs/image/images/center_focus.jpg


BIN=BIN
DjangoUeditor/static/ueditor/dialogs/image/images/left_focus.jpg


BIN=BIN
DjangoUeditor/static/ueditor/dialogs/image/images/none_focus.jpg


BIN=BIN
DjangoUeditor/static/ueditor/dialogs/image/images/right_focus.jpg


+ 0 - 1495
DjangoUeditor/static/ueditor/dialogs/tangram.js

@@ -1,1495 +0,0 @@
-// Copyright (c) 2009, Baidu Inc. All rights reserved.
-// 
-// Licensed under the BSD License
-// you may not use this file except in compliance with the License.
-// You may obtain a copy of the License at
-// 
-//      http:// tangram.baidu.com/license.html
-// 
-// Unless required by applicable law or agreed to in writing, software
-// distributed under the License is distributed on an "AS-IS" BASIS,
-// WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
-// See the License for the specific language governing permissions and
-// limitations under the License.
- /**
- * @namespace T Tangram七巧板
- * @name T
- * @version 1.6.0
-*/
-
-/**
- * 声明baidu包
- * @author: allstar, erik, meizz, berg
- */
-var T,
-    baidu = T = baidu || {version: "1.5.0"};
-baidu.guid = "$BAIDU$";
-baidu.$$ = window[baidu.guid] = window[baidu.guid] || {global:{}};
-
-/**
- * 使用flash资源封装的一些功能
- * @namespace baidu.flash
- */
-baidu.flash = baidu.flash || {};
-
-/**
- * 操作dom的方法
- * @namespace baidu.dom 
- */
-baidu.dom = baidu.dom || {};
-
-
-/**
- * 从文档中获取指定的DOM元素
- * @name baidu.dom.g
- * @function
- * @grammar baidu.dom.g(id)
- * @param {string|HTMLElement} id 元素的id或DOM元素.
- * @shortcut g,T.G
- * @meta standard
- * @see baidu.dom.q
- *
- * @return {HTMLElement|null} 获取的元素,查找不到时返回null,如果参数不合法,直接返回参数.
- */
-baidu.dom.g = function(id) {
-    if (!id) return null;
-    if ('string' == typeof id || id instanceof String) {
-        return document.getElementById(id);
-    } else if (id.nodeName && (id.nodeType == 1 || id.nodeType == 9)) {
-        return id;
-    }
-    return null;
-};
-baidu.g = baidu.G = baidu.dom.g;
-
-
-/**
- * 操作数组的方法
- * @namespace baidu.array
- */
-
-baidu.array = baidu.array || {};
-
-
-/**
- * 遍历数组中所有元素
- * @name baidu.array.each
- * @function
- * @grammar baidu.array.each(source, iterator[, thisObject])
- * @param {Array} source 需要遍历的数组
- * @param {Function} iterator 对每个数组元素进行调用的函数,该函数有两个参数,第一个为数组元素,第二个为数组索引值,function (item, index)。
- * @param {Object} [thisObject] 函数调用时的this指针,如果没有此参数,默认是当前遍历的数组
- * @remark
- * each方法不支持对Object的遍历,对Object的遍历使用baidu.object.each 。
- * @shortcut each
- * @meta standard
- *             
- * @returns {Array} 遍历的数组
- */
- 
-baidu.each = baidu.array.forEach = baidu.array.each = function (source, iterator, thisObject) {
-    var returnValue, item, i, len = source.length;
-    
-    if ('function' == typeof iterator) {
-        for (i = 0; i < len; i++) {
-            item = source[i];
-            returnValue = iterator.call(thisObject || source, item, i);
-    
-            if (returnValue === false) {
-                break;
-            }
-        }
-    }
-    return source;
-};
-
-/**
- * 对语言层面的封装,包括类型判断、模块扩展、继承基类以及对象自定义事件的支持。
- * @namespace baidu.lang
- */
-baidu.lang = baidu.lang || {};
-
-
-/**
- * 判断目标参数是否为function或Function实例
- * @name baidu.lang.isFunction
- * @function
- * @grammar baidu.lang.isFunction(source)
- * @param {Any} source 目标参数
- * @version 1.2
- * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate
- * @meta standard
- * @returns {boolean} 类型判断结果
- */
-baidu.lang.isFunction = function (source) {
-    return '[object Function]' == Object.prototype.toString.call(source);
-};
-
-/**
- * 判断目标参数是否string类型或String对象
- * @name baidu.lang.isString
- * @function
- * @grammar baidu.lang.isString(source)
- * @param {Any} source 目标参数
- * @shortcut isString
- * @meta standard
- * @see baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isArray,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate
- *             
- * @returns {boolean} 类型判断结果
- */
-baidu.lang.isString = function (source) {
-    return '[object String]' == Object.prototype.toString.call(source);
-};
-baidu.isString = baidu.lang.isString;
-
-
-/**
- * 判断浏览器类型和特性的属性
- * @namespace baidu.browser
- */
-baidu.browser = baidu.browser || {};
-
-
-/**
- * 判断是否为opera浏览器
- * @property opera opera版本号
- * @grammar baidu.browser.opera
- * @meta standard
- * @see baidu.browser.ie,baidu.browser.firefox,baidu.browser.safari,baidu.browser.chrome
- * @returns {Number} opera版本号
- */
-
-/**
- * opera 从10开始不是用opera后面的字符串进行版本的判断
- * 在Browser identification最后添加Version + 数字进行版本标识
- * opera后面的数字保持在9.80不变
- */
-baidu.browser.opera = /opera(\/| )(\d+(\.\d+)?)(.+?(version\/(\d+(\.\d+)?)))?/i.test(navigator.userAgent) ?  + ( RegExp["\x246"] || RegExp["\x242"] ) : undefined;
-
-
-/**
- * 在目标元素的指定位置插入HTML代码
- * @name baidu.dom.insertHTML
- * @function
- * @grammar baidu.dom.insertHTML(element, position, html)
- * @param {HTMLElement|string} element 目标元素或目标元素的id
- * @param {string} position 插入html的位置信息,取值为beforeBegin,afterBegin,beforeEnd,afterEnd
- * @param {string} html 要插入的html
- * @remark
- * 
- * 对于position参数,大小写不敏感<br>
- * 参数的意思:beforeBegin&lt;span&gt;afterBegin   this is span! beforeEnd&lt;/span&gt; afterEnd <br />
- * 此外,如果使用本函数插入带有script标签的HTML字符串,script标签对应的脚本将不会被执行。
- * 
- * @shortcut insertHTML
- * @meta standard
- *             
- * @returns {HTMLElement} 目标元素
- */
-baidu.dom.insertHTML = function (element, position, html) {
-    element = baidu.dom.g(element);
-    var range,begin;
-    if (element.insertAdjacentHTML && !baidu.browser.opera) {
-        element.insertAdjacentHTML(position, html);
-    } else {
-        range = element.ownerDocument.createRange();
-        position = position.toUpperCase();
-        if (position == 'AFTERBEGIN' || position == 'BEFOREEND') {
-            range.selectNodeContents(element);
-            range.collapse(position == 'AFTERBEGIN');
-        } else {
-            begin = position == 'BEFOREBEGIN';
-            range[begin ? 'setStartBefore' : 'setEndAfter'](element);
-            range.collapse(begin);
-        }
-        range.insertNode(range.createContextualFragment(html));
-    }
-    return element;
-};
-
-baidu.insertHTML = baidu.dom.insertHTML;
-
-/**
- * 操作flash对象的方法,包括创建flash对象、获取flash对象以及判断flash插件的版本号
- * @namespace baidu.swf
- */
-baidu.swf = baidu.swf || {};
-
-
-/**
- * 浏览器支持的flash插件版本
- * @property version 浏览器支持的flash插件版本
- * @grammar baidu.swf.version
- * @return {String} 版本号
- * @meta standard
- */
-baidu.swf.version = (function () {
-    var n = navigator;
-    if (n.plugins && n.mimeTypes.length) {
-        var plugin = n.plugins["Shockwave Flash"];
-        if (plugin && plugin.description) {
-            return plugin.description
-                    .replace(/([a-zA-Z]|\s)+/, "")
-                    .replace(/(\s)+r/, ".") + ".0";
-        }
-    } else if (window.ActiveXObject && !window.opera) {
-        for (var i = 12; i >= 2; i--) {
-            try {
-                var c = new ActiveXObject('ShockwaveFlash.ShockwaveFlash.' + i);
-                if (c) {
-                    var version = c.GetVariable("$version");
-                    return version.replace(/WIN/g,'').replace(/,/g,'.');
-                }
-            } catch(e) {}
-        }
-    }
-})();
-
-/**
- * 操作字符串的方法
- * @namespace baidu.string
- */
-baidu.string = baidu.string || {};
-
-
-/**
- * 对目标字符串进行html编码
- * @name baidu.string.encodeHTML
- * @function
- * @grammar baidu.string.encodeHTML(source)
- * @param {string} source 目标字符串
- * @remark
- * 编码字符有5个:&<>"'
- * @shortcut encodeHTML
- * @meta standard
- * @see baidu.string.decodeHTML
- *             
- * @returns {string} html编码后的字符串
- */
-baidu.string.encodeHTML = function (source) {
-    return String(source)
-                .replace(/&/g,'&amp;')
-                .replace(/</g,'&lt;')
-                .replace(/>/g,'&gt;')
-                .replace(/"/g, "&quot;")
-                .replace(/'/g, "&#39;");
-};
-
-baidu.encodeHTML = baidu.string.encodeHTML;
-
-/**
- * 创建flash对象的html字符串
- * @name baidu.swf.createHTML
- * @function
- * @grammar baidu.swf.createHTML(options)
- * 
- * @param {Object} 	options 					创建flash的选项参数
- * @param {string} 	options.id 					要创建的flash的标识
- * @param {string} 	options.url 				flash文件的url
- * @param {String} 	options.errorMessage 		未安装flash player或flash player版本号过低时的提示
- * @param {string} 	options.ver 				最低需要的flash player版本号
- * @param {string} 	options.width 				flash的宽度
- * @param {string} 	options.height 				flash的高度
- * @param {string} 	options.align 				flash的对齐方式,允许值:middle/left/right/top/bottom
- * @param {string} 	options.base 				设置用于解析swf文件中的所有相对路径语句的基本目录或URL
- * @param {string} 	options.bgcolor 			swf文件的背景色
- * @param {string} 	options.salign 				设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br
- * @param {boolean} options.menu 				是否显示右键菜单,允许值:true/false
- * @param {boolean} options.loop 				播放到最后一帧时是否重新播放,允许值: true/false
- * @param {boolean} options.play 				flash是否在浏览器加载时就开始播放。允许值:true/false
- * @param {string} 	options.quality 			设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best
- * @param {string} 	options.scale 				设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit
- * @param {string} 	options.wmode 				设置flash的显示模式。允许值:window/opaque/transparent
- * @param {string} 	options.allowscriptaccess 	设置flash与页面的通信权限。允许值:always/never/sameDomain
- * @param {string} 	options.allownetworking 	设置swf文件中允许使用的网络API。允许值:all/internal/none
- * @param {boolean} options.allowfullscreen 	是否允许flash全屏。允许值:true/false
- * @param {boolean} options.seamlesstabbing 	允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false
- * @param {boolean} options.devicefont 			设置静态文本对象是否以设备字体呈现。允许值:true/false
- * @param {boolean} options.swliveconnect 		第一次加载flash时浏览器是否应启动Java。允许值:true/false
- * @param {Object} 	options.vars 				要传递给flash的参数,支持JSON或string类型。
- * 
- * @see baidu.swf.create
- * @meta standard
- * @returns {string} flash对象的html字符串
- */
-baidu.swf.createHTML = function (options) {
-    options = options || {};
-    var version = baidu.swf.version, 
-        needVersion = options['ver'] || '6.0.0', 
-        vUnit1, vUnit2, i, k, len, item, tmpOpt = {},
-        encodeHTML = baidu.string.encodeHTML;
-    for (k in options) {
-        tmpOpt[k] = options[k];
-    }
-    options = tmpOpt;
-    if (version) {
-        version = version.split('.');
-        needVersion = needVersion.split('.');
-        for (i = 0; i < 3; i++) {
-            vUnit1 = parseInt(version[i], 10);
-            vUnit2 = parseInt(needVersion[i], 10);
-            if (vUnit2 < vUnit1) {
-                break;
-            } else if (vUnit2 > vUnit1) {
-                return '';
-            }
-        }
-    } else {
-        return '';
-    }
-    
-    var vars = options['vars'],
-        objProperties = ['classid', 'codebase', 'id', 'width', 'height', 'align'];
-    options['align'] = options['align'] || 'middle';
-    options['classid'] = 'clsid:d27cdb6e-ae6d-11cf-96b8-444553540000';
-    options['codebase'] = 'http://fpdownload.macromedia.com/pub/shockwave/cabs/flash/swflash.cab#version=6,0,0,0';
-    options['movie'] = options['url'] || '';
-    delete options['vars'];
-    delete options['url'];
-    if ('string' == typeof vars) {
-        options['flashvars'] = vars;
-    } else {
-        var fvars = [];
-        for (k in vars) {
-            item = vars[k];
-            fvars.push(k + "=" + encodeURIComponent(item));
-        }
-        options['flashvars'] = fvars.join('&');
-    }
-    var str = ['<object '];
-    for (i = 0, len = objProperties.length; i < len; i++) {
-        item = objProperties[i];
-        str.push(' ', item, '="', encodeHTML(options[item]), '"');
-    }
-    str.push('>');
-    var params = {
-        'wmode'             : 1,
-        'scale'             : 1,
-        'quality'           : 1,
-        'play'              : 1,
-        'loop'              : 1,
-        'menu'              : 1,
-        'salign'            : 1,
-        'bgcolor'           : 1,
-        'base'              : 1,
-        'allowscriptaccess' : 1,
-        'allownetworking'   : 1,
-        'allowfullscreen'   : 1,
-        'seamlesstabbing'   : 1,
-        'devicefont'        : 1,
-        'swliveconnect'     : 1,
-        'flashvars'         : 1,
-        'movie'             : 1
-    };
-    
-    for (k in options) {
-        item = options[k];
-        k = k.toLowerCase();
-        if (params[k] && (item || item === false || item === 0)) {
-            str.push('<param name="' + k + '" value="' + encodeHTML(item) + '" />');
-        }
-    }
-    options['src']  = options['movie'];
-    options['name'] = options['id'];
-    delete options['id'];
-    delete options['movie'];
-    delete options['classid'];
-    delete options['codebase'];
-    options['type'] = 'application/x-shockwave-flash';
-    options['pluginspage'] = 'http://www.macromedia.com/go/getflashplayer';
-    str.push('<embed');
-    var salign;
-    for (k in options) {
-        item = options[k];
-        if (item || item === false || item === 0) {
-            if ((new RegExp("^salign\x24", "i")).test(k)) {
-                salign = item;
-                continue;
-            }
-            
-            str.push(' ', k, '="', encodeHTML(item), '"');
-        }
-    }
-    
-    if (salign) {
-        str.push(' salign="', encodeHTML(salign), '"');
-    }
-    str.push('></embed></object>');
-    
-    return str.join('');
-};
-
-
-/**
- * 在页面中创建一个flash对象
- * @name baidu.swf.create
- * @function
- * @grammar baidu.swf.create(options[, container])
- * 
- * @param {Object} 	options 					创建flash的选项参数
- * @param {string} 	options.id 					要创建的flash的标识
- * @param {string} 	options.url 				flash文件的url
- * @param {String} 	options.errorMessage 		未安装flash player或flash player版本号过低时的提示
- * @param {string} 	options.ver 				最低需要的flash player版本号
- * @param {string} 	options.width 				flash的宽度
- * @param {string} 	options.height 				flash的高度
- * @param {string} 	options.align 				flash的对齐方式,允许值:middle/left/right/top/bottom
- * @param {string} 	options.base 				设置用于解析swf文件中的所有相对路径语句的基本目录或URL
- * @param {string} 	options.bgcolor 			swf文件的背景色
- * @param {string} 	options.salign 				设置缩放的swf文件在由width和height设置定义的区域内的位置。允许值:l/r/t/b/tl/tr/bl/br
- * @param {boolean} options.menu 				是否显示右键菜单,允许值:true/false
- * @param {boolean} options.loop 				播放到最后一帧时是否重新播放,允许值: true/false
- * @param {boolean} options.play 				flash是否在浏览器加载时就开始播放。允许值:true/false
- * @param {string} 	options.quality 			设置flash播放的画质,允许值:low/medium/high/autolow/autohigh/best
- * @param {string} 	options.scale 				设置flash内容如何缩放来适应设置的宽高。允许值:showall/noborder/exactfit
- * @param {string} 	options.wmode 				设置flash的显示模式。允许值:window/opaque/transparent
- * @param {string} 	options.allowscriptaccess 	设置flash与页面的通信权限。允许值:always/never/sameDomain
- * @param {string} 	options.allownetworking 	设置swf文件中允许使用的网络API。允许值:all/internal/none
- * @param {boolean} options.allowfullscreen 	是否允许flash全屏。允许值:true/false
- * @param {boolean} options.seamlesstabbing 	允许设置执行无缝跳格,从而使用户能跳出flash应用程序。该参数只能在安装Flash7及更高版本的Windows中使用。允许值:true/false
- * @param {boolean} options.devicefont 			设置静态文本对象是否以设备字体呈现。允许值:true/false
- * @param {boolean} options.swliveconnect 		第一次加载flash时浏览器是否应启动Java。允许值:true/false
- * @param {Object} 	options.vars 				要传递给flash的参数,支持JSON或string类型。
- * 
- * @param {HTMLElement|string} [container] 		flash对象的父容器元素,不传递该参数时在当前代码位置创建flash对象。
- * @meta standard
- * @see baidu.swf.createHTML,baidu.swf.getMovie
- */
-baidu.swf.create = function (options, target) {
-    options = options || {};
-    var html = baidu.swf.createHTML(options) 
-               || options['errorMessage'] 
-               || '';
-                
-    if (target && 'string' == typeof target) {
-        target = document.getElementById(target);
-    }
-    baidu.dom.insertHTML( target || document.body ,'beforeEnd',html );
-};
-/**
- * 判断是否为ie浏览器
- * @name baidu.browser.ie
- * @field
- * @grammar baidu.browser.ie
- * @returns {Number} IE版本号
- */
-baidu.browser.ie = baidu.ie = /msie (\d+\.\d+)/i.test(navigator.userAgent) ? (document.documentMode || + RegExp['\x241']) : undefined;
-
-/**
- * 移除数组中的项
- * @name baidu.array.remove
- * @function
- * @grammar baidu.array.remove(source, match)
- * @param {Array} source 需要移除项的数组
- * @param {Any} match 要移除的项
- * @meta standard
- * @see baidu.array.removeAt
- *             
- * @returns {Array} 移除后的数组
- */
-baidu.array.remove = function (source, match) {
-    var len = source.length;
-        
-    while (len--) {
-        if (len in source && source[len] === match) {
-            source.splice(len, 1);
-        }
-    }
-    return source;
-};
-
-/**
- * 判断目标参数是否Array对象
- * @name baidu.lang.isArray
- * @function
- * @grammar baidu.lang.isArray(source)
- * @param {Any} source 目标参数
- * @meta standard
- * @see baidu.lang.isString,baidu.lang.isObject,baidu.lang.isNumber,baidu.lang.isElement,baidu.lang.isBoolean,baidu.lang.isDate
- *             
- * @returns {boolean} 类型判断结果
- */
-baidu.lang.isArray = function (source) {
-    return '[object Array]' == Object.prototype.toString.call(source);
-};
-
-
-
-/**
- * 将一个变量转换成array
- * @name baidu.lang.toArray
- * @function
- * @grammar baidu.lang.toArray(source)
- * @param {mix} source 需要转换成array的变量
- * @version 1.3
- * @meta standard
- * @returns {array} 转换后的array
- */
-baidu.lang.toArray = function (source) {
-    if (source === null || source === undefined)
-        return [];
-    if (baidu.lang.isArray(source))
-        return source;
-    if (typeof source.length !== 'number' || typeof source === 'string' || baidu.lang.isFunction(source)) {
-        return [source];
-    }
-    if (source.item) {
-        var l = source.length, array = new Array(l);
-        while (l--)
-            array[l] = source[l];
-        return array;
-    }
-
-    return [].slice.call(source);
-};
-
-/**
- * 获得flash对象的实例
- * @name baidu.swf.getMovie
- * @function
- * @grammar baidu.swf.getMovie(name)
- * @param {string} name flash对象的名称
- * @see baidu.swf.create
- * @meta standard
- * @returns {HTMLElement} flash对象的实例
- */
-baidu.swf.getMovie = function (name) {
-	var movie = document[name], ret;
-    return baidu.browser.ie == 9 ?
-    	movie && movie.length ? 
-    		(ret = baidu.array.remove(baidu.lang.toArray(movie),function(item){
-    			return item.tagName.toLowerCase() != "embed";
-    		})).length == 1 ? ret[0] : ret
-    		: movie
-    	: movie || window[name];
-};
-
-
-baidu.flash._Base = (function(){
-   
-    var prefix = 'bd__flash__';
-
-    /**
-     * 创建一个随机的字符串
-     * @private
-     * @return {String}
-     */
-    function _createString(){
-        return  prefix + Math.floor(Math.random() * 2147483648).toString(36);
-    };
-   
-    /**
-     * 检查flash状态
-     * @private
-     * @param {Object} target flash对象
-     * @return {Boolean}
-     */
-    function _checkReady(target){
-        if(typeof target !== 'undefined' && typeof target.flashInit !== 'undefined' && target.flashInit()){
-            return true;
-        }else{
-            return false;
-        }
-    };
-
-    /**
-     * 调用之前进行压栈的函数
-     * @private
-     * @param {Array} callQueue 调用队列
-     * @param {Object} target flash对象
-     * @return {Null}
-     */
-    function _callFn(callQueue, target){
-        var result = null;
-        
-        callQueue = callQueue.reverse();
-        baidu.each(callQueue, function(item){
-            result = target.call(item.fnName, item.params);
-            item.callBack(result);
-        });
-    };
-
-    /**
-     * 为传入的匿名函数创建函数名
-     * @private
-     * @param {String|Function} fun 传入的匿名函数或者函数名
-     * @return {String}
-     */
-    function _createFunName(fun){
-        var name = '';
-
-        if(baidu.lang.isFunction(fun)){
-            name = _createString();
-            window[name] = function(){
-                fun.apply(window, arguments);
-            };
-
-            return name;
-        }else if(baidu.lang.isString){
-            return fun;
-        }
-    };
-
-    /**
-     * 绘制flash
-     * @private
-     * @param {Object} options 创建参数
-     * @return {Object} 
-     */
-    function _render(options){
-        if(!options.id){
-            options.id = _createString();
-        }
-        
-        var container = options.container || '';
-        delete(options.container);
-        
-        baidu.swf.create(options, container);
-        
-        return baidu.swf.getMovie(options.id);
-    };
-
-    return function(options, callBack){
-        var me = this,
-            autoRender = (typeof options.autoRender !== 'undefined' ? options.autoRender : true),
-            createOptions = options.createOptions || {},
-            target = null,
-            isReady = false,
-            callQueue = [],
-            timeHandle = null,
-            callBack = callBack || [];
-
-        /**
-         * 将flash文件绘制到页面上
-         * @public
-         * @return {Null}
-         */
-        me.render = function(){
-            target = _render(createOptions);
-            
-            if(callBack.length > 0){
-                baidu.each(callBack, function(funName, index){
-                    callBack[index] = _createFunName(options[funName] || new Function());
-                });    
-            }
-            me.call('setJSFuncName', [callBack]);
-        };
-
-        /**
-         * 返回flash状态
-         * @return {Boolean}
-         */
-        me.isReady = function(){
-            return isReady;
-        };
-
-        /**
-         * 调用flash接口的统一入口
-         * @param {String} fnName 调用的函数名
-         * @param {Array} params 传入的参数组成的数组,若不许要参数,需传入空数组
-         * @param {Function} [callBack] 异步调用后将返回值作为参数的调用回调函数,如无返回值,可以不传入此参数
-         * @return {Null}
-        */
-        me.call = function(fnName, params, callBack){
-            if(!fnName) return null;
-            callBack = callBack || new Function();
-
-            var result = null;
-    
-            if(isReady){
-                result = target.call(fnName, params);
-                callBack(result);
-            }else{
-                callQueue.push({
-                    fnName: fnName,
-                    params: params,
-                    callBack: callBack
-                });
-    
-                (!timeHandle) && (timeHandle = setInterval(_check, 200));
-            }
-        };
-    
-        /**
-         * 为传入的匿名函数创建函数名
-         * @public
-         * @param {String|Function} fun 传入的匿名函数或者函数名
-         * @return {String}
-         */
-        me.createFunName = function(fun){
-            return _createFunName(fun);    
-        };
-
-        /**
-         * 检查flash是否ready, 并进行调用
-         * @private
-         * @return {Null}
-         */
-        function _check(){
-            if(_checkReady(target)){
-                clearInterval(timeHandle);
-                timeHandle = null;
-                _call();
-
-                isReady = true;
-            }               
-        };
-
-        /**
-         * 调用之前进行压栈的函数
-         * @private
-         * @return {Null}
-         */
-        function _call(){
-            _callFn(callQueue, target);
-            callQueue = [];
-        }
-
-        autoRender && me.render(); 
-    };
-})();
-
-
-
-/**
- * 创建flash based imageUploader
- * @class
- * @grammar baidu.flash.imageUploader(options)
- * @param {Object} createOptions 创建flash时需要的参数,请参照baidu.swf.create文档
- * @config {Object} vars 创建imageUploader时所需要的参数
- * @config {Number} vars.gridWidth 每一个预览图片所占的宽度,应该为flash寛的整除
- * @config {Number} vars.gridHeight 每一个预览图片所占的高度,应该为flash高的整除
- * @config {Number} vars.picWidth 单张预览图片的宽度
- * @config {Number} vars.picHeight 单张预览图片的高度
- * @config {String} vars.uploadDataFieldName POST请求中图片数据的key,默认值'picdata'
- * @config {String} vars.picDescFieldName POST请求中图片描述的key,默认值'picDesc'
- * @config {Number} vars.maxSize 文件的最大体积,单位'MB'
- * @config {Number} vars.compressSize 上传前如果图片体积超过该值,会先压缩
- * @config {Number} vars.maxNum:32 最大上传多少个文件
- * @config {Number} vars.compressLength 能接受的最大边长,超过该值会等比压缩
- * @config {String} vars.url 上传的url地址
- * @config {Number} vars.mode mode == 0时,是使用滚动条,mode == 1时,拉伸flash, 默认值为0
- * @see baidu.swf.createHTML
- * @param {String} backgroundUrl 背景图片路径
- * @param {String} listBacgroundkUrl 布局控件背景
- * @param {String} buttonUrl 按钮图片不背景
- * @param {String|Function} selectFileCallback 选择文件的回调
- * @param {String|Function} exceedFileCallback文件超出限制的最大体积时的回调
- * @param {String|Function} deleteFileCallback 删除文件的回调
- * @param {String|Function} startUploadCallback 开始上传某个文件时的回调
- * @param {String|Function} uploadCompleteCallback 某个文件上传完成的回调
- * @param {String|Function} uploadErrorCallback 某个文件上传失败的回调
- * @param {String|Function} allCompleteCallback 全部上传完成时的回调
- * @param {String|Function} changeFlashHeight 改变Flash的高度,mode==1的时候才有用
- */ 
-baidu.flash.imageUploader = baidu.flash.imageUploader || function(options){
-   
-    var me = this,
-        options = options || {},
-        _flash = new baidu.flash._Base(options, [
-            'selectFileCallback', 
-            'exceedFileCallback', 
-            'deleteFileCallback', 
-            'startUploadCallback',
-            'uploadCompleteCallback',
-            'uploadErrorCallback',
-            'allCompleteCallback',
-            'changeFlashHeight'
-        ]);
-    /**
-     * 开始或回复上传图片
-     * @public
-     * @return {Null}
-     */
-    me.upload = function(){
-        _flash.call('upload');
-    };
-
-    /**
-     * 暂停上传图片
-     * @public
-     * @return {Null}
-     */
-    me.pause = function(){
-        _flash.call('pause');
-    };
-    me.addCustomizedParams = function(index,obj){
-        _flash.call('addCustomizedParams',[index,obj]);
-    }
-};
-
-/**
- * 操作原生对象的方法
- * @namespace baidu.object
- */
-baidu.object = baidu.object || {};
-
-
-/**
- * 将源对象的所有属性拷贝到目标对象中
- * @author erik
- * @name baidu.object.extend
- * @function
- * @grammar baidu.object.extend(target, source)
- * @param {Object} target 目标对象
- * @param {Object} source 源对象
- * @see baidu.array.merge
- * @remark
- * 
-1.目标对象中,与源对象key相同的成员将会被覆盖。<br>
-2.源对象的prototype成员不会拷贝。
-		
- * @shortcut extend
- * @meta standard
- *             
- * @returns {Object} 目标对象
- */
-baidu.extend =
-baidu.object.extend = function (target, source) {
-    for (var p in source) {
-        if (source.hasOwnProperty(p)) {
-            target[p] = source[p];
-        }
-    }
-    
-    return target;
-};
-
-
-
-
-
-/**
- * 创建flash based fileUploader
- * @class
- * @grammar baidu.flash.fileUploader(options)
- * @param {Object} options
- * @config {Object} createOptions 创建flash时需要的参数,请参照baidu.swf.create文档
- * @config {String} createOptions.width
- * @config {String} createOptions.height
- * @config {Number} maxNum 最大可选文件数
- * @config {Function|String} selectFile
- * @config {Function|String} exceedMaxSize
- * @config {Function|String} deleteFile
- * @config {Function|String} uploadStart
- * @config {Function|String} uploadComplete
- * @config {Function|String} uploadError
- * @config {Function|String} uploadProgress
- */
-baidu.flash.fileUploader = baidu.flash.fileUploader || function(options){
-    var me = this,
-        options = options || {};
-    
-    options.createOptions = baidu.extend({
-        wmod: 'transparent'
-    },options.createOptions || {});
-    
-    var _flash = new baidu.flash._Base(options, [
-        'selectFile',
-        'exceedMaxSize',
-        'deleteFile',
-        'uploadStart',
-        'uploadComplete',
-        'uploadError', 
-        'uploadProgress'
-    ]);
-
-    _flash.call('setMaxNum', options.maxNum ? [options.maxNum] : [1]);
-
-    /**
-     * 设置当鼠标移动到flash上时,是否变成手型
-     * @public
-     * @param {Boolean} isCursor
-     * @return {Null}
-     */
-    me.setHandCursor = function(isCursor){
-        _flash.call('setHandCursor', [isCursor || false]);
-    };
-
-    /**
-     * 设置鼠标相应函数名
-     * @param {String|Function} fun
-     */
-    me.setMSFunName = function(fun){
-        _flash.call('setMSFunName',[_flash.createFunName(fun)]);
-    }; 
-
-    /**
-     * 执行上传操作
-     * @param {String} url 上传的url
-     * @param {String} fieldName 上传的表单字段名
-     * @param {Object} postData 键值对,上传的POST数据
-     * @param {Number|Array|null|-1} [index]上传的文件序列
-     *                            Int值上传该文件
-     *                            Array一次串行上传该序列文件
-     *                            -1/null上传所有文件
-     * @return {Null}
-     */
-    me.upload = function(url, fieldName, postData, index){
-
-        if(typeof url !== 'string' || typeof fieldName !== 'string') return null;
-        if(typeof index === 'undefined') index = -1;
-
-        _flash.call('upload', [url, fieldName, postData, index]);
-    };
-
-    /**
-     * 取消上传操作
-     * @public
-     * @param {Number|-1} index
-     */
-    me.cancel = function(index){
-        if(typeof index === 'undefined') index = -1;
-        _flash.call('cancel', [index]);
-    };
-
-    /**
-     * 删除文件
-     * @public
-     * @param {Number|Array} [index] 要删除的index,不传则全部删除
-     * @param {Function} callBack
-     * */
-    me.deleteFile = function(index, callBack){
-
-        var callBackAll = function(list){
-                callBack && callBack(list);
-            };
-
-        if(typeof index === 'undefined'){
-            _flash.call('deleteFilesAll', [], callBackAll);
-            return;
-        };
-        
-        if(typeof index === 'Number') index = [index];
-        index.sort(function(a,b){
-            return b-a;
-        });
-        baidu.each(index, function(item){
-            _flash.call('deleteFileBy', item, callBackAll);
-        });
-    };
-
-    /**
-     * 添加文件类型,支持macType
-     * @public
-     * @param {Object|Array[Object]} type {description:String, extention:String}
-     * @return {Null};
-     */
-    me.addFileType = function(type){
-        var type = type || [[]];
-        
-        if(type instanceof Array) type = [type];
-        else type = [[type]];
-        _flash.call('addFileTypes', type);
-    };
-    
-    /**
-     * 设置文件类型,支持macType
-     * @public
-     * @param {Object|Array[Object]} type {description:String, extention:String}
-     * @return {Null};
-     */
-    me.setFileType = function(type){
-        var type = type || [[]];
-        
-        if(type instanceof Array) type = [type];
-        else type = [[type]];
-        _flash.call('setFileTypes', type);
-    };
-
-    /**
-     * 设置可选文件的数量限制
-     * @public
-     * @param {Number} num
-     * @return {Null}
-     */
-    me.setMaxNum = function(num){
-        _flash.call('setMaxNum', [num]);
-    };
-
-    /**
-     * 设置可选文件大小限制,以兆M为单位
-     * @public
-     * @param {Number} num,0为无限制
-     * @return {Null}
-     */
-    me.setMaxSize = function(num){
-        _flash.call('setMaxSize', [num]);
-    };
-
-    /**
-     * @public
-     */
-    me.getFileAll = function(callBack){
-        _flash.call('getFileAll', [], callBack);
-    };
-
-    /**
-     * @public
-     * @param {Number} index
-     * @param {Function} [callBack]
-     */
-    me.getFileByIndex = function(index, callBack){
-        _flash.call('getFileByIndex', [], callBack);
-    };
-
-    /**
-     * @public
-     * @param {Number} index
-     * @param {function} [callBack]
-     */
-    me.getStatusByIndex = function(index, callBack){
-        _flash.call('getStatusByIndex', [], callBack);
-    };
-};
-
-/**
- * 使用动态script标签请求服务器资源,包括由服务器端的回调和浏览器端的回调
- * @namespace baidu.sio
- */
-baidu.sio = baidu.sio || {};
-
-/**
- * 
- * @param {HTMLElement} src script节点
- * @param {String} url script节点的地址
- * @param {String} [charset] 编码
- */
-baidu.sio._createScriptTag = function(scr, url, charset){
-    scr.setAttribute('type', 'text/javascript');
-    charset && scr.setAttribute('charset', charset);
-    scr.setAttribute('src', url);
-    document.getElementsByTagName('head')[0].appendChild(scr);
-};
-
-/**
- * 删除script的属性,再删除script标签,以解决修复内存泄漏的问题
- * 
- * @param {HTMLElement} src script节点
- */
-baidu.sio._removeScriptTag = function(scr){
-    if (scr.clearAttributes) {
-        scr.clearAttributes();
-    } else {
-        for (var attr in scr) {
-            if (scr.hasOwnProperty(attr)) {
-                delete scr[attr];
-            }
-        }
-    }
-    if(scr && scr.parentNode){
-        scr.parentNode.removeChild(scr);
-    }
-    scr = null;
-};
-
-
-/**
- * 通过script标签加载数据,加载完成由浏览器端触发回调
- * @name baidu.sio.callByBrowser
- * @function
- * @grammar baidu.sio.callByBrowser(url, opt_callback, opt_options)
- * @param {string} url 加载数据的url
- * @param {Function|string} opt_callback 数据加载结束时调用的函数或函数名
- * @param {Object} opt_options 其他可选项
- * @config {String} [charset] script的字符集
- * @config {Integer} [timeOut] 超时时间,超过这个时间将不再响应本请求,并触发onfailure函数
- * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数
- * @remark
- * 1、与callByServer不同,callback参数只支持Function类型,不支持string。
- * 2、如果请求了一个不存在的页面,callback函数在IE/opera下也会被调用,因此使用者需要在onsuccess函数中判断数据是否正确加载。
- * @meta standard
- * @see baidu.sio.callByServer
- */
-baidu.sio.callByBrowser = function (url, opt_callback, opt_options) {
-    var scr = document.createElement("SCRIPT"),
-        scriptLoaded = 0,
-        options = opt_options || {},
-        charset = options['charset'],
-        callback = opt_callback || function(){},
-        timeOut = options['timeOut'] || 0,
-        timer;
-    scr.onload = scr.onreadystatechange = function () {
-        if (scriptLoaded) {
-            return;
-        }
-        
-        var readyState = scr.readyState;
-        if ('undefined' == typeof readyState
-            || readyState == "loaded"
-            || readyState == "complete") {
-            scriptLoaded = 1;
-            try {
-                callback();
-                clearTimeout(timer);
-            } finally {
-                scr.onload = scr.onreadystatechange = null;
-                baidu.sio._removeScriptTag(scr);
-            }
-        }
-    };
-
-    if( timeOut ){
-        timer = setTimeout(function(){
-            scr.onload = scr.onreadystatechange = null;
-            baidu.sio._removeScriptTag(scr);
-            options.onfailure && options.onfailure();
-        }, timeOut);
-    }
-    
-    baidu.sio._createScriptTag(scr, url, charset);
-};
-
-/**
- * 通过script标签加载数据,加载完成由服务器端触发回调
- * @name baidu.sio.callByServer
- * @function
- * @grammar baidu.sio.callByServer(url, callback[, opt_options])
- * @param {string} url 加载数据的url.
- * @param {Function|string} callback 服务器端调用的函数或函数名。如果没有指定本参数,将在URL中寻找options['queryField']做为callback的方法名.
- * @param {Object} opt_options 加载数据时的选项.
- * @config {string} [charset] script的字符集
- * @config {string} [queryField] 服务器端callback请求字段名,默认为callback
- * @config {Integer} [timeOut] 超时时间(单位:ms),超过这个时间将不再响应本请求,并触发onfailure函数
- * @config {Function} [onfailure] timeOut设定后才生效,到达超时时间时触发本函数
- * @remark
- * 如果url中已经包含key为“options['queryField']”的query项,将会被替换成callback中参数传递或自动生成的函数名。
- * @meta standard
- * @see baidu.sio.callByBrowser
- */
-baidu.sio.callByServer = /**@function*/function(url, callback, opt_options) {
-    var scr = document.createElement('SCRIPT'),
-        prefix = 'bd__cbs__',
-        callbackName,
-        callbackImpl,
-        options = opt_options || {},
-        charset = options['charset'],
-        queryField = options['queryField'] || 'callback',
-        timeOut = options['timeOut'] || 0,
-        timer,
-        reg = new RegExp('(\\?|&)' + queryField + '=([^&]*)'),
-        matches;
-
-    if (baidu.lang.isFunction(callback)) {
-        callbackName = prefix + Math.floor(Math.random() * 2147483648).toString(36);
-        window[callbackName] = getCallBack(0);
-    } else if(baidu.lang.isString(callback)){
-        callbackName = callback;
-    } else {
-        if (matches = reg.exec(url)) {
-            callbackName = matches[2];
-        }
-    }
-
-    if( timeOut ){
-        timer = setTimeout(getCallBack(1), timeOut);
-    }
-    url = url.replace(reg, '\x241' + queryField + '=' + callbackName);
-    
-    if (url.search(reg) < 0) {
-        url += (url.indexOf('?') < 0 ? '?' : '&') + queryField + '=' + callbackName;
-    }
-    baidu.sio._createScriptTag(scr, url, charset);
-
-    /*
-     * 返回一个函数,用于立即(挂在window上)或者超时(挂在setTimeout中)时执行
-     */
-    function getCallBack(onTimeOut){
-        /*global callbackName, callback, scr, options;*/
-        return function(){
-            try {
-                if( onTimeOut ){
-                    options.onfailure && options.onfailure();
-                }else{
-                    callback.apply(window, arguments);
-                    clearTimeout(timer);
-                }
-                window[callbackName] = null;
-                delete window[callbackName];
-            } catch (exception) {
-            } finally {
-                baidu.sio._removeScriptTag(scr);
-            }
-        }
-    }
-};
-
-/**
- * 通过请求一个图片的方式令服务器存储一条日志
- * @function
- * @grammar baidu.sio.log(url)
- * @param {string} url 要发送的地址.
- * @author: int08h,leeight
- */
-baidu.sio.log = function(url) {
-  var img = new Image(),
-      key = 'tangram_sio_log_' + Math.floor(Math.random() *
-            2147483648).toString(36);
-  window[key] = img;
-
-  img.onload = img.onerror = img.onabort = function() {
-    img.onload = img.onerror = img.onabort = null;
-
-    window[key] = null;
-    img = null;
-  };
-  img.src = url;
-};
-
-
-
-/*
- * Tangram
- * Copyright 2009 Baidu Inc. All rights reserved.
- * 
- * path: baidu/json.js
- * author: erik
- * version: 1.1.0
- * date: 2009/12/02
- */
-
-
-/**
- * 操作json对象的方法
- * @namespace baidu.json
- */
-baidu.json = baidu.json || {};
-/*
- * Tangram
- * Copyright 2009 Baidu Inc. All rights reserved.
- * 
- * path: baidu/json/parse.js
- * author: erik, berg
- * version: 1.2
- * date: 2009/11/23
- */
-
-
-
-/**
- * 将字符串解析成json对象。注:不会自动祛除空格
- * @name baidu.json.parse
- * @function
- * @grammar baidu.json.parse(data)
- * @param {string} source 需要解析的字符串
- * @remark
- * 该方法的实现与ecma-262第五版中规定的JSON.parse不同,暂时只支持传入一个参数。后续会进行功能丰富。
- * @meta standard
- * @see baidu.json.stringify,baidu.json.decode
- *             
- * @returns {JSON} 解析结果json对象
- */
-baidu.json.parse = function (data) {
-    //2010/12/09:更新至不使用原生parse,不检测用户输入是否正确
-    return (new Function("return (" + data + ")"))();
-};
-/*
- * Tangram
- * Copyright 2009 Baidu Inc. All rights reserved.
- * 
- * path: baidu/json/decode.js
- * author: erik, cat
- * version: 1.3.4
- * date: 2010/12/23
- */
-
-
-
-/**
- * 将字符串解析成json对象,为过时接口,今后会被baidu.json.parse代替
- * @name baidu.json.decode
- * @function
- * @grammar baidu.json.decode(source)
- * @param {string} source 需要解析的字符串
- * @meta out
- * @see baidu.json.encode,baidu.json.parse
- *             
- * @returns {JSON} 解析结果json对象
- */
-baidu.json.decode = baidu.json.parse;
-/*
- * Tangram
- * Copyright 2009 Baidu Inc. All rights reserved.
- * 
- * path: baidu/json/stringify.js
- * author: erik
- * version: 1.1.0
- * date: 2010/01/11
- */
-
-
-
-/**
- * 将json对象序列化
- * @name baidu.json.stringify
- * @function
- * @grammar baidu.json.stringify(value)
- * @param {JSON} value 需要序列化的json对象
- * @remark
- * 该方法的实现与ecma-262第五版中规定的JSON.stringify不同,暂时只支持传入一个参数。后续会进行功能丰富。
- * @meta standard
- * @see baidu.json.parse,baidu.json.encode
- *             
- * @returns {string} 序列化后的字符串
- */
-baidu.json.stringify = (function () {
-    /**
-     * 字符串处理时需要转义的字符表
-     * @private
-     */
-    var escapeMap = {
-        "\b": '\\b',
-        "\t": '\\t',
-        "\n": '\\n',
-        "\f": '\\f',
-        "\r": '\\r',
-        '"' : '\\"',
-        "\\": '\\\\'
-    };
-    
-    /**
-     * 字符串序列化
-     * @private
-     */
-    function encodeString(source) {
-        if (/["\\\x00-\x1f]/.test(source)) {
-            source = source.replace(
-                /["\\\x00-\x1f]/g, 
-                function (match) {
-                    var c = escapeMap[match];
-                    if (c) {
-                        return c;
-                    }
-                    c = match.charCodeAt();
-                    return "\\u00" 
-                            + Math.floor(c / 16).toString(16) 
-                            + (c % 16).toString(16);
-                });
-        }
-        return '"' + source + '"';
-    }
-    
-    /**
-     * 数组序列化
-     * @private
-     */
-    function encodeArray(source) {
-        var result = ["["], 
-            l = source.length,
-            preComma, i, item;
-            
-        for (i = 0; i < l; i++) {
-            item = source[i];
-            
-            switch (typeof item) {
-            case "undefined":
-            case "function":
-            case "unknown":
-                break;
-            default:
-                if(preComma) {
-                    result.push(',');
-                }
-                result.push(baidu.json.stringify(item));
-                preComma = 1;
-            }
-        }
-        result.push("]");
-        return result.join("");
-    }
-    
-    /**
-     * 处理日期序列化时的补零
-     * @private
-     */
-    function pad(source) {
-        return source < 10 ? '0' + source : source;
-    }
-    
-    /**
-     * 日期序列化
-     * @private
-     */
-    function encodeDate(source){
-        return '"' + source.getFullYear() + "-" 
-                + pad(source.getMonth() + 1) + "-" 
-                + pad(source.getDate()) + "T" 
-                + pad(source.getHours()) + ":" 
-                + pad(source.getMinutes()) + ":" 
-                + pad(source.getSeconds()) + '"';
-    }
-    
-    return function (value) {
-        switch (typeof value) {
-        case 'undefined':
-            return 'undefined';
-            
-        case 'number':
-            return isFinite(value) ? String(value) : "null";
-            
-        case 'string':
-            return encodeString(value);
-            
-        case 'boolean':
-            return String(value);
-            
-        default:
-            if (value === null) {
-                return 'null';
-            } else if (value instanceof Array) {
-                return encodeArray(value);
-            } else if (value instanceof Date) {
-                return encodeDate(value);
-            } else {
-                var result = ['{'],
-                    encode = baidu.json.stringify,
-                    preComma,
-                    item;
-                    
-                for (var key in value) {
-                    if (Object.prototype.hasOwnProperty.call(value, key)) {
-                        item = value[key];
-                        switch (typeof item) {
-                        case 'undefined':
-                        case 'unknown':
-                        case 'function':
-                            break;
-                        default:
-                            if (preComma) {
-                                result.push(',');
-                            }
-                            preComma = 1;
-                            result.push(encode(key) + ':' + encode(item));
-                        }
-                    }
-                }
-                result.push('}');
-                return result.join('');
-            }
-        }
-    };
-})();
-/*
- * Tangram
- * Copyright 2009 Baidu Inc. All rights reserved.
- * 
- * path: baidu/json/encode.js
- * author: erik, cat
- * version: 1.3.4
- * date: 2010/12/23
- */
-
-
-
-/**
- * 将json对象序列化,为过时接口,今后会被baidu.json.stringify代替
- * @name baidu.json.encode
- * @function
- * @grammar baidu.json.encode(value)
- * @param {JSON} value 需要序列化的json对象
- * @meta out
- * @see baidu.json.decode,baidu.json.stringify
- *             
- * @returns {string} 序列化后的字符串
- */
-baidu.json.encode = baidu.json.stringify;

+ 0 - 166
DjangoUeditor/static/ueditor/dialogs/video/callbacks.js

@@ -1,166 +0,0 @@
-/* Demo Note:  This demo uses a FileProgress class that handles the UI for displaying the file name and percent complete.
- The FileProgress class is not part of SWFUpload.
- */
-
-
-/* **********************
- Event Handlers
- These are my custom event handlers to make my
- web application behave the way I went when SWFUpload
- completes different tasks.  These aren't part of the SWFUpload
- package.  They are part of my application.  Without these none
- of the actions SWFUpload makes will show up in my application.
- ********************** */
-function preLoad() {
-    if (!this.support.loading) {
-        alert(lang.flashVersionError);
-        return false;
-    }
-    return true;
-}
-function loadFailed() {
-    alert(lang.flashLoadingError);
-}
-
-function fileQueued(file) {
-    try {
-        var progress = new FileProgress(file, this.customSettings.progressTarget);
-        progress.setStatus(lang.fileUploadReady);
-        progress.toggleCancel(true, this,lang.delUploadQueue);
-    } catch (ex) {
-        this.debug(ex);
-    }
-
-}
-
-function fileQueueError(file, errorCode, message) {
-    try {
-        if (errorCode === SWFUpload.QUEUE_ERROR.QUEUE_LIMIT_EXCEEDED) {
-            alert(lang.limitPrompt1+ message +  lang.limitPrompt2);
-            return;
-        }
-
-        var progress = new FileProgress(file, this.customSettings.progressTarget);
-        progress.setError();
-        progress.toggleCancel(true, this,lang.delFailFile);
-
-        switch (errorCode) {
-            case SWFUpload.QUEUE_ERROR.FILE_EXCEEDS_SIZE_LIMIT:
-                progress.setStatus(lang.fileSizeLimit);
-                this.debug("Error Code: File too big, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-                break;
-            case SWFUpload.QUEUE_ERROR.ZERO_BYTE_FILE:
-                progress.setStatus(lang.emptyFile);
-                this.debug("Error Code: Zero byte file, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-                break;
-            case SWFUpload.QUEUE_ERROR.INVALID_FILETYPE:
-                progress.setStatus(lang.fileTypeError);
-                this.debug("Error Code: Invalid File Type, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-                break;
-            default:
-                if (file !== null) {
-                    progress.setStatus(lang.unknownError);
-                }
-                this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-                break;
-        }
-    } catch (ex) {
-        this.debug(ex);
-    }
-}
-
-
-
-function uploadStart(file) {
-    try {
-        /* I don't want to do any file validation or anything,  I'll just update the UI and
-         return true to indicate that the upload should start.
-         It's important to update the UI here because in Linux no uploadProgress events are called. The best
-         we can do is say we are uploading.
-         */
-        var progress = new FileProgress(file, this.customSettings.progressTarget);
-        progress.setStatus(lang.fileUploading);
-        progress.toggleCancel(true, this,lang.cancelUpload);
-    }catch (ex) {}
-
-    return true;
-}
-
-function uploadProgress(file, bytesLoaded, bytesTotal) {
-    try {
-        var percent = Math.ceil((bytesLoaded / bytesTotal) * 100);
-
-        var progress = new FileProgress(file, this.customSettings.progressTarget);
-        progress.setProgress(percent);
-        progress.setStatus(lang.fileUploading);
-    } catch (ex) {
-        this.debug(ex);
-    }
-}
-
-
-function uploadError(file, errorCode, message) {
-    try {
-        var progress = new FileProgress(file, this.customSettings.progressTarget);
-        progress.setError();
-        //progress.toggleCancel(false);
-
-        switch (errorCode) {
-            case SWFUpload.UPLOAD_ERROR.HTTP_ERROR:
-                progress.setStatus(lang.netError + message);
-                this.debug("Error Code: HTTP Error, File name: " + file.name + ", Message: " + message);
-                break;
-            case SWFUpload.UPLOAD_ERROR.UPLOAD_FAILED:
-                progress.setStatus(lang.failUpload);
-                this.debug("Error Code: Upload Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-                break;
-            case SWFUpload.UPLOAD_ERROR.IO_ERROR:
-                progress.setStatus(lang.serverIOError);
-                this.debug("Error Code: IO Error, File name: " + file.name + ", Message: " + message);
-                break;
-            case SWFUpload.UPLOAD_ERROR.SECURITY_ERROR:
-                progress.setStatus(lang.noAuthority);
-                this.debug("Error Code: Security Error, File name: " + file.name + ", Message: " + message);
-                break;
-            case SWFUpload.UPLOAD_ERROR.UPLOAD_LIMIT_EXCEEDED:
-                progress.setStatus(lang.fileNumLimit);
-                this.debug("Error Code: Upload Limit Exceeded, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-                break;
-            case SWFUpload.UPLOAD_ERROR.FILE_VALIDATION_FAILED:
-                progress.setStatus(lang.failCheck);
-                this.debug("Error Code: File Validation Failed, File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-                break;
-            case SWFUpload.UPLOAD_ERROR.FILE_CANCELLED:
-                // If there aren't any files left (they were all cancelled) disable the cancel button
-//			if (this.getStats().files_queued === 0) {
-//				document.getElementById(this.customSettings.cancelButtonId).disabled = true;
-//			}
-                progress.setStatus(lang.fileCanceling);
-                progress.setCancelled();
-                break;
-            case SWFUpload.UPLOAD_ERROR.UPLOAD_STOPPED:
-                progress.setStatus(lang.stopUploading);
-                break;
-            default:
-                progress.setStatus(lang.unknownError + errorCode);
-                this.debug("Error Code: " + errorCode + ", File name: " + file.name + ", File size: " + file.size + ", Message: " + message);
-                break;
-        }
-    } catch (ex) {
-        this.debug(ex);
-    }
-}
-
-function uploadComplete(file) {
-    //alert(file);
-    //	if (this.getStats().files_queued === 0) {
-    //		document.getElementById(this.customSettings.cancelButtonId).disabled = true;
-    //	}
-}
-
-// This event comes from the Queue Plugin
-function queueComplete(numFilesUploaded) {
-    var status = document.getElementById("divStatus");
-    var num = status.innerHTML.match(/\d+/g);
-    status.innerHTML = ((num && num[0] ?parseInt(num[0]):0) + numFilesUploaded) +lang.statusPrompt;
-}

BIN=BIN
DjangoUeditor/static/ueditor/lang/en/images/imglabel.png


BIN=BIN
DjangoUeditor/static/ueditor/lang/zh-cn/images/imglabel.png


+ 0 - 1773
DjangoUeditor/static/ueditor/themes/gorgeous/css/ueditor.css

@@ -1,1773 +0,0 @@
-/*基础UI构建
-*/
-/* common layer */
-.edui-gorgeous .edui-box {
-    border: none;
-    padding: 0;
-    margin: 0;
-    overflow: hidden;
-}
-
-.edui-gorgeous a.edui-box {
-    display: block;
-    text-decoration: none;
-    color: black;
-}
-
-.edui-gorgeous a.edui-box:hover {
-    text-decoration: none;
-}
-
-.edui-gorgeous a.edui-box:active {
-    text-decoration: none;
-}
-
-.edui-gorgeous table.edui-box {
-    border-collapse: collapse;
-}
-
-.edui-gorgeous ul.edui-box {
-    list-style-type: none;
-}
-
-div.edui-box {
-    position: relative;
-    display: -moz-inline-box !important;
-    display: inline-block !important;
-    vertical-align: top;
-}
-
-.edui-gorgeous .edui-clearfix {
-    zoom: 1
-}
-
-.edui-gorgeous .edui-clearfix:after {
-    content: '\20';
-    display: block;
-    clear: both;
-}
-
-* html div.edui-box {
-    display: inline !important;
-}
-
-*:first-child+html div.edui-box {
-    display: inline !important;
-}
-
-/* control layout */
-.edui-gorgeous .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body {
-    position: relative;
-}
-
-.edui-gorgeous .edui-popup {
-    position: absolute;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-}
-
-.edui-gorgeous .edui-popup .edui-shadow {
-    position: absolute;
-    z-index: -1;
-}
-
-.edui-gorgeous .edui-popup .edui-bordereraser {
-    position: absolute;
-    overflow: hidden;
-}
-
-.edui-gorgeous .edui-tablepicker .edui-canvas {
-    position: relative;
-}
-
-.edui-gorgeous .edui-tablepicker .edui-canvas .edui-overlay {
-    position: absolute;
-}
-
-.edui-gorgeous .edui-dialog-modalmask, .edui-dialog-dragmask {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-}
-
-.edui-gorgeous .edui-toolbar {
-    position: relative;
-}
-
-/*
- * default theme
- */
-.edui-gorgeous .edui-label {
-    cursor: default;
-    font-family: "Microsoft Yahei", "微软雅黑", Tahoma, Arial, Helvetica, STHeiti;
-}
-
-.edui-gorgeous span.edui-clickable {
-    color: #39C;
-    cursor: pointer;
-    text-decoration: underline;
-}
-
-.edui-gorgeous span.edui-unclickable {
-    color: gray;
-    cursor: default;
-}
-/* 工具栏 */
-.edui-gorgeous .edui-toolbar {
-    cursor: default;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    padding: 1px;
-    overflow: hidden; /*全屏下单独一行不占位*/
-    zoom: 1;
-}
-.edui-gorgeous .edui-toolbar .edui-button,
-.edui-gorgeous .edui-toolbar .edui-splitbutton,
-.edui-gorgeous .edui-toolbar .edui-menubutton,
-.edui-gorgeous .edui-toolbar .edui-combox {
-    margin:2px 2px 0 0;
-}
-/*UI工具栏、编辑区域、底部*/
-.edui-gorgeous .edui-editor {
-    border: 1px solid #8B96AD;
-    border-radius: 5px;
-    background-color: white;
-    position: relative;
-    overflow: visible;
-    box-shadow: 3px 3px 5px #CACACA
-}
-
-.edui-gorgeous .edui-editor-toolbarbox {
-    position: relative;
-    zoom: 1;
-    border-bottom: 1px solid #8B96AD;
-}
-
-.edui-gorgeous .edui-editor-toolbarboxouter {
-    border: 1px solid #878c96;
-    border-radius: 5px;
-    border-bottom-right-radius:0;
-    border-bottom-left-radius: 0;
-    background:url(../images/toolbar-bg.png) right top no-repeat;
-    background-color: #263B55;
-}
-
-.edui-gorgeous .edui-editor-toolbarboxinner {
-    padding: 2px;
-}
-
-.edui-gorgeous .edui-editor-iframeholder {
-    position: relative;
-    /*for fix ie6 toolbarmsg under iframe bug. relative -> static */
-    /*_position: static !important;*/
-}
-
-.edui-gorgeous .edui-editor-iframeholder textarea {
-    font-family: consolas, "Courier New", "lucida console", monospace;
-    font-size: 12px;
-    line-height: 18px;
-}
-
-.edui-gorgeous .edui-editor-bottomContainer {
-    overflow: hidden;
-    border: 1px solid #8B96AD;
-    border-radius: 5px;
-    border-top-left-radius: 0;
-    border-top-right-radius: 0;
-    background-color: #263B55;
-}
-
-.edui-gorgeous .edui-editor-bottomContainer table {
-    width: 100%;
-    height: 0;
-    overflow: hidden;
-    border-spacing: 0;
-    border-collapse: collapse;
-}
-
-.edui-gorgeous .edui-editor-bottomContainer td {
-    white-space: nowrap;
-    border-top: 1px solid #868b96;
-    line-height: 20px;
-    font-size: 12px;
-    font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif;
-}
-
-.edui-gorgeous .edui-editor-wordcount {
-    text-align: right;
-    margin-right: 5px;
-    color: #fff;
-}
-.edui-gorgeous .edui-editor-scale {
-    width: 12px;
-}
-.edui-gorgeous .edui-editor-scale .edui-editor-icon {
-    float: right;
-    width: 100%;
-    height: 12px;
-    margin-top: 10px;
-    background: url(../images/scale.png) no-repeat;
-    cursor: se-resize;
-}
-.edui-gorgeous .edui-editor-breadcrumb {
-    margin: 2px 0 0 3px;
-    color: #fff;
-}
-
-.edui-gorgeous .edui-editor-breadcrumb span {
-    cursor: pointer;
-    text-decoration: underline;
-    color: #fff;
-}
-
-.edui-gorgeous .edui-toolbar .edui-for-fullscreen {
-    float: right;
-}
-
-.edui-gorgeous .edui-bubble .edui-popup-content {
-    border: 1px solid #8B96AD;
-    background-color:#263B55;
-    padding: 5px;
-    font-size: 10pt;
-    font-family: "宋体";
-    border-radius: 3px;
-}
-
-.edui-gorgeous .edui-bubble .edui-shadow {
-    box-shadow:3px 3px 5px #CACACA;
-    -webkit-box-shadow: 3px 3px 5px #CACACA;
-    -moz-box-shadow:  3px 3px 5px #CACACA;
-    filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '3', MakeShadow = 'true', ShadowOpacity = '0.5');
-}
-
-.edui-gorgeous .edui-editor-toolbarmsg {
-    background-color: #FFF6D9;
-    border-bottom: 1px solid #ccc;
-    position: absolute;
-    bottom: -25px;
-    left: 0;
-    z-index: 1009;
-    width: 99.9%;
-}
-
-.edui-gorgeous .edui-editor-toolbarmsg-upload {
-    font-size: 14px;
-    color: blue;
-    width: 100px;
-    height: 16px;
-    line-height: 16px;
-    cursor: pointer;
-    position: absolute;
-    top: 5px;
-    left: 350px;
-}
-
-.edui-gorgeous .edui-editor-toolbarmsg-label {
-    font-size: 12px;
-    line-height: 16px;
-    padding: 4px;
-}
-
-.edui-gorgeous .edui-editor-toolbarmsg-close {
-    float: right;
-    width: 20px;
-    height: 16px;
-    line-height: 16px;
-    cursor: pointer;
-    color: red;
-}
-/*可选中菜单按钮*/
-.edui-gorgeous .edui-list .edui-bordereraser {
-    display: none;
-}
-
-.edui-gorgeous .edui-listitem {
-    padding: 1px;
-    white-space: nowrap;
-}
-
-.edui-gorgeous .edui-list .edui-state-hover {
-    position: relative;
-    border: 1px solid #A5ADB9;
-    padding: 0;
-    border-radius: 3px;
-}
-
-.edui-gorgeous .edui-for-fontfamily .edui-listitem-label {
-    min-width: 120px;
-    _width: 120px;
-    font-size: 12px;
-    height: 22px;
-    line-height: 22px;
-    padding-left: 5px;
-}
-
-.edui-gorgeous .edui-for-underline .edui-listitem-label {
-    min-width: 120px;
-    _width: 120px;
-    padding: 3px 5px;
-    font-size: 12px;
-}
-
-.edui-gorgeous .edui-for-fontsize .edui-listitem-label {
-    min-width: 120px;
-    _width: 120px;
-    padding: 3px 5px;
-}
-
-.edui-gorgeous .edui-for-paragraph .edui-listitem-label {
-    min-width: 200px;
-    _width: 200px;
-    padding: 2px 5px;
-}
-
-.edui-gorgeous .edui-for-rowspacingtop .edui-listitem-label,
-.edui-gorgeous .edui-for-rowspacingbottom .edui-listitem-label {
-    min-width: 53px;
-    _width: 53px;
-    padding: 2px 5px;
-}
-
-.edui-gorgeous .edui-for-lineheight .edui-listitem-label {
-    min-width: 53px;
-    _width: 53px;
-    padding: 2px 5px;
-}
-
-.edui-gorgeous .edui-for-customstyle .edui-listitem-label {
-    min-width: 200px;
-    _width: 200px;
-    width: 200px !important;
-    padding: 2px 5px;
-    line-height: 38px;
-}
-/* 可选中按钮弹出菜单*/
-.edui-gorgeous .edui-menu {
-    z-index: 3000;
-}
-
-.edui-gorgeous .edui-menu .edui-popup-content {
-    background-color: #263B55;
-    padding: 3px;
-}
-
-.edui-gorgeous .edui-menu-body {
-    _width: 150px;
-    min-width: 150px;
-    background: url("../images/sparator_v.png") repeat-y 30px;
-}
-
-.edui-gorgeous .edui-menuitem-body {
-}
-
-.edui-gorgeous .edui-menuitem {
-    height: 29px;
-    cursor: default;
-    vertical-align: top;
-}
-
-.edui-gorgeous .edui-menuitem .edui-icon {
-    width: 29px !important;
-    height: 29px !important;
-    background: url(../images/icons.png) 0 -40px;
-    _background: url(../images/icons.gif) 0 -40px;
-}
-
-.edui-gorgeous .edui-menuitem .edui-label {
-    font-size: 12px;
-    line-height: 29px;
-    height: 29px;
-    padding-left: 5px;
-}
-
-.edui-gorgeous .edui-state-checked .edui-menuitem-body {
-    background: url("../images/icons-all.png") no-repeat 6px -205px;
-}
-
-.edui-gorgeous .edui-state-disabled .edui-menuitem-label {
-    color: gray;
-}
-
-.edui-gorgeous .edui-state-disabled .edui-icon {
-    opacity: 0.3;
-    filter: alpha(opacity = 30);
-}
-/*不可选中菜单按钮 */
-.edui-gorgeous .edui-toolbar .edui-combox-body .edui-button-body {
-    width: 60px;
-    font-size: 12px;
-    height: 20px;
-    line-height: 20px;
-    padding-left: 5px;
-    white-space: nowrap;
-}
-
-.edui-gorgeous .edui-toolbar .edui-combox-body .edui-arrow {
-    background:url(../images/icons.png) -1220px -7px;
-    _background: url(../images/icons.gif) -1220px -7px;
-    height: 20px;
-    width: 9px;
-}
-
-.edui-gorgeous .edui-toolbar .edui-combox .edui-combox-body {
-    border: 1px solid #fff;
-    border-radius: 3px;
-    color: #fff;
-    margin: 9px 3px 0 0
-}
-
-.edui-gorgeous .edui-toolbar .edui-combox-body .edui-splitborder {
-    display: none;
-}
-
-.edui-gorgeous .edui-toolbar .edui-combox-body .edui-arrow {
-    border-left: 1px solid #fff;
-}
-
-.edui-gorgeous .edui-toolbar .edui-state-hover .edui-combox-body {
-    border: 1px solid #A5ADB9;
-    border-radius: 3px;
-}
-
-.edui-gorgeous .edui-toolbar .edui-state-active .edui-combox-body {
-    border: 1px solid #fff;
-    border-radius: 3px;
-    background-color: transparent;
-    background-image: none;
-}
-.edui-gorgeous .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow {
-    border-left: 1px solid #A5ADB9;
-}
-
-.edui-gorgeous .edui-toolbar .edui-state-checked .edui-combox-body {
-    background-color: #263B55;
-    border: 1px solid #6A7085;
-
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#72788E), to(#1F2949));
-    background-image: -webkit-linear-gradient(top, #72788E, #1F2949);
-    background-image: -moz-linear-gradient(top, #72788E, #1F2949);
-    background-image: -o-linear-gradient(top, #72788E, #1F2949);
-    background-image: linear-gradient(to bottom, #72788E, #1F2949);
-    border-radius: 3px;
-}
-
-.edui-gorgeous .edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow {
-    border-left: 1px solid #6A7085;
-}
-
-.edui-gorgeous .edui-toolbar .edui-state-disabled .edui-combox-body {
-    background-color: #263B55;
-    opacity: 0.3;
-    filter: alpha(opacity = 30);
-}
-
-.edui-gorgeous .edui-toolbar .edui-state-opened .edui-combox-body {
-    background-color: #263B55;
-    border: 1px solid #fff;
-}
-/*普通按钮样式及状态*/
-.edui-gorgeous  .edui-toolbar .edui-button .edui-icon,
-.edui-gorgeous  .edui-toolbar .edui-menubutton .edui-icon,
-.edui-gorgeous  .edui-toolbar .edui-splitbutton .edui-icon {
-    height: 29px !important;
-    width: 29px !important;
-    background-image: url(../images/icons.png);
-    _background-image: url(../images/icons.gif);
-}
-
-.edui-gorgeous  .edui-toolbar .edui-button .edui-state-hover .edui-icon,
-.edui-gorgeous  .edui-toolbar .edui-menubutton .edui-state-hover .edui-icon,
-.edui-gorgeous  .edui-toolbar .edui-splitbutton .edui-state-hover .edui-icon {
-    background-image: url(../images/icons-hover.png);
-    _background-image: url(../images/icons-hover.gif);
-}
-
-.edui-gorgeous  .edui-toolbar .edui-button .edui-state-checked .edui-icon,
-.edui-gorgeous  .edui-toolbar .edui-menubutton .edui-state-checked .edui-icon,
-.edui-gorgeous  .edui-toolbar .edui-splitbutton .edui-state-checked .edui-icon {
-    background-image: url(../images/icons-checked.png);
-    _background-image: url(../images/icons-checked.gif);
-}
-.edui-gorgeous  .edui-toolbar .edui-state-disabled .edui-label {
-    color: gray;
-}
-.edui-gorgeous  .edui-toolbar .edui-state-disabled .edui-icon {
-    opacity: 0.3;
-    filter: alpha(opacity = 30);
-}
-/*每个按钮外面的框*/
-.edui-gorgeous  .edui-toolbar .edui-button .edui-button-wrap {
-    padding: 1px;
-    position: relative;
-    margin-top: 5px;
-}
-
-.edui-gorgeous  .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap {
-    padding: 0;
-    border: 1px solid #A5ADB9;
-    border-radius: 3px;
-}
-
-.edui-gorgeous  .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap {
-    padding: 0;
-    border: 1px solid #A5ADB9;
-    border-radius: 3px;
-}
-
-.edui-gorgeous  .edui-toolbar .edui-button .edui-state-active .edui-button-wrap {
-    padding: 0;
-    border: 1px solid #fff;
-    background-color: transparent;
-    background-image: none;
-    border-radius: 3px;
-}
-/* 每个按钮的default、hover、active、checked背景位置*/
-.edui-gorgeous .edui-for-undo .edui-icon,
-.edui-gorgeous .edui-for-undo .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-undo .edui-state-checked .edui-icon {
-    background-position: -267px -3px
-}
-
-.edui-gorgeous .edui-for-redo .edui-icon,
-.edui-gorgeous .edui-for-redo .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-redo .edui-state-checked .edui-icon {
-    background-position: -166px -3px
-}
-
-.edui-gorgeous .edui-for-bold .edui-icon,
-.edui-gorgeous .edui-for-bold .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-bold .edui-state-checked .edui-icon {
-    background-position: 0 -3px
-}
-
-.edui-gorgeous .edui-for-italic .edui-icon,
-.edui-gorgeous .edui-for-italic .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-italic .edui-state-checked .edui-icon {
-    background-position: -99px -3px
-}
-
-.edui-gorgeous .edui-for-underline .edui-icon,
-.edui-gorgeous .edui-for-underline .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-underline .edui-state-checked .edui-icon {
-    background-position: -234px -3px
-}
-
-.edui-gorgeous .edui-for-strikethrough .edui-icon,
-.edui-gorgeous .edui-for-strikethrough .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-strikethrough .edui-state-checked .edui-icon {
-    background-position: -200px -3px
-}
-
-.edui-gorgeous .edui-for-subscript .edui-icon,
-.edui-gorgeous .edui-for-subscript .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-subscript .edui-state-checked .edui-icon {
-    background-position: -991px -3px
-}
-
-.edui-gorgeous .edui-for-superscript .edui-icon,
-.edui-gorgeous .edui-for-superscript .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-superscript .edui-state-checked .edui-icon {
-    background-position: -1024px -3px
-}
-
-.edui-gorgeous .edui-for-blockquote .edui-icon,
-.edui-gorgeous .edui-for-blockquote .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-blockquote .edui-state-checked .edui-icon {
-    background-position: -364px -3px
-}
-
-.edui-gorgeous .edui-for-forecolor .edui-icon,
-.edui-gorgeous .edui-for-forecolor .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-forecolor .edui-state-checked .edui-icon {
-    background-position: -1189px -3px
-}
-
-.edui-gorgeous .edui-for-backcolor .edui-icon,
-.edui-gorgeous .edui-for-backcolor .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-backcolor .edui-state-checked .edui-icon {
-    background-position: -1255px -3px
-}
-
-.edui-gorgeous .edui-for-inserttable .edui-icon,
-.edui-gorgeous .edui-for-inserttable .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-inserttable .edui-state-checked .edui-icon {
-    background-position:-960px -35px
-}
-
-.edui-gorgeous .edui-for-autotypeset .edui-icon,
-.edui-gorgeous .edui-for-autotypeset .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-autotypeset .edui-state-checked .edui-icon {
-    background-position: -1058px -68px;
-}
-
-.edui-gorgeous .edui-for-justifyleft .edui-icon,
-.edui-gorgeous .edui-for-justifyleft .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-justifyleft .edui-state-checked .edui-icon {
-    background-position: -762px -3px
-}
-
-.edui-gorgeous .edui-for-justifycenter .edui-icon,
-.edui-gorgeous .edui-for-justifycenter .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-justifycenter .edui-state-checked .edui-icon {
-    background-position: -695px -3px
-}
-
-.edui-gorgeous .edui-for-justifyright .edui-icon,
-.edui-gorgeous .edui-for-justifyright .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-justifyright .edui-state-checked .edui-icon {
-    background-position: -794px -3px
-}
-
-.edui-gorgeous .edui-for-justifyjustify .edui-icon,
-.edui-gorgeous .edui-for-justifyjustify .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-justifyjustify .edui-state-checked .edui-icon {
-    background-position: -728px -3px
-}
-
-.edui-gorgeous .edui-for-insertorderedlist .edui-icon,
-.edui-gorgeous .edui-for-insertorderedlist .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-insertorderedlist .edui-state-checked .edui-icon {
-    background-position: -134px -3px
-}
-
-.edui-gorgeous .edui-for-insertunorderedlist .edui-icon,
-.edui-gorgeous .edui-for-insertunorderedlist .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-insertunorderedlist .edui-state-checked .edui-icon {
-    background-position: -36px -1px
-}
-
-.edui-gorgeous .edui-for-lineheight .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-lineheight .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-lineheight .edui-icon {
-    background-position: -1190px -68px;
-}
-
-.edui-gorgeous .edui-for-rowspacingbottom .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-rowspacingbottom .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-rowspacingbottom .edui-icon {
-    background-position: -1223px -68px;
-}
-
-.edui-gorgeous .edui-for-rowspacingtop .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-rowspacingtop .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-rowspacingtop .edui-icon {
-    background-position: -1256px -68px;
-}
-
-.edui-gorgeous .edui-for-horizontal .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-horizontal .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-horizontal .edui-icon {
-    background-position: -595px -3px
-}
-
-.edui-gorgeous .edui-for-link .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-link .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-link .edui-icon {
-    background-position: -826px -3px
-}
-
-.edui-gorgeous .edui-for-code .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-code .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-code .edui-icon {
-    background-position: -440px -68px;
-}
-
-.edui-gorgeous .edui-for-insertimage .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-insertimage .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-insertimage .edui-icon {
-    background-position: -629px -3px
-}
-
-.edui-gorgeous .edui-for-insertframe .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-insertframe .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-insertframe .edui-icon {
-    background-position: -397px -68px
-}
-
-.edui-gorgeous .edui-for-emoticon .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-emoticon .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-emoticon .edui-icon {
-    background-position: -60px -35px;
-}
-
-.edui-gorgeous .edui-for-spechars .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-spechars .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-spechars .edui-icon {
-    background-position: -396px -3px
-}
-
-.edui-gorgeous .edui-for-help .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-help .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-help .edui-icon {
-    background-position: -563px -3px
-}
-
-.edui-gorgeous .edui-for-print .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-print .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-print .edui-icon {
-    background-position: -729px -35px
-}
-
-.edui-gorgeous .edui-for-preview .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-preview .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-preview .edui-icon {
-    background-position: -695px -35px
-}
-
-.edui-gorgeous .edui-for-selectall .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-selectall .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-selectall .edui-icon {
-    background-position: -662px -35px
-}
-
-.edui-gorgeous .edui-for-searchreplace .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-searchreplace .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-searchreplace .edui-icon {
-    background-position: -856px -35px
-}
-
-.edui-gorgeous .edui-for-map .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-map .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-map .edui-icon {
-    background-position: -69px -68px
-}
-
-.edui-gorgeous .edui-for-gmap .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-gmap .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-gmap .edui-icon {
-    background-position: -432px -68px
-}
-
-.edui-gorgeous .edui-for-insertvideo .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-insertvideo .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-insertvideo .edui-icon {
-    background-position: -530px -35px;
-}
-
-.edui-gorgeous .edui-for-time .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-time .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-time .edui-icon {
-    background-position: -267px -35px
-}
-
-.edui-gorgeous .edui-for-date .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-date .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-date .edui-icon {
-    background-position: -233px -35px
-}
-
-.edui-gorgeous .edui-for-cut .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-cut .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-cut .edui-icon {
-    background-position: -680px -3px
-}
-
-.edui-gorgeous .edui-for-copy .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-copy .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-copy .edui-icon {
-    background-position: -1123px -3px
-}
-
-.edui-gorgeous .edui-for-paste .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-paste .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-paste .edui-icon {
-    background-position: -925px -3px
-}
-
-.edui-gorgeous .edui-for-formatmatch .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-formatmatch .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-formatmatch .edui-icon {
-    background-position: -69px -3px
-}
-
-.edui-gorgeous .edui-for-pasteplain .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-pasteplain .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-pasteplain .edui-icon {
-    background-position: -597px -35px;
-}
-
-.edui-gorgeous .edui-for-directionalityltr .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-directionalityltr .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-directionalityltr .edui-icon {
-    background-position: -36px -35px;
-}
-
-.edui-gorgeous .edui-for-directionalityrtl .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-directionalityrtl .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-directionalityrtl .edui-icon {
-    background-position: -69px -35px;
-}
-
-.edui-gorgeous .edui-for-source .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-source .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-source .edui-icon {
-    background-position: -430px -3px;
-}
-
-.edui-gorgeous .edui-for-removeformat .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-removeformat .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-removeformat .edui-icon {
-    background-position: -960px -3px
-}
-
-.edui-gorgeous .edui-for-unlink .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-unlink .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-unlink .edui-icon {
-    background-position: -1058px -3px
-}
-
-.edui-gorgeous .edui-for-touppercase .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-touppercase .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-touppercase .edui-icon {
-    background-position: -1289px -3px
-}
-
-.edui-gorgeous .edui-for-tolowercase .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-tolowercase .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-tolowercase .edui-icon {
-    background-position: -1321px -3px
-}
-
-.edui-gorgeous .edui-for-insertrow .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-insertrow .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-insertrow .edui-icon {
-    background-position:-1222px -35px
-}
-
-.edui-gorgeous .edui-for-insertcol .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-insertcol .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-insertcol .edui-icon {
-    background-position: -1125px -35px
-}
-
-.edui-gorgeous .edui-for-mergeright .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-mergeright .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-mergeright .edui-icon {
-    background-position: -101px -68px
-}
-
-.edui-gorgeous .edui-for-mergedown .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-mergedown .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-mergedown .edui-icon {
-    background-position:-134px -68px
-}
-
-.edui-gorgeous .edui-for-splittorows .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-splittorows .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-splittorows .edui-icon {
-    background-position: -167px -68px
-}
-
-.edui-gorgeous .edui-for-splittocols .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-splittocols .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-splittocols .edui-icon {
-    background-position: -200px -68px
-}
-
-.edui-gorgeous .edui-for-insertparagraphbeforetable .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-insertparagraphbeforetable .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-insertparagraphbeforetable .edui-icon {
-    background-position: -234px -68px
-}
-
-.edui-gorgeous .edui-for-deleterow .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-deleterow .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-deleterow .edui-icon {
-    background-position:-1091px -35px
-}
-
-.edui-gorgeous .edui-for-deletecol .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-deletecol .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-deletecol .edui-icon {
-    background-position:-1056px -35px
-}
-
-.edui-gorgeous .edui-for-splittocells .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-splittocells .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-splittocells .edui-icon {
-    background-position: -1257px -35px
-}
-
-.edui-gorgeous .edui-for-mergecells .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-mergecells .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-mergecells .edui-icon {
-    background-position: -1257px -35px
-}
-
-.edui-gorgeous .edui-for-deletetable .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-deletetable .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-deletetable .edui-icon {
-    background-position: -1025px -35px
-}
-
-.edui-gorgeous .edui-for-cleardoc .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-cleardoc .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-cleardoc .edui-icon {
-    background-position: -860px -3px
-}
-
-.edui-gorgeous .edui-for-fullscreen .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-fullscreen .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-fullscreen .edui-icon {
-    background-position: -167px -35px;
-}
-
-.edui-gorgeous .edui-for-anchor .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-anchor .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-anchor .edui-icon {
-    background-position: -332px -3px
-}
-
-.edui-gorgeous .edui-for-pagebreak .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-pagebreak .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-pagebreak .edui-icon {
-    background-position: -762px -68px
-}
-
-.edui-gorgeous .edui-for-imagenone .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-imagenone .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-imagenone .edui-icon {
-    background-position: -795px -68px;
-}
-
-.edui-gorgeous .edui-for-imageleft .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-imageleft .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-imageleft .edui-icon {
-    background-position: -827px -68px;
-}
-
-.edui-gorgeous .edui-for-wordimage .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-wordimage .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-wordimage .edui-icon {
-    background-position: -1091px -68px
-}
-
-.edui-gorgeous .edui-for-imageright .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-imageright .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-imageright .edui-icon {
-    background-position: -861px -68px
-}
-
-.edui-gorgeous .edui-for-imagecenter .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-imagecenter .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-imagecenter .edui-icon {
-    background-position:-894px -68px
-}
-
-.edui-gorgeous .edui-for-indent .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-indent .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-indent .edui-icon {
-    background-position: -661px -3px
-}
-
-.edui-gorgeous .edui-for-outdent .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-outdent .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-outdent .edui-icon {
-    background-position: -540px -3px
-}
-
-.edui-gorgeous .edui-for-webapp .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-webapp .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-webapp .edui-icon {
-    background-position: -993px -68px
-}
-
-.edui-gorgeous .edui-for-table .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-table .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-table .edui-icon {
-    background-position: -959px -35px;
-}
-
-.edui-gorgeous .edui-for-edittable .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-edittable .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-edittable .edui-icon {
-    background-position: -2px -69px
-}
-
-.edui-gorgeous .edui-for-template .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-template .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-template .edui-icon {
-    background-position: -563px -68px
-}
-
-.edui-gorgeous .edui-for-delete .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-delete .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-delete .edui-icon {
-    background-position:-597px -68px
-}
-
-.edui-gorgeous .edui-for-highlightcode .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-highlightcode .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-highlightcode .edui-icon {
-    background-position: -728px -68px
-}
-
-.edui-gorgeous .edui-for-deletehighlightcode .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-deletehighlightcode .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-deletehighlightcode .edui-icon {
-    background-position: -599px -68px
-}
-
-.edui-gorgeous .edui-for-attachment .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-attachment .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-attachment .edui-icon {
-    background-position: -1030px -68px
-}
-
-.edui-gorgeous .edui-for-edittd .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-edittd .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-edittd .edui-icon {
-    background-position: -35px -69px
-}
-
-.edui-gorgeous .edui-for-snapscreen .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-snapscreen .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-snapscreen .edui-icon {
-    background-position: -959px -68px
-}
-
-.edui-gorgeous .edui-for-scrawl .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-scrawl .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-scrawl .edui-icon {
-    background-position: -1323px -68px
-}
-
-.edui-gorgeous .edui-for-background .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-background .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-background .edui-icon {
-    background-position: -1124px -68px
-}
-
-.edui-gorgeous .edui-for-music .edui-state-hover .edui-icon,
-.edui-gorgeous .edui-for-music .edui-state-checked .edui-icon,
-.edui-gorgeous .edui-for-music .edui-icon {
-    background-position: 0 -36px
-}
-/*splitbutton*/
-.edui-gorgeous .edui-toolbar .edui-splitbutton-body .edui-arrow,
-.edui-gorgeous .edui-toolbar .edui-menubutton-body .edui-arrow {
-    background: url(../images/icons.png) -1220px -2px;
-    _background: url(../images/icons.gif) -1220px -2px;
-    height: 25px;
-    width: 9px;
-}
-
-.edui-gorgeous .edui-toolbar .edui-splitbutton .edui-splitbutton-body,
-.edui-gorgeous .edui-toolbar .edui-menubutton .edui-menubutton-body {
-    padding: 1px;
-    margin-top: 5px;
-}
-
-.edui-gorgeous .edui-toolbar .edui-menubutton-body .edui-splitborder,
-.edui-gorgeous .edui-toolbar .edui-splitbutton-body .edui-splitborder{
-    width: 1px;
-    height: 29px;
-}
-.edui-gorgeous .edui-toolbar .edui-splitborder {
-    width: 1px;
-    height: 20px;
-}
-
-.edui-gorgeous .edui-toolbar .edui-state-hover .edui-splitborder {
-    width: 1px;
-    border-left: 0 solid #A5ADB9;
-}
-
-.edui-gorgeous .edui-toolbar .edui-state-active .edui-splitborder {
-    width: 0;
-    border-left: 1px solid #fff;
-}
-
-.edui-gorgeous .edui-toolbar .edui-state-opened .edui-splitborder {
-    width: 1px;
-    border: 0;
-}
-
-.edui-gorgeous .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,
-.edui-gorgeous .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body {
-    border: 1px solid #A5ADB9;
-    padding: 0;
-    border-radius: 3px;
-}
-
-.edui-gorgeous .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,
-.edui-gorgeous .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body {
-    border: 1px solid #A5ADB9;
-    border-radius: 3px;
-    padding: 0;
-}
-
-.edui-gorgeous .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,
-.edui-gorgeous .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body {
-    background-color: transparent;
-    background-image: none;
-    border: 1px solid #fff;
-    border-radius: 3px;
-    padding: 0;
-}
-
-.edui-gorgeous .edui-state-disabled .edui-arrow {
-    opacity: 0.3;
-    _filter: alpha(opacity = 30);
-}
-
-.edui-gorgeous .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,
-.edui-gorgeous .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body {
-    background-color: #263B55;
-    background-image: none;
-    border: 1px solid #fff;
-    border-top-right-radius: 3px;
-    border-top-left-radius: 3px;
-    border-bottom-left-radius: 0;
-    border-bottom-right-radius: 0;
-    padding: 0;
-}
-
-.edui-gorgeous .edui-for-insertorderedlist .edui-bordereraser,
-.edui-gorgeous .edui-for-lineheight .edui-bordereraser,
-.edui-gorgeous .edui-for-rowspacingtop .edui-bordereraser,
-.edui-gorgeous .edui-for-rowspacingbottom .edui-bordereraser,
-.edui-gorgeous .edui-for-insertunorderedlist .edui-bordereraser {
-    background-color: white;
-}
-
-/* 解决嵌套导致的图标问题 */
-.edui-gorgeous .edui-for-insertorderedlist .edui-popup-body .edui-icon,
-.edui-gorgeous .edui-for-lineheight .edui-popup-body .edui-icon,
-.edui-gorgeous .edui-for-rowspacingtop .edui-popup-body .edui-icon,
-.edui-gorgeous .edui-for-rowspacingbottom .edui-popup-body .edui-icon,
-.edui-gorgeous .edui-for-insertunorderedlist .edui-popup-body .edui-icon {
-    background-image: none;
-}
-
-/* 弹出菜单 */
-.edui-gorgeous .edui-popup {
-    z-index: 3000;
-    opacity: 0.95;
-}
-
-.edui-gorgeous .edui-popup .edui-shadow {
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    background-color: #CACACA;
-    box-shadow:3px 3px 5px #CACACA;
-    border-radius: 5px;
-    -webkit-box-shadow:  3px 3px 5px #CACACA;
-    -moz-box-shadow:  3px 3px 5px #CACACA;
-    filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '3', MakeShadow = 'true', ShadowOpacity = '0.5');
-}
-
-.edui-gorgeous .edui-for-autotypeset .edui-popup-content,
-.edui-gorgeous .edui-for-forecolor .edui-popup-content,
-.edui-gorgeous .edui-for-backcolor .edui-popup-content,
-.edui-gorgeous .edui-for-insertorderedlist .edui-popup-content,
-.edui-gorgeous .edui-for-insertunorderedlist .edui-popup-content,
-.edui-gorgeous .edui-for-rowspacingtop .edui-popup-content,
-.edui-gorgeous .edui-for-rowspacingbottom .edui-popup-content,
-.edui-gorgeous .edui-for-inserttable .edui-popup-content,
-.edui-gorgeous .edui-for-lineheight .edui-popup-content{
-    border: 1px solid white;
-    border-bottom-left-radius: 5px;
-    border-bottom-right-radius: 5px;
-    border-top-right-radius: 5px;
-    border-top-left-radius: 0;
-    background-color: #263B55;
-    padding: 5px;
-    color: white;
-}
-.edui-gorgeous .edui-popup-content {
-    border: 1px solid white;
-    border-radius: 5px;
-    background-color: #263B55;
-    padding: 5px;
-    color: white;
-}
-.edui-gorgeous .edui-popup .edui-bordereraser {
-    background-color: #263B55;
-    height: 3px;
-}
-
-.edui-gorgeous .edui-menu .edui-bordereraser {
-    background-color: #263B55;
-    height: 3px;
-}
-
-.edui-gorgeous .edui-anchor-topleft .edui-bordereraser {
-    left: 1px;
-    top: -1px;
-}
-
-.edui-gorgeous .edui-anchor-topright .edui-bordereraser {
-    right: 1px;
-    top: -2px;
-}
-
-.edui-gorgeous .edui-anchor-bottomleft .edui-bordereraser {
-    left: 0;
-    bottom: -6px;
-    height: 7px;
-    border-left: 1px solid gray;
-    border-right: 1px solid gray;
-}
-
-.edui-gorgeous .edui-anchor-bottomright .edui-bordereraser {
-    right: 0;
-    bottom: -6px;
-    height: 7px;
-    border-left: 1px solid gray;
-    border-right: 1px solid gray;
-}
-
-/* 弹出对话框按钮 */
-.edui-gorgeous .edui-dialog {
-    z-index: 2000;
-    position: absolute;
-}
-
-.edui-gorgeous .edui-dialog-wrap {
-    margin-right: 6px;
-    margin-bottom: 6px;
-    border: 1px solid #7182a6;
-    border-radius: 5px;
-    opacity: 0.9;
-    filter: alpha(opacity = 95);
-}
-
-.edui-gorgeous .edui-dialog-body {
-    position: relative;
-    background-color: #fff;
-    border-radius: 5px;
-    _zoom: 1;
-}
-
-.edui-gorgeous .edui-dialog-shadow {
-    position: absolute;
-    border-radius: 5px;
-    z-index: -1;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    background-color: #000;
-    box-shadow: 0 0 10px #000;
-    -webkit-box-shadow:  0 0 10px #000;
-    -moz-box-shadow:  0 0 10px #000;
-    filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '3', MakeShadow = 'true', ShadowOpacity = '0.5');
-}
-
-.edui-gorgeous .edui-dialog-foot {
-    *background-color: #f5f6fa;
-}
-
-.edui-gorgeous .edui-dialog-titlebar {
-    height: 35px;
-    position: relative;
-    cursor: move;
-    *background-color: #f5f6fa;
-}
-
-.edui-gorgeous .edui-dialog-caption {
-    display: inline-block;
-    zoom:1;
-    padding:5px 0 0 10px;
-    width: 125px;
-    height: 25px;
-    font-size: 0;
-    line-height: 0;
-    margin-top: 5px;
-    background:url("../images/dialog_title.png") no-repeat;
-}
-
-.edui-gorgeous .edui-dialog-draghandle {
-    height: 26px;
-}
-
-.edui-gorgeous .edui-dialog-closebutton {
-    position: absolute !important;
-    right: 0;
-    top: -3px;
-}
-
-.edui-gorgeous .edui-dialog-closebutton .edui-button-body {
-    height: 30px;
-    _margin-top:3px;
-    width: 48px;
-    cursor: pointer;
-    border-radius:5px;
-    background: url("../images/icons-all.png") no-repeat 0 -70px
-}
-
-.edui-gorgeous .edui-dialog-closebutton .edui-state-hover .edui-button-body {
-    background:url("../images/icons-all.png") no-repeat -59px -69px
-}
-
-.edui-gorgeous .edui-dialog-foot {
-    height: 40px;
-}
-
-.edui-gorgeous .edui-dialog-buttons {
-    position: absolute;
-    right: 0;
-}
-
-.edui-gorgeous .edui-dialog-buttons .edui-button {
-    margin-right: 10px;
-    box-shadow: 3px 3px 5px #D3D6DA;
-    opacity: 0.85;
-    filter: alpha(opacity = 85);
-}
-
-.edui-gorgeous .edui-dialog-buttons .edui-button .edui-button-body {
-    height: 27px;
-    width: 96px;
-    font-size: 12px;
-    color: #131f40;
-    line-height: 27px;
-    text-align: center;
-    cursor: default;
-    background-image: url(../images/icons-all.gif);
-    background-position:0 -35px;
-}
-
-.edui-gorgeous .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body {
-    background-position: 0 0;
-}
-
-.edui-gorgeous .edui-dialog iframe {
-    border: 0;
-    padding: 0;
-    margin: 0;
-    vertical-align: top;
-}
-
-.edui-gorgeous .edui-dialog-modalmask {
-    opacity: 0.3;
-    filter: alpha(opacity = 30);
-    background-color: #000;
-    position: absolute;
-    /*z-index: 1999;*/
-}
-
-.edui-gorgeous .edui-dialog-dragmask {
-    position: absolute;
-    /*z-index: 2001;*/
-    background-color: transparent;
-    cursor: move;
-}
-
-.edui-gorgeous .edui-dialog-content {
-    background-color: transparent;
-    position: relative;
-}
-
-.edui-gorgeous .dialogcontmask {
-    cursor: move;
-    visibility: hidden;
-    display: block;
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    opacity: 0;
-    filter: alpha(opacity = 0);
-}
-/*link-dialog*/
-.edui-gorgeous .edui-for-link .edui-dialog-content {
-    width: 420px;
-    height: 180px;
-    overflow: hidden;
-}
-.edui-gorgeous .edui-for-link .edui-dialog-caption {
-    background-position:-141px -187px
-}
-/*background-dialog*/
-.edui-gorgeous .edui-for-background .edui-dialog-content {
-    width: 440px;
-    height: 280px;
-    overflow: hidden;
-}
-.edui-gorgeous .edui-for-background .edui-dialog-caption {
-    background-position: -6px -218px
-}
-
-/*template-dialog*/
-.edui-gorgeous .edui-for-template .edui-dialog-content {
-    width: 630px;
-    height: 390px;
-    overflow: hidden;
-}
-.edui-gorgeous .edui-for-template .edui-dialog-caption {
-    background-position: -1px -33px
-}
-/*scrawl-dialog*/
-.edui-gorgeous .edui-for-scrawl .edui-dialog-content {
-    width: 515px;
-    *width: 506px;
-    height: 360px;
-}
-.edui-gorgeous .edui-for-scrawl .edui-dialog-caption {
-    background-position: -1px -67px
-}
-/*spechars-dialog*/
-.edui-gorgeous .edui-for-spechars .edui-dialog-content {
-    width: 700px;
-    _width:730px;
-    height: 500px;
-    *height: 570px;
-}
-.edui-gorgeous .edui-for-spechars .edui-dialog-caption {
-    background-position: -1px -126px
-}
-/*image-dialog*/
-.edui-gorgeous .edui-for-insertimage .edui-dialog-content {
-    width: 640px;
-    height: 390px;
-    overflow: hidden;
-}
-.edui-gorgeous .edui-for-insertimage .edui-dialog-caption {
-    background-position: -1px -97px
-}
-/*webapp-dialog*/
-.edui-gorgeous .edui-for-webapp .edui-dialog-content {
-    width: 560px;
-    _width: 565px;
-    height: 450px;
-    overflow: hidden;
-}
-.edui-gorgeous .edui-for-webapp .edui-dialog-caption {
-    background-position: -1px -258px
-}
-/*image-insertframe*/
-.edui-gorgeous .edui-for-insertframe .edui-dialog-content {
-    width: 350px;
-    height: 200px;
-    overflow: hidden;
-}
-.edui-gorgeous .edui-for-insertframe .edui-dialog-caption {
-    background-position:-142px -32px
-}
-/*wordImage-dialog*/
-.edui-gorgeous .edui-for-wordimage .edui-dialog-content {
-    width: 620px;
-    height: 380px;
-    overflow: hidden;
-}
-.edui-gorgeous .edui-for-wordimage .edui-dialog-caption {
-    background-position: -1px -3px;
-}
-/*attachment-dialog*/
-.edui-gorgeous .edui-for-attachment .edui-dialog-content {
-    width: 480px;
-    height: 360px;
-    overflow: hidden;
-}
-.edui-gorgeous .edui-for-attachment .edui-dialog-caption {
-    background-position: -1px -185px
-}
-/*code-dialog*/
-.edui-gorgeous .edui-for-highlightcode .edui-dialog-content {
-    width: 550px;
-    height: 360px;
-    overflow: hidden;
-}
-.edui-gorgeous .edui-for-highlightcode .edui-dialog-caption {
-    background-position: -142px -3px
-}
-/*map-dialog*/
-.edui-gorgeous .edui-for-map .edui-dialog-content {
-    width: 550px;
-    height: 400px;
-}
-.edui-gorgeous .edui-for-map .edui-dialog-caption {
-    background-position: -142px -124px
-}
-/*gmap-dialog*/
-.edui-gorgeous .edui-for-gmap .edui-dialog-content {
-    width: 550px;
-    height: 400px;
-}
-.edui-gorgeous .edui-for-gmap .edui-dialog-caption {
-    background-position: -1px -153px
-}
-/*video-dialog*/
-.edui-gorgeous .edui-for-insertvideo .edui-dialog-content {
-    width: 590px;
-    height: 410px;
-}
-.edui-gorgeous .edui-for-insertvideo .edui-dialog-caption {
-    background-position: -1px -3px;
-}
-/*anchor-dialog*/
-.edui-gorgeous .edui-for-anchor .edui-dialog-content {
-    width: 320px;
-    height: 60px;
-    overflow: hidden;
-}
-.edui-gorgeous .edui-for-anchor .edui-dialog-caption {
-    background-position: -139px -221px
-}
-/*searchreplace-dialog*/
-.edui-gorgeous .edui-for-searchreplace .edui-dialog-content {
-    width: 400px;
-    height: 180px;
-}
-.edui-gorgeous .edui-for-searchreplace .edui-dialog-caption {
-    background-position: -141px -62px
-}
-/*help-dialog*/
-.edui-gorgeous .edui-for-help .edui-dialog-content {
-    width: 400px;
-    height: 420px;
-}
-.edui-gorgeous .edui-for-help .edui-dialog-caption {
-    background-position: -139px -260px
-}
-/*table-dialog*/
-.edui-gorgeous .edui-for-inserttable .edui-dialog-content {
-    width: 510px;
-    height: 275px;
-}
-.edui-gorgeous .edui-for-inserttable .edui-dialog-caption {
-    background-position:-142px -95px
-}
-/*td-dialog*/
-.edui-gorgeous .edui-for-edittd .edui-dialog-content {
-    width: 220px;
-    height: 115px;
-}
-.edui-gorgeous .edui-for-edittd .edui-dialog-caption {
-    background-position: -1px -300px
-}
-/*snapscreen-dialog*/
-.edui-gorgeous .edui-for-snapscreen .edui-dialog-content {
-    width: 400px;
-    height: 220px;
-}
-.edui-gorgeous .edui-for-snapscreen .edui-dialog-caption {
-     background-position: -138px -304px
- }
-/*music-dialog*/
-.edui-gorgeous .edui-for-music .edui-dialog-content {
-    width: 515px;
-    height: 360px;
-}
-.edui-gorgeous .edui-for-music .edui-dialog-caption {
-    background-position: -132px -150px
-}
-/*段落弹出菜单*/
-.edui-gorgeous .edui-for-paragraph .edui-listitem-label {
-    font-family: Tahoma, Verdana, Arial, Helvetica;
-    color: #fff;
-}
-
-.edui-gorgeous .edui-for-paragraph .edui-listitem-label .edui-for-p {
-    font-size: 22px;
-    line-height: 27px;
-}
-
-.edui-gorgeous .edui-for-paragraph .edui-listitem-label .edui-for-h1 {
-    font-weight: bolder;
-    font-size: 32px;
-    line-height: 36px;
-}
-
-.edui-gorgeous .edui-for-paragraph .edui-listitem-label .edui-for-h2 {
-    font-weight: bolder;
-    font-size: 27px;
-    line-height: 29px;
-}
-
-.edui-gorgeous .edui-for-paragraph .edui-listitem-label .edui-for-h3 {
-    font-weight: bolder;
-    font-size: 19px;
-    line-height: 23px;
-}
-
-.edui-gorgeous .edui-for-paragraph .edui-listitem-label .edui-for-h4 {
-    font-weight: bolder;
-    font-size: 16px;
-    line-height: 19px
-}
-
-.edui-gorgeous .edui-for-paragraph .edui-listitem-label .edui-for-h5 {
-    font-weight: bolder;
-    font-size: 13px;
-    line-height: 16px;
-}
-
-.edui-gorgeous .edui-for-paragraph .edui-listitem-label .edui-for-h6 {
-    font-weight: bolder;
-    font-size: 12px;
-    line-height: 14px;
-}
-/* 表格弹出菜单 */
-.edui-gorgeous .edui-tablepicker .edui-infoarea {
-    height: 14px;
-    line-height: 14px;
-    font-size: 12px;
-    width: 220px;
-    margin-bottom: 3px;
-    clear: both;
-}
-
-.edui-gorgeous .edui-tablepicker .edui-infoarea .edui-label {
-    float: left;
-}
-
-.edui-gorgeous .edui-dialog-buttons .edui-label {
-    line-height: 27px;
-}
-
-.edui-gorgeous .edui-tablepicker .edui-infoarea .edui-clickable {
-    float: right;
-}
-
-.edui-gorgeous .edui-tablepicker .edui-pickarea {
-    background: url("../images/unhighlighted.gif") repeat;
-    height: 220px;
-    width: 220px;
-}
-
-.edui-gorgeous .edui-tablepicker .edui-pickarea .edui-overlay {
-    background: url("../images/highlighted.gif") repeat;
-}
-
-/* 颜色弹出菜单 */
-.edui-gorgeous .edui-colorpicker-topbar {
-    height: 27px;
-    width: 200px;
-    /*border-bottom: 1px gray dashed;*/
-}
-
-.edui-gorgeous .edui-colorpicker-preview {
-    height: 20px;
-    border: 1px inset black;
-    margin-left: 1px;
-    width: 128px;
-    float: left;
-}
-
-.edui-gorgeous .edui-colorpicker-nocolor {
-    float: right;
-    margin-right: 1px;
-    font-size: 12px;
-    line-height: 14px;
-    height: 14px;
-    border: 1px solid #333;
-    padding: 3px 5px;
-    cursor: pointer;
-}
-
-.edui-gorgeous .edui-colorpicker-tablefirstrow {
-    height: 30px;
-}
-
-.edui-gorgeous .edui-colorpicker-colorcell {
-    width: 14px;
-    height: 14px;
-    display: block;
-    margin: 0;
-    cursor: pointer;
-}
-
-.edui-gorgeous .edui-colorpicker-colorcell:hover {
-    width: 14px;
-    height: 14px;
-    margin: 0;
-}
-/*自动排版弹出菜单*/
-.edui-gorgeous .edui-autotypesetpicker .edui-autotypesetpicker-body {
-    font-size: 12px;
-    margin-bottom: 3px;
-    clear: both;
-}
-
-.edui-gorgeous .edui-autotypesetpicker-body table {
-    border-collapse: separate;
-    border-spacing: 2px;
-}
-
-.edui-gorgeous .edui-autotypesetpicker-body td {
-    font-size: 12px;
-}
-
-.edui-gorgeous .edui-autotypesetpicker-body td input {
-    margin: 3px 3px 3px 4px;
-    *margin: 1px 0 0 0;
-}
-/*分隔线*/
-.edui-gorgeous .edui-toolbar .edui-separator {
-    width: 2px;
-    height: 20px;
-    margin:7px 6px 2px;
-    background: url(../images/icons.png) -180px 0;
-    _background: url(../images/icons.gif) -180px 0;
-}
-
-/*颜色按钮 */
-.edui-gorgeous .edui-toolbar .edui-colorbutton .edui-colorlump {
-    position: absolute;
-    overflow: hidden;
-    bottom: 1px;
-    left: 3px;
-    width: 25px;
-    height: 4px;
-}
-/*表情按钮及弹出菜单*/
-/*去除了表情的下拉箭头*/
-.edui-gorgeous .edui-for-emotion .edui-icon {
-    background-position: -101px -35px;
-}
-
-.edui-gorgeous .edui-for-emotion .edui-popup-content {
-    position: relative;
-    z-index: 555;
-    border: 1px solid #7182A6;
-    background-color: #F0F2F7;
-}
-
-.edui-gorgeous .edui-for-emotion .edui-popup-content iframe {
-    width: 600px;
-    height: 380px;
-    overflow: hidden;
-}
-
-.edui-gorgeous .edui-for-emotion .edui-splitborder {
-    display: none
-}
-
-.edui-gorgeous .edui-for-emotion .edui-splitbutton-body .edui-arrow {
-    width: 0
-}
-/*contextmenu*/
-.edui-gorgeous .edui-hassubmenu .edui-arrow {
-    height: 20px;
-    width: 20px;
-    float: right;
-    background: url("../images/icons-all.png") no-repeat 10px -233px;
-}
-
-.edui-gorgeous .edui-menu-body .edui-menuitem {
-    padding: 1px;
-}
-
-.edui-gorgeous .edui-menuseparator {
-    margin: 2px 0;
-    height: 1px;
-    overflow: hidden;
-}
-
-.edui-gorgeous .edui-menuseparator-inner {
-    border-bottom: 1px solid #e2e3e3;
-    margin-left: 29px;
-    margin-right: 1px;
-}
-
-.edui-gorgeous .edui-menu-body .edui-state-hover {
-    padding: 0 !important;
-    border: 1px solid #A5ADB9;
-    border-radius: 3px;
-}

+ 0 - 128
DjangoUeditor/static/ueditor/themes/gorgeous/dialogbase.css

@@ -1,128 +0,0 @@
-/*弹出对话框页面样式组件
-*/
-
-/*reset
-*/
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, font, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td {
-    margin: 0;
-    padding: 0;
-    outline: 0;
-    font-size: 100%;
-}
-
-body {
-    line-height: 1;
-}
-
-ol, ul {
-    list-style: none;
-}
-
-blockquote, q {
-    quotes: none;
-}
-
-ins {
-    text-decoration: none;
-}
-
-del {
-    text-decoration: line-through;
-}
-
-table {
-    border-collapse: collapse;
-    border-spacing: 0;
-}
-
-/*module
-*/
-body {
-    font: 12px/1.5 "Microsoft Yahei", "微软雅黑", Tahoma, Arial, Helvetica, STHeiti;
-    color: #131f40
-}
-
-/*tab*/
-.tabhead {
-    position: relative;
-    z-index: 10;
-    margin-left: 16px;
-}
-
-.tabhead span {
-    display: inline-block;
-    position: relative;
-    height: 26px;
-    line-height: 26px;
-    width: 87px;
-    margin-left: -16px;
-    text-align: center;
-    cursor: pointer;
-    background-image: url(images/dialog-title-bg.png);
-    background-position: 0 0;
-    z-index: 1
-}
-.tabhead span.focus {
-    background-position:  0 -42px;
-    top:1px;
-    z-index: 100;
-}
-
-.tabbody {
-    position: relative;
-    top: -1px;
-    margin: 0 auto;
-    border: 1px solid #60739b;
-    box-shadow: 3px 3px 5px #D3D6DA;
-    background-color: #fff;
-}
-
-/*button*/
-a.button {
-    display: block;
-    text-decoration: none;
-    height: 27px;
-    width: 96px;
-    font-size: 12px;
-    color: #131f40;
-    line-height: 27px;
-    text-align: center;
-    cursor: default;
-    background-image: url(images/icons-all.gif);
-    background-position:0 -35px;
-}
-
-a.button:hover {
-    background-position: 0 0;
-}
-
-/*滚动条*/
-::-webkit-scrollbar-track-piece{
-    background-color:#fff;
-    -webkit-border-radius:0;
-}
-::-webkit-scrollbar{
-    width:10px;
-    height:8px;
-}
-::-webkit-scrollbar-thumb{
-    height:50px;
-    background-color:#999;
-    -webkit-border-radius:5px;
-    outline:2px solid #fff;
-    outline-offset:-2px;
-    border: 2px solid #fff;
-}
-::-webkit-scrollbar-thumb:hover{
-    height:50px;
-    background-color:#9f9f9f;
-    -webkit-border-radius:4px;
-}

BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/anchor.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/arrow.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/bottom.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/button-bg.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/cancelbutton.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/cursor_h.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/cursor_v.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/dialog-title-bg.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/dialog_title.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/filescan.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/highlighted.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-all.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-all.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-checked.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-checked.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-hover.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/icons-hover.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/icons.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/icons.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/lock.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/neweditor-tab-bg.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/pagebreak.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/scale.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/spacer.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/sparator_v.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/toolbar-bg.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/unhighlighted.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/upload.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/videologo.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/gorgeous/images/word.gif


+ 0 - 1834
DjangoUeditor/static/ueditor/themes/modern/css/ueditor.css

@@ -1,1834 +0,0 @@
-/*基础UI构建
-*/
-/* common layer */
-.edui-modern .edui-box {
-    border: none;
-    padding: 0;
-    margin: 0;
-    overflow: hidden;
-}
-
-.edui-modern a.edui-box {
-    display: block;
-    text-decoration: none;
-    color: black;
-}
-
-.edui-modern a.edui-box:hover {
-    text-decoration: none;
-}
-
-.edui-modern a.edui-box:active {
-    text-decoration: none;
-}
-
-.edui-modern table.edui-box {
-    border-collapse: collapse;
-}
-
-.edui-modern ul.edui-box {
-    list-style-type: none;
-}
-
-div.edui-box {
-    position: relative;
-    display: -moz-inline-box !important;
-    display: inline-block !important;
-    vertical-align: top;
-}
-
-.edui-modern .edui-clearfix {
-    zoom: 1
-}
-
-.edui-modern .edui-clearfix:after {
-    content: '\20';
-    display: block;
-    clear: both;
-}
-
-* html div.edui-box {
-    display: inline !important;
-}
-
-*:first-child+html div.edui-box {
-    display: inline !important;
-}
-
-/* control layout */
-.edui-modern .edui-button-body, .edui-splitbutton-body, .edui-menubutton-body, .edui-combox-body {
-    position: relative;
-}
-
-.edui-modern .edui-popup {
-    position: absolute;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-}
-
-.edui-modern .edui-popup .edui-shadow {
-    position: absolute;
-    z-index: -1;
-}
-
-.edui-modern .edui-popup .edui-bordereraser {
-    position: absolute;
-    overflow: hidden;
-}
-
-.edui-modern .edui-tablepicker .edui-canvas {
-    position: relative;
-}
-
-.edui-modern .edui-tablepicker .edui-canvas .edui-overlay {
-    position: absolute;
-}
-
-.edui-modern .edui-dialog-modalmask, .edui-dialog-dragmask {
-    position: absolute;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-}
-
-.edui-modern .edui-toolbar {
-    position: relative;
-}
-
-/*
- * default theme
- */
-.edui-modern .edui-label {
-    cursor: default;
-    font-family: "Microsoft Yahei", "微软雅黑", Tahoma, Arial, Helvetica, STHeiti;
-}
-
-.edui-modern span.edui-clickable {
-    color: #39C;
-    cursor: pointer;
-    text-decoration: underline;
-}
-
-.edui-modern span.edui-unclickable {
-    color: gray;
-    cursor: default;
-}
-/* 工具栏 */
-.edui-modern .edui-toolbar {
-    cursor: default;
-    -webkit-user-select: none;
-    -moz-user-select: none;
-    padding: 1px;
-    overflow: hidden; /*全屏下单独一行不占位*/
-    zoom: 1;
-}
-.edui-modern .edui-toolbar .edui-button,
-.edui-modern .edui-toolbar .edui-splitbutton,
-.edui-modern .edui-toolbar .edui-menubutton,
-.edui-modern .edui-toolbar .edui-combox {
-    margin:2px 2px 0 0;
-}
-/*UI工具栏、编辑区域、底部*/
-.edui-modern .edui-editor {
-    border: 1px solid #383F47;
-    border-radius: 5px;
-    background-color: white;
-    position: relative;
-    overflow: visible;
-    box-shadow: 3px 3px 5px #818181;
-}
-
-.edui-modern .edui-editor-toolbarbox {
-    position: relative;
-    zoom: 1;
-    border-bottom: 1px solid #383F47;
-}
-
-.edui-modern .edui-editor-toolbarboxouter {
-    border: 1px solid #878c96;
-    border-radius: 5px;
-    border-bottom-right-radius:0;
-    border-bottom-left-radius: 0;
-    /*background-repeat: repeat-x;*/
-    background:url(../images/toolbar-bg.png) right bottom no-repeat;
-    background-color: #0d111a;
-    /*background-image: -webkit-gradient(linear, left top, left bottom, from(#252d50), to(#07090a));*/
-    /*background-image: -webkit-linear-gradient(top, #252d50, #07090a);*/
-    /*background-image: -moz-linear-gradient(top, #252d50, #07090a);*/
-    /*background-image: -o-linear-gradient(top, #252d50, #07090a);*/
-    /*background-image: linear-gradient(to bottom, #252d50, #07090a);*/
-}
-
-.edui-modern .edui-editor-toolbarboxinner {
-    padding: 2px;
-}
-
-.edui-modern .edui-editor-iframeholder {
-    position: relative;
-    /*for fix ie6 toolbarmsg under iframe bug. relative -> static */
-    /*_position: static !important;*/
-}
-
-.edui-modern .edui-editor-iframeholder textarea {
-    font-family: consolas, "Courier New", "lucida console", monospace;
-    font-size: 12px;
-    line-height: 18px;
-}
-
-.edui-modern .edui-editor-bottomContainer {
-    overflow: hidden;
-    background-image: url(../images/bottom.png);
-    border: 1px solid #868b96;
-    border-top-color:#383f47;
-    border-radius: 5px;
-    border-top-left-radius: 0;
-    border-top-right-radius: 0;
-}
-
-.edui-modern .edui-editor-bottomContainer table {
-    width: 100%;
-    height: 0;
-    overflow: hidden;
-    border-spacing: 0;
-    border-collapse: collapse;
-}
-
-.edui-modern .edui-editor-bottomContainer td {
-    white-space: nowrap;
-    border-top: 1px solid #868b96;
-    line-height: 20px;
-    font-size: 12px;
-    font-family: Arial, Helvetica, Tahoma, Verdana, Sans-Serif;
-}
-
-.edui-modern .edui-editor-wordcount {
-    text-align: right;
-    margin-right: 5px;
-    color: #fff;
-}
-.edui-modern .edui-editor-scale {
-    width: 12px;
-}
-.edui-modern .edui-editor-scale .edui-editor-icon {
-    float: right;
-    width: 100%;
-    height: 12px;
-    margin-top: 10px;
-    background: url(../images/scale.png) no-repeat;
-    cursor: se-resize;
-}
-.edui-modern .edui-editor-breadcrumb {
-    margin: 2px 0 0 3px;
-    color: #fff;
-}
-
-.edui-modern .edui-editor-breadcrumb span {
-    cursor: pointer;
-    text-decoration: underline;
-    color: #fff;
-}
-
-.edui-modern .edui-toolbar .edui-for-fullscreen {
-    float: right;
-}
-
-.edui-modern .edui-bubble .edui-popup-content {
-    border: 1px solid #7E8396;
-    background-color: #70768C;
-    padding: 5px;
-    font-size: 10pt;
-    font-family: "宋体";
-
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#72788E), to(#1F2949));
-    background-image: -webkit-linear-gradient(top, #72788E, #1F2949);
-    background-image: -moz-linear-gradient(top, #72788E, #1F2949);
-    background-image: -o-linear-gradient(top, #72788E, #1F2949);
-    background-image: linear-gradient(to bottom, #72788E, #1F2949);
-    border-radius: 3px;
-}
-
-.edui-modern .edui-bubble .edui-shadow {
-    box-shadow: 0 0 10px #000;
-    -webkit-box-shadow:  0 0 10px #000;
-    -moz-box-shadow:  0 0 10px #000;
-    filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '3', MakeShadow = 'true', ShadowOpacity = '0.5');
-}
-
-.edui-modern .edui-editor-toolbarmsg {
-    background-color: #FFF6D9;
-    border-bottom: 1px solid #ccc;
-    position: absolute;
-    bottom: -25px;
-    left: 0;
-    z-index: 1009;
-    width: 99.9%;
-}
-
-.edui-modern .edui-editor-toolbarmsg-upload {
-    font-size: 14px;
-    color: blue;
-    width: 100px;
-    height: 16px;
-    line-height: 16px;
-    cursor: pointer;
-    position: absolute;
-    top: 5px;
-    left: 350px;
-}
-
-.edui-modern .edui-editor-toolbarmsg-label {
-    font-size: 12px;
-    line-height: 16px;
-    padding: 4px;
-}
-
-.edui-modern .edui-editor-toolbarmsg-close {
-    float: right;
-    width: 20px;
-    height: 16px;
-    line-height: 16px;
-    cursor: pointer;
-    color: red;
-}
-/*可选中菜单按钮*/
-.edui-modern .edui-list .edui-bordereraser {
-    display: none;
-}
-
-.edui-modern .edui-listitem {
-    padding: 1px;
-    white-space: nowrap;
-}
-
-.edui-modern .edui-list .edui-state-hover {
-    position: relative;
-    background-color: #70768C;
-    border: 1px solid #7E8396;
-    padding: 0;
-
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#72788E), to(#1F2949));
-    background-image: -webkit-linear-gradient(top, #72788E, #1F2949);
-    background-image: -moz-linear-gradient(top, #72788E, #1F2949);
-    background-image: -o-linear-gradient(top, #72788E, #1F2949);
-    background-image: linear-gradient(to bottom, #72788E, #1F2949);
-    border-radius: 3px;
-}
-
-.edui-modern .edui-for-fontfamily .edui-listitem-label {
-    min-width: 120px;
-    _width: 120px;
-    font-size: 12px;
-    height: 22px;
-    line-height: 22px;
-    padding-left: 5px;
-}
-
-.edui-modern .edui-for-underline .edui-listitem-label {
-    min-width: 120px;
-    _width: 120px;
-    padding: 3px 5px;
-    font-size: 12px;
-}
-
-.edui-modern .edui-for-fontsize .edui-listitem-label {
-    min-width: 120px;
-    _width: 120px;
-    padding: 3px 5px;
-}
-
-.edui-modern .edui-for-paragraph .edui-listitem-label {
-    min-width: 200px;
-    _width: 200px;
-    padding: 2px 5px;
-}
-
-.edui-modern .edui-for-rowspacingtop .edui-listitem-label,
-.edui-modern .edui-for-rowspacingbottom .edui-listitem-label {
-    min-width: 53px;
-    _width: 53px;
-    padding: 2px 5px;
-}
-
-.edui-modern .edui-for-lineheight .edui-listitem-label {
-    min-width: 53px;
-    _width: 53px;
-    padding: 2px 5px;
-}
-
-.edui-modern .edui-for-customstyle .edui-listitem-label {
-    min-width: 200px;
-    _width: 200px;
-    width: 200px !important;
-    padding: 2px 5px;
-    line-height: 38px;
-}
-/* 可选中按钮弹出菜单*/
-.edui-modern .edui-menu {
-    z-index: 3000;
-}
-
-.edui-modern .edui-menu .edui-popup-content {
-    background-color: #1D2749;
-    padding: 3px;
-}
-
-.edui-modern .edui-menu-body {
-    _width: 150px;
-    min-width: 150px;
-    background: url("../images/sparator_v.png") repeat-y 30px;
-}
-
-.edui-modern .edui-menuitem-body {
-}
-
-.edui-modern .edui-menuitem {
-    height: 29px;
-    cursor: default;
-    vertical-align: top;
-}
-
-.edui-modern .edui-menuitem .edui-icon {
-    width: 29px !important;
-    height: 29px !important;
-    background: url(../images/icons.png) 0 -40px;
-    _background: url(../images/icons.gif) 0 -40px;
-}
-
-.edui-modern .edui-menuitem .edui-label {
-    font-size: 12px;
-    line-height: 29px;
-    height: 29px;
-    padding-left: 5px;
-}
-
-.edui-modern .edui-state-checked .edui-menuitem-body {
-    background: url("../images/icons-all.png") no-repeat 6px -205px;
-}
-
-.edui-modern .edui-state-disabled .edui-menuitem-label {
-    color: gray;
-}
-
-.edui-modern .edui-state-disabled .edui-icon {
-    opacity: 0.3;
-    filter: alpha(opacity = 30);
-}
-/*不可选中菜单按钮 */
-.edui-modern .edui-toolbar .edui-combox-body .edui-button-body {
-    width: 60px;
-    font-size: 12px;
-    height: 20px;
-    line-height: 20px;
-    padding-left: 5px;
-    white-space: nowrap;
-}
-
-.edui-modern .edui-toolbar .edui-combox-body .edui-arrow {
-    background:url(../images/icons.png) -1220px -7px;
-    _background: url(../images/icons.gif) -1220px -7px;
-    height: 20px;
-    width: 9px;
-}
-
-.edui-modern .edui-toolbar .edui-combox .edui-combox-body {
-    border: 1px solid #fff;
-    border-radius: 3px;
-    color: #fff;
-    margin: 9px 3px 0 0
-}
-
-.edui-modern .edui-toolbar .edui-combox-body .edui-splitborder {
-    display: none;
-}
-
-.edui-modern .edui-toolbar .edui-combox-body .edui-arrow {
-    border-left: 1px solid #fff;
-}
-
-.edui-modern .edui-toolbar .edui-state-hover .edui-combox-body {
-    background-color: #70768C;
-    border: 1px solid #6A7085;
-
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#72788E), to(#1F2949));
-    background-image: -webkit-linear-gradient(top, #72788E, #1F2949);
-    background-image: -moz-linear-gradient(top, #72788E, #1F2949);
-    background-image: -o-linear-gradient(top, #72788E, #1F2949);
-    background-image: linear-gradient(to bottom, #72788E, #1F2949);
-    border-radius: 3px;
-}
-
-.edui-modern .edui-toolbar .edui-state-active .edui-combox-body {
-    border: 1px solid #fff;
-    border-radius: 3px;
-    background-color: transparent;
-    background-image: none;
-}
-.edui-modern .edui-toolbar .edui-state-hover .edui-combox-body .edui-arrow {
-    border-left: 1px solid #6A7085;
-}
-
-.edui-modern .edui-toolbar .edui-state-checked .edui-combox-body {
-    background-color: #1D2749;
-    border: 1px solid #6A7085;
-
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#72788E), to(#1F2949));
-    background-image: -webkit-linear-gradient(top, #72788E, #1F2949);
-    background-image: -moz-linear-gradient(top, #72788E, #1F2949);
-    background-image: -o-linear-gradient(top, #72788E, #1F2949);
-    background-image: linear-gradient(to bottom, #72788E, #1F2949);
-    border-radius: 3px;
-}
-
-.edui-modern .edui-toolbar .edui-state-checked .edui-combox-body .edui-arrow {
-    border-left: 1px solid #6A7085;
-}
-
-.edui-modern .edui-toolbar .edui-state-disabled .edui-combox-body {
-    background-color: #1D2749;
-    opacity: 0.3;
-    filter: alpha(opacity = 30);
-}
-
-.edui-modern .edui-toolbar .edui-state-opened .edui-combox-body {
-    background-color: #1D2749;
-    border: 1px solid #fff;
-}
-/*普通按钮样式及状态*/
-.edui-modern  .edui-toolbar .edui-button .edui-icon,
-.edui-modern  .edui-toolbar .edui-menubutton .edui-icon,
-.edui-modern  .edui-toolbar .edui-splitbutton .edui-icon {
-    height: 29px !important;
-    width: 29px !important;
-    background-image: url(../images/icons.png);
-    _background-image: url(../images/icons.gif);
-}
-
-.edui-modern  .edui-toolbar .edui-button .edui-state-hover .edui-icon,
-.edui-modern  .edui-toolbar .edui-menubutton .edui-state-hover .edui-icon,
-.edui-modern  .edui-toolbar .edui-splitbutton .edui-state-hover .edui-icon {
-    background-image: url(../images/icons-hover.png);
-    _background-image: url(../images/icons-hover.gif);
-}
-
-.edui-modern  .edui-toolbar .edui-button .edui-state-checked .edui-icon,
-.edui-modern  .edui-toolbar .edui-menubutton .edui-state-checked .edui-icon,
-.edui-modern  .edui-toolbar .edui-splitbutton .edui-state-checked .edui-icon {
-    background-image: url(../images/icons-checked.png);
-    _background-image: url(../images/icons-checked.gif);
-}
-.edui-modern  .edui-toolbar .edui-state-disabled .edui-label {
-    color: gray;
-}
-.edui-modern  .edui-toolbar .edui-state-disabled .edui-icon {
-    opacity: 0.3;
-    filter: alpha(opacity = 30);
-}
-/*每个按钮外面的框*/
-.edui-modern  .edui-toolbar .edui-button .edui-button-wrap {
-    padding: 1px;
-    position: relative;
-    margin-top: 5px;
-}
-
-.edui-modern  .edui-toolbar .edui-button .edui-state-hover .edui-button-wrap {
-    padding: 0;
-    border: 1px solid #7E8396;
-    background-color: #70768C;
-
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#72788E), to(#1F2949));
-    background-image: -webkit-linear-gradient(top, #72788E, #1F2949);
-    background-image: -moz-linear-gradient(top, #72788E, #1F2949);
-    background-image: -o-linear-gradient(top, #72788E, #1F2949);
-    background-image: linear-gradient(to bottom, #72788E, #1F2949);
-    border-radius: 3px;
-}
-
-.edui-modern  .edui-toolbar .edui-button .edui-state-checked .edui-button-wrap {
-    padding: 0;
-    border: 1px solid #6A7085;
-    background-color: #202949;
-
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#72788E), to(#1F2949));
-    background-image: -webkit-linear-gradient(top, #72788E, #1F2949);
-    background-image: -moz-linear-gradient(top, #72788E, #1F2949);
-    background-image: -o-linear-gradient(top, #72788E, #1F2949);
-    background-image: linear-gradient(to bottom, #72788E, #1F2949);
-    border-radius: 3px;
-}
-
-.edui-modern  .edui-toolbar .edui-button .edui-state-active .edui-button-wrap {
-    padding: 0;
-    border: 1px solid #fff;
-    background-color: transparent;
-    background-image: none;
-    border-radius: 3px;
-}
-/* 每个按钮的default、hover、active、checked背景位置*/
-.edui-modern .edui-for-undo .edui-icon,
-.edui-modern .edui-for-undo .edui-state-hover .edui-icon,
-.edui-modern .edui-for-undo .edui-state-checked .edui-icon {
-    background-position: -267px -3px
-}
-
-.edui-modern .edui-for-redo .edui-icon,
-.edui-modern .edui-for-redo .edui-state-hover .edui-icon,
-.edui-modern .edui-for-redo .edui-state-checked .edui-icon {
-    background-position: -166px -3px
-}
-
-.edui-modern .edui-for-bold .edui-icon,
-.edui-modern .edui-for-bold .edui-state-hover .edui-icon,
-.edui-modern .edui-for-bold .edui-state-checked .edui-icon {
-    background-position: 0 -3px
-}
-
-.edui-modern .edui-for-italic .edui-icon,
-.edui-modern .edui-for-italic .edui-state-hover .edui-icon,
-.edui-modern .edui-for-italic .edui-state-checked .edui-icon {
-    background-position: -99px -3px
-}
-
-.edui-modern .edui-for-underline .edui-icon,
-.edui-modern .edui-for-underline .edui-state-hover .edui-icon,
-.edui-modern .edui-for-underline .edui-state-checked .edui-icon {
-    background-position: -234px -3px
-}
-
-.edui-modern .edui-for-strikethrough .edui-icon,
-.edui-modern .edui-for-strikethrough .edui-state-hover .edui-icon,
-.edui-modern .edui-for-strikethrough .edui-state-checked .edui-icon {
-    background-position: -200px -3px
-}
-
-.edui-modern .edui-for-subscript .edui-icon,
-.edui-modern .edui-for-subscript .edui-state-hover .edui-icon,
-.edui-modern .edui-for-subscript .edui-state-checked .edui-icon {
-    background-position: -991px -3px
-}
-
-.edui-modern .edui-for-superscript .edui-icon,
-.edui-modern .edui-for-superscript .edui-state-hover .edui-icon,
-.edui-modern .edui-for-superscript .edui-state-checked .edui-icon {
-    background-position: -1024px -3px
-}
-
-.edui-modern .edui-for-blockquote .edui-icon,
-.edui-modern .edui-for-blockquote .edui-state-hover .edui-icon,
-.edui-modern .edui-for-blockquote .edui-state-checked .edui-icon {
-    background-position: -364px -3px
-}
-
-.edui-modern .edui-for-forecolor .edui-icon,
-.edui-modern .edui-for-forecolor .edui-state-hover .edui-icon,
-.edui-modern .edui-for-forecolor .edui-state-checked .edui-icon {
-    background-position: -1189px -3px
-}
-
-.edui-modern .edui-for-backcolor .edui-icon,
-.edui-modern .edui-for-backcolor .edui-state-hover .edui-icon,
-.edui-modern .edui-for-backcolor .edui-state-checked .edui-icon {
-    background-position: -1255px -3px
-}
-
-.edui-modern .edui-for-inserttable .edui-icon,
-.edui-modern .edui-for-inserttable .edui-state-hover .edui-icon,
-.edui-modern .edui-for-inserttable .edui-state-checked .edui-icon {
-    background-position:-960px -35px
-}
-
-.edui-modern .edui-for-autotypeset .edui-icon,
-.edui-modern .edui-for-autotypeset .edui-state-hover .edui-icon,
-.edui-modern .edui-for-autotypeset .edui-state-checked .edui-icon {
-    background-position: -1058px -68px;
-}
-
-.edui-modern .edui-for-justifyleft .edui-icon,
-.edui-modern .edui-for-justifyleft .edui-state-hover .edui-icon,
-.edui-modern .edui-for-justifyleft .edui-state-checked .edui-icon {
-    background-position: -762px -3px
-}
-
-.edui-modern .edui-for-justifycenter .edui-icon,
-.edui-modern .edui-for-justifycenter .edui-state-hover .edui-icon,
-.edui-modern .edui-for-justifycenter .edui-state-checked .edui-icon {
-    background-position: -695px -3px
-}
-
-.edui-modern .edui-for-justifyright .edui-icon,
-.edui-modern .edui-for-justifyright .edui-state-hover .edui-icon,
-.edui-modern .edui-for-justifyright .edui-state-checked .edui-icon {
-    background-position: -794px -3px
-}
-
-.edui-modern .edui-for-justifyjustify .edui-icon,
-.edui-modern .edui-for-justifyjustify .edui-state-hover .edui-icon,
-.edui-modern .edui-for-justifyjustify .edui-state-checked .edui-icon {
-    background-position: -728px -3px
-}
-
-.edui-modern .edui-for-insertorderedlist .edui-icon,
-.edui-modern .edui-for-insertorderedlist .edui-state-hover .edui-icon,
-.edui-modern .edui-for-insertorderedlist .edui-state-checked .edui-icon {
-    background-position: -134px -3px
-}
-
-.edui-modern .edui-for-insertunorderedlist .edui-icon,
-.edui-modern .edui-for-insertunorderedlist .edui-state-hover .edui-icon,
-.edui-modern .edui-for-insertunorderedlist .edui-state-checked .edui-icon {
-    background-position: -36px -1px
-}
-
-.edui-modern .edui-for-lineheight .edui-state-hover .edui-icon,
-.edui-modern .edui-for-lineheight .edui-state-checked .edui-icon,
-.edui-modern .edui-for-lineheight .edui-icon {
-    background-position: -1190px -68px;
-}
-
-.edui-modern .edui-for-rowspacingbottom .edui-state-hover .edui-icon,
-.edui-modern .edui-for-rowspacingbottom .edui-state-checked .edui-icon,
-.edui-modern .edui-for-rowspacingbottom .edui-icon {
-    background-position: -1223px -68px;
-}
-
-.edui-modern .edui-for-rowspacingtop .edui-state-hover .edui-icon,
-.edui-modern .edui-for-rowspacingtop .edui-state-checked .edui-icon,
-.edui-modern .edui-for-rowspacingtop .edui-icon {
-    background-position: -1256px -68px;
-}
-
-.edui-modern .edui-for-horizontal .edui-state-hover .edui-icon,
-.edui-modern .edui-for-horizontal .edui-state-checked .edui-icon,
-.edui-modern .edui-for-horizontal .edui-icon {
-    background-position: -595px -3px
-}
-
-.edui-modern .edui-for-link .edui-state-hover .edui-icon,
-.edui-modern .edui-for-link .edui-state-checked .edui-icon,
-.edui-modern .edui-for-link .edui-icon {
-    background-position: -826px -3px
-}
-
-.edui-modern .edui-for-code .edui-state-hover .edui-icon,
-.edui-modern .edui-for-code .edui-state-checked .edui-icon,
-.edui-modern .edui-for-code .edui-icon {
-    background-position: -440px -68px;
-}
-
-.edui-modern .edui-for-insertimage .edui-state-hover .edui-icon,
-.edui-modern .edui-for-insertimage .edui-state-checked .edui-icon,
-.edui-modern .edui-for-insertimage .edui-icon {
-    background-position: -629px -3px
-}
-
-.edui-modern .edui-for-insertframe .edui-state-hover .edui-icon,
-.edui-modern .edui-for-insertframe .edui-state-checked .edui-icon,
-.edui-modern .edui-for-insertframe .edui-icon {
-    background-position: -397px -68px
-}
-
-.edui-modern .edui-for-emoticon .edui-state-hover .edui-icon,
-.edui-modern .edui-for-emoticon .edui-state-checked .edui-icon,
-.edui-modern .edui-for-emoticon .edui-icon {
-    background-position: -60px -35px;
-}
-
-.edui-modern .edui-for-spechars .edui-state-hover .edui-icon,
-.edui-modern .edui-for-spechars .edui-state-checked .edui-icon,
-.edui-modern .edui-for-spechars .edui-icon {
-    background-position: -396px -3px
-}
-
-.edui-modern .edui-for-help .edui-state-hover .edui-icon,
-.edui-modern .edui-for-help .edui-state-checked .edui-icon,
-.edui-modern .edui-for-help .edui-icon {
-    background-position: -563px -3px
-}
-
-.edui-modern .edui-for-print .edui-state-hover .edui-icon,
-.edui-modern .edui-for-print .edui-state-checked .edui-icon,
-.edui-modern .edui-for-print .edui-icon {
-    background-position: -729px -35px
-}
-
-.edui-modern .edui-for-preview .edui-state-hover .edui-icon,
-.edui-modern .edui-for-preview .edui-state-checked .edui-icon,
-.edui-modern .edui-for-preview .edui-icon {
-    background-position: -695px -35px
-}
-
-.edui-modern .edui-for-selectall .edui-state-hover .edui-icon,
-.edui-modern .edui-for-selectall .edui-state-checked .edui-icon,
-.edui-modern .edui-for-selectall .edui-icon {
-    background-position: -662px -35px
-}
-
-.edui-modern .edui-for-searchreplace .edui-state-hover .edui-icon,
-.edui-modern .edui-for-searchreplace .edui-state-checked .edui-icon,
-.edui-modern .edui-for-searchreplace .edui-icon {
-    background-position: -856px -35px
-}
-
-.edui-modern .edui-for-map .edui-state-hover .edui-icon,
-.edui-modern .edui-for-map .edui-state-checked .edui-icon,
-.edui-modern .edui-for-map .edui-icon {
-    background-position: -69px -68px
-}
-
-.edui-modern .edui-for-gmap .edui-state-hover .edui-icon,
-.edui-modern .edui-for-gmap .edui-state-checked .edui-icon,
-.edui-modern .edui-for-gmap .edui-icon {
-    background-position: -432px -68px
-}
-
-.edui-modern .edui-for-insertvideo .edui-state-hover .edui-icon,
-.edui-modern .edui-for-insertvideo .edui-state-checked .edui-icon,
-.edui-modern .edui-for-insertvideo .edui-icon {
-    background-position: -530px -35px;
-}
-
-.edui-modern .edui-for-time .edui-state-hover .edui-icon,
-.edui-modern .edui-for-time .edui-state-checked .edui-icon,
-.edui-modern .edui-for-time .edui-icon {
-    background-position: -267px -35px
-}
-
-.edui-modern .edui-for-date .edui-state-hover .edui-icon,
-.edui-modern .edui-for-date .edui-state-checked .edui-icon,
-.edui-modern .edui-for-date .edui-icon {
-    background-position: -233px -35px
-}
-
-.edui-modern .edui-for-cut .edui-state-hover .edui-icon,
-.edui-modern .edui-for-cut .edui-state-checked .edui-icon,
-.edui-modern .edui-for-cut .edui-icon {
-    background-position: -680px -3px
-}
-
-.edui-modern .edui-for-copy .edui-state-hover .edui-icon,
-.edui-modern .edui-for-copy .edui-state-checked .edui-icon,
-.edui-modern .edui-for-copy .edui-icon {
-    background-position: -1123px -3px
-}
-
-.edui-modern .edui-for-paste .edui-state-hover .edui-icon,
-.edui-modern .edui-for-paste .edui-state-checked .edui-icon,
-.edui-modern .edui-for-paste .edui-icon {
-    background-position: -925px -3px
-}
-
-.edui-modern .edui-for-formatmatch .edui-state-hover .edui-icon,
-.edui-modern .edui-for-formatmatch .edui-state-checked .edui-icon,
-.edui-modern .edui-for-formatmatch .edui-icon {
-    background-position: -69px -3px
-}
-
-.edui-modern .edui-for-pasteplain .edui-state-hover .edui-icon,
-.edui-modern .edui-for-pasteplain .edui-state-checked .edui-icon,
-.edui-modern .edui-for-pasteplain .edui-icon {
-    background-position: -597px -35px;
-}
-
-.edui-modern .edui-for-directionalityltr .edui-state-hover .edui-icon,
-.edui-modern .edui-for-directionalityltr .edui-state-checked .edui-icon,
-.edui-modern .edui-for-directionalityltr .edui-icon {
-    background-position: -36px -35px;
-}
-
-.edui-modern .edui-for-directionalityrtl .edui-state-hover .edui-icon,
-.edui-modern .edui-for-directionalityrtl .edui-state-checked .edui-icon,
-.edui-modern .edui-for-directionalityrtl .edui-icon {
-    background-position: -69px -35px;
-}
-
-.edui-modern .edui-for-source .edui-state-hover .edui-icon,
-.edui-modern .edui-for-source .edui-state-checked .edui-icon,
-.edui-modern .edui-for-source .edui-icon {
-    background-position: -430px -3px;
-}
-
-.edui-modern .edui-for-removeformat .edui-state-hover .edui-icon,
-.edui-modern .edui-for-removeformat .edui-state-checked .edui-icon,
-.edui-modern .edui-for-removeformat .edui-icon {
-    background-position: -960px -3px
-}
-
-.edui-modern .edui-for-unlink .edui-state-hover .edui-icon,
-.edui-modern .edui-for-unlink .edui-state-checked .edui-icon,
-.edui-modern .edui-for-unlink .edui-icon {
-    background-position: -1058px -3px
-}
-
-.edui-modern .edui-for-touppercase .edui-state-hover .edui-icon,
-.edui-modern .edui-for-touppercase .edui-state-checked .edui-icon,
-.edui-modern .edui-for-touppercase .edui-icon {
-    background-position: -1289px -3px
-}
-
-.edui-modern .edui-for-tolowercase .edui-state-hover .edui-icon,
-.edui-modern .edui-for-tolowercase .edui-state-checked .edui-icon,
-.edui-modern .edui-for-tolowercase .edui-icon {
-    background-position: -1321px -3px
-}
-
-.edui-modern .edui-for-insertrow .edui-state-hover .edui-icon,
-.edui-modern .edui-for-insertrow .edui-state-checked .edui-icon,
-.edui-modern .edui-for-insertrow .edui-icon {
-    background-position:-1222px -35px
-}
-
-.edui-modern .edui-for-insertcol .edui-state-hover .edui-icon,
-.edui-modern .edui-for-insertcol .edui-state-checked .edui-icon,
-.edui-modern .edui-for-insertcol .edui-icon {
-    background-position: -1125px -35px
-}
-
-.edui-modern .edui-for-mergeright .edui-state-hover .edui-icon,
-.edui-modern .edui-for-mergeright .edui-state-checked .edui-icon,
-.edui-modern .edui-for-mergeright .edui-icon {
-    background-position: -101px -68px
-}
-
-.edui-modern .edui-for-mergedown .edui-state-hover .edui-icon,
-.edui-modern .edui-for-mergedown .edui-state-checked .edui-icon,
-.edui-modern .edui-for-mergedown .edui-icon {
-    background-position:-134px -68px
-}
-
-.edui-modern .edui-for-splittorows .edui-state-hover .edui-icon,
-.edui-modern .edui-for-splittorows .edui-state-checked .edui-icon,
-.edui-modern .edui-for-splittorows .edui-icon {
-    background-position: -167px -68px
-}
-
-.edui-modern .edui-for-splittocols .edui-state-hover .edui-icon,
-.edui-modern .edui-for-splittocols .edui-state-checked .edui-icon,
-.edui-modern .edui-for-splittocols .edui-icon {
-    background-position: -200px -68px
-}
-
-.edui-modern .edui-for-insertparagraphbeforetable .edui-state-hover .edui-icon,
-.edui-modern .edui-for-insertparagraphbeforetable .edui-state-checked .edui-icon,
-.edui-modern .edui-for-insertparagraphbeforetable .edui-icon {
-    background-position: -234px -68px
-}
-
-.edui-modern .edui-for-deleterow .edui-state-hover .edui-icon,
-.edui-modern .edui-for-deleterow .edui-state-checked .edui-icon,
-.edui-modern .edui-for-deleterow .edui-icon {
-    background-position:-1091px -35px
-}
-
-.edui-modern .edui-for-deletecol .edui-state-hover .edui-icon,
-.edui-modern .edui-for-deletecol .edui-state-checked .edui-icon,
-.edui-modern .edui-for-deletecol .edui-icon {
-    background-position:-1056px -35px
-}
-
-.edui-modern .edui-for-splittocells .edui-state-hover .edui-icon,
-.edui-modern .edui-for-splittocells .edui-state-checked .edui-icon,
-.edui-modern .edui-for-splittocells .edui-icon {
-    background-position: -1257px -35px
-}
-
-.edui-modern .edui-for-mergecells .edui-state-hover .edui-icon,
-.edui-modern .edui-for-mergecells .edui-state-checked .edui-icon,
-.edui-modern .edui-for-mergecells .edui-icon {
-    background-position: -1257px -35px
-}
-
-.edui-modern .edui-for-deletetable .edui-state-hover .edui-icon,
-.edui-modern .edui-for-deletetable .edui-state-checked .edui-icon,
-.edui-modern .edui-for-deletetable .edui-icon {
-    background-position: -1025px -35px
-}
-
-.edui-modern .edui-for-cleardoc .edui-state-hover .edui-icon,
-.edui-modern .edui-for-cleardoc .edui-state-checked .edui-icon,
-.edui-modern .edui-for-cleardoc .edui-icon {
-    background-position: -860px -3px
-}
-
-.edui-modern .edui-for-fullscreen .edui-state-hover .edui-icon,
-.edui-modern .edui-for-fullscreen .edui-state-checked .edui-icon,
-.edui-modern .edui-for-fullscreen .edui-icon {
-    background-position: -167px -35px;
-}
-
-.edui-modern .edui-for-anchor .edui-state-hover .edui-icon,
-.edui-modern .edui-for-anchor .edui-state-checked .edui-icon,
-.edui-modern .edui-for-anchor .edui-icon {
-    background-position: -332px -3px
-}
-
-.edui-modern .edui-for-pagebreak .edui-state-hover .edui-icon,
-.edui-modern .edui-for-pagebreak .edui-state-checked .edui-icon,
-.edui-modern .edui-for-pagebreak .edui-icon {
-    background-position: -762px -68px
-}
-
-.edui-modern .edui-for-imagenone .edui-state-hover .edui-icon,
-.edui-modern .edui-for-imagenone .edui-state-checked .edui-icon,
-.edui-modern .edui-for-imagenone .edui-icon {
-    background-position: -795px -68px;
-}
-
-.edui-modern .edui-for-imageleft .edui-state-hover .edui-icon,
-.edui-modern .edui-for-imageleft .edui-state-checked .edui-icon,
-.edui-modern .edui-for-imageleft .edui-icon {
-    background-position: -827px -68px;
-}
-
-.edui-modern .edui-for-wordimage .edui-state-hover .edui-icon,
-.edui-modern .edui-for-wordimage .edui-state-checked .edui-icon,
-.edui-modern .edui-for-wordimage .edui-icon {
-    background-position: -1091px -68px
-}
-
-.edui-modern .edui-for-imageright .edui-state-hover .edui-icon,
-.edui-modern .edui-for-imageright .edui-state-checked .edui-icon,
-.edui-modern .edui-for-imageright .edui-icon {
-    background-position: -861px -68px
-}
-
-.edui-modern .edui-for-imagecenter .edui-state-hover .edui-icon,
-.edui-modern .edui-for-imagecenter .edui-state-checked .edui-icon,
-.edui-modern .edui-for-imagecenter .edui-icon {
-    background-position:-894px -68px
-}
-
-.edui-modern .edui-for-indent .edui-state-hover .edui-icon,
-.edui-modern .edui-for-indent .edui-state-checked .edui-icon,
-.edui-modern .edui-for-indent .edui-icon {
-    background-position: -661px -3px
-}
-
-.edui-modern .edui-for-outdent .edui-state-hover .edui-icon,
-.edui-modern .edui-for-outdent .edui-state-checked .edui-icon,
-.edui-modern .edui-for-outdent .edui-icon {
-    background-position: -540px -3px
-}
-
-.edui-modern .edui-for-webapp .edui-state-hover .edui-icon,
-.edui-modern .edui-for-webapp .edui-state-checked .edui-icon,
-.edui-modern .edui-for-webapp .edui-icon {
-    background-position: -993px -68px
-}
-
-.edui-modern .edui-for-table .edui-state-hover .edui-icon,
-.edui-modern .edui-for-table .edui-state-checked .edui-icon,
-.edui-modern .edui-for-table .edui-icon {
-    background-position: -959px -35px;
-}
-
-.edui-modern .edui-for-edittable .edui-state-hover .edui-icon,
-.edui-modern .edui-for-edittable .edui-state-checked .edui-icon,
-.edui-modern .edui-for-edittable .edui-icon {
-    background-position: -2px -69px
-}
-
-.edui-modern .edui-for-template .edui-state-hover .edui-icon,
-.edui-modern .edui-for-template .edui-state-checked .edui-icon,
-.edui-modern .edui-for-template .edui-icon {
-    background-position: -563px -68px
-}
-
-.edui-modern .edui-for-delete .edui-state-hover .edui-icon,
-.edui-modern .edui-for-delete .edui-state-checked .edui-icon,
-.edui-modern .edui-for-delete .edui-icon {
-    background-position:-597px -68px
-}
-
-.edui-modern .edui-for-highlightcode .edui-state-hover .edui-icon,
-.edui-modern .edui-for-highlightcode .edui-state-checked .edui-icon,
-.edui-modern .edui-for-highlightcode .edui-icon {
-    background-position: -728px -68px
-}
-
-.edui-modern .edui-for-deletehighlightcode .edui-state-hover .edui-icon,
-.edui-modern .edui-for-deletehighlightcode .edui-state-checked .edui-icon,
-.edui-modern .edui-for-deletehighlightcode .edui-icon {
-    background-position: -599px -68px
-}
-
-.edui-modern .edui-for-attachment .edui-state-hover .edui-icon,
-.edui-modern .edui-for-attachment .edui-state-checked .edui-icon,
-.edui-modern .edui-for-attachment .edui-icon {
-    background-position: -1030px -68px
-}
-
-.edui-modern .edui-for-edittd .edui-state-hover .edui-icon,
-.edui-modern .edui-for-edittd .edui-state-checked .edui-icon,
-.edui-modern .edui-for-edittd .edui-icon {
-    background-position: -35px -69px
-}
-
-.edui-modern .edui-for-snapscreen .edui-state-hover .edui-icon,
-.edui-modern .edui-for-snapscreen .edui-state-checked .edui-icon,
-.edui-modern .edui-for-snapscreen .edui-icon {
-    background-position: -959px -68px
-}
-
-.edui-modern .edui-for-scrawl .edui-state-hover .edui-icon,
-.edui-modern .edui-for-scrawl .edui-state-checked .edui-icon,
-.edui-modern .edui-for-scrawl .edui-icon {
-    background-position: -1323px -68px
-}
-
-.edui-modern .edui-for-background .edui-state-hover .edui-icon,
-.edui-modern .edui-for-background .edui-state-checked .edui-icon,
-.edui-modern .edui-for-background .edui-icon {
-    background-position: -1124px -68px
-}
-
-.edui-modern .edui-for-music .edui-state-hover .edui-icon,
-.edui-modern .edui-for-music .edui-state-checked .edui-icon,
-.edui-modern .edui-for-music .edui-icon {
-    background-position: 0 -36px
-}
-/*splitbutton*/
-.edui-modern .edui-toolbar .edui-splitbutton-body .edui-arrow,
-.edui-modern .edui-toolbar .edui-menubutton-body .edui-arrow {
-    background: url(../images/icons.png) -1220px -2px;
-    _background: url(../images/icons.gif) -1220px -2px;
-    height: 25px;
-    width: 9px;
-}
-
-.edui-modern .edui-toolbar .edui-splitbutton .edui-splitbutton-body,
-.edui-modern .edui-toolbar .edui-menubutton .edui-menubutton-body {
-    padding: 1px;
-    margin-top: 5px;
-}
-
-.edui-modern .edui-toolbar .edui-menubutton-body .edui-splitborder,
-.edui-modern .edui-toolbar .edui-splitbutton-body .edui-splitborder{
-    width: 1px;
-    height: 29px;
-}
-.edui-modern .edui-toolbar .edui-splitborder {
-    width: 1px;
-    height: 20px;
-}
-
-.edui-modern .edui-toolbar .edui-state-hover .edui-splitborder {
-    width: 1px;
-    border-left: 0 solid #7E8396;
-}
-
-.edui-modern .edui-toolbar .edui-state-active .edui-splitborder {
-    width: 0;
-    border-left: 1px solid #fff;
-}
-
-.edui-modern .edui-toolbar .edui-state-opened .edui-splitborder {
-    width: 1px;
-    border: 0;
-}
-
-.edui-modern .edui-toolbar .edui-splitbutton .edui-state-hover .edui-splitbutton-body,
-.edui-modern .edui-toolbar .edui-menubutton .edui-state-hover .edui-menubutton-body {
-    background-color: #70768C;
-    border: 1px solid #6a7186;
-    padding: 0;
-
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#72788E), to(#1F2949));
-    background-image: -webkit-linear-gradient(top, #72788E, #1F2949);
-    background-image: -moz-linear-gradient(top, #72788E, #1F2949);
-    background-image: -o-linear-gradient(top, #72788E, #1F2949);
-    background-image: linear-gradient(to bottom, #72788E, #1F2949);
-    border-radius: 3px;
-}
-
-.edui-modern .edui-toolbar .edui-splitbutton .edui-state-checked .edui-splitbutton-body,
-.edui-modern .edui-toolbar .edui-menubutton .edui-state-checked .edui-menubutton-body {
-    background-color: #202949;
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#72788E), to(#1F2949));
-    background-image: -webkit-linear-gradient(top, #72788E, #1F2949);
-    background-image: -moz-linear-gradient(top, #72788E, #1F2949);
-    background-image: -o-linear-gradient(top, #72788E, #1F2949);
-    background-image: linear-gradient(to bottom, #72788E, #1F2949);
-    border: 1px solid #6A7085;
-    border-radius: 3px;
-    padding: 0;
-}
-
-.edui-modern .edui-toolbar .edui-splitbutton .edui-state-active .edui-splitbutton-body,
-.edui-modern .edui-toolbar .edui-menubutton .edui-state-active .edui-menubutton-body {
-    background-color: transparent;
-    background-image: none;
-    border: 1px solid #fff;
-    border-radius: 3px;
-    padding: 0;
-}
-
-.edui-modern .edui-state-disabled .edui-arrow {
-    opacity: 0.3;
-    _filter: alpha(opacity = 30);
-}
-
-.edui-modern .edui-toolbar .edui-splitbutton .edui-state-opened .edui-splitbutton-body,
-.edui-modern .edui-toolbar .edui-menubutton .edui-state-opened .edui-menubutton-body {
-    background-color: #1D2749;
-    background-image: none;
-    border: 1px solid #fff;
-    border-top-right-radius: 3px;
-    border-top-left-radius: 3px;
-    border-bottom-left-radius: 0;
-    border-bottom-right-radius: 0;
-    padding: 0;
-}
-
-.edui-modern .edui-for-insertorderedlist .edui-bordereraser,
-.edui-modern .edui-for-lineheight .edui-bordereraser,
-.edui-modern .edui-for-rowspacingtop .edui-bordereraser,
-.edui-modern .edui-for-rowspacingbottom .edui-bordereraser,
-.edui-modern .edui-for-insertunorderedlist .edui-bordereraser {
-    background-color: white;
-}
-
-/* 解决嵌套导致的图标问题 */
-.edui-modern .edui-for-insertorderedlist .edui-popup-body .edui-icon,
-.edui-modern .edui-for-lineheight .edui-popup-body .edui-icon,
-.edui-modern .edui-for-rowspacingtop .edui-popup-body .edui-icon,
-.edui-modern .edui-for-rowspacingbottom .edui-popup-body .edui-icon,
-.edui-modern .edui-for-insertunorderedlist .edui-popup-body .edui-icon {
-    background-image: none;
-}
-
-/* 弹出菜单 */
-.edui-modern .edui-popup {
-    z-index: 3000;
-    opacity: 0.95;
-}
-
-.edui-modern .edui-popup .edui-shadow {
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    background-color: #000;
-    box-shadow: 0 0 10px #000;
-    border-radius: 5px;
-    -webkit-box-shadow:  0 0 10px #000;
-    -moz-box-shadow:  0 0 10px #000;
-    filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '3', MakeShadow = 'true', ShadowOpacity = '0.5');
-}
-
-.edui-modern .edui-for-autotypeset .edui-popup-content,
-.edui-modern .edui-for-forecolor .edui-popup-content,
-.edui-modern .edui-for-backcolor .edui-popup-content,
-.edui-modern .edui-for-insertorderedlist .edui-popup-content,
-.edui-modern .edui-for-insertunorderedlist .edui-popup-content,
-.edui-modern .edui-for-rowspacingtop .edui-popup-content,
-.edui-modern .edui-for-rowspacingbottom .edui-popup-content,
-.edui-modern .edui-for-inserttable .edui-popup-content,
-.edui-modern .edui-for-lineheight .edui-popup-content{
-    border: 1px solid white;
-    border-bottom-left-radius: 5px;
-    border-bottom-right-radius: 5px;
-    border-top-right-radius: 5px;
-    border-top-left-radius: 0;
-    background-color: #1D2749;
-    padding: 5px;
-    color: white;
-}
-.edui-modern .edui-popup-content {
-    border: 1px solid white;
-    border-radius: 5px;
-    background-color: #1D2749;
-    padding: 5px;
-    color: white;
-}
-.edui-modern .edui-popup .edui-bordereraser {
-    background-color: #1D2749;
-    height: 3px;
-}
-
-.edui-modern .edui-menu .edui-bordereraser {
-    background-color: #1D2749;
-    height: 3px;
-}
-
-.edui-modern .edui-anchor-topleft .edui-bordereraser {
-    left: 1px;
-    top: -1px;
-}
-
-.edui-modern .edui-anchor-topright .edui-bordereraser {
-    right: 1px;
-    top: -2px;
-}
-
-.edui-modern .edui-anchor-bottomleft .edui-bordereraser {
-    left: 0;
-    bottom: -6px;
-    height: 7px;
-    border-left: 1px solid gray;
-    border-right: 1px solid gray;
-}
-
-.edui-modern .edui-anchor-bottomright .edui-bordereraser {
-    right: 0;
-    bottom: -6px;
-    height: 7px;
-    border-left: 1px solid gray;
-    border-right: 1px solid gray;
-}
-
-/* 弹出对话框按钮 */
-.edui-modern .edui-dialog {
-    z-index: 2000;
-    position: absolute;
-}
-
-.edui-modern .edui-dialog-wrap {
-    margin-right: 6px;
-    margin-bottom: 6px;
-    border: 1px solid #7182a6;
-    border-radius: 5px;
-    opacity: 0.9;
-    filter: alpha(opacity = 95);
-}
-
-.edui-modern .edui-dialog-body {
-    position: relative;
-    background-color: #fff;
-    border-radius: 5px;
-    _zoom: 1;
-}
-
-.edui-modern .edui-dialog-shadow {
-    position: absolute;
-    border-radius: 5px;
-    z-index: -1;
-    left: 0;
-    top: 0;
-    width: 100%;
-    height: 100%;
-    background-color: #000;
-    box-shadow: 0 0 10px #000;
-    -webkit-box-shadow:  0 0 10px #000;
-    -moz-box-shadow:  0 0 10px #000;
-    filter: progid:DXImageTransform.Microsoft.Blur(PixelRadius = '3', MakeShadow = 'true', ShadowOpacity = '0.5');
-}
-
-.edui-modern .edui-dialog-foot {
-    *background-color: #f5f6fa;
-}
-
-.edui-modern .edui-dialog-titlebar {
-    height: 35px;
-    position: relative;
-    cursor: move;
-    *background-color: #f5f6fa;
-}
-
-.edui-modern .edui-dialog-caption {
-    display: inline-block;
-    zoom:1;
-    padding:5px 0 0 10px;
-    width: 125px;
-    height: 25px;
-    font-size: 0;
-    line-height: 0;
-    margin-top: 5px;
-    background:url("../images/dialog_title.png") no-repeat;
-}
-
-.edui-modern .edui-dialog-draghandle {
-    height: 26px;
-}
-
-.edui-modern .edui-dialog-closebutton {
-    position: absolute !important;
-    right: 0;
-    top: -3px;
-}
-
-.edui-modern .edui-dialog-closebutton .edui-button-body {
-    height: 30px;
-    _margin-top:3px;
-    width: 48px;
-    cursor: pointer;
-    border-radius:5px;
-    background: url("../images/icons-all.png") no-repeat 0 -70px
-}
-
-.edui-modern .edui-dialog-closebutton .edui-state-hover .edui-button-body {
-    background:url("../images/icons-all.png") no-repeat -59px -69px
-}
-
-.edui-modern .edui-dialog-foot {
-    height: 40px;
-}
-
-.edui-modern .edui-dialog-buttons {
-    position: absolute;
-    right: 0;
-}
-
-.edui-modern .edui-dialog-buttons .edui-button {
-    margin-right: 10px;
-    box-shadow: 3px 3px 5px #D3D6DA;
-    opacity: 0.85;
-    filter: alpha(opacity = 85);
-}
-
-.edui-modern .edui-dialog-buttons .edui-button .edui-button-body {
-    height: 27px;
-    width: 96px;
-    font-size: 12px;
-    color: #131f40;
-    line-height: 27px;
-    text-align: center;
-    cursor: default;
-    background-image: url(../images/icons-all.gif);
-    background-position:0 -35px;
-}
-
-.edui-modern .edui-dialog-buttons .edui-button .edui-state-hover .edui-button-body {
-    background-position: 0 0;
-}
-
-.edui-modern .edui-dialog iframe {
-    border: 0;
-    padding: 0;
-    margin: 0;
-    vertical-align: top;
-}
-
-.edui-modern .edui-dialog-modalmask {
-    opacity: 0.3;
-    filter: alpha(opacity = 30);
-    background-color: #000;
-    position: absolute;
-    /*z-index: 1999;*/
-}
-
-.edui-modern .edui-dialog-dragmask {
-    position: absolute;
-    /*z-index: 2001;*/
-    background-color: transparent;
-    cursor: move;
-}
-
-.edui-modern .edui-dialog-content {
-    background-color: transparent;
-    position: relative;
-}
-
-.edui-modern .dialogcontmask {
-    cursor: move;
-    visibility: hidden;
-    display: block;
-    position: absolute;
-    width: 100%;
-    height: 100%;
-    opacity: 0;
-    filter: alpha(opacity = 0);
-}
-/*link-dialog*/
-.edui-modern .edui-for-link .edui-dialog-content {
-    width: 420px;
-    height: 180px;
-    overflow: hidden;
-}
-.edui-modern .edui-for-link .edui-dialog-caption {
-    background-position:-141px -187px
-}
-/*background-dialog*/
-.edui-modern .edui-for-background .edui-dialog-content {
-    width: 440px;
-    height: 280px;
-    overflow: hidden;
-}
-.edui-modern .edui-for-background .edui-dialog-caption {
-    background-position: -6px -218px
-}
-
-/*template-dialog*/
-.edui-modern .edui-for-template .edui-dialog-content {
-    width: 630px;
-    height: 390px;
-    overflow: hidden;
-}
-.edui-modern .edui-for-template .edui-dialog-caption {
-    background-position: -1px -33px
-}
-/*scrawl-dialog*/
-.edui-modern .edui-for-scrawl .edui-dialog-content {
-    width: 515px;
-    *width: 506px;
-    height: 360px;
-}
-.edui-modern .edui-for-scrawl .edui-dialog-caption {
-    background-position: -1px -67px
-}
-/*spechars-dialog*/
-.edui-modern .edui-for-spechars .edui-dialog-content {
-    width: 700px;
-    _width:730px;
-    height: 500px;
-    *height: 570px;
-}
-.edui-modern .edui-for-spechars .edui-dialog-caption {
-    background-position: -1px -126px
-}
-/*image-dialog*/
-.edui-modern .edui-for-insertimage .edui-dialog-content {
-    width: 640px;
-    height: 390px;
-    overflow: hidden;
-}
-.edui-modern .edui-for-insertimage .edui-dialog-caption {
-    background-position: -1px -97px
-}
-/*webapp-dialog*/
-.edui-modern .edui-for-webapp .edui-dialog-content {
-    width: 560px;
-    _width: 565px;
-    height: 450px;
-    overflow: hidden;
-}
-.edui-modern .edui-for-webapp .edui-dialog-caption {
-    background-position: -1px -258px
-}
-/*image-insertframe*/
-.edui-modern .edui-for-insertframe .edui-dialog-content {
-    width: 350px;
-    height: 200px;
-    overflow: hidden;
-}
-.edui-modern .edui-for-insertframe .edui-dialog-caption {
-    background-position:-142px -32px
-}
-/*wordImage-dialog*/
-.edui-modern .edui-for-wordimage .edui-dialog-content {
-    width: 620px;
-    height: 380px;
-    overflow: hidden;
-}
-.edui-modern .edui-for-wordimage .edui-dialog-caption {
-    background-position: -1px -3px;
-}
-/*attachment-dialog*/
-.edui-modern .edui-for-attachment .edui-dialog-content {
-    width: 480px;
-    height: 360px;
-    overflow: hidden;
-}
-.edui-modern .edui-for-attachment .edui-dialog-caption {
-    background-position: -1px -185px
-}
-/*code-dialog*/
-.edui-modern .edui-for-highlightcode .edui-dialog-content {
-    width: 550px;
-    height: 360px;
-    overflow: hidden;
-}
-.edui-modern .edui-for-highlightcode .edui-dialog-caption {
-    background-position: -142px -3px
-}
-/*map-dialog*/
-.edui-modern .edui-for-map .edui-dialog-content {
-    width: 550px;
-    height: 400px;
-}
-.edui-modern .edui-for-map .edui-dialog-caption {
-    background-position: -142px -124px
-}
-/*gmap-dialog*/
-.edui-modern .edui-for-gmap .edui-dialog-content {
-    width: 550px;
-    height: 400px;
-}
-.edui-modern .edui-for-gmap .edui-dialog-caption {
-    background-position: -1px -153px
-}
-/*video-dialog*/
-.edui-modern .edui-for-insertvideo .edui-dialog-content {
-    width: 590px;
-    height: 410px;
-}
-.edui-modern .edui-for-insertvideo .edui-dialog-caption {
-    background-position: -1px -3px;
-}
-/*anchor-dialog*/
-.edui-modern .edui-for-anchor .edui-dialog-content {
-    width: 320px;
-    height: 60px;
-    overflow: hidden;
-}
-.edui-modern .edui-for-anchor .edui-dialog-caption {
-    background-position: -139px -221px
-}
-/*searchreplace-dialog*/
-.edui-modern .edui-for-searchreplace .edui-dialog-content {
-    width: 400px;
-    height: 180px;
-}
-.edui-modern .edui-for-searchreplace .edui-dialog-caption {
-    background-position: -141px -62px
-}
-/*help-dialog*/
-.edui-modern .edui-for-help .edui-dialog-content {
-    width: 400px;
-    height: 420px;
-}
-.edui-modern .edui-for-help .edui-dialog-caption {
-    background-position: -139px -260px
-}
-/*table-dialog*/
-.edui-modern .edui-for-inserttable .edui-dialog-content {
-    width: 510px;
-    height: 275px;
-}
-.edui-modern .edui-for-inserttable .edui-dialog-caption {
-    background-position:-142px -95px
-}
-/*td-dialog*/
-.edui-modern .edui-for-edittd .edui-dialog-content {
-    width: 220px;
-    height: 115px;
-}
-.edui-modern .edui-for-edittd .edui-dialog-caption {
-    background-position: -1px -300px
-}
-/*snapscreen-dialog*/
-.edui-modern .edui-for-snapscreen .edui-dialog-content {
-    width: 400px;
-    height: 220px;
-}
-.edui-modern .edui-for-snapscreen .edui-dialog-caption {
-    background-position: -138px -304px
-}
-/*music-dialog*/
-.edui-modern .edui-for-music .edui-dialog-content {
-    width: 515px;
-    height: 360px;
-}
-.edui-modern .edui-for-music .edui-dialog-caption {
-    background-position: -132px -150px
-}
-/*段落弹出菜单*/
-.edui-modern .edui-for-paragraph .edui-listitem-label {
-    font-family: Tahoma, Verdana, Arial, Helvetica;
-    color: #fff;
-}
-
-.edui-modern .edui-for-paragraph .edui-listitem-label .edui-for-p {
-    font-size: 22px;
-    line-height: 27px;
-}
-
-.edui-modern .edui-for-paragraph .edui-listitem-label .edui-for-h1 {
-    font-weight: bolder;
-    font-size: 32px;
-    line-height: 36px;
-}
-
-.edui-modern .edui-for-paragraph .edui-listitem-label .edui-for-h2 {
-    font-weight: bolder;
-    font-size: 27px;
-    line-height: 29px;
-}
-
-.edui-modern .edui-for-paragraph .edui-listitem-label .edui-for-h3 {
-    font-weight: bolder;
-    font-size: 19px;
-    line-height: 23px;
-}
-
-.edui-modern .edui-for-paragraph .edui-listitem-label .edui-for-h4 {
-    font-weight: bolder;
-    font-size: 16px;
-    line-height: 19px
-}
-
-.edui-modern .edui-for-paragraph .edui-listitem-label .edui-for-h5 {
-    font-weight: bolder;
-    font-size: 13px;
-    line-height: 16px;
-}
-
-.edui-modern .edui-for-paragraph .edui-listitem-label .edui-for-h6 {
-    font-weight: bolder;
-    font-size: 12px;
-    line-height: 14px;
-}
-/* 表格弹出菜单 */
-.edui-modern .edui-tablepicker .edui-infoarea {
-    height: 14px;
-    line-height: 14px;
-    font-size: 12px;
-    width: 220px;
-    margin-bottom: 3px;
-    clear: both;
-}
-
-.edui-modern .edui-tablepicker .edui-infoarea .edui-label {
-    float: left;
-}
-
-.edui-modern .edui-dialog-buttons .edui-label {
-    line-height: 27px;
-}
-
-.edui-modern .edui-tablepicker .edui-infoarea .edui-clickable {
-    float: right;
-}
-
-.edui-modern .edui-tablepicker .edui-pickarea {
-    background: url("../images/unhighlighted.gif") repeat;
-    height: 220px;
-    width: 220px;
-}
-
-.edui-modern .edui-tablepicker .edui-pickarea .edui-overlay {
-    background: url("../images/highlighted.gif") repeat;
-}
-
-/* 颜色弹出菜单 */
-.edui-modern .edui-colorpicker-topbar {
-    height: 27px;
-    width: 200px;
-    /*border-bottom: 1px gray dashed;*/
-}
-
-.edui-modern .edui-colorpicker-preview {
-    height: 20px;
-    border: 1px inset black;
-    margin-left: 1px;
-    width: 128px;
-    float: left;
-}
-
-.edui-modern .edui-colorpicker-nocolor {
-    float: right;
-    margin-right: 1px;
-    font-size: 12px;
-    line-height: 14px;
-    height: 14px;
-    border: 1px solid #333;
-    padding: 3px 5px;
-    cursor: pointer;
-}
-
-.edui-modern .edui-colorpicker-tablefirstrow {
-    height: 30px;
-}
-
-.edui-modern .edui-colorpicker-colorcell {
-    width: 14px;
-    height: 14px;
-    display: block;
-    margin: 0;
-    cursor: pointer;
-}
-
-.edui-modern .edui-colorpicker-colorcell:hover {
-    width: 14px;
-    height: 14px;
-    margin: 0;
-}
-/*自动排版弹出菜单*/
-.edui-modern .edui-autotypesetpicker .edui-autotypesetpicker-body {
-    font-size: 12px;
-    margin-bottom: 3px;
-    clear: both;
-}
-
-.edui-modern .edui-autotypesetpicker-body table {
-    border-collapse: separate;
-    border-spacing: 2px;
-}
-
-.edui-modern .edui-autotypesetpicker-body td {
-    font-size: 12px;
-}
-
-.edui-modern .edui-autotypesetpicker-body td input {
-    margin: 3px 3px 3px 4px;
-    *margin: 1px 0 0 0;
-}
-/*分隔线*/
-.edui-modern .edui-toolbar .edui-separator {
-    width: 2px;
-    height: 20px;
-    margin:7px 6px 2px;
-    background: url(../images/icons.png) -180px 0;
-    _background: url(../images/icons.gif) -180px 0;
-}
-
-/*颜色按钮 */
-.edui-modern .edui-toolbar .edui-colorbutton .edui-colorlump {
-    position: absolute;
-    overflow: hidden;
-    bottom: 1px;
-    left: 3px;
-    width: 25px;
-    height: 4px;
-}
-/*表情按钮及弹出菜单*/
-/*去除了表情的下拉箭头*/
-.edui-modern .edui-for-emotion .edui-icon {
-    background-position: -101px -35px;
-}
-
-.edui-modern .edui-for-emotion .edui-popup-content {
-    position: relative;
-    z-index: 555;
-    border: 1px solid #7182A6;
-    background-color: #F0F2F7;
-}
-
-.edui-modern .edui-for-emotion .edui-popup-content iframe {
-    width: 600px;
-    height: 380px;
-    overflow: hidden;
-}
-
-.edui-modern .edui-for-emotion .edui-splitborder {
-    display: none
-}
-
-.edui-modern .edui-for-emotion .edui-splitbutton-body .edui-arrow {
-    width: 0
-}
-/*contextmenu*/
-.edui-modern .edui-hassubmenu .edui-arrow {
-    height: 20px;
-    width: 20px;
-    float: right;
-    background: url("../images/icons-all.png") no-repeat 10px -233px;
-}
-
-.edui-modern .edui-menu-body .edui-menuitem {
-    padding: 1px;
-}
-
-.edui-modern .edui-menuseparator {
-    margin: 2px 0;
-    height: 1px;
-    overflow: hidden;
-}
-
-.edui-modern .edui-menuseparator-inner {
-    border-bottom: 1px solid #e2e3e3;
-    margin-left: 29px;
-    margin-right: 1px;
-}
-
-.edui-modern .edui-menu-body .edui-state-hover {
-    padding: 0 !important;
-    background-color: #70768C;
-    border: 1px solid #7E8396;
-
-    background-image: -webkit-gradient(linear, left top, left bottom, from(#72788E), to(#1F2949));
-    background-image: -webkit-linear-gradient(top, #72788E, #1F2949);
-    background-image: -moz-linear-gradient(top, #72788E, #1F2949);
-    background-image: -o-linear-gradient(top, #72788E, #1F2949);
-    background-image: linear-gradient(to bottom, #72788E, #1F2949);
-    border-radius: 3px;
-}

+ 0 - 128
DjangoUeditor/static/ueditor/themes/modern/dialogbase.css

@@ -1,128 +0,0 @@
-/*弹出对话框页面样式组件
-*/
-
-/*reset
-*/
-html, body, div, span, applet, object, iframe,
-h1, h2, h3, h4, h5, h6, p, blockquote, pre,
-a, abbr, acronym, address, big, cite, code,
-del, dfn, em, font, img, ins, kbd, q, s, samp,
-small, strike, strong, sub, sup, tt, var,
-b, u, i, center,
-dl, dt, dd, ol, ul, li,
-fieldset, form, label, legend,
-table, caption, tbody, tfoot, thead, tr, th, td {
-    margin: 0;
-    padding: 0;
-    outline: 0;
-    font-size: 100%;
-}
-
-body {
-    line-height: 1;
-}
-
-ol, ul {
-    list-style: none;
-}
-
-blockquote, q {
-    quotes: none;
-}
-
-ins {
-    text-decoration: none;
-}
-
-del {
-    text-decoration: line-through;
-}
-
-table {
-    border-collapse: collapse;
-    border-spacing: 0;
-}
-
-/*module
-*/
-body {
-    font: 12px/1.5 "Microsoft Yahei", "微软雅黑", Tahoma, Arial, Helvetica, STHeiti;
-    color: #131f40
-}
-
-/*tab*/
-.tabhead {
-    position: relative;
-    z-index: 10;
-    margin-left: 16px;
-}
-
-.tabhead span {
-    display: inline-block;
-    position: relative;
-    height: 26px;
-    line-height: 26px;
-    width: 87px;
-    margin-left: -16px;
-    text-align: center;
-    cursor: pointer;
-    background-image: url(images/dialog-title-bg.png);
-    background-position: 0 0;
-    z-index: 1
-}
-.tabhead span.focus {
-    background-position:  0 -42px;
-    top:1px;
-    z-index: 100;
-}
-
-.tabbody {
-    position: relative;
-    top: -1px;
-    margin: 0 auto;
-    border: 1px solid #60739b;
-    box-shadow: 3px 3px 5px #D3D6DA;
-    background-color: #fff;
-}
-
-/*button*/
-a.button {
-    display: block;
-    text-decoration: none;
-    height: 27px;
-    width: 96px;
-    font-size: 12px;
-    color: #131f40;
-    line-height: 27px;
-    text-align: center;
-    cursor: default;
-    background-image: url(images/icons-all.gif);
-    background-position:0 -35px;
-}
-
-a.button:hover {
-    background-position: 0 0;
-}
-
-/*滚动条*/
-::-webkit-scrollbar-track-piece{
-    background-color:#fff;
-    -webkit-border-radius:0;
-}
-::-webkit-scrollbar{
-    width:10px;
-    height:8px;
-}
-::-webkit-scrollbar-thumb{
-    height:50px;
-    background-color:#999;
-    -webkit-border-radius:5px;
-    outline:2px solid #fff;
-    outline-offset:-2px;
-    border: 2px solid #fff;
-}
-::-webkit-scrollbar-thumb:hover{
-    height:50px;
-    background-color:#9f9f9f;
-    -webkit-border-radius:4px;
-}

BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/anchor.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/arrow.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/bottom.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/button-bg.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/cancelbutton.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/cursor_h.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/cursor_v.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/dialog-title-bg.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/dialog_title.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/filescan.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/highlighted.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/icons-all.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/icons-all.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/icons-checked.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/icons-checked.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/icons-hover.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/icons-hover.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/icons.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/icons.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/lock.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/neweditor-tab-bg.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/pagebreak.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/scale.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/spacer.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/sparator_v.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/toolbar-bg.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/unhighlighted.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/upload.png


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/videologo.gif


BIN=BIN
DjangoUeditor/static/ueditor/themes/modern/images/word.gif


+ 0 - 215
DjangoUeditor/static/ueditor/third-party/swfupload/fileprogress.js

@@ -1,215 +0,0 @@
-/*
-	A simple class for displaying file information and progress
-	Note: This is a demonstration only and not part of SWFUpload.
-	Note: Some have had problems adapting this class in IE7. It may not be suitable for your application.
-*/
-
-// Constructor
-// file is a SWFUpload file object
-// targetID is the HTML element id attribute that the FileProgress HTML structure will be added to.
-// Instantiating a new FileProgress object with an existing file will reuse/update the existing DOM elements
-function FileProgress(file, targetID) {
-	this.fileProgressID = file.id;
-
-	this.opacity = 100;
-	this.height = 0;
-	
-
-	this.fileProgressWrapper = document.getElementById(this.fileProgressID);
-	if (!this.fileProgressWrapper) {
-		this.fileProgressWrapper = document.createElement("div");
-		this.fileProgressWrapper.className = "progressWrapper";
-		this.fileProgressWrapper.id = this.fileProgressID;
-
-		this.fileProgressElement = document.createElement("div");
-		this.fileProgressElement.className = "progressContainer";
-
-		var progressCancel = document.createElement("a");
-		progressCancel.className = "progressCancel";
-		progressCancel.href = "#";
-		progressCancel.style.visibility = "hidden";
-		progressCancel.appendChild(document.createTextNode(" "));
-
-        //by ue
-        progressCancel.onclick = function(){
-            alert(1);
-        }
-
-		var progressText = document.createElement("div");
-		progressText.className = "progressName";
-		progressText.appendChild(document.createTextNode(file.name));
-
-		var progressBar = document.createElement("div");
-		progressBar.className = "progressBarInProgress";
-
-		var progressStatus = document.createElement("div");
-		progressStatus.className = "progressBarStatus";
-		progressStatus.innerHTML = "&nbsp;";
-
-		this.fileProgressElement.appendChild(progressCancel);
-		this.fileProgressElement.appendChild(progressText);
-		this.fileProgressElement.appendChild(progressStatus);
-		this.fileProgressElement.appendChild(progressBar);
-
-		this.fileProgressWrapper.appendChild(this.fileProgressElement);
-
-		document.getElementById(targetID).appendChild(this.fileProgressWrapper);
-	} else {
-		this.fileProgressElement = this.fileProgressWrapper.firstChild;
-		this.reset();
-	}
-
-	this.height = this.fileProgressWrapper.offsetHeight;
-	this.setTimer(null);
-
-
-}
-
-FileProgress.prototype.setTimer = function (timer) {
-	this.fileProgressElement["FP_TIMER"] = timer;
-};
-FileProgress.prototype.getTimer = function (timer) {
-	return this.fileProgressElement["FP_TIMER"] || null;
-};
-
-FileProgress.prototype.reset = function () {
-	this.fileProgressElement.className = "progressContainer";
-
-	this.fileProgressElement.childNodes[2].innerHTML = "&nbsp;";
-	this.fileProgressElement.childNodes[2].className = "progressBarStatus";
-	
-	this.fileProgressElement.childNodes[3].className = "progressBarInProgress";
-	this.fileProgressElement.childNodes[3].style.width = "0%";
-	
-	this.appear();	
-};
-
-FileProgress.prototype.setProgress = function (percentage) {
-	this.fileProgressElement.className = "progressContainer green";
-	this.fileProgressElement.childNodes[3].className = "progressBarInProgress";
-	this.fileProgressElement.childNodes[3].style.width = percentage + "%";
-
-	this.appear();	
-};
-FileProgress.prototype.setComplete = function () {
-	this.fileProgressElement.className = "progressContainer blue";
-	this.fileProgressElement.childNodes[3].className = "progressBarComplete";
-	this.fileProgressElement.childNodes[3].style.width = "";
-
-	var oSelf = this;
-	this.setTimer(setTimeout(function () {
-		//oSelf.disappear();  //隐藏已完成列表
-	}, 10000));
-};
-FileProgress.prototype.setError = function () {
-	this.fileProgressElement.className = "progressContainer red";
-	this.fileProgressElement.childNodes[3].className = "progressBarError";
-	this.fileProgressElement.childNodes[3].style.width = "";
-    //edir by ue
-	var oSelf = this;
-	this.setTimer(setTimeout(function () {
-		//oSelf.disappear();
-	}, 3000));
-};
-FileProgress.prototype.setCancelled = function () {
-	this.fileProgressElement.className = "progressContainer";
-	this.fileProgressElement.childNodes[3].className = "progressBarError";
-	this.fileProgressElement.childNodes[3].style.width = "";
-
-	var oSelf = this;
-	this.setTimer(setTimeout(function () {
-		oSelf.disappear();
-	}, 1000));
-};
-FileProgress.prototype.setStatus = function (status) {
-	this.fileProgressElement.childNodes[2].innerHTML = status;
-};
-
-// Show/Hide the cancel button
-FileProgress.prototype.toggleCancel = function (show, swfUploadInstance,message) {
-    //edit by ue
-    var cancelBtn = this.fileProgressElement.childNodes[0];
-	cancelBtn.style.visibility = show ? "visible" : "hidden";
-    cancelBtn.title = message?message:"取消上传";
-	if (swfUploadInstance) {
-        //edit by ue
-        var me = this;
-		var fileID = me.fileProgressID,
-            e = me.fileProgressElement;
-        e.children[0].onclick = function () {
-            me.disappear();
-			swfUploadInstance.cancelUpload(fileID);
-			return false;
-		};
-	}
-};
-
-FileProgress.prototype.appear = function () {
-	if (this.getTimer() !== null) {
-		clearTimeout(this.getTimer());
-		this.setTimer(null);
-	}
-	
-	if (this.fileProgressWrapper.filters) {
-		try {
-			this.fileProgressWrapper.filters.item("DXImageTransform.Microsoft.Alpha").opacity = 100;
-		} catch (e) {
-			// If it is not set initially, the browser will throw an error.  This will set it if it is not set yet.
-			this.fileProgressWrapper.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=100)";
-		}
-	} else {
-		this.fileProgressWrapper.style.opacity = 1;
-	}
-		
-	this.fileProgressWrapper.style.height = "";
-	
-	this.height = this.fileProgressWrapper.offsetHeight;
-	this.opacity = 100;
-	this.fileProgressWrapper.style.display = "";
-	
-};
-
-// Fades out and clips away the FileProgress box.
-FileProgress.prototype.disappear = function () {
-
-	var reduceOpacityBy = 15;
-	var reduceHeightBy = 4;
-	var rate = 30;	// 15 fps
-
-	if (this.opacity > 0) {
-		this.opacity -= reduceOpacityBy;
-		if (this.opacity < 0) {
-			this.opacity = 0;
-		}
-
-		if (this.fileProgressWrapper.filters) {
-			try {
-				this.fileProgressWrapper.filters.item("DXImageTransform.Microsoft.Alpha").opacity = this.opacity;
-			} catch (e) {
-				// If it is not set initially, the browser will throw an error.  This will set it if it is not set yet.
-				this.fileProgressWrapper.style.filter = "progid:DXImageTransform.Microsoft.Alpha(opacity=" + this.opacity + ")";
-			}
-		} else {
-			this.fileProgressWrapper.style.opacity = this.opacity / 100;
-		}
-	}
-
-	if (this.height > 0) {
-		this.height -= reduceHeightBy;
-		if (this.height < 0) {
-			this.height = 0;
-		}
-
-		this.fileProgressWrapper.style.height = this.height + "px";
-	}
-
-	if (this.height > 0 || this.opacity > 0) {
-		var oSelf = this;
-		this.setTimer(setTimeout(function () {
-			oSelf.disappear();
-		}, rate));
-	} else {
-		this.fileProgressWrapper.style.display = "none";
-		this.setTimer(null);
-	}
-};

+ 0 - 53
DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.cookies.js

@@ -1,53 +0,0 @@
-/*
-	Cookie Plug-in
-	
-	This plug in automatically gets all the cookies for this site and adds them to the post_params.
-	Cookies are loaded only on initialization.  The refreshCookies function can be called to update the post_params.
-	The cookies will override any other post params with the same name.
-*/
-
-var SWFUpload;
-if (typeof(SWFUpload) === "function") {
-	SWFUpload.prototype.initSettings = function (oldInitSettings) {
-		return function (userSettings) {
-			if (typeof(oldInitSettings) === "function") {
-				oldInitSettings.call(this, userSettings);
-			}
-			
-			this.refreshCookies(false);	// The false parameter must be sent since SWFUpload has not initialzed at this point
-		};
-	}(SWFUpload.prototype.initSettings);
-	
-	// refreshes the post_params and updates SWFUpload.  The sendToFlash parameters is optional and defaults to True
-	SWFUpload.prototype.refreshCookies = function (sendToFlash) {
-		if (sendToFlash === undefined) {
-			sendToFlash = true;
-		}
-		sendToFlash = !!sendToFlash;
-		
-		// Get the post_params object
-		var postParams = this.settings.post_params;
-		
-		// Get the cookies
-		var i, cookieArray = document.cookie.split(';'), caLength = cookieArray.length, c, eqIndex, name, value;
-		for (i = 0; i < caLength; i++) {
-			c = cookieArray[i];
-			
-			// Left Trim spaces
-			while (c.charAt(0) === " ") {
-				c = c.substring(1, c.length);
-			}
-			eqIndex = c.indexOf("=");
-			if (eqIndex > 0) {
-				name = c.substring(0, eqIndex);
-				value = c.substring(eqIndex + 1);
-				postParams[name] = value;
-			}
-		}
-		
-		if (sendToFlash) {
-			this.setPostParams(postParams);
-		}
-	};
-
-}

A diferenza do arquivo foi suprimida porque é demasiado grande
+ 0 - 1126
DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.js


+ 0 - 96
DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.proxy.js

@@ -1,96 +0,0 @@
-/*
-	Proxy Plug-in
-	
-	Features:
-		Times an upload to see if it appear suspiciously fast which might indicate a proxy server or anti-virus suite intercepting the upload. 
-		If the upload seems too fast an uploadError event is fired with PROXY error code after the final uploadProgress event.
-		
-		Adds a SWFUpload setting allowing you to tweak the bytes/s for triggering the error:
-			proxy_detect_threshold : 256000
-			
-		Adds an UPLOAD_ERROR entry called PROXY:
-			function uploadError(file, errorCode, message) {
-				if (errorCode === SWFUpload.UPLOAD_ERROR.PROXY) {
-					alert("You might have a proxy!");
-				}
-			}
-	*/
-
-var SWFUpload;
-if (typeof(SWFUpload) === "function") {
-	SWFUpload.proxyDetect = {};
-	SWFUpload.UPLOAD_ERROR.PROXY = -30300;
-	
-	SWFUpload.prototype.initSettings = (function (oldInitSettings) {
-		return function (userSettings) {
-			if (typeof(oldInitSettings) === "function") {
-				oldInitSettings.call(this, userSettings);
-			}
-			
-			this.ensureDefault = function (settingName, defaultValue) {
-				this.settings[settingName] = (userSettings[settingName] == undefined) ? defaultValue : userSettings[settingName];
-			};
-
-			// List used to keep the speed stats for the files we are tracking
-			this.proxyDetectFileStartTimes = {};
-			this.proxyDetectSettings = {};
-
-			this.ensureDefault("proxy_detect_threshold", 256000); // Default is 250 KB per second
-			
-			this.proxyDetectSettings.user_upload_progress_handler = this.settings.upload_progress_handler;
-			this.proxyDetectSettings.user_upload_complete_handler = this.settings.upload_complete_handler;
-			
-			this.settings.upload_progress_handler = SWFUpload.proxyDetect.uploadProgressHandler;
-			this.settings.upload_complete_handler = SWFUpload.proxyDetect.uploadCompleteHandler;
-			
-			
-			delete this.ensureDefault;
-		};
-	}(SWFUpload.prototype.initSettings));
-
-	SWFUpload.proxyDetect.uploadProgressHandler = function (file, bytesComplete, bytesTotal) {
-		var ex1 = null, time, differenceMS, bps;
-		try {
-			if (typeof this.proxyDetectSettings.user_upload_progress_handler === "function") {
-				this.proxyDetectSettings.user_upload_progress_handler.call(this, file, bytesComplete, bytesTotal);
-			}
-		} catch (ex1) { }
-			
-		
-		if (bytesComplete === 0) {
-			this.proxyDetectFileStartTimes[file.ID] = new Date();
-
-		} else if (bytesComplete === bytesTotal) {
-			try {
-				// Calculate the Bps and decide if we should trigger the error
-				time = new Date();
-				differenceMS = time.getTime() - this.proxyDetectFileStartTimes[file.ID].getTime();
-				
-				if (differenceMS === 0) {
-					differenceMS = 1;
-				}
-				
-				bps = bytesTotal / (differenceMS * 1000);
-				if (bps > parseInt(this.settings.proxy_detect_threshold, 10)) {
-					this.queueEvent("upload_error_handler", [file, SWFUpload.UPLOAD_ERROR.PROXY, bps]);
-				}					
-			} catch (ex) {
-			}
-		}
-		
-		if (ex1 !== null) {
-			throw(ex1);
-		}
-	};
-	
-	SWFUpload.proxyDetect.uploadCompleteHandler = function (file) {
-		try {
-			delete this.proxyDetectFileStartTimes[file.ID];
-		} catch (ex) {
-		}
-		
-		if (typeof this.proxyDetectSettings.user_upload_progress_handler === "function") {
-			return this.proxyDetectSettings.user_upload_progress_handler.call(this, file);
-		}
-	};	
-}

+ 0 - 98
DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.queue.js

@@ -1,98 +0,0 @@
-/*
-	Queue Plug-in
-	
-	Features:
-		*Adds a cancelQueue() method for cancelling the entire queue.
-		*All queued files are uploaded when startUpload() is called.
-		*If false is returned from uploadComplete then the queue upload is stopped.
-		 If false is not returned (strict comparison) then the queue upload is continued.
-		*Adds a QueueComplete event that is fired when all the queued files have finished uploading.
-		 Set the event handler with the queue_complete_handler setting.
-		
-	*/
-
-var SWFUpload;
-if (typeof(SWFUpload) === "function") {
-	SWFUpload.queue = {};
-	
-	SWFUpload.prototype.initSettings = (function (oldInitSettings) {
-		return function (userSettings) {
-			if (typeof(oldInitSettings) === "function") {
-				oldInitSettings.call(this, userSettings);
-			}
-			
-			this.queueSettings = {};
-			
-			this.queueSettings.queue_cancelled_flag = false;
-			this.queueSettings.queue_upload_count = 0;
-			
-			this.queueSettings.user_upload_complete_handler = this.settings.upload_complete_handler;
-			this.queueSettings.user_upload_start_handler = this.settings.upload_start_handler;
-			this.settings.upload_complete_handler = SWFUpload.queue.uploadCompleteHandler;
-			this.settings.upload_start_handler = SWFUpload.queue.uploadStartHandler;
-			
-			this.settings.queue_complete_handler = userSettings.queue_complete_handler || null;
-		};
-	})(SWFUpload.prototype.initSettings);
-
-	SWFUpload.prototype.startUpload = function (fileID) {
-		this.queueSettings.queue_cancelled_flag = false;
-		this.callFlash("StartUpload", [fileID]);
-	};
-
-	SWFUpload.prototype.cancelQueue = function () {
-		this.queueSettings.queue_cancelled_flag = true;
-		this.stopUpload();
-		
-		var stats = this.getStats();
-		while (stats.files_queued > 0) {
-			this.cancelUpload();
-			stats = this.getStats();
-		}
-	};
-	
-	SWFUpload.queue.uploadStartHandler = function (file) {
-		var returnValue;
-		if (typeof(this.queueSettings.user_upload_start_handler) === "function") {
-			returnValue = this.queueSettings.user_upload_start_handler.call(this, file);
-		}
-		
-		// To prevent upload a real "FALSE" value must be returned, otherwise default to a real "TRUE" value.
-		returnValue = (returnValue === false) ? false : true;
-		
-		this.queueSettings.queue_cancelled_flag = !returnValue;
-
-		return returnValue;
-	};
-	
-	SWFUpload.queue.uploadCompleteHandler = function (file) {
-		var user_upload_complete_handler = this.queueSettings.user_upload_complete_handler;
-		var continueUpload;
-		
-		if (file.filestatus === SWFUpload.FILE_STATUS.COMPLETE) {
-			this.queueSettings.queue_upload_count++;
-		}
-
-		if (typeof(user_upload_complete_handler) === "function") {
-			continueUpload = (user_upload_complete_handler.call(this, file) === false) ? false : true;
-		} else if (file.filestatus === SWFUpload.FILE_STATUS.QUEUED) {
-			// If the file was stopped and re-queued don't restart the upload
-			continueUpload = false;
-		} else {
-			continueUpload = true;
-		}
-		
-		if (continueUpload) {
-			var stats = this.getStats();
-			if (stats.files_queued > 0 && this.queueSettings.queue_cancelled_flag === false) {
-				this.startUpload();
-			} else if (this.queueSettings.queue_cancelled_flag === false) {
-				this.queueEvent("queue_complete_handler", [this.queueSettings.queue_upload_count]);
-				this.queueSettings.queue_upload_count = 0;
-			} else {
-				this.queueSettings.queue_cancelled_flag = false;
-				this.queueSettings.queue_upload_count = 0;
-			}
-		}
-	};
-}

+ 0 - 346
DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.speed.js

@@ -1,346 +0,0 @@
-/*
-	Speed Plug-in
-	
-	Features:
-		*Adds several properties to the 'file' object indicated upload speed, time left, upload time, etc.
-			- currentSpeed -- String indicating the upload speed, bits per second
-			- averageSpeed -- Overall average upload speed, bits per second
-			- movingAverageSpeed -- Speed over averaged over the last several measurements, bits per second
-			- timeRemaining -- Estimated remaining upload time in seconds
-			- timeElapsed -- Number of seconds passed for this upload
-			- percentUploaded -- Percentage of the file uploaded (0 to 100)
-			- sizeUploaded -- Formatted size uploaded so far, bytes
-		
-		*Adds setting 'moving_average_history_size' for defining the window size used to calculate the moving average speed.
-		
-		*Adds several Formatting functions for formatting that values provided on the file object.
-			- SWFUpload.speed.formatBPS(bps) -- outputs string formatted in the best units (Gbps, Mbps, Kbps, bps)
-			- SWFUpload.speed.formatTime(seconds) -- outputs string formatted in the best units (x Hr y M z S)
-			- SWFUpload.speed.formatSize(bytes) -- outputs string formatted in the best units (w GB x MB y KB z B )
-			- SWFUpload.speed.formatPercent(percent) -- outputs string formatted with a percent sign (x.xx %)
-			- SWFUpload.speed.formatUnits(baseNumber, divisionArray, unitLabelArray, fractionalBoolean)
-				- Formats a number using the division array to determine how to apply the labels in the Label Array
-				- factionalBoolean indicates whether the number should be returned as a single fractional number with a unit (speed)
-				    or as several numbers labeled with units (time)
-	*/
-
-var SWFUpload;
-if (typeof(SWFUpload) === "function") {
-	SWFUpload.speed = {};
-	
-	SWFUpload.prototype.initSettings = (function (oldInitSettings) {
-		return function (userSettings) {
-			if (typeof(oldInitSettings) === "function") {
-				oldInitSettings.call(this, userSettings);
-			}
-			
-			this.ensureDefault = function (settingName, defaultValue) {
-				this.settings[settingName] = (userSettings[settingName] == undefined) ? defaultValue : userSettings[settingName];
-			};
-
-			// List used to keep the speed stats for the files we are tracking
-			this.fileSpeedStats = {};
-			this.speedSettings = {};
-
-			this.ensureDefault("moving_average_history_size", "10");
-			
-			this.speedSettings.user_file_queued_handler = this.settings.file_queued_handler;
-			this.speedSettings.user_file_queue_error_handler = this.settings.file_queue_error_handler;
-			this.speedSettings.user_upload_start_handler = this.settings.upload_start_handler;
-			this.speedSettings.user_upload_error_handler = this.settings.upload_error_handler;
-			this.speedSettings.user_upload_progress_handler = this.settings.upload_progress_handler;
-			this.speedSettings.user_upload_success_handler = this.settings.upload_success_handler;
-			this.speedSettings.user_upload_complete_handler = this.settings.upload_complete_handler;
-			
-			this.settings.file_queued_handler = SWFUpload.speed.fileQueuedHandler;
-			this.settings.file_queue_error_handler = SWFUpload.speed.fileQueueErrorHandler;
-			this.settings.upload_start_handler = SWFUpload.speed.uploadStartHandler;
-			this.settings.upload_error_handler = SWFUpload.speed.uploadErrorHandler;
-			this.settings.upload_progress_handler = SWFUpload.speed.uploadProgressHandler;
-			this.settings.upload_success_handler = SWFUpload.speed.uploadSuccessHandler;
-			this.settings.upload_complete_handler = SWFUpload.speed.uploadCompleteHandler;
-			
-			delete this.ensureDefault;
-		};
-	})(SWFUpload.prototype.initSettings);
-
-	
-	SWFUpload.speed.fileQueuedHandler = function (file) {
-		if (typeof this.speedSettings.user_file_queued_handler === "function") {
-			file = SWFUpload.speed.extendFile(file);
-			
-			return this.speedSettings.user_file_queued_handler.call(this, file);
-		}
-	};
-	
-	SWFUpload.speed.fileQueueErrorHandler = function (file, errorCode, message) {
-		if (typeof this.speedSettings.user_file_queue_error_handler === "function") {
-			file = SWFUpload.speed.extendFile(file);
-			
-			return this.speedSettings.user_file_queue_error_handler.call(this, file, errorCode, message);
-		}
-	};
-
-	SWFUpload.speed.uploadStartHandler = function (file) {
-		if (typeof this.speedSettings.user_upload_start_handler === "function") {
-			file = SWFUpload.speed.extendFile(file, this.fileSpeedStats);
-			return this.speedSettings.user_upload_start_handler.call(this, file);
-		}
-	};
-	
-	SWFUpload.speed.uploadErrorHandler = function (file, errorCode, message) {
-		file = SWFUpload.speed.extendFile(file, this.fileSpeedStats);
-		SWFUpload.speed.removeTracking(file, this.fileSpeedStats);
-
-		if (typeof this.speedSettings.user_upload_error_handler === "function") {
-			return this.speedSettings.user_upload_error_handler.call(this, file, errorCode, message);
-		}
-	};
-	SWFUpload.speed.uploadProgressHandler = function (file, bytesComplete, bytesTotal) {
-		this.updateTracking(file, bytesComplete);
-		file = SWFUpload.speed.extendFile(file, this.fileSpeedStats);
-
-		if (typeof this.speedSettings.user_upload_progress_handler === "function") {
-			return this.speedSettings.user_upload_progress_handler.call(this, file, bytesComplete, bytesTotal);
-		}
-	};
-	
-	SWFUpload.speed.uploadSuccessHandler = function (file, serverData) {
-		if (typeof this.speedSettings.user_upload_success_handler === "function") {
-			file = SWFUpload.speed.extendFile(file, this.fileSpeedStats);
-			return this.speedSettings.user_upload_success_handler.call(this, file, serverData);
-		}
-	};
-	SWFUpload.speed.uploadCompleteHandler = function (file) {
-		file = SWFUpload.speed.extendFile(file, this.fileSpeedStats);
-		SWFUpload.speed.removeTracking(file, this.fileSpeedStats);
-
-		if (typeof this.speedSettings.user_upload_complete_handler === "function") {
-			return this.speedSettings.user_upload_complete_handler.call(this, file);
-		}
-	};
-	
-	// Private: extends the file object with the speed plugin values
-	SWFUpload.speed.extendFile = function (file, trackingList) {
-		var tracking;
-		
-		if (!file) {
-			return file;
-		}
-		
-		if (trackingList) {
-			tracking = trackingList[file.id];
-		}
-		
-		if (tracking) {
-			file.currentSpeed = tracking.currentSpeed;
-			file.averageSpeed = tracking.averageSpeed;
-			file.movingAverageSpeed = tracking.movingAverageSpeed;
-			file.timeRemaining = tracking.timeRemaining;
-			file.timeElapsed = tracking.timeElapsed;
-			file.percentUploaded = tracking.percentUploaded;
-			file.sizeUploaded = tracking.bytesUploaded;
-
-		} else {
-			file.currentSpeed = 0;
-			file.averageSpeed = 0;
-			file.movingAverageSpeed = 0;
-			file.timeRemaining = 0;
-			file.timeElapsed = 0;
-			file.percentUploaded = 0;
-			file.sizeUploaded = 0;
-		}
-		
-		return file;
-	};
-	
-	// Private: Updates the speed tracking object, or creates it if necessary
-	SWFUpload.prototype.updateTracking = function (file, bytesUploaded) {
-		var tracking = this.fileSpeedStats[file.id];
-		if (!tracking) {
-			this.fileSpeedStats[file.id] = tracking = {};
-		}
-		
-		// Sanity check inputs
-		bytesUploaded = bytesUploaded || tracking.bytesUploaded || 0;
-		if (bytesUploaded < 0) {
-			bytesUploaded = 0;
-		}
-		if (bytesUploaded > file.size) {
-			bytesUploaded = file.size;
-		}
-		
-		var tickTime = (new Date()).getTime();
-		if (!tracking.startTime) {
-			tracking.startTime = (new Date()).getTime();
-			tracking.lastTime = tracking.startTime;
-			tracking.currentSpeed = 0;
-			tracking.averageSpeed = 0;
-			tracking.movingAverageSpeed = 0;
-			tracking.movingAverageHistory = [];
-			tracking.timeRemaining = 0;
-			tracking.timeElapsed = 0;
-			tracking.percentUploaded = bytesUploaded / file.size;
-			tracking.bytesUploaded = bytesUploaded;
-		} else if (tracking.startTime > tickTime) {
-			this.debug("When backwards in time");
-		} else {
-			// Get time and deltas
-			var now = (new Date()).getTime();
-			var lastTime = tracking.lastTime;
-			var deltaTime = now - lastTime;
-			var deltaBytes = bytesUploaded - tracking.bytesUploaded;
-			
-			if (deltaBytes === 0 || deltaTime === 0) {
-				return tracking;
-			}
-			
-			// Update tracking object
-			tracking.lastTime = now;
-			tracking.bytesUploaded = bytesUploaded;
-			
-			// Calculate speeds
-			tracking.currentSpeed = (deltaBytes * 8 ) / (deltaTime / 1000);
-			tracking.averageSpeed = (tracking.bytesUploaded * 8) / ((now - tracking.startTime) / 1000);
-
-			// Calculate moving average
-			tracking.movingAverageHistory.push(tracking.currentSpeed);
-			if (tracking.movingAverageHistory.length > this.settings.moving_average_history_size) {
-				tracking.movingAverageHistory.shift();
-			}
-			
-			tracking.movingAverageSpeed = SWFUpload.speed.calculateMovingAverage(tracking.movingAverageHistory);
-			
-			// Update times
-			tracking.timeRemaining = (file.size - tracking.bytesUploaded) * 8 / tracking.movingAverageSpeed;
-			tracking.timeElapsed = (now - tracking.startTime) / 1000;
-			
-			// Update percent
-			tracking.percentUploaded = (tracking.bytesUploaded / file.size * 100);
-		}
-		
-		return tracking;
-	};
-	SWFUpload.speed.removeTracking = function (file, trackingList) {
-		try {
-			trackingList[file.id] = null;
-			delete trackingList[file.id];
-		} catch (ex) {
-		}
-	};
-	
-	SWFUpload.speed.formatUnits = function (baseNumber, unitDivisors, unitLabels, singleFractional) {
-		var i, unit, unitDivisor, unitLabel;
-
-		if (baseNumber === 0) {
-			return "0 " + unitLabels[unitLabels.length - 1];
-		}
-		
-		if (singleFractional) {
-			unit = baseNumber;
-			unitLabel = unitLabels.length >= unitDivisors.length ? unitLabels[unitDivisors.length - 1] : "";
-			for (i = 0; i < unitDivisors.length; i++) {
-				if (baseNumber >= unitDivisors[i]) {
-					unit = (baseNumber / unitDivisors[i]).toFixed(2);
-					unitLabel = unitLabels.length >= i ? " " + unitLabels[i] : "";
-					break;
-				}
-			}
-			
-			return unit + unitLabel;
-		} else {
-			var formattedStrings = [];
-			var remainder = baseNumber;
-			
-			for (i = 0; i < unitDivisors.length; i++) {
-				unitDivisor = unitDivisors[i];
-				unitLabel = unitLabels.length > i ? " " + unitLabels[i] : "";
-				
-				unit = remainder / unitDivisor;
-				if (i < unitDivisors.length -1) {
-					unit = Math.floor(unit);
-				} else {
-					unit = unit.toFixed(2);
-				}
-				if (unit > 0) {
-					remainder = remainder % unitDivisor;
-					
-					formattedStrings.push(unit + unitLabel);
-				}
-			}
-			
-			return formattedStrings.join(" ");
-		}
-	};
-	
-	SWFUpload.speed.formatBPS = function (baseNumber) {
-		var bpsUnits = [1073741824, 1048576, 1024, 1], bpsUnitLabels = ["Gbps", "Mbps", "Kbps", "bps"];
-		return SWFUpload.speed.formatUnits(baseNumber, bpsUnits, bpsUnitLabels, true);
-	
-	};
-	SWFUpload.speed.formatTime = function (baseNumber) {
-		var timeUnits = [86400, 3600, 60, 1], timeUnitLabels = ["d", "h", "m", "s"];
-		return SWFUpload.speed.formatUnits(baseNumber, timeUnits, timeUnitLabels, false);
-	
-	};
-	SWFUpload.speed.formatBytes = function (baseNumber) {
-		var sizeUnits = [1073741824, 1048576, 1024, 1], sizeUnitLabels = ["GB", "MB", "KB", "bytes"];
-		return SWFUpload.speed.formatUnits(baseNumber, sizeUnits, sizeUnitLabels, true);
-	
-	};
-	SWFUpload.speed.formatPercent = function (baseNumber) {
-		return baseNumber.toFixed(2) + " %";
-	};
-	
-	SWFUpload.speed.calculateMovingAverage = function (history) {
-		var vals = [], size, sum = 0.0, mean = 0.0, varianceTemp = 0.0, variance = 0.0, standardDev = 0.0;
-		var i;
-		var mSum = 0, mCount = 0;
-		
-		size = history.length;
-		
-		// Check for sufficient data
-		if (size >= 8) {
-			// Clone the array and Calculate sum of the values 
-			for (i = 0; i < size; i++) {
-				vals[i] = history[i];
-				sum += vals[i];
-			}
-
-			mean = sum / size;
-
-			// Calculate variance for the set
-			for (i = 0; i < size; i++) {
-				varianceTemp += Math.pow((vals[i] - mean), 2);
-			}
-
-			variance = varianceTemp / size;
-			standardDev = Math.sqrt(variance);
-			
-			//Standardize the Data
-			for (i = 0; i < size; i++) {
-				vals[i] = (vals[i] - mean) / standardDev;
-			}
-
-			// Calculate the average excluding outliers
-			var deviationRange = 2.0;
-			for (i = 0; i < size; i++) {
-				
-				if (vals[i] <= deviationRange && vals[i] >= -deviationRange) {
-					mCount++;
-					mSum += history[i];
-				}
-			}
-			
-		} else {
-			// Calculate the average (not enough data points to remove outliers)
-			mCount = size;
-			for (i = 0; i < size; i++) {
-				mSum += history[i];
-			}
-		}
-
-		return mSum / mCount;
-	};
-	
-}

BIN=BIN
DjangoUeditor/static/ueditor/third-party/swfupload/swfupload.swf


BIN=BIN
DjangoUeditor/static/ueditor/third-party/swfupload/swfupload_fp9.swf


+ 0 - 27535
DjangoUeditor/static/ueditor/ueditor_all.js

@@ -1,27535 +0,0 @@
-/*!
- * UEditor
- * version: 1.3.6
- * build: Wed Dec 25 2013 12:38:31 GMT+0800 (中国标准时间)
- */
-
-(function(){
-
-UEDITOR_CONFIG = window.UEDITOR_CONFIG || {};
-
-var baidu = window.baidu || {};
-
-window.baidu = baidu;
-
-window.UE = baidu.editor =  window.UE || {};
-
-UE.plugins = {};
-
-UE.commands = {};
-
-UE.instants = {};
-
-UE.I18N = {};
-
-UE.version = "1.3.6";
-
-var dom = UE.dom = {};
-/**
- * 浏览器判断模块
- * @file
- * @module UE.browser
- * @since 1.2.6.1
- */
-
-/**
- * 提供浏览器检测的模块
- * @unfile
- * @module UE.browser
- */
-var browser = UE.browser = function(){
-    var agent = navigator.userAgent.toLowerCase(),
-        opera = window.opera,
-        browser = {
-        /**
-         * @property {boolean} ie 检测当前浏览器是否为IE
-         * @example
-         * ```javascript
-         * if ( UE.browser.ie ) {
-         *     console.log( '当前浏览器是IE' );
-         * }
-         * ```
-         */
-        ie		:  /(msie\s|trident.*rv:)([\w.]+)/.test(agent),
-
-        /**
-         * @property {boolean} opera 检测当前浏览器是否为Opera
-         * @example
-         * ```javascript
-         * if ( UE.browser.opera ) {
-         *     console.log( '当前浏览器是Opera' );
-         * }
-         * ```
-         */
-        opera	: ( !!opera && opera.version ),
-
-        /**
-         * @property {boolean} webkit 检测当前浏览器是否是webkit内核的浏览器
-         * @example
-         * ```javascript
-         * if ( UE.browser.webkit ) {
-         *     console.log( '当前浏览器是webkit内核浏览器' );
-         * }
-         * ```
-         */
-        webkit	: ( agent.indexOf( ' applewebkit/' ) > -1 ),
-
-        /**
-         * @property {boolean} mac 检测当前浏览器是否是运行在mac平台下
-         * @example
-         * ```javascript
-         * if ( UE.browser.mac ) {
-         *     console.log( '当前浏览器运行在mac平台下' );
-         * }
-         * ```
-         */
-        mac	: ( agent.indexOf( 'macintosh' ) > -1 ),
-
-        /**
-         * @property {boolean} quirks 检测当前浏览器是否处于“怪异模式”下
-         * @example
-         * ```javascript
-         * if ( UE.browser.quirks ) {
-         *     console.log( '当前浏览器运行处于“怪异模式”' );
-         * }
-         * ```
-         */
-        quirks : ( document.compatMode == 'BackCompat' )
-    };
-
-    /**
-    * @property {boolean} gecko 检测当前浏览器内核是否是gecko内核
-    * @example
-    * ```javascript
-    * if ( UE.browser.gecko ) {
-    *     console.log( '当前浏览器内核是gecko内核' );
-    * }
-    * ```
-    */
-    browser.gecko =( navigator.product == 'Gecko' && !browser.webkit && !browser.opera && !browser.ie);
-
-    var version = 0;
-
-    // Internet Explorer 6.0+
-    if ( browser.ie ){
-
-        version =  (agent.match(/(msie\s|trident.*rv:)([\w.]+)/)[2] || 0) * 1;
-
-        browser.ie11Compat = document.documentMode == 11;
-        /**
-         * @property { boolean } ie9Compat 检测浏览器模式是否为 IE9 兼容模式
-         * @warning 如果浏览器不是IE, 则该值为undefined
-         * @example
-         * ```javascript
-         * if ( UE.browser.ie9Compat ) {
-         *     console.log( '当前浏览器运行在IE9兼容模式下' );
-         * }
-         * ```
-         */
-        browser.ie9Compat = document.documentMode == 9;
-
-        /**
-         * @property { boolean } ie8 检测浏览器是否是IE8浏览器
-         * @warning 如果浏览器不是IE, 则该值为undefined
-         * @example
-         * ```javascript
-         * if ( UE.browser.ie8 ) {
-         *     console.log( '当前浏览器是IE8浏览器' );
-         * }
-         * ```
-         */
-        browser.ie8 = !!document.documentMode;
-
-        /**
-         * @property { boolean } ie8Compat 检测浏览器模式是否为 IE8 兼容模式
-         * @warning 如果浏览器不是IE, 则该值为undefined
-         * @example
-         * ```javascript
-         * if ( UE.browser.ie8Compat ) {
-         *     console.log( '当前浏览器运行在IE8兼容模式下' );
-         * }
-         * ```
-         */
-        browser.ie8Compat = document.documentMode == 8;
-
-        /**
-         * @property { boolean } ie7Compat 检测浏览器模式是否为 IE7 兼容模式
-         * @warning 如果浏览器不是IE, 则该值为undefined
-         * @example
-         * ```javascript
-         * if ( UE.browser.ie7Compat ) {
-         *     console.log( '当前浏览器运行在IE7兼容模式下' );
-         * }
-         * ```
-         */
-        browser.ie7Compat = ( ( version == 7 && !document.documentMode )
-                || document.documentMode == 7 );
-
-        /**
-         * @property { boolean } ie6Compat 检测浏览器模式是否为 IE6 模式 或者怪异模式
-         * @warning 如果浏览器不是IE, 则该值为undefined
-         * @example
-         * ```javascript
-         * if ( UE.browser.ie6Compat ) {
-         *     console.log( '当前浏览器运行在IE6模式或者怪异模式下' );
-         * }
-         * ```
-         */
-        browser.ie6Compat = ( version < 7 || browser.quirks );
-
-        browser.ie9above = version > 8;
-
-        browser.ie9below = version < 9;
-
-    }
-
-    // Gecko.
-    if ( browser.gecko ){
-        var geckoRelease = agent.match( /rv:([\d\.]+)/ );
-        if ( geckoRelease )
-        {
-            geckoRelease = geckoRelease[1].split( '.' );
-            version = geckoRelease[0] * 10000 + ( geckoRelease[1] || 0 ) * 100 + ( geckoRelease[2] || 0 ) * 1;
-        }
-    }
-
-    /**
-     * @property { Number } chrome 检测当前浏览器是否为Chrome, 如果是,则返回Chrome的大版本号
-     * @warning 如果浏览器不是chrome, 则该值为undefined
-     * @example
-     * ```javascript
-     * if ( UE.browser.chrome ) {
-     *     console.log( '当前浏览器是Chrome' );
-     * }
-     * ```
-     */
-    if (/chrome\/(\d+\.\d)/i.test(agent)) {
-        browser.chrome = + RegExp['\x241'];
-    }
-
-    /**
-     * @property { Number } safari 检测当前浏览器是否为Safari, 如果是,则返回Safari的大版本号
-     * @warning 如果浏览器不是safari, 则该值为undefined
-     * @example
-     * ```javascript
-     * if ( UE.browser.safari ) {
-     *     console.log( '当前浏览器是Safari' );
-     * }
-     * ```
-     */
-    if(/(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(agent) && !/chrome/i.test(agent)){
-    	browser.safari = + (RegExp['\x241'] || RegExp['\x242']);
-    }
-
-
-    // Opera 9.50+
-    if ( browser.opera )
-        version = parseFloat( opera.version() );
-
-    // WebKit 522+ (Safari 3+)
-    if ( browser.webkit )
-        version = parseFloat( agent.match( / applewebkit\/(\d+)/ )[1] );
-
-    /**
-     * @property { Number } version 检测当前浏览器版本号
-     * @remind
-     * <ul>
-     *     <li>IE系列返回值为5,6,7,8,9,10等</li>
-     *     <li>gecko系列会返回10900,158900等</li>
-     *     <li>webkit系列会返回其build号 (如 522等)</li>
-     * </ul>
-     * @example
-     * ```javascript
-     * console.log( '当前浏览器版本号是: ' + UE.browser.version );
-     * ```
-     */
-    browser.version = version;
-
-    /**
-     * @property { boolean } isCompatible 检测当前浏览器是否能够与UEditor良好兼容
-     * @example
-     * ```javascript
-     * if ( UE.browser.isCompatible ) {
-     *     console.log( '浏览器与UEditor能够良好兼容' );
-     * }
-     * ```
-     */
-    browser.isCompatible =
-        !browser.mobile && (
-        ( browser.ie && version >= 6 ) ||
-        ( browser.gecko && version >= 10801 ) ||
-        ( browser.opera && version >= 9.5 ) ||
-        ( browser.air && version >= 1 ) ||
-        ( browser.webkit && version >= 522 ) ||
-        false );
-    return browser;
-}();
-//快捷方式
-var ie = browser.ie,
-    webkit = browser.webkit,
-    gecko = browser.gecko,
-    opera = browser.opera;
-/**
- * 工具函数包
- * @file
- * @module UE.utils
- * @since 1.2.6.1
- */
-
-/**
- * UEditor封装使用的静态工具函数
- * @module UE.utils
- * @unfile
- */
-
-var utils = UE.utils = {
-
-    /**
-     * 用给定的迭代器遍历对象
-     * @method each
-     * @param { Object } obj 需要遍历的对象
-     * @param { Function } iterator 迭代器, 该方法接受两个参数, 第一个参数是当前所处理的value, 第二个参数是当前遍历对象的key
-     * @example
-     * ```javascript
-     * var demoObj = {
-     *     key1: 1,
-     *     key2: 2
-     * };
-     *
-     * //output: key1: 1, key2: 2
-     * UE.utils.each( demoObj, funciton ( value, key ) {
-     *
-     *     console.log( key + ":" + value );
-     *
-     * } );
-     * ```
-     */
-
-    /**
-     * 用给定的迭代器遍历数组或类数组对象
-     * @method each
-     * @param { Array } array 需要遍历的数组或者类数组
-     * @param { Function } iterator 迭代器, 该方法接受两个参数, 第一个参数是当前所处理的value, 第二个参数是当前遍历对象的key
-     * @example
-     * ```javascript
-     * var divs = document.getElmentByTagNames( "div" );
-     *
-     * //output: 0: DIV, 1: DIV ...
-     * UE.utils.each( divs, funciton ( value, key ) {
-     *
-     *     console.log( key + ":" + value.tagName );
-     *
-     * } );
-     * ```
-     */
-    each : function(obj, iterator, context) {
-        if (obj == null) return;
-        if (obj.length === +obj.length) {
-            for (var i = 0, l = obj.length; i < l; i++) {
-                if(iterator.call(context, obj[i], i, obj) === false)
-                    return false;
-            }
-        } else {
-            for (var key in obj) {
-                if (obj.hasOwnProperty(key)) {
-                    if(iterator.call(context, obj[key], key, obj) === false)
-                        return false;
-                }
-            }
-        }
-    },
-
-    /**
-     * 以给定对象作为原型创建一个新对象
-     * @method makeInstance
-     * @param { Object } protoObject 该对象将作为新创建对象的原型
-     * @return { Object } 新的对象, 该对象的原型是给定的protoObject对象
-     * @example
-     * ```javascript
-     *
-     * var protoObject = { sayHello: function () { console.log('Hello UEditor!'); } };
-     *
-     * var newObject = UE.utils.makeInstance( protoObject );
-     * //output: Hello UEditor!
-     * newObject.sayHello();
-     * ```
-     */
-    makeInstance:function (obj) {
-        var noop = new Function();
-        noop.prototype = obj;
-        obj = new noop;
-        noop.prototype = null;
-        return obj;
-    },
-
-    /**
-     * 将source对象中的属性扩展到target对象上
-     * @method extend
-     * @remind 该方法将强制把source对象上的属性复制到target对象上
-     * @see UE.utils.extend(Object,Object,Boolean)
-     * @param { Object } target 目标对象, 新的属性将附加到该对象上
-     * @param { Object } source 源对象, 该对象的属性会被附加到target对象上
-     * @return { Object } 返回target对象
-     * @example
-     * ```javascript
-     *
-     * var target = { name: 'target', sex: 1 },
-     *      source = { name: 'source', age: 17 };
-     *
-     * UE.utils.extend( target, source );
-     *
-     * //output: { name: 'source', sex: 1, age: 17 }
-     * console.log( target );
-     *
-     * ```
-     */
-
-    /**
-     * 将source对象中的属性扩展到target对象上, 根据指定的isKeepTarget值决定是否保留目标对象中与
-     * 源对象属性名相同的属性值。
-     * @method extend
-     * @param { Object } target 目标对象, 新的属性将附加到该对象上
-     * @param { Object } source 源对象, 该对象的属性会被附加到target对象上
-     * @param { Boolean } isKeepTarget 是否保留目标对象中与源对象中属性名相同的属性
-     * @return { Object } 返回target对象
-     * @example
-     * ```javascript
-     *
-     * var target = { name: 'target', sex: 1 },
-     *      source = { name: 'source', age: 17 };
-     *
-     * UE.utils.extend( target, source, true );
-     *
-     * //output: { name: 'target', sex: 1, age: 17 }
-     * console.log( target );
-     *
-     * ```
-     */
-    extend:function (t, s, b) {
-        if (s) {
-            for (var k in s) {
-                if (!b || !t.hasOwnProperty(k)) {
-                    t[k] = s[k];
-                }
-            }
-        }
-        return t;
-    },
-
-    /**
-     * 将给定的多个对象的属性复制到目标对象target上
-     * @method extend2
-     * @remind 该方法将强制把源对象上的属性复制到target对象上
-     * @remind 该方法支持两个及以上的参数, 从第二个参数开始, 其属性都会被复制到第一个参数上。 如果遇到同名的属性,
-     *          将会覆盖掉之前的值。
-     * @param { Object } target 目标对象, 新的属性将附加到该对象上
-     * @param { Object... } source 源对象, 支持多个对象, 该对象的属性会被附加到target对象上
-     * @return { Object } 返回target对象
-     * @example
-     * ```javascript
-     *
-     * var target = {},
-     *     source1 = { name: 'source', age: 17 },
-     *     source2 = { title: 'dev' };
-     *
-     * UE.utils.extend2( target, source1, source2 );
-     *
-     * //output: { name: 'source', age: 17, title: 'dev' }
-     * console.log( target );
-     *
-     * ```
-     */
-    extend2:function (t) {
-        var a = arguments;
-        for (var i = 1; i < a.length; i++) {
-            var x = a[i];
-            for (var k in x) {
-                if (!t.hasOwnProperty(k)) {
-                    t[k] = x[k];
-                }
-            }
-        }
-        return t;
-    },
-
-    /**
-     * 模拟继承机制, 使得subClass继承自superClass
-     * @method inherits
-     * @param { Object } subClass 子类对象
-     * @param { Object } superClass 超类对象
-     * @warning 该方法只能让subClass继承超类的原型, subClass对象自身的属性和方法不会被继承
-     * @return { Object } 继承superClass后的子类对象
-     * @example
-     * ```javascript
-     * function SuperClass(){
-     *     this.name = "小李";
-     * }
-     *
-     * SuperClass.prototype = {
-     *     hello:function(str){
-     *         console.log(this.name + str);
-     *     }
-     * }
-     *
-     * function SubClass(){
-     *     this.name = "小张";
-     * }
-     *
-     * UE.utils.inherits(SubClass,SuperClass);
-     *
-     * var sub = new SubClass();
-     * //output: '小张早上好!
-     * sub.hello("早上好!");
-     * ```
-     */
-    inherits:function (subClass, superClass) {
-        var oldP = subClass.prototype,
-            newP = utils.makeInstance(superClass.prototype);
-        utils.extend(newP, oldP, true);
-        subClass.prototype = newP;
-        return (newP.constructor = subClass);
-    },
-
-    /**
-     * 用指定的context对象作为函数fn的上下文
-     * @method bind
-     * @param { Function } fn 需要绑定上下文的函数对象
-     * @param { Object } content 函数fn新的上下文对象
-     * @return { Function } 一个新的函数, 该函数作为原始函数fn的代理, 将完成fn的上下文调换工作。
-     * @example
-     * ```javascript
-     *
-     * var name = 'window',
-     *     newTest = null;
-     *
-     * function test () {
-     *     console.log( this.name );
-     * }
-     *
-     * newTest = UE.utils.bind( test, { name: 'object' } );
-     *
-     * //output: object
-     * newTest();
-     *
-     * //output: window
-     * test();
-     *
-     * ```
-     */
-    bind:function (fn, context) {
-        return function () {
-            return fn.apply(context, arguments);
-        };
-    },
-
-    /**
-     * 创建延迟指定时间后执行的函数fn
-     * @method defer
-     * @param { Function } fn 需要延迟执行的函数对象
-     * @param { int } delay 延迟的时间, 单位是毫秒
-     * @warning 该方法的时间控制是不精确的,仅仅只能保证函数的执行是在给定的时间之后,
-     *           而不能保证刚好到达延迟时间时执行。
-     * @return { Function } 目标函数fn的代理函数, 只有执行该函数才能起到延时效果
-     * @example
-     * ```javascript
-     * var start = 0;
-     *
-     * function test(){
-     *     console.log( new Date() - start );
-     * }
-     *
-     * var testDefer = UE.utils.defer( test, 1000 );
-     * //
-     * start = new Date();
-     * //output: (大约在1000毫秒之后输出) 1000
-     * testDefer();
-     * ```
-     */
-
-    /**
-     * 创建延迟指定时间后执行的函数fn, 如果在延迟时间内再次执行该方法, 将会根据指定的exclusion的值,
-     * 决定是否取消前一次函数的执行, 如果exclusion的值为true, 则取消执行,反之,将继续执行前一个方法。
-     * @method defer
-     * @param { Function } fn 需要延迟执行的函数对象
-     * @param { int } delay 延迟的时间, 单位是毫秒
-     * @param { Boolean } exclusion 如果在延迟时间内再次执行该函数,该值将决定是否取消执行前一次函数的执行,
-     *                     值为true表示取消执行, 反之则将在执行前一次函数之后才执行本次函数调用。
-     * @warning 该方法的时间控制是不精确的,仅仅只能保证函数的执行是在给定的时间之后,
-     *           而不能保证刚好到达延迟时间时执行。
-     * @return { Function } 目标函数fn的代理函数, 只有执行该函数才能起到延时效果
-     * @example
-     * ```javascript
-     *
-     * function test(){
-     *     console.log(1);
-     * }
-     *
-     * var testDefer = UE.utils.defer( test, 1000, true );
-     *
-     * //output: (两次调用仅有一次输出) 1
-     * testDefer();
-     * testDefer();
-     * ```
-     */
-    defer:function (fn, delay, exclusion) {
-        var timerID;
-        return function () {
-            if (exclusion) {
-                clearTimeout(timerID);
-            }
-            timerID = setTimeout(fn, delay);
-        };
-    },
-
-    /**
-     * 获取元素item在数组array中首次出现的位置, 如果未找到item, 则返回-1
-     * @method indexOf
-     * @remind 该方法的匹配过程使用的是恒等“===”
-     * @param { Array } array 需要查找的数组对象
-     * @param { * } item 需要在目标数组中查找的值
-     * @return { int } 返回item在目标数组array中首次出现的位置, 如果在数组中未找到item, 则返回-1
-     * @example
-     * ```javascript
-     * var item = 1,
-     *     arr = [ 3, 4, 6, 8, 1, 1, 2 ];
-     *
-     * //output: 4
-     * console.log( UE.utils.indexOf( arr, item ) );
-     * ```
-     */
-
-    /**
-     * 获取元素item数组array中首次出现的位置, 如果未找到item, 则返回-1。通过start的值可以指定搜索的起始位置。
-     * @method indexOf
-     * @remind 该方法的匹配过程使用的是恒等“===”
-     * @param { Array } array 需要查找的数组对象
-     * @param { * } item 需要在目标数组中查找的值
-     * @param { int } start 搜索的起始位置
-     * @return { int } 返回item在目标数组array中的start位置之后首次出现的位置, 如果在数组中未找到item, 则返回-1
-     * @example
-     * ```javascript
-     * var item = 1,
-     *     arr = [ 3, 4, 6, 8, 1, 2, 8, 3, 2, 1, 1, 4 ];
-     *
-     * //output: 9
-     * console.log( UE.utils.indexOf( arr, item, 5 ) );
-     * ```
-     */
-    indexOf:function (array, item, start) {
-        var index = -1;
-        start = this.isNumber(start) ? start : 0;
-        this.each(array, function (v, i) {
-            if (i >= start && v === item) {
-                index = i;
-                return false;
-            }
-        });
-        return index;
-    },
-
-    /**
-     * 移除数组array中所有的元素item
-     * @method removeItem
-     * @param { Array } array 要移除元素的目标数组
-     * @param { * } item 将要被移除的元素
-     * @remind 该方法的匹配过程使用的是恒等“===”
-     * @example
-     * ```javascript
-     * var arr = [ 4, 5, 7, 1, 3, 4, 6 ];
-     *
-     * UE.utils.removeItem( arr, 4 );
-     * //output: [ 5, 7, 1, 3, 6 ]
-     * console.log( arr );
-     *
-     * ```
-     */
-    removeItem:function (array, item) {
-        for (var i = 0, l = array.length; i < l; i++) {
-            if (array[i] === item) {
-                array.splice(i, 1);
-                i--;
-            }
-        }
-    },
-
-    /**
-     * 删除字符串str的首尾空格
-     * @method trim
-     * @param { String } str 需要删除首尾空格的字符串
-     * @return { String } 删除了首尾的空格后的字符串
-     * @example
-     * ```javascript
-     *
-     * var str = " UEdtior ";
-     *
-     * //output: 9
-     * console.log( str.length );
-     *
-     * //output: 7
-     * console.log( UE.utils.trim( " UEdtior " ).length );
-     *
-     * //output: 9
-     * console.log( str.length );
-     *
-     *  ```
-     */
-    trim:function (str) {
-        return str.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g, '');
-    },
-
-    /**
-     * 将字符串str以','分隔成数组后,将该数组转换成哈希对象, 其生成的hash对象的key为数组中的元素, value为1
-     * @method listToMap
-     * @warning 该方法在生成的hash对象中,会为每一个key同时生成一个另一个全大写的key。
-     * @param { String } str 该字符串将被以','分割为数组, 然后进行转化
-     * @return { Object } 转化之后的hash对象
-     * @example
-     * ```javascript
-     *
-     * //output: Object {UEdtior: 1, UEDTIOR: 1, Hello: 1, HELLO: 1}
-     * console.log( UE.utils.listToMap( 'UEdtior,Hello' ) );
-     *
-     * ```
-     */
-
-    /**
-     * 将字符串数组转换成哈希对象, 其生成的hash对象的key为数组中的元素, value为1
-     * @method listToMap
-     * @warning 该方法在生成的hash对象中,会为每一个key同时生成一个另一个全大写的key。
-     * @param { Array } arr 字符串数组
-     * @return { Object } 转化之后的hash对象
-     * @example
-     * ```javascript
-     *
-     * //output: Object {UEdtior: 1, UEDTIOR: 1, Hello: 1, HELLO: 1}
-     * console.log( UE.utils.listToMap( [ 'UEdtior', 'Hello' ] ) );
-     *
-     * ```
-     */
-    listToMap:function (list) {
-        if (!list)return {};
-        list = utils.isArray(list) ? list : list.split(',');
-        for (var i = 0, ci, obj = {}; ci = list[i++];) {
-            obj[ci.toUpperCase()] = obj[ci] = 1;
-        }
-        return obj;
-    },
-
-    /**
-     * 将str中的html符号转义,将转义“',&,<,",>”五个字符
-     * @method unhtml
-     * @param { String } str 需要转义的字符串
-     * @return { String } 转义后的字符串
-     * @example
-     * ```javascript
-     * var html = '<body>&</body>';
-     *
-     * //output: &lt;body&gt;&amp;&lt;/body&gt;
-     * console.log( UE.utils.unhtml( html ) );
-     *
-     * ```
-     */
-    unhtml:function (str, reg) {
-        return str ? str.replace(reg || /[&<">'](?:(amp|lt|quot|gt|#39|nbsp);)?/g, function (a, b) {
-            if (b) {
-                return a;
-            } else {
-                return {
-                    '<':'&lt;',
-                    '&':'&amp;',
-                    '"':'&quot;',
-                    '>':'&gt;',
-                    "'":'&#39;'
-                }[a]
-            }
-
-        }) : '';
-    },
-
-    /**
-     * 将str中的转义字符还原成html字符
-     * @see UE.utils.unhtml(String);
-     * @method html
-     * @param { String } str 需要逆转义的字符串
-     * @return { String } 逆转义后的字符串
-     * @example
-     * ```javascript
-     *
-     * var str = '&lt;body&gt;&amp;&lt;/body&gt;';
-     *
-     * //output: <body>&</body>
-     * console.log( UE.utils.html( str ) );
-     *
-     * ```
-     */
-    html:function (str) {
-        return str ? str.replace(/&((g|l|quo)t|amp|#39|nbsp);/g, function (m) {
-            return {
-                '&lt;':'<',
-                '&amp;':'&',
-                '&quot;':'"',
-                '&gt;':'>',
-                '&#39;':"'",
-                '&nbsp;':' '
-            }[m]
-        }) : '';
-    },
-
-    /**
-     * 将css样式转换为驼峰的形式
-     * @method cssStyleToDomStyle
-     * @param { String } cssName 需要转换的css样式名
-     * @return { String } 转换成驼峰形式后的css样式名
-     * @example
-     * ```javascript
-     *
-     * var str = 'border-top';
-     *
-     * //output: borderTop
-     * console.log( UE.utils.cssStyleToDomStyle( str ) );
-     *
-     * ```
-     */
-    cssStyleToDomStyle:function () {
-        var test = document.createElement('div').style,
-            cache = {
-                'float':test.cssFloat != undefined ? 'cssFloat' : test.styleFloat != undefined ? 'styleFloat' : 'float'
-            };
-
-        return function (cssName) {
-            return cache[cssName] || (cache[cssName] = cssName.toLowerCase().replace(/-./g, function (match) {
-                return match.charAt(1).toUpperCase();
-            }));
-        };
-    }(),
-
-    /**
-     * 动态加载文件到doc中
-     * @method loadFile
-     * @param { DomDocument } document 需要加载资源文件的文档对象
-     * @param { Object } options 加载资源文件的属性集合, 取值请参考代码示例
-     * @example
-     * ```javascript
-     *
-     * UE.utils.loadFile( document, {
-     *     src:"test.js",
-     *     tag:"script",
-     *     type:"text/javascript",
-     *     defer:"defer"
-     * } );
-     *
-     * ```
-     */
-
-    /**
-     * 动态加载文件到doc中,加载成功后执行的回调函数fn
-     * @method loadFile
-     * @param { DomDocument } document 需要加载资源文件的文档对象
-     * @param { Object } options 加载资源文件的属性集合, 该集合支持的值是script标签和style标签支持的所有属性。
-     * @param { Function } fn 资源文件加载成功之后执行的回调
-     * @warning 对于在同一个文档中多次加载同一URL的文件, 该方法会在第一次加载之后缓存该请求,
-     *           在此之后的所有同一URL的请求, 将会直接触发回调。
-     * @example
-     * ```javascript
-     *
-     * UE.utils.loadFile( document, {
-     *     src:"test.js",
-     *     tag:"script",
-     *     type:"text/javascript",
-     *     defer:"defer"
-     * }, function () {
-     *     console.log('加载成功');
-     * } );
-     *
-     * ```
-     */
-    loadFile:function () {
-        var tmpList = [];
-
-        function getItem(doc, obj) {
-            try {
-                for (var i = 0, ci; ci = tmpList[i++];) {
-                    if (ci.doc === doc && ci.url == (obj.src || obj.href)) {
-                        return ci;
-                    }
-                }
-            } catch (e) {
-                return null;
-            }
-
-        }
-
-        return function (doc, obj, fn) {
-            var item = getItem(doc, obj);
-            if (item) {
-                if (item.ready) {
-                    fn && fn();
-                } else {
-                    item.funs.push(fn)
-                }
-                return;
-            }
-            tmpList.push({
-                doc:doc,
-                url:obj.src || obj.href,
-                funs:[fn]
-            });
-            if (!doc.body) {
-                var html = [];
-                for (var p in obj) {
-                    if (p == 'tag')continue;
-                    html.push(p + '="' + obj[p] + '"')
-                }
-                doc.write('<' + obj.tag + ' ' + html.join(' ') + ' ></' + obj.tag + '>');
-                return;
-            }
-            if (obj.id && doc.getElementById(obj.id)) {
-                return;
-            }
-            var element = doc.createElement(obj.tag);
-            delete obj.tag;
-            for (var p in obj) {
-                element.setAttribute(p, obj[p]);
-            }
-            element.onload = element.onreadystatechange = function () {
-                if (!this.readyState || /loaded|complete/.test(this.readyState)) {
-                    item = getItem(doc, obj);
-                    if (item.funs.length > 0) {
-                        item.ready = 1;
-                        for (var fi; fi = item.funs.pop();) {
-                            fi();
-                        }
-                    }
-                    element.onload = element.onreadystatechange = null;
-                }
-            };
-            element.onerror = function () {
-                throw Error('The load ' + (obj.href || obj.src) + ' fails,check the url settings of file ueditor.config.js ')
-            };
-            doc.getElementsByTagName("head")[0].appendChild(element);
-        }
-    }(),
-
-    /**
-     * 判断obj对象是否为空
-     * @method isEmptyObject
-     * @param { * } obj 需要判断的对象
-     * @remind 如果判断的对象是NULL, 将直接返回true, 如果是数组且为空, 返回true, 如果是字符串, 且字符串为空,
-     *          返回true, 如果是普通对象, 且该对象没有任何实例属性, 返回true
-     * @return { Boolean } 对象是否为空
-     * @example
-     * ```javascript
-     *
-     * //output: true
-     * console.log( UE.utils.isEmptyObject( {} ) );
-     *
-     * //output: true
-     * console.log( UE.utils.isEmptyObject( [] ) );
-     *
-     * //output: true
-     * console.log( UE.utils.isEmptyObject( "" ) );
-     *
-     * //output: false
-     * console.log( UE.utils.isEmptyObject( { key: 1 } ) );
-     *
-     * //output: false
-     * console.log( UE.utils.isEmptyObject( [1] ) );
-     *
-     * //output: false
-     * console.log( UE.utils.isEmptyObject( "1" ) );
-     *
-     * ```
-     */
-    isEmptyObject:function (obj) {
-        if (obj == null) return true;
-        if (this.isArray(obj) || this.isString(obj)) return obj.length === 0;
-        for (var key in obj) if (obj.hasOwnProperty(key)) return false;
-        return true;
-    },
-
-    /*
-     * 把rgb格式的颜色值转换成16进制格式
-     * @method fixColor
-     * @param { String } rgb格式的颜色值
-     * @param { String }
-     * @example
-     * rgb(255,255,255)  => "#ffffff"
-     */
-    fixColor:function (name, value) {
-        if (/color/i.test(name) && /rgba?/.test(value)) {
-            var array = value.split(",");
-            if (array.length > 3)
-                return "";
-            value = "#";
-            for (var i = 0, color; color = array[i++];) {
-                color = parseInt(color.replace(/[^\d]/gi, ''), 10).toString(16);
-                value += color.length == 1 ? "0" + color : color;
-            }
-            value = value.toUpperCase();
-        }
-        return  value;
-    },
-    /*
-     * 只针对border,padding,margin做了处理,因为性能问题
-     * @public
-     * @function
-     * @param {String}    val style字符串
-     */
-    optCss:function (val) {
-        var padding, margin, border;
-        val = val.replace(/(padding|margin|border)\-([^:]+):([^;]+);?/gi, function (str, key, name, val) {
-            if (val.split(' ').length == 1) {
-                switch (key) {
-                    case 'padding':
-                        !padding && (padding = {});
-                        padding[name] = val;
-                        return '';
-                    case 'margin':
-                        !margin && (margin = {});
-                        margin[name] = val;
-                        return '';
-                    case 'border':
-                        return val == 'initial' ? '' : str;
-                }
-            }
-            return str;
-        });
-
-        function opt(obj, name) {
-            if (!obj) {
-                return '';
-            }
-            var t = obj.top , b = obj.bottom, l = obj.left, r = obj.right, val = '';
-            if (!t || !l || !b || !r) {
-                for (var p in obj) {
-                    val += ';' + name + '-' + p + ':' + obj[p] + ';';
-                }
-            } else {
-                val += ';' + name + ':' +
-                    (t == b && b == l && l == r ? t :
-                        t == b && l == r ? (t + ' ' + l) :
-                            l == r ? (t + ' ' + l + ' ' + b) : (t + ' ' + r + ' ' + b + ' ' + l)) + ';'
-            }
-            return val;
-        }
-
-        val += opt(padding, 'padding') + opt(margin, 'margin');
-        return val.replace(/^[ \n\r\t;]*|[ \n\r\t]*$/, '').replace(/;([ \n\r\t]+)|\1;/g, ';')
-            .replace(/(&((l|g)t|quot|#39))?;{2,}/g, function (a, b) {
-                return b ? b + ";;" : ';'
-            });
-    },
-
-    /**
-     * 克隆对象
-     * @method clone
-     * @param { Object } source 源对象
-     * @return { Object } source的一个副本
-     */
-
-    /**
-     * 深度克隆对象,将source的属性克隆到target对象, 会覆盖target重名的属性。
-     * @method clone
-     * @param { Object } source 源对象
-     * @param { Object } target 目标对象
-     * @return { Object } 附加了source对象所有属性的target对象
-     */
-    clone:function (source, target) {
-        var tmp;
-        target = target || {};
-        for (var i in source) {
-            if (source.hasOwnProperty(i)) {
-                tmp = source[i];
-                if (typeof tmp == 'object') {
-                    target[i] = utils.isArray(tmp) ? [] : {};
-                    utils.clone(source[i], target[i])
-                } else {
-                    target[i] = tmp;
-                }
-            }
-        }
-        return target;
-    },
-
-    /**
-     * 把cm/pt为单位的值转换为px为单位的值
-     * @method transUnitToPx
-     * @param { String } 待转换的带单位的字符串
-     * @return { String } 转换为px为计量单位的值的字符串
-     * @example
-     * ```javascript
-     *
-     * //output: 500px
-     * console.log( UE.utils.transUnitToPx( '20cm' ) );
-     *
-     * //output: 27px
-     * console.log( UE.utils.transUnitToPx( '20pt' ) );
-     *
-     * ```
-     */
-    transUnitToPx:function (val) {
-        if (!/(pt|cm)/.test(val)) {
-            return val
-        }
-        var unit;
-        val.replace(/([\d.]+)(\w+)/, function (str, v, u) {
-            val = v;
-            unit = u;
-        });
-        switch (unit) {
-            case 'cm':
-                val = parseFloat(val) * 25;
-                break;
-            case 'pt':
-                val = Math.round(parseFloat(val) * 96 / 72);
-        }
-        return val + (val ? 'px' : '');
-    },
-
-    /**
-     * 在dom树ready之后执行给定的回调函数
-     * @method domReady
-     * @remind 如果在执行该方法的时候, dom树已经ready, 那么回调函数将立刻执行
-     * @param { Function } fn dom树ready之后的回调函数
-     * @example
-     * ```javascript
-     *
-     * UE.utils.domReady( function () {
-     *
-     *     console.log('123');
-     *
-     * } );
-     *
-     * ```
-     */
-    domReady:function () {
-
-        var fnArr = [];
-
-        function doReady(doc) {
-            //确保onready只执行一次
-            doc.isReady = true;
-            for (var ci; ci = fnArr.pop(); ci()) {
-            }
-        }
-
-        return function (onready, win) {
-            win = win || window;
-            var doc = win.document;
-            onready && fnArr.push(onready);
-            if (doc.readyState === "complete") {
-                doReady(doc);
-            } else {
-                doc.isReady && doReady(doc);
-                if (browser.ie && browser.version != 11) {
-                    (function () {
-                        if (doc.isReady) return;
-                        try {
-                            doc.documentElement.doScroll("left");
-                        } catch (error) {
-                            setTimeout(arguments.callee, 0);
-                            return;
-                        }
-                        doReady(doc);
-                    })();
-                    win.attachEvent('onload', function () {
-                        doReady(doc)
-                    });
-                } else {
-                    doc.addEventListener("DOMContentLoaded", function () {
-                        doc.removeEventListener("DOMContentLoaded", arguments.callee, false);
-                        doReady(doc);
-                    }, false);
-                    win.addEventListener('load', function () {
-                        doReady(doc)
-                    }, false);
-                }
-            }
-
-        }
-    }(),
-
-    /*
-     * 动态添加css样式
-     * @method cssRule
-     * @param { String } 节点名称
-     * @grammar UE.utils.cssRule('添加的样式的节点名称',['样式','放到哪个document上'])
-     * @grammar UE.utils.cssRule('body','body{background:#ccc}') => null  //给body添加背景颜色
-     * @grammar UE.utils.cssRule('body') =>样式的字符串  //取得key值为body的样式的内容,如果没有找到key值先关的样式将返回空,例如刚才那个背景颜色,将返回 body{background:#ccc}
-     * @grammar UE.utils.cssRule('body',document) => 返回指定key的样式,并且指定是哪个document
-     * @grammar UE.utils.cssRule('body','') =>null //清空给定的key值的背景颜色
-     */
-    cssRule:browser.ie && browser.version != 11 ? function (key, style, doc) {
-        var indexList, index;
-        if(style === undefined || style && style.nodeType && style.nodeType == 9){
-            //获取样式
-            doc = style && style.nodeType && style.nodeType == 9 ? style : (doc || document);
-            indexList = doc.indexList || (doc.indexList = {});
-            index = indexList[key];
-            if(index !==  undefined){
-                return doc.styleSheets[index].cssText
-            }
-            return undefined;
-        }
-        doc = doc || document;
-        indexList = doc.indexList || (doc.indexList = {});
-        index = indexList[key];
-        //清除样式
-        if(style === ''){
-            if(index!== undefined){
-                doc.styleSheets[index].cssText = '';
-                delete indexList[key];
-                return true
-            }
-            return false;
-        }
-
-        //添加样式
-        if(index!== undefined){
-            sheetStyle =  doc.styleSheets[index];
-        }else{
-            sheetStyle = doc.createStyleSheet('', index = doc.styleSheets.length);
-            indexList[key] = index;
-        }
-        sheetStyle.cssText = style;
-    }: function (key, style, doc) {
-        var head, node;
-        if(style === undefined || style && style.nodeType && style.nodeType == 9){
-            //获取样式
-            doc = style && style.nodeType && style.nodeType == 9 ? style : (doc || document);
-            node = doc.getElementById(key);
-            return node ? node.innerHTML : undefined;
-        }
-        doc = doc || document;
-        node = doc.getElementById(key);
-
-        //清除样式
-        if(style === ''){
-            if(node){
-                node.parentNode.removeChild(node);
-                return true
-            }
-            return false;
-        }
-
-        //添加样式
-        if(node){
-            node.innerHTML = style;
-        }else{
-            node = doc.createElement('style');
-            node.id = key;
-            node.innerHTML = style;
-            doc.getElementsByTagName('head')[0].appendChild(node);
-        }
-    },
-    sort:function(array,compareFn){
-        compareFn = compareFn || function(item1, item2){ return item1.localeCompare(item2);};
-        for(var i= 0,len = array.length; i<len; i++){
-            for(var j = i,length = array.length; j<length; j++){
-                if(compareFn(array[i], array[j]) > 0){
-                    var t = array[i];
-                    array[i] = array[j];
-                    array[j] = t;
-                }
-            }
-        }
-        return array;
-    },
-    clearEmptyAttrs : function(obj){
-        for(var p in obj){
-            if(obj[p] === ''){
-                delete obj[p]
-            }
-        }
-        return obj;
-    }
-
-};
-/**
- * 判断给定的对象是否是字符串
- * @method isString
- * @param { * } object 需要判断的对象
- * @return { Boolean } 给定的对象是否是字符串
- */
-
-/**
- * 判断给定的对象是否是数组
- * @method isArray
- * @param { * } object 需要判断的对象
- * @return { Boolean } 给定的对象是否是数组
- */
-
-/**
- * 判断给定的对象是否是一个Function
- * @method isFunction
- * @param { * } object 需要判断的对象
- * @return { Boolean } 给定的对象是否是Function
- */
-
-/**
- * 判断给定的对象是否是Number
- * @method isNumber
- * @param { * } object 需要判断的对象
- * @return { Boolean } 给定的对象是否是Number
- */
-
-/**
- * 判断给定的对象是否是一个正则表达式
- * @method isRegExp
- * @param { * } object 需要判断的对象
- * @return { Boolean } 给定的对象是否是正则表达式
- */
-
-/**
- * 判断给定的对象是否是一个普通对象
- * @method isObject
- * @param { * } object 需要判断的对象
- * @return { Boolean } 给定的对象是否是普通对象
- */
-utils.each(['String', 'Function', 'Array', 'Number', 'RegExp', 'Object'], function (v) {
-    UE.utils['is' + v] = function (obj) {
-        return Object.prototype.toString.apply(obj) == '[object ' + v + ']';
-    }
-});
-/**
- * UE采用的事件基类
- * @file
- * @module UE
- * @class EventBase
- * @since 1.2.6.1
- */
-
-/**
- * UEditor公用空间,UEditor所有的功能都挂载在该空间下
- * @unfile
- * @module UE
- */
-
-/**
- * UE采用的事件基类,继承此类的对应类将获取addListener,removeListener,fireEvent方法。
- * 在UE中,Editor以及所有ui实例都继承了该类,故可以在对应的ui对象以及editor对象上使用上述方法。
- * @unfile
- * @module UE
- * @class EventBase
- */
-
-/**
- * 通过此构造器,子类可以继承EventBase获取事件监听的方法
- * @constructor
- * @example
- * ```javascript
- * UE.EventBase.call(editor);
- * ```
- */
-var EventBase = UE.EventBase = function () {};
-
-EventBase.prototype = {
-
-    /**
-     * 注册事件监听器
-     * @method addListener
-     * @param { String } types 监听的事件名称,同时监听多个事件使用空格分隔
-     * @param { Function } fn 监听的事件被触发时,会执行该回调函数
-     * @waining 事件被触发时,监听的函数假如返回的值恒等于true,回调函数的队列中后面的函数将不执行
-     * @example
-     * ```javascript
-     * editor.addListener('selectionchange',function(){
-     *      console.log("选区已经变化!");
-     * })
-     * editor.addListener('beforegetcontent aftergetcontent',function(type){
-     *         if(type == 'beforegetcontent'){
-     *             //do something
-     *         }else{
-     *             //do something
-     *         }
-     *         console.log(this.getContent) // this是注册的事件的编辑器实例
-     * })
-     * ```
-     * @see UE.EventBase:fireEvent(String)
-     */
-    addListener:function (types, listener) {
-        types = utils.trim(types).split(/\s+/);
-        for (var i = 0, ti; ti = types[i++];) {
-            getListener(this, ti, true).push(listener);
-        }
-    },
-
-    on : function(types, listener){
-      return this.addListener(types,listener);
-    },
-    off : function(types, listener){
-        return this.removeListener(types, listener)
-    },
-    trigger:function(){
-        return this.fireEvent.apply(this,arguments);
-    },
-    /**
-     * 移除事件监听器
-     * @method removeListener
-     * @param { String } types 移除的事件名称,同时移除多个事件使用空格分隔
-     * @param { Function } fn 移除监听事件的函数引用
-     * @example
-     * ```javascript
-     * //changeCallback为方法体
-     * editor.removeListener("selectionchange",changeCallback);
-     * ```
-     */
-    removeListener:function (types, listener) {
-        types = utils.trim(types).split(/\s+/);
-        for (var i = 0, ti; ti = types[i++];) {
-            utils.removeItem(getListener(this, ti) || [], listener);
-        }
-    },
-
-    /**
-     * 触发事件
-     * @method fireEvent
-     * @param { String } types 触发的事件名称,同时触发多个事件使用空格分隔
-     * @remind 该方法会触发addListener
-     * @return { * } 返回触发事件的队列中,最后执行的回调函数的返回值
-     * @example
-     * ```javascript
-     * editor.fireEvent("selectionchange");
-     * ```
-     */
-
-    /**
-     * 触发事件
-     * @method fireEvent
-     * @param { String } types 触发的事件名称,同时触发多个事件使用空格分隔
-     * @param { *... } options 可选参数,可以传入一个或多个参数,会传给事件触发的回调函数
-     * @return { * } 返回触发事件的队列中,最后执行的回调函数的返回值
-     * @example
-     * ```javascript
-     *
-     * editor.addListener( "selectionchange", function ( type, arg1, arg2 ) {
-     *
-     *     console.log( arg1 + " " + arg2 );
-     *
-     * } );
-     *
-     * //触发selectionchange事件, 会执行上面的事件监听器
-     * //output: Hello World
-     * editor.fireEvent("selectionchange", "Hello", "World");
-     * ```
-     */
-    fireEvent:function () {
-        var types = arguments[0];
-        types = utils.trim(types).split(' ');
-        for (var i = 0, ti; ti = types[i++];) {
-            var listeners = getListener(this, ti),
-                r, t, k;
-            if (listeners) {
-                k = listeners.length;
-                while (k--) {
-                    if(!listeners[k])continue;
-                    t = listeners[k].apply(this, arguments);
-                    if(t === true){
-                        return t;
-                    }
-                    if (t !== undefined) {
-                        r = t;
-                    }
-                }
-            }
-            if (t = this['on' + ti.toLowerCase()]) {
-                r = t.apply(this, arguments);
-            }
-        }
-        return r;
-    }
-};
-/**
- * 获得对象所拥有监听类型的所有监听器
- * @unfile
- * @module UE
- * @since 1.2.6.1
- * @method getListener
- * @public
- * @param { Object } obj  查询监听器的对象
- * @param { String } type 事件类型
- * @param { Boolean } force  为true且当前所有type类型的侦听器不存在时,创建一个空监听器数组
- * @return { Array } 监听器数组
- */
-function getListener(obj, type, force) {
-    var allListeners;
-    type = type.toLowerCase();
-    return ( ( allListeners = ( obj.__allListeners || force && ( obj.__allListeners = {} ) ) )
-        && ( allListeners[type] || force && ( allListeners[type] = [] ) ) );
-}
-
-
-///import editor.js
-///import core/dom/dom.js
-///import core/utils.js
-/*
- * dtd html语义化的体现类
- * @constructor
- * @namespace dtd
- */
-var dtd = dom.dtd = (function() {
-    function _( s ) {
-        for (var k in s) {
-            s[k.toUpperCase()] = s[k];
-        }
-        return s;
-    }
-    var X = utils.extend2;
-    var A = _({isindex:1,fieldset:1}),
-        B = _({input:1,button:1,select:1,textarea:1,label:1}),
-        C = X( _({a:1}), B ),
-        D = X( {iframe:1}, C ),
-        E = _({hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,h6:1,ol:1,h1:1,h3:1,h2:1}),
-        F = _({ins:1,del:1,script:1,style:1}),
-        G = X( _({b:1,acronym:1,bdo:1,'var':1,'#':1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1}), F ),
-        H = X( _({sub:1,img:1,embed:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1}), G ),
-        I = X( _({p:1}), H ),
-        J = X( _({iframe:1}), H, B ),
-        K = _({img:1,embed:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,'#':1,select:1,menu:1,ins:1,abbr:1,label:1,code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,'var':1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1}),
-
-        L = X( _({a:0}), J ),//a不能被切开,所以把他
-        M = _({tr:1}),
-        N = _({'#':1}),
-        O = X( _({param:1}), K ),
-        P = X( _({form:1}), A, D, E, I ),
-        Q = _({li:1,ol:1,ul:1}),
-        R = _({style:1,script:1}),
-        S = _({base:1,link:1,meta:1,title:1}),
-        T = X( S, R ),
-        U = _({head:1,body:1}),
-        V = _({html:1});
-
-    var block = _({address:1,blockquote:1,center:1,dir:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,menu:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1}),
-
-        empty =  _({area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1});
-
-    return  _({
-
-        // $ 表示自定的属性
-
-        // body外的元素列表.
-        $nonBodyContent: X( V, U, S ),
-
-        //块结构元素列表
-        $block : block,
-
-        //内联元素列表
-        $inline : L,
-
-        $inlineWithA : X(_({a:1}),L),
-
-        $body : X( _({script:1,style:1}), block ),
-
-        $cdata : _({script:1,style:1}),
-
-        //自闭和元素
-        $empty : empty,
-
-        //不是自闭合,但不能让range选中里边
-        $nonChild : _({iframe:1,textarea:1}),
-        //列表元素列表
-        $listItem : _({dd:1,dt:1,li:1}),
-
-        //列表根元素列表
-        $list: _({ul:1,ol:1,dl:1}),
-
-        //不能认为是空的元素
-        $isNotEmpty : _({table:1,ul:1,ol:1,dl:1,iframe:1,area:1,base:1,col:1,hr:1,img:1,embed:1,input:1,link:1,meta:1,param:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1}),
-
-        //如果没有子节点就可以删除的元素列表,像span,a
-        $removeEmpty : _({a:1,abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,'var':1}),
-
-        $removeEmptyBlock : _({'p':1,'div':1}),
-
-        //在table元素里的元素列表
-        $tableContent : _({caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,th:1,thead:1,tr:1,table:1}),
-        //不转换的标签
-        $notTransContent : _({pre:1,script:1,style:1,textarea:1}),
-        html: U,
-        head: T,
-        style: N,
-        script: N,
-        body: P,
-        base: {},
-        link: {},
-        meta: {},
-        title: N,
-        col : {},
-        tr : _({td:1,th:1}),
-        img : {},
-        embed: {},
-        colgroup : _({thead:1,col:1,tbody:1,tr:1,tfoot:1}),
-        noscript : P,
-        td : P,
-        br : {},
-        th : P,
-        center : P,
-        kbd : L,
-        button : X( I, E ),
-        basefont : {},
-        h5 : L,
-        h4 : L,
-        samp : L,
-        h6 : L,
-        ol : Q,
-        h1 : L,
-        h3 : L,
-        option : N,
-        h2 : L,
-        form : X( A, D, E, I ),
-        select : _({optgroup:1,option:1}),
-        font : L,
-        ins : L,
-        menu : Q,
-        abbr : L,
-        label : L,
-        table : _({thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,tfoot:1}),
-        code : L,
-        tfoot : M,
-        cite : L,
-        li : P,
-        input : {},
-        iframe : P,
-        strong : L,
-        textarea : N,
-        noframes : P,
-        big : L,
-        small : L,
-        //trace:
-        span :_({'#':1,br:1,b:1,strong:1,u:1,i:1,em:1,sub:1,sup:1,strike:1,span:1}),
-        hr : L,
-        dt : L,
-        sub : L,
-        optgroup : _({option:1}),
-        param : {},
-        bdo : L,
-        'var' : L,
-        div : P,
-        object : O,
-        sup : L,
-        dd : P,
-        strike : L,
-        area : {},
-        dir : Q,
-        map : X( _({area:1,form:1,p:1}), A, F, E ),
-        applet : O,
-        dl : _({dt:1,dd:1}),
-        del : L,
-        isindex : {},
-        fieldset : X( _({legend:1}), K ),
-        thead : M,
-        ul : Q,
-        acronym : L,
-        b : L,
-        a : X( _({a:1}), J ),
-        blockquote :X(_({td:1,tr:1,tbody:1,li:1}),P),
-        caption : L,
-        i : L,
-        u : L,
-        tbody : M,
-        s : L,
-        address : X( D, I ),
-        tt : L,
-        legend : L,
-        q : L,
-        pre : X( G, C ),
-        p : X(_({'a':1}),L),
-        em :L,
-        dfn : L
-    });
-})();
-
-/**
- * Dom操作工具包
- * @file
- * @module UE.dom.domUtils
- * @since 1.2.6.1
- */
-
-/**
- * Dom操作工具包
- * @unfile
- * @module UE.dom.domUtils
- */
-function getDomNode(node, start, ltr, startFromChild, fn, guard) {
-    var tmpNode = startFromChild && node[start],
-        parent;
-    !tmpNode && (tmpNode = node[ltr]);
-    while (!tmpNode && (parent = (parent || node).parentNode)) {
-        if (parent.tagName == 'BODY' || guard && !guard(parent)) {
-            return null;
-        }
-        tmpNode = parent[ltr];
-    }
-    if (tmpNode && fn && !fn(tmpNode)) {
-        return  getDomNode(tmpNode, start, ltr, false, fn);
-    }
-    return tmpNode;
-}
-var attrFix = ie && browser.version < 9 ? {
-        tabindex:"tabIndex",
-        readonly:"readOnly",
-        "for":"htmlFor",
-        "class":"className",
-        maxlength:"maxLength",
-        cellspacing:"cellSpacing",
-        cellpadding:"cellPadding",
-        rowspan:"rowSpan",
-        colspan:"colSpan",
-        usemap:"useMap",
-        frameborder:"frameBorder"
-    } : {
-        tabindex:"tabIndex",
-        readonly:"readOnly"
-    },
-    styleBlock = utils.listToMap([
-        '-webkit-box', '-moz-box', 'block' ,
-        'list-item' , 'table' , 'table-row-group' ,
-        'table-header-group', 'table-footer-group' ,
-        'table-row' , 'table-column-group' , 'table-column' ,
-        'table-cell' , 'table-caption'
-    ]);
-var domUtils = dom.domUtils = {
-    //节点常量
-    NODE_ELEMENT:1,
-    NODE_DOCUMENT:9,
-    NODE_TEXT:3,
-    NODE_COMMENT:8,
-    NODE_DOCUMENT_FRAGMENT:11,
-
-    //位置关系
-    POSITION_IDENTICAL:0,
-    POSITION_DISCONNECTED:1,
-    POSITION_FOLLOWING:2,
-    POSITION_PRECEDING:4,
-    POSITION_IS_CONTAINED:8,
-    POSITION_CONTAINS:16,
-    //ie6使用其他的会有一段空白出现
-    fillChar:ie && browser.version == '6' ? '\ufeff' : '\u200B',
-    //-------------------------Node部分--------------------------------
-    keys:{
-        /*Backspace*/ 8:1, /*Delete*/ 46:1,
-        /*Shift*/ 16:1, /*Ctrl*/ 17:1, /*Alt*/ 18:1,
-        37:1, 38:1, 39:1, 40:1,
-        13:1 /*enter*/
-    },
-    /**
-     * 获取节点A相对于节点B的位置关系
-     * @method getPosition
-     * @param { Node } nodeA 需要查询位置关系的节点A
-     * @param { Node } nodeB 需要查询位置关系的节点B
-     * @return { Number } 节点A与节点B的关系
-     * @example
-     * ```javascript
-     * //output: 20
-     * var position = UE.dom.domUtils.getPosition( document.documentElement, document.body );
-     *
-     * switch ( position ) {
-     *
-     *      //0
-     *      case UE.dom.domUtils.POSITION_IDENTICAL:
-     *          console.log('元素相同');
-     *          break;
-     *      //1
-     *      case UE.dom.domUtils.POSITION_DISCONNECTED:
-     *          console.log('两个节点在不同的文档中');
-     *          break;
-     *      //2
-     *      case UE.dom.domUtils.POSITION_FOLLOWING:
-     *          console.log('节点A在节点B之后');
-     *          break;
-     *      //4
-     *      case UE.dom.domUtils.POSITION_PRECEDING;
-     *          console.log('节点A在节点B之前');
-     *          break;
-     *      //8
-     *      case UE.dom.domUtils.POSITION_IS_CONTAINED:
-     *          console.log('节点A被节点B包含');
-     *          break;
-     *      case 10:
-     *          console.log('节点A被节点B包含且节点A在节点B之后');
-     *          break;
-     *      //16
-     *      case UE.dom.domUtils.POSITION_CONTAINS:
-     *          console.log('节点A包含节点B');
-     *          break;
-     *      case 20:
-     *          console.log('节点A包含节点B且节点A在节点B之前');
-     *          break;
-     *
-     * }
-     * ```
-     */
-    getPosition:function (nodeA, nodeB) {
-        // 如果两个节点是同一个节点
-        if (nodeA === nodeB) {
-            // domUtils.POSITION_IDENTICAL
-            return 0;
-        }
-        var node,
-            parentsA = [nodeA],
-            parentsB = [nodeB];
-        node = nodeA;
-        while (node = node.parentNode) {
-            // 如果nodeB是nodeA的祖先节点
-            if (node === nodeB) {
-                // domUtils.POSITION_IS_CONTAINED + domUtils.POSITION_FOLLOWING
-                return 10;
-            }
-            parentsA.push(node);
-        }
-        node = nodeB;
-        while (node = node.parentNode) {
-            // 如果nodeA是nodeB的祖先节点
-            if (node === nodeA) {
-                // domUtils.POSITION_CONTAINS + domUtils.POSITION_PRECEDING
-                return 20;
-            }
-            parentsB.push(node);
-        }
-        parentsA.reverse();
-        parentsB.reverse();
-        if (parentsA[0] !== parentsB[0]) {
-            // domUtils.POSITION_DISCONNECTED
-            return 1;
-        }
-        var i = -1;
-        while (i++, parentsA[i] === parentsB[i]) {
-        }
-        nodeA = parentsA[i];
-        nodeB = parentsB[i];
-        while (nodeA = nodeA.nextSibling) {
-            if (nodeA === nodeB) {
-                // domUtils.POSITION_PRECEDING
-                return 4
-            }
-        }
-        // domUtils.POSITION_FOLLOWING
-        return  2;
-    },
-
-    /**
-     * 检测节点node在父节点中的索引位置
-     * @method getNodeIndex
-     * @param { Node } node 需要检测的节点对象
-     * @return { Number } 该节点在父节点中的位置
-     * @see UE.dom.domUtils.getNodeIndex(Node,Boolean)
-     */
-
-    /**
-     * 检测节点node在父节点中的索引位置, 根据给定的mergeTextNode参数决定是否要合并多个连续的文本节点为一个节点
-     * @method getNodeIndex
-     * @param { Node } node 需要检测的节点对象
-     * @param { Boolean } mergeTextNode 是否合并多个连续的文本节点为一个节点
-     * @return { Number } 该节点在父节点中的位置
-     * @example
-     * ```javascript
-     *
-     *      var node = document.createElement("div");
-     *
-     *      node.appendChild( document.createTextNode( "hello" ) );
-     *      node.appendChild( document.createTextNode( "world" ) );
-     *      node.appendChild( node = document.createElement( "div" ) );
-     *
-     *      //output: 2
-     *      console.log( UE.dom.domUtils.getNodeIndex( node ) );
-     *
-     *      //output: 1
-     *      console.log( UE.dom.domUtils.getNodeIndex( node, true ) );
-     *
-     * ```
-     */
-    getNodeIndex:function (node, ignoreTextNode) {
-        var preNode = node,
-            i = 0;
-        while (preNode = preNode.previousSibling) {
-            if (ignoreTextNode && preNode.nodeType == 3) {
-                if(preNode.nodeType != preNode.nextSibling.nodeType ){
-                    i++;
-                }
-                continue;
-            }
-            i++;
-        }
-        return i;
-    },
-
-    /**
-     * 检测节点node是否在给定的document对象上
-     * @method inDoc
-     * @param { Node } node 需要检测的节点对象
-     * @param { DomDocument } doc 需要检测的document对象
-     * @return { Boolean } 该节点node是否在给定的document的dom树上
-     * @example
-     * ```javascript
-     *
-     * var node = document.createElement("div");
-     *
-     * //output: false
-     * console.log( UE.do.domUtils.inDoc( node, document ) );
-     *
-     * document.body.appendChild( node );
-     *
-     * //output: true
-     * console.log( UE.do.domUtils.inDoc( node, document ) );
-     *
-     * ```
-     */
-    inDoc:function (node, doc) {
-        return domUtils.getPosition(node, doc) == 10;
-    },
-    /**
-     * 根据给定的过滤规则filterFn, 查找符合该过滤规则的node节点的第一个祖先节点,
-     * 查找的起点是给定node节点的父节点。
-     * @method findParent
-     * @param { Node } node 需要查找的节点
-     * @param { Function } filterFn 自定义的过滤方法。
-     * @warning 查找的终点是到body节点为止
-     * @remind 自定义的过滤方法filterFn接受一个Node对象作为参数, 该对象代表当前执行检测的祖先节点。 如果该
-     *          节点满足过滤条件, 则要求返回true, 这时将直接返回该节点作为findParent()的结果, 否则, 请返回false。
-     * @return { Node | Null } 如果找到符合过滤条件的节点, 就返回该节点, 否则返回NULL
-     * @example
-     * ```javascript
-     * var filterNode = UE.dom.domUtils.findParent( document.body.firstChild, function ( node ) {
-     *
-     *     //由于查找的终点是body节点, 所以永远也不会匹配当前过滤器的条件, 即这里永远会返回false
-     *     return node.tagName === "HTML";
-     *
-     * } );
-     *
-     * //output: true
-     * console.log( filterNode === null );
-     * ```
-     */
-
-    /**
-     * 根据给定的过滤规则filterFn, 查找符合该过滤规则的node节点的第一个祖先节点,
-     * 如果includeSelf的值为true,则查找的起点是给定的节点node, 否则, 起点是node的父节点
-     * @method findParent
-     * @param { Node } node 需要查找的节点
-     * @param { Function } filterFn 自定义的过滤方法。
-     * @param { Boolean } includeSelf 查找过程是否包含自身
-     * @warning 查找的终点是到body节点为止
-     * @remind 自定义的过滤方法filterFn接受一个Node对象作为参数, 该对象代表当前执行检测的祖先节点。 如果该
-     *          节点满足过滤条件, 则要求返回true, 这时将直接返回该节点作为findParent()的结果, 否则, 请返回false。
-     * @remind 如果includeSelf为true, 则过滤器第一次执行时的参数会是节点本身。
-     *          反之, 过滤器第一次执行时的参数将是该节点的父节点。
-     * @return { Node | Null } 如果找到符合过滤条件的节点, 就返回该节点, 否则返回NULL
-     * @example
-     * ```html
-     * <body>
-     *
-     *      <div id="test">
-     *      </div>
-     *
-     *      <script type="text/javascript">
-     *
-     *          //output: DIV, BODY
-     *          var filterNode = UE.dom.domUtils.findParent( document.getElementById( "test" ), function ( node ) {
-     *
-     *              console.log( node.tagName );
-     *              return false;
-     *
-     *          }, true );
-     *
-     *      </script>
-     * </body>
-     * ```
-     */
-    findParent:function (node, filterFn, includeSelf) {
-        if (node && !domUtils.isBody(node)) {
-            node = includeSelf ? node : node.parentNode;
-            while (node) {
-                if (!filterFn || filterFn(node) || domUtils.isBody(node)) {
-                    return filterFn && !filterFn(node) && domUtils.isBody(node) ? null : node;
-                }
-                node = node.parentNode;
-            }
-        }
-        return null;
-    },
-    /**
-     * 查找node的节点名为tagName的第一个祖先节点, 查找的起点是node节点的父节点。
-     * @method findParentByTagName
-     * @param { Node } node 需要查找的节点对象
-     * @param { Array } tagNames 需要查找的父节点的名称数组
-     * @warning 查找的终点是到body节点为止
-     * @return { Node | NULL } 如果找到符合条件的节点, 则返回该节点, 否则返回NULL
-     * @example
-     * ```javascript
-     * var node = UE.dom.domUtils.findParentByTagName( document.getElementsByTagName("div")[0], [ "BODY" ] );
-     * //output: BODY
-     * console.log( node.tagName );
-     * ```
-     */
-
-    /**
-     * 查找node的节点名为tagName的祖先节点, 如果includeSelf的值为true,则查找的起点是给定的节点node,
-     * 否则, 起点是node的父节点。
-     * @method findParentByTagName
-     * @param { Node } node 需要查找的节点对象
-     * @param { Array } tagNames 需要查找的父节点的名称数组
-     * @param { Boolean } includeSelf 查找过程是否包含node节点自身
-     * @warning 查找的终点是到body节点为止
-     * @return { Node | NULL } 如果找到符合条件的节点, 则返回该节点, 否则返回NULL
-     * @example
-     * ```javascript
-     * var queryTarget = document.getElementsByTagName("div")[0];
-     * var node = UE.dom.domUtils.findParentByTagName( queryTarget, [ "DIV" ], true );
-     * //output: true
-     * console.log( queryTarget === node );
-     * ```
-     */
-    findParentByTagName:function (node, tagNames, includeSelf, excludeFn) {
-        tagNames = utils.listToMap(utils.isArray(tagNames) ? tagNames : [tagNames]);
-        return domUtils.findParent(node, function (node) {
-            return tagNames[node.tagName] && !(excludeFn && excludeFn(node));
-        }, includeSelf);
-    },
-    /**
-     * 查找节点node的祖先节点集合, 查找的起点是给定节点的父节点,结果集中不包含给定的节点。
-     * @method findParents
-     * @param { Node } node 需要查找的节点对象
-     * @return { Array } 给定节点的祖先节点数组
-     * @grammar UE.dom.domUtils.findParents(node)  => Array  //返回一个祖先节点数组集合,不包含自身
-     * @grammar UE.dom.domUtils.findParents(node,includeSelf)  => Array  //返回一个祖先节点数组集合,includeSelf指定是否包含自身
-     * @grammar UE.dom.domUtils.findParents(node,includeSelf,filterFn)  => Array  //返回一个祖先节点数组集合,filterFn指定过滤条件,返回true的node将被选取
-     * @grammar UE.dom.domUtils.findParents(node,includeSelf,filterFn,closerFirst)  => Array  //返回一个祖先节点数组集合,closerFirst为true的话,node的直接父亲节点是数组的第0个
-     */
-
-    /**
-     * 查找节点node的祖先节点集合, 如果includeSelf的值为true,
-     * 则返回的结果集中允许出现当前给定的节点, 否则, 该节点不会出现在其结果集中。
-     * @method findParents
-     * @param { Node } node 需要查找的节点对象
-     * @param { Boolean } includeSelf 查找的结果中是否允许包含当前查找的节点对象
-     * @return { Array } 给定节点的祖先节点数组
-     */
-    findParents:function (node, includeSelf, filterFn, closerFirst) {
-        var parents = includeSelf && ( filterFn && filterFn(node) || !filterFn ) ? [node] : [];
-        while (node = domUtils.findParent(node, filterFn)) {
-            parents.push(node);
-        }
-        return closerFirst ? parents : parents.reverse();
-    },
-
-    /**
-     * 在节点node后面插入新节点newNode
-     * @method insertAfter
-     * @param { Node } node 目标节点
-     * @param { Node } newNode 新插入的节点, 该节点将置于目标节点之后
-     * @return { Node } 新插入的节点
-     */
-    insertAfter:function (node, newNode) {
-        return node.nextSibling ? node.parentNode.insertBefore(newNode, node.nextSibling):
-            node.parentNode.appendChild(newNode);
-    },
-
-    /**
-     * 删除节点node及其下属的所有节点
-     * @method remove
-     * @param { Node } node 需要删除的节点对象
-     * @return { Node } 返回刚删除的节点对象
-     * @example
-     * ```html
-     * <div id="test">
-     *     <div id="child">你好</div>
-     * </div>
-     * <script>
-     *     UE.dom.domUtils.remove( document.body, false );
-     *     //output: false
-     *     console.log( document.getElementById( "child" ) !== null );
-     * </script>
-     * ```
-     */
-
-    /**
-     * 删除节点node,并根据keepChildren的值决定是否保留子节点
-     * @method remove
-     * @param { Node } node 需要删除的节点对象
-     * @param { Boolean } keepChildren 是否需要保留子节点
-     * @return { Node } 返回刚删除的节点对象
-     * @example
-     * ```html
-     * <div id="test">
-     *     <div id="child">你好</div>
-     * </div>
-     * <script>
-     *     UE.dom.domUtils.remove( document.body, true );
-     *     //output: true
-     *     console.log( document.getElementById( "child" ) !== null );
-     * </script>
-     * ```
-     */
-    remove:function (node, keepChildren) {
-        var parent = node.parentNode,
-            child;
-        if (parent) {
-            if (keepChildren && node.hasChildNodes()) {
-                while (child = node.firstChild) {
-                    parent.insertBefore(child, node);
-                }
-            }
-            parent.removeChild(node);
-        }
-        return node;
-    },
-
-    /**
-     * 取得node节点的下一个兄弟节点, 如果该节点其后没有兄弟节点, 则递归查找其父节点之后的第一个兄弟节点,
-     * 直到找到满足条件的节点或者递归到BODY节点之后才会结束。
-     * @method getNextDomNode
-     * @param { Node } node 需要获取其后的兄弟节点的节点对象
-     * @return { Node | NULL } 如果找满足条件的节点, 则返回该节点, 否则返回NULL
-     * @example
-     * ```html
-     *     <body>
-     *      <div id="test">
-     *          <span></span>
-     *      </div>
-     *      <i>xxx</i>
-     * </body>
-     * <script>
-     *
-     *     //output: i节点
-     *     console.log( UE.dom.domUtils.getNextDomNode( document.getElementById( "test" ) ) );
-     *
-     * </script>
-     * ```
-     * @example
-     * ```html
-     * <body>
-     *      <div>
-     *          <span></span>
-     *          <i id="test">xxx</i>
-     *      </div>
-     *      <b>xxx</b>
-     * </body>
-     * <script>
-     *
-     *     //由于id为test的i节点之后没有兄弟节点, 则查找其父节点(div)后面的兄弟节点
-     *     //output: b节点
-     *     console.log( UE.dom.domUtils.getNextDomNode( document.getElementById( "test" ) ) );
-     *
-     * </script>
-     * ```
-     */
-
-    /**
-     * 取得node节点的下一个兄弟节点, 如果startFromChild的值为ture,则先获取其子节点,
-     * 如果有子节点则直接返回第一个子节点;如果没有子节点或者startFromChild的值为false,
-     * 则执行<a href="#UE.dom.domUtils.getNextDomNode(Node)">getNextDomNode(Node node)</a>的查找过程。
-     * @method getNextDomNode
-     * @param { Node } node 需要获取其后的兄弟节点的节点对象
-     * @param { Boolean } startFromChild 查找过程是否从其子节点开始
-     * @return { Node | NULL } 如果找满足条件的节点, 则返回该节点, 否则返回NULL
-     * @see UE.dom.domUtils.getNextDomNode(Node)
-     */
-    getNextDomNode:function (node, startFromChild, filterFn, guard) {
-        return getDomNode(node, 'firstChild', 'nextSibling', startFromChild, filterFn, guard);
-    },
-    getPreDomNode:function (node, startFromChild, filterFn, guard) {
-        return getDomNode(node, 'lastChild', 'previousSibling', startFromChild, filterFn, guard);
-    },
-    /**
-     * 检测节点node是否属是UEditor定义的bookmark节点
-     * @method isBookmarkNode
-     * @private
-     * @param { Node } node 需要检测的节点对象
-     * @return { Boolean } 是否是bookmark节点
-     * @example
-     * ```html
-     * <span id="_baidu_bookmark_1"></span>
-     * <script>
-     *      var bookmarkNode = document.getElementById("_baidu_bookmark_1");
-     *      //output: true
-     *      console.log( UE.dom.domUtils.isBookmarkNode( bookmarkNode ) );
-     * </script>
-     * ```
-     */
-    isBookmarkNode:function (node) {
-        return node.nodeType == 1 && node.id && /^_baidu_bookmark_/i.test(node.id);
-    },
-    /**
-     * 获取节点node所属的window对象
-     * @method  getWindow
-     * @param { Node } node 节点对象
-     * @return { Window } 当前节点所属的window对象
-     * @example
-     * ```javascript
-     * //output: true
-     * console.log( UE.dom.domUtils.getWindow( document.body ) === window );
-     * ```
-     */
-    getWindow:function (node) {
-        var doc = node.ownerDocument || node;
-        return doc.defaultView || doc.parentWindow;
-    },
-    /**
-     * 获取离nodeA与nodeB最近的公共的祖先节点
-     * @method  getCommonAncestor
-     * @param { Node } nodeA 第一个节点
-     * @param { Node } nodeB 第二个节点
-     * @remind 如果给定的两个节点是同一个节点, 将直接返回该节点。
-     * @return { Node | NULL } 如果未找到公共节点, 返回NULL, 否则返回最近的公共祖先节点。
-     * @example
-     * ```javascript
-     * var commonAncestor = UE.dom.domUtils.getCommonAncestor( document.body, document.body.firstChild );
-     * //output: true
-     * console.log( commonAncestor.tagName.toLowerCase() === 'body' );
-     * ```
-     */
-    getCommonAncestor:function (nodeA, nodeB) {
-        if (nodeA === nodeB)
-            return nodeA;
-        var parentsA = [nodeA] , parentsB = [nodeB], parent = nodeA, i = -1;
-        while (parent = parent.parentNode) {
-            if (parent === nodeB) {
-                return parent;
-            }
-            parentsA.push(parent);
-        }
-        parent = nodeB;
-        while (parent = parent.parentNode) {
-            if (parent === nodeA)
-                return parent;
-            parentsB.push(parent);
-        }
-        parentsA.reverse();
-        parentsB.reverse();
-        while (i++, parentsA[i] === parentsB[i]) {
-        }
-        return i == 0 ? null : parentsA[i - 1];
-
-    },
-    /**
-     * 清除node节点左右连续为空的兄弟inline节点
-     * @method clearEmptySibling
-     * @param { Node } node 执行的节点对象, 如果该节点的左右连续的兄弟节点是空的inline节点,
-     * 则这些兄弟节点将被删除
-     * @grammar UE.dom.domUtils.clearEmptySibling(node,ignoreNext)  //ignoreNext指定是否忽略右边空节点
-     * @grammar UE.dom.domUtils.clearEmptySibling(node,ignoreNext,ignorePre)  //ignorePre指定是否忽略左边空节点
-     * @example
-     * ```html
-     * <body>
-     *     <div></div>
-     *     <span id="test"></span>
-     *     <i></i>
-     *     <b></b>
-     *     <em>xxx</em>
-     *     <span></span>
-     * </body>
-     * <script>
-     *
-     *      UE.dom.domUtils.clearEmptySibling( document.getElementById( "test" ) );
-     *
-     *      //output: <div></div><span id="test"></span><em>xxx</em><span></span>
-     *      console.log( document.body.innerHTML );
-     *
-     * </script>
-     * ```
-     */
-
-    /**
-     * 清除node节点左右连续为空的兄弟inline节点, 如果ignoreNext的值为true,
-     * 则忽略对右边兄弟节点的操作。
-     * @method clearEmptySibling
-     * @param { Node } node 执行的节点对象, 如果该节点的左右连续的兄弟节点是空的inline节点,
-     * @param { Boolean } ignoreNext 是否忽略忽略对右边的兄弟节点的操作
-     * 则这些兄弟节点将被删除
-     * @see UE.dom.domUtils.clearEmptySibling(Node)
-     */
-
-    /**
-     * 清除node节点左右连续为空的兄弟inline节点, 如果ignoreNext的值为true,
-     * 则忽略对右边兄弟节点的操作, 如果ignorePre的值为true,则忽略对左边兄弟节点的操作。
-     * @method clearEmptySibling
-     * @param { Node } node 执行的节点对象, 如果该节点的左右连续的兄弟节点是空的inline节点,
-     * @param { Boolean } ignoreNext 是否忽略忽略对右边的兄弟节点的操作
-     * @param { Boolean } ignorePre 是否忽略忽略对左边的兄弟节点的操作
-     * 则这些兄弟节点将被删除
-     * @see UE.dom.domUtils.clearEmptySibling(Node)
-     */
-    clearEmptySibling:function (node, ignoreNext, ignorePre) {
-        function clear(next, dir) {
-            var tmpNode;
-            while (next && !domUtils.isBookmarkNode(next) && (domUtils.isEmptyInlineElement(next)
-                //这里不能把空格算进来会吧空格干掉,出现文字间的空格丢掉了
-                || !new RegExp('[^\t\n\r' + domUtils.fillChar + ']').test(next.nodeValue) )) {
-                tmpNode = next[dir];
-                domUtils.remove(next);
-                next = tmpNode;
-            }
-        }
-        !ignoreNext && clear(node.nextSibling, 'nextSibling');
-        !ignorePre && clear(node.previousSibling, 'previousSibling');
-    },
-    /**
-     * 将一个文本节点textNode拆分成两个文本节点,offset指定拆分位置
-     * @method split
-     * @param { Node } textNode 需要拆分的文本节点对象
-     * @param { int } offset 需要拆分的位置, 位置计算从0开始
-     * @return { Node } 拆分后形成的新节点
-     * @example
-     * ```html
-     * <div id="test">abcdef</div>
-     * <script>
-     *      var newNode = UE.dom.domUtils.split( document.getElementById( "test" ).firstChild, 3 );
-     *      //output: def
-     *      console.log( newNode.nodeValue );
-     * </script>
-     * ```
-     */
-    split:function (node, offset) {
-        var doc = node.ownerDocument;
-        if (browser.ie && offset == node.nodeValue.length) {
-            var next = doc.createTextNode('');
-            return domUtils.insertAfter(node, next);
-        }
-        var retval = node.splitText(offset);
-        //ie8下splitText不会跟新childNodes,我们手动触发他的更新
-        if (browser.ie8) {
-            var tmpNode = doc.createTextNode('');
-            domUtils.insertAfter(retval, tmpNode);
-            domUtils.remove(tmpNode);
-        }
-        return retval;
-    },
-
-    /**
-     * 检测文本节点textNode是否为空节点(包括空格、换行、占位符等字符)
-     * @method  isWhitespace
-     * @param { Node } node 需要检测的节点对象
-     * @return { Boolean } 检测的节点是否为空
-     * @example
-     * ```html
-     * <div id="test">
-     *
-     * </div>
-     * <script>
-     *      //output: true
-     *      console.log( UE.dom.domUtils.isWhitespace( document.getElementById("test").firstChild ) );
-     * </script>
-     * ```
-     */
-    isWhitespace:function (node) {
-        return !new RegExp('[^ \t\n\r' + domUtils.fillChar + ']').test(node.nodeValue);
-    },
-    /**
-     * 获取元素element相对于viewport的位置坐标
-     * @method getXY
-     * @param { Node } element 需要计算位置的节点对象
-     * @return { Object } 返回形如{x:left,y:top}的一个key-value映射对象, 其中键x代表水平偏移距离,
-     *                          y代表垂直偏移距离。
-     *
-     * @example
-     * ```javascript
-     * var location = UE.dom.domUtils.getXY( document.getElementById("test") );
-     * //output: test的坐标为: 12, 24
-     * console.log( 'test的坐标为: ', location.x, ',', location.y );
-     * ```
-     */
-    getXY:function (element) {
-        var x = 0, y = 0;
-        while (element.offsetParent) {
-            y += element.offsetTop;
-            x += element.offsetLeft;
-            element = element.offsetParent;
-        }
-        return { 'x':x, 'y':y};
-    },
-    /**
-     * 为元素element绑定原生DOM事件,type为事件类型,handler为处理函数
-     * @method on
-     * @param { Node } element 需要绑定事件的节点对象
-     * @param { String } type 绑定的事件类型
-     * @param { Function } handler 事件处理器
-     * @example
-     * ```javascript
-     * UE.dom.domUtils.on(document.body,"click",function(e){
-     *     //e为事件对象,this为被点击元素对戏那个
-     * });
-     * ```
-     */
-
-    /**
-     * 为元素element绑定原生DOM事件,type为事件类型,handler为处理函数
-     * @method on
-     * @param { Node } element 需要绑定事件的节点对象
-     * @param { Array } type 绑定的事件类型数组
-     * @param { Function } handler 事件处理器
-     * @example
-     * ```javascript
-     * UE.dom.domUtils.on(document.body,["click","mousedown"],function(evt){
-     *     //evt为事件对象,this为被点击元素对象
-     * });
-     * ```
-     */
-    on:function (element, type, handler) {
-
-        var types = utils.isArray(type) ? type : utils.trim(type).split(/\s+/),
-            k = types.length;
-        if (k) while (k--) {
-            type = types[k];
-            if (element.addEventListener) {
-                element.addEventListener(type, handler, false);
-            } else {
-                if (!handler._d) {
-                    handler._d = {
-                        els : []
-                    };
-                }
-                var key = type + handler.toString(),index = utils.indexOf(handler._d.els,element);
-                if (!handler._d[key] || index == -1) {
-                    if(index == -1){
-                        handler._d.els.push(element);
-                    }
-                    if(!handler._d[key]){
-                        handler._d[key] = function (evt) {
-                            return handler.call(evt.srcElement, evt || window.event);
-                        };
-                    }
-
-
-                    element.attachEvent('on' + type, handler._d[key]);
-                }
-            }
-        }
-        element = null;
-    },
-    /**
-     * 解除DOM事件绑定
-     * @method un
-     * @param { Node } element 需要解除事件绑定的节点对象
-     * @param { String } type 需要接触绑定的事件类型
-     * @param { Function } handler 对应的事件处理器
-     * @example
-     * ```javascript
-     * UE.dom.domUtils.un(document.body,"click",function(evt){
-     *     //evt为事件对象,this为被点击元素对象
-     * });
-     * ```
-     */
-
-    /**
-     * 解除DOM事件绑定
-     * @method un
-     * @param { Node } element 需要解除事件绑定的节点对象
-     * @param { Array } type 需要接触绑定的事件类型数组
-     * @param { Function } handler 对应的事件处理器
-     * @example
-     * ```javascript
-     * UE.dom.domUtils.un(document.body, ["click","mousedown"],function(evt){
-     *     //evt为事件对象,this为被点击元素对象
-     * });
-     * ```
-     */
-    un:function (element, type, handler) {
-        var types = utils.isArray(type) ? type : utils.trim(type).split(/\s+/),
-            k = types.length;
-        if (k) while (k--) {
-            type = types[k];
-            if (element.removeEventListener) {
-                element.removeEventListener(type, handler, false);
-            } else {
-                var key = type + handler.toString();
-                try{
-                    element.detachEvent('on' + type, handler._d ? handler._d[key] : handler);
-                }catch(e){}
-                if (handler._d && handler._d[key]) {
-                    var index = utils.indexOf(handler._d.els,element);
-                    if(index!=-1){
-                        handler._d.els.splice(index,1);
-                    }
-                    handler._d.els.length == 0 && delete handler._d[key];
-                }
-            }
-        }
-    },
-
-    /**
-     * 比较节点nodeA与节点nodeB是否具有相同的标签名、属性名以及属性值
-     * @method  isSameElement
-     * @param { Node } nodeA 需要比较的节点
-     * @param { Node } nodeB 需要比较的节点
-     * @return { Boolean } 两个节点是否具有相同的标签名、属性名以及属性值
-     * @example
-     * ```html
-     * <span style="font-size:12px">ssss</span>
-     * <span style="font-size:12px">bbbbb</span>
-     * <span style="font-size:13px">ssss</span>
-     * <span style="font-size:14px">bbbbb</span>
-     *
-     * <script>
-     *
-     *     var nodes = document.getElementsByTagName( "span" );
-     *
-     *     //output: true
-     *     console.log( UE.dom.domUtils.isSameElement( nodes[0], nodes[1] ) );
-     *
-     *     //output: false
-     *     console.log( UE.dom.domUtils.isSameElement( nodes[2], nodes[3] ) );
-     *
-     * </script>
-     * ```
-     */
-    isSameElement:function (nodeA, nodeB) {
-        if (nodeA.tagName != nodeB.tagName) {
-            return false;
-        }
-        var thisAttrs = nodeA.attributes,
-            otherAttrs = nodeB.attributes;
-        if (!ie && thisAttrs.length != otherAttrs.length) {
-            return false;
-        }
-        var attrA, attrB, al = 0, bl = 0;
-        for (var i = 0; attrA = thisAttrs[i++];) {
-            if (attrA.nodeName == 'style') {
-                if (attrA.specified) {
-                    al++;
-                }
-                if (domUtils.isSameStyle(nodeA, nodeB)) {
-                    continue;
-                } else {
-                    return false;
-                }
-            }
-            if (ie) {
-                if (attrA.specified) {
-                    al++;
-                    attrB = otherAttrs.getNamedItem(attrA.nodeName);
-                } else {
-                    continue;
-                }
-            } else {
-                attrB = nodeB.attributes[attrA.nodeName];
-            }
-            if (!attrB.specified || attrA.nodeValue != attrB.nodeValue) {
-                return false;
-            }
-        }
-        // 有可能attrB的属性包含了attrA的属性之外还有自己的属性
-        if (ie) {
-            for (i = 0; attrB = otherAttrs[i++];) {
-                if (attrB.specified) {
-                    bl++;
-                }
-            }
-            if (al != bl) {
-                return false;
-            }
-        }
-        return true;
-    },
-
-    /**
-     * 判断节点nodeA与节点nodeB的元素的style属性是否一致
-     * @method isSameStyle
-     * @param { Node } nodeA 需要比较的节点
-     * @param { Node } nodeB 需要比较的节点
-     * @return { Boolean } 两个节点是否具有相同的style属性值
-     * @example
-     * ```html
-     * <span style="font-size:12px">ssss</span>
-     * <span style="font-size:12px">bbbbb</span>
-     * <span style="font-size:13px">ssss</span>
-     * <span style="font-size:14px">bbbbb</span>
-     *
-     * <script>
-     *
-     *     var nodes = document.getElementsByTagName( "span" );
-     *
-     *     //output: true
-     *     console.log( UE.dom.domUtils.isSameStyle( nodes[0], nodes[1] ) );
-     *
-     *     //output: false
-     *     console.log( UE.dom.domUtils.isSameStyle( nodes[2], nodes[3] ) );
-     *
-     * </script>
-     * ```
-     */
-    isSameStyle:function (nodeA, nodeB) {
-        var styleA = nodeA.style.cssText.replace(/( ?; ?)/g, ';').replace(/( ?: ?)/g, ':'),
-            styleB = nodeB.style.cssText.replace(/( ?; ?)/g, ';').replace(/( ?: ?)/g, ':');
-        if (browser.opera) {
-            styleA = nodeA.style;
-            styleB = nodeB.style;
-            if (styleA.length != styleB.length)
-                return false;
-            for (var p in styleA) {
-                if (/^(\d+|csstext)$/i.test(p)) {
-                    continue;
-                }
-                if (styleA[p] != styleB[p]) {
-                    return false;
-                }
-            }
-            return true;
-        }
-        if (!styleA || !styleB) {
-            return styleA == styleB;
-        }
-        styleA = styleA.split(';');
-        styleB = styleB.split(';');
-        if (styleA.length != styleB.length) {
-            return false;
-        }
-        for (var i = 0, ci; ci = styleA[i++];) {
-            if (utils.indexOf(styleB, ci) == -1) {
-                return false;
-            }
-        }
-        return true;
-    },
-    /**
-     * 检查节点node是否为block元素
-     * @method isBlockElm
-     * @param { Node } node 需要检测的节点对象
-     * @return { Boolean } 是否是block元素节点
-     * @warning 该方法的判断规则如下: 如果该元素原本是block元素, 则不论该元素当前的css样式是什么都会返回true;
-     *          否则,检测该元素的css样式, 如果该元素当前是block元素, 则返回true。 其余情况下都返回false。
-     * @example
-     * ```html
-     * <span id="test1" style="display: block"></span>
-     * <span id="test2"></span>
-     * <div id="test3" style="display: inline"></div>
-     *
-     * <script>
-     *
-     *     //output: true
-     *     console.log( UE.dom.domUtils.isBlockElm( document.getElementById("test1") ) );
-     *
-     *     //output: false
-     *     console.log( UE.dom.domUtils.isBlockElm( document.getElementById("test2") ) );
-     *
-     *     //output: true
-     *     console.log( UE.dom.domUtils.isBlockElm( document.getElementById("test3") ) );
-     *
-     * </script>
-     * ```
-     */
-    isBlockElm:function (node) {
-        return node.nodeType == 1 && (dtd.$block[node.tagName] || styleBlock[domUtils.getComputedStyle(node, 'display')]) && !dtd.$nonChild[node.tagName];
-    },
-    /**
-     * 检测node节点是否为body节点
-     * @method isBody
-     * @param { Element } node 需要检测的dom元素
-     * @return { Boolean } 给定的元素是否是body元素
-     * @example
-     * ```javascript
-     * //output: true
-     * console.log( UE.dom.domUtils.isBody( document.body ) );
-     * ```
-     */
-    isBody:function (node) {
-        return  node && node.nodeType == 1 && node.tagName.toLowerCase() == 'body';
-    },
-    /**
-     * 以node节点为分界,将该节点的指定祖先节点parent拆分成两个独立的节点,
-     * 拆分形成的两个节点之间是node节点
-     * @method breakParent
-     * @param { Node } node 作为分界的节点对象
-     * @param { Node } parent 该节点必须是node节点的祖先节点, 且是block节点。
-     * @return { Node } 给定的node分界节点
-     * @example
-     * ```javascript
-     *
-     *      var node = document.createElement("span"),
-     *          wrapNode = document.createElement( "div" ),
-     *          parent = document.createElement("p");
-     *
-     *      parent.appendChild( node );
-     *      wrapNode.appendChild( parent );
-     *
-     *      //拆分前
-     *      //output: <p><span></span></p>
-     *      console.log( wrapNode.innerHTML );
-     *
-     *
-     *      UE.dom.domUtils.breakParent( node, parent );
-     *      //拆分后
-     *      //output: <p></p><span></span><p></p>
-     *      console.log( wrapNode.innerHTML );
-     *
-     * ```
-     */
-    breakParent:function (node, parent) {
-        var tmpNode,
-            parentClone = node,
-            clone = node,
-            leftNodes,
-            rightNodes;
-        do {
-            parentClone = parentClone.parentNode;
-            if (leftNodes) {
-                tmpNode = parentClone.cloneNode(false);
-                tmpNode.appendChild(leftNodes);
-                leftNodes = tmpNode;
-                tmpNode = parentClone.cloneNode(false);
-                tmpNode.appendChild(rightNodes);
-                rightNodes = tmpNode;
-            } else {
-                leftNodes = parentClone.cloneNode(false);
-                rightNodes = leftNodes.cloneNode(false);
-            }
-            while (tmpNode = clone.previousSibling) {
-                leftNodes.insertBefore(tmpNode, leftNodes.firstChild);
-            }
-            while (tmpNode = clone.nextSibling) {
-                rightNodes.appendChild(tmpNode);
-            }
-            clone = parentClone;
-        } while (parent !== parentClone);
-        tmpNode = parent.parentNode;
-        tmpNode.insertBefore(leftNodes, parent);
-        tmpNode.insertBefore(rightNodes, parent);
-        tmpNode.insertBefore(node, rightNodes);
-        domUtils.remove(parent);
-        return node;
-    },
-    /**
-     * 检查节点node是否是空inline节点
-     * @method  isEmptyInlineElement
-     * @param { Node } node 需要检测的节点对象
-     * @return { Number }  如果给定的节点是空的inline节点, 则返回1, 否则返回0。
-     * @example
-     * ```html
-     * <b><i></i></b> => 1
-     * <b><i></i><u></u></b> => 1
-     * <b></b> => 1
-     * <b>xx<i></i></b> => 0
-     * ```
-     */
-    isEmptyInlineElement:function (node) {
-        if (node.nodeType != 1 || !dtd.$removeEmpty[ node.tagName ]) {
-            return 0;
-        }
-        node = node.firstChild;
-        while (node) {
-            //如果是创建的bookmark就跳过
-            if (domUtils.isBookmarkNode(node)) {
-                return 0;
-            }
-            if (node.nodeType == 1 && !domUtils.isEmptyInlineElement(node) ||
-                node.nodeType == 3 && !domUtils.isWhitespace(node)
-                ) {
-                return 0;
-            }
-            node = node.nextSibling;
-        }
-        return 1;
-
-    },
-
-    /**
-     * 删除node节点下首尾两端的空白文本子节点
-     * @method trimWhiteTextNode
-     * @param { Element } node 需要执行删除操作的元素对象
-     * @example
-     * ```javascript
-     *      var node = document.createElement("div");
-     *
-     *      node.appendChild( document.createTextNode( "" ) );
-     *
-     *      node.appendChild( document.createElement("div") );
-     *
-     *      node.appendChild( document.createTextNode( "" ) );
-     *
-     *      //3
-     *      console.log( node.childNodes.length );
-     *
-     *      UE.dom.domUtils.trimWhiteTextNode( node );
-     *
-     *      //1
-     *      console.log( node.childNodes.length );
-     * ```
-     */
-    trimWhiteTextNode:function (node) {
-        function remove(dir) {
-            var child;
-            while ((child = node[dir]) && child.nodeType == 3 && domUtils.isWhitespace(child)) {
-                node.removeChild(child);
-            }
-        }
-        remove('firstChild');
-        remove('lastChild');
-    },
-
-    /*
-     * 合并node节点下相同的子节点
-     * @name mergeChild
-     * @desc
-     * UE.dom.domUtils.mergeChild(node,tagName) //tagName要合并的子节点的标签
-     * @example
-     * <p><span style="font-size:12px;">xx<span style="font-size:12px;">aa</span>xx</span></p>
-     * ==> UE.dom.domUtils.mergeChild(node,'span')
-     * <p><span style="font-size:12px;">xxaaxx</span></p>
-     */
-    mergeChild:function (node, tagName, attrs) {
-        var list = domUtils.getElementsByTagName(node, node.tagName.toLowerCase());
-        for (var i = 0, ci; ci = list[i++];) {
-            if (!ci.parentNode || domUtils.isBookmarkNode(ci)) {
-                continue;
-            }
-            //span单独处理
-            if (ci.tagName.toLowerCase() == 'span') {
-                if (node === ci.parentNode) {
-                    domUtils.trimWhiteTextNode(node);
-                    if (node.childNodes.length == 1) {
-                        node.style.cssText = ci.style.cssText + ";" + node.style.cssText;
-                        domUtils.remove(ci, true);
-                        continue;
-                    }
-                }
-                ci.style.cssText = node.style.cssText + ';' + ci.style.cssText;
-                if (attrs) {
-                    var style = attrs.style;
-                    if (style) {
-                        style = style.split(';');
-                        for (var j = 0, s; s = style[j++];) {
-                            ci.style[utils.cssStyleToDomStyle(s.split(':')[0])] = s.split(':')[1];
-                        }
-                    }
-                }
-                if (domUtils.isSameStyle(ci, node)) {
-                    domUtils.remove(ci, true);
-                }
-                continue;
-            }
-            if (domUtils.isSameElement(node, ci)) {
-                domUtils.remove(ci, true);
-            }
-        }
-    },
-
-    /**
-     * 原生方法getElementsByTagName的封装
-     * @method getElementsByTagName
-     * @param { Node } node 目标节点对象
-     * @param { String } tagName 需要查找的节点的tagName, 多个tagName以空格分割
-     * @return { Array } 符合条件的节点集合
-     */
-    getElementsByTagName:function (node, name,filter) {
-        if(filter && utils.isString(filter)){
-           var className = filter;
-           filter =  function(node){return domUtils.hasClass(node,className)}
-        }
-        name = utils.trim(name).replace(/[ ]{2,}/g,' ').split(' ');
-        var arr = [];
-        for(var n = 0,ni;ni=name[n++];){
-            var list = node.getElementsByTagName(ni);
-            for (var i = 0, ci; ci = list[i++];) {
-                if(!filter || filter(ci))
-                    arr.push(ci);
-            }
-        }
-
-        return arr;
-    },
-    /**
-     * 将节点node提取到父节点上
-     * @method mergeToParent
-     * @param { Element } node 需要提取的元素对象
-     * @example
-     * ```html
-     * <div id="parent">
-     *     <div id="sub">
-     *         <span id="child"></span>
-     *     </div>
-     * </div>
-     *
-     * <script>
-     *
-     *     var child = document.getElementById( "child" );
-     *
-     *     //output: sub
-     *     console.log( child.parentNode.id );
-     *
-     *     UE.dom.domUtils.mergeToParent( child );
-     *
-     *     //output: parent
-     *     console.log( child.parentNode.id );
-     *
-     * </script>
-     * ```
-     */
-    mergeToParent:function (node) {
-        var parent = node.parentNode;
-        while (parent && dtd.$removeEmpty[parent.tagName]) {
-            if (parent.tagName == node.tagName || parent.tagName == 'A') {//针对a标签单独处理
-                domUtils.trimWhiteTextNode(parent);
-                //span需要特殊处理  不处理这样的情况 <span stlye="color:#fff">xxx<span style="color:#ccc">xxx</span>xxx</span>
-                if (parent.tagName == 'SPAN' && !domUtils.isSameStyle(parent, node)
-                    || (parent.tagName == 'A' && node.tagName == 'SPAN')) {
-                    if (parent.childNodes.length > 1 || parent !== node.parentNode) {
-                        node.style.cssText = parent.style.cssText + ";" + node.style.cssText;
-                        parent = parent.parentNode;
-                        continue;
-                    } else {
-                        parent.style.cssText += ";" + node.style.cssText;
-                        //trace:952 a标签要保持下划线
-                        if (parent.tagName == 'A') {
-                            parent.style.textDecoration = 'underline';
-                        }
-                    }
-                }
-                if (parent.tagName != 'A') {
-                    parent === node.parentNode && domUtils.remove(node, true);
-                    break;
-                }
-            }
-            parent = parent.parentNode;
-        }
-    },
-    /**
-     * 合并节点node的左右兄弟节点
-     * @method mergeSibling
-     * @param { Element } node 需要合并的目标节点
-     * @example
-     * ```html
-     * <b>xxxx</b><b id="test">ooo</b><b>xxxx</b>
-     *
-     * <script>
-     *     var demoNode = document.getElementById("test");
-     *     UE.dom.domUtils.mergeSibling( demoNode );
-     *     //output: xxxxoooxxxx
-     *     console.log( demoNode.innerHTML );
-     * </script>
-     * ```
-     */
-
-    /**
-     * 合并节点node的左右兄弟节点, 可以根据给定的条件选择是否忽略合并左节点。
-     * @method mergeSibling
-     * @param { Element } node 需要合并的目标节点
-     * @param { Boolean } ignorePre 是否忽略合并左节点
-     * @example
-     * ```html
-     * <b>xxxx</b><b id="test">ooo</b><b>xxxx</b>
-     *
-     * <script>
-     *     var demoNode = document.getElementById("test");
-     *     UE.dom.domUtils.mergeSibling( demoNode, true );
-     *     //output: oooxxxx
-     *     console.log( demoNode.innerHTML );
-     * </script>
-     * ```
-     */
-
-    /**
-     * 合并节点node的左右兄弟节点,可以根据给定的条件选择是否忽略合并左右节点。
-     * @method mergeSibling
-     * @param { Element } node 需要合并的目标节点
-     * @param { Boolean } ignorePre 是否忽略合并左节点
-     * @param { Boolean } ignoreNext 是否忽略合并右节点
-     * @remind 如果同时忽略左右节点, 则该操作什么也不会做
-     * @example
-     * ```html
-     * <b>xxxx</b><b id="test">ooo</b><b>xxxx</b>
-     *
-     * <script>
-     *     var demoNode = document.getElementById("test");
-     *     UE.dom.domUtils.mergeSibling( demoNode, false, true );
-     *     //output: xxxxooo
-     *     console.log( demoNode.innerHTML );
-     * </script>
-     * ```
-     */
-    mergeSibling:function (node, ignorePre, ignoreNext) {
-        function merge(rtl, start, node) {
-            var next;
-            if ((next = node[rtl]) && !domUtils.isBookmarkNode(next) && next.nodeType == 1 && domUtils.isSameElement(node, next)) {
-                while (next.firstChild) {
-                    if (start == 'firstChild') {
-                        node.insertBefore(next.lastChild, node.firstChild);
-                    } else {
-                        node.appendChild(next.firstChild);
-                    }
-                }
-                domUtils.remove(next);
-            }
-        }
-        !ignorePre && merge('previousSibling', 'firstChild', node);
-        !ignoreNext && merge('nextSibling', 'lastChild', node);
-    },
-
-    /**
-     * 设置节点node及其子节点不会被选中
-     * @method unSelectable
-     * @param { Element } node 需要执行操作的dom元素
-     * @remind 执行该操作后的节点, 将不能被鼠标选中
-     * @example
-     * ```javascript
-     * UE.dom.domUtils.unSelectable( document.body );
-     * ```
-     */
-    unSelectable:ie || browser.opera ? function (node) {
-        //for ie9
-        node.onselectstart = function () {
-            return false;
-        };
-        node.onclick = node.onkeyup = node.onkeydown = function () {
-            return false;
-        };
-        node.unselectable = 'on';
-        node.setAttribute("unselectable", "on");
-        for (var i = 0, ci; ci = node.all[i++];) {
-            switch (ci.tagName.toLowerCase()) {
-                case 'iframe' :
-                case 'textarea' :
-                case 'input' :
-                case 'select' :
-                    break;
-                default :
-                    ci.unselectable = 'on';
-                    node.setAttribute("unselectable", "on");
-            }
-        }
-    } : function (node) {
-        node.style.MozUserSelect =
-            node.style.webkitUserSelect =
-                node.style.KhtmlUserSelect = 'none';
-    },
-    /**
-     * 删除节点node上的指定属性名称的属性
-     * @method  removeAttributes
-     * @param { Node } node 需要删除属性的节点对象
-     * @param { String } attrNames 可以是空格隔开的多个属性名称,该操作将会依次删除相应的属性
-     * @example
-     * ```html
-     * <div id="wrap">
-     *      <span style="font-size:14px;" id="test" name="followMe">xxxxx</span>
-     * </div>
-     *
-     * <script>
-     *
-     *     UE.dom.domUtils.removeAttributes( document.getElementById( "test" ), "id name" );
-     *
-     *     //output: <span style="font-size:14px;">xxxxx</span>
-     *     console.log( document.getElementById("wrap").innerHTML );
-     *
-     * </script>
-     * ```
-     */
-
-    /**
-     * 删除节点node上的指定属性名称的属性
-     * @method  removeAttributes
-     * @param { Node } node 需要删除属性的节点对象
-     * @param { Array } attrNames 需要删除的属性名数组
-     * @example
-     * ```html
-     * <div id="wrap">
-     *      <span style="font-size:14px;" id="test" name="followMe">xxxxx</span>
-     * </div>
-     *
-     * <script>
-     *
-     *     UE.dom.domUtils.removeAttributes( document.getElementById( "test" ), ["id", "name"] );
-     *
-     *     //output: <span style="font-size:14px;">xxxxx</span>
-     *     console.log( document.getElementById("wrap").innerHTML );
-     *
-     * </script>
-     * ```
-     */
-    removeAttributes:function (node, attrNames) {
-        attrNames = utils.isArray(attrNames) ? attrNames : utils.trim(attrNames).replace(/[ ]{2,}/g,' ').split(' ');
-        for (var i = 0, ci; ci = attrNames[i++];) {
-            ci = attrFix[ci] || ci;
-            switch (ci) {
-                case 'className':
-                    node[ci] = '';
-                    break;
-                case 'style':
-                    node.style.cssText = '';
-                    !browser.ie && node.removeAttributeNode(node.getAttributeNode('style'))
-            }
-            node.removeAttribute(ci);
-        }
-    },
-    /**
-     * 在doc下创建一个标签名为tag,属性为attrs的元素
-     * @method createElement
-     * @param { DomDocument } doc 新创建的元素属于该document节点创建
-     * @param { String } tagName 需要创建的元素的标签名
-     * @param { Object } attrs 新创建的元素的属性key-value集合
-     * @return { Element } 新创建的元素对象
-     * @example
-     * ```javascript
-     * var ele = UE.dom.domUtils.createElement( document, 'div', {
-     *     id: 'test'
-     * } );
-     *
-     * //output: DIV
-     * console.log( ele.tagName );
-     *
-     * //output: test
-     * console.log( ele.id );
-     *
-     * ```
-     */
-    createElement:function (doc, tag, attrs) {
-        return domUtils.setAttributes(doc.createElement(tag), attrs)
-    },
-    /**
-     * 为节点node添加属性attrs,attrs为属性键值对
-     * @method setAttributes
-     * @param { Element } node 需要设置属性的元素对象
-     * @param { Object } attrs 需要设置的属性名-值对
-     * @return { Element } 设置属性的元素对象
-     * @example
-     * ```html
-     * <span id="test"></span>
-     *
-     * <script>
-     *
-     *     var testNode = UE.dom.domUtils.setAttributes( document.getElementById( "test" ), {
-     *         id: 'demo'
-     *     } );
-     *
-     *     //output: demo
-     *     console.log( testNode.id );
-     *
-     * </script>
-     *
-     */
-    setAttributes:function (node, attrs) {
-        for (var attr in attrs) {
-            if(attrs.hasOwnProperty(attr)){
-                var value = attrs[attr];
-                switch (attr) {
-                    case 'class':
-                        //ie下要这样赋值,setAttribute不起作用
-                        node.className = value;
-                        break;
-                    case 'style' :
-                        node.style.cssText = node.style.cssText + ";" + value;
-                        break;
-                    case 'innerHTML':
-                        node[attr] = value;
-                        break;
-                    case 'value':
-                        node.value = value;
-                        break;
-                    default:
-                        node.setAttribute(attrFix[attr] || attr, value);
-                }
-            }
-        }
-        return node;
-    },
-
-    /**
-     * 获取元素element经过计算后的样式值
-     * @method getComputedStyle
-     * @param { Element } element 需要获取样式的元素对象
-     * @param { String } styleName 需要获取的样式名
-     * @return { String } 获取到的样式值
-     * @example
-     * ```html
-     * <style type="text/css">
-     *      #test {
-     *          font-size: 15px;
-     *      }
-     * </style>
-     *
-     * <span id="test"></span>
-     *
-     * <script>
-     *     //output: 15px
-     *     console.log( UE.dom.domUtils.getComputedStyle( document.getElementById( "test" ), 'font-size' ) );
-     * </script>
-     * ```
-     */
-    getComputedStyle:function (element, styleName) {
-        //一下的属性单独处理
-        var pros = 'width height top left';
-
-        if(pros.indexOf(styleName) > -1){
-            return element['offset' + styleName.replace(/^\w/,function(s){return s.toUpperCase()})] + 'px';
-        }
-        //忽略文本节点
-        if (element.nodeType == 3) {
-            element = element.parentNode;
-        }
-        //ie下font-size若body下定义了font-size,则从currentStyle里会取到这个font-size. 取不到实际值,故此修改.
-        if (browser.ie && browser.version < 9 && styleName == 'font-size' && !element.style.fontSize &&
-            !dtd.$empty[element.tagName] && !dtd.$nonChild[element.tagName]) {
-            var span = element.ownerDocument.createElement('span');
-            span.style.cssText = 'padding:0;border:0;font-family:simsun;';
-            span.innerHTML = '.';
-            element.appendChild(span);
-            var result = span.offsetHeight;
-            element.removeChild(span);
-            span = null;
-            return result + 'px';
-        }
-        try {
-            var value = domUtils.getStyle(element, styleName) ||
-                (window.getComputedStyle ? domUtils.getWindow(element).getComputedStyle(element, '').getPropertyValue(styleName) :
-                    ( element.currentStyle || element.style )[utils.cssStyleToDomStyle(styleName)]);
-
-        } catch (e) {
-            return "";
-        }
-        return utils.transUnitToPx(utils.fixColor(styleName, value));
-    },
-    /**
-     * 删除元素element指定的className
-     * @method removeClasses
-     * @param { Element } ele 需要删除class的元素节点
-     * @param { String } classNames 需要删除的className, 多个className之间以空格分开
-     * @example
-     * ```html
-     * <span id="test" class="test1 test2 test3">xxx</span>
-     *
-     * <script>
-     *
-     *     var testNode = document.getElementById( "test" );
-     *     UE.dom.domUtils.removeClasses( testNode, "test1 test2" );
-     *
-     *     //output: test3
-     *     console.log( testNode.className );
-     *
-     * </script>
-     * ```
-     */
-
-    /**
-     * 删除元素element指定的className
-     * @method removeClasses
-     * @param { Element } ele 需要删除class的元素节点
-     * @param { Array } classNames 需要删除的className数组
-     * @example
-     * ```html
-     * <span id="test" class="test1 test2 test3">xxx</span>
-     *
-     * <script>
-     *
-     *     var testNode = document.getElementById( "test" );
-     *     UE.dom.domUtils.removeClasses( testNode, ["test1", "test2"] );
-     *
-     *     //output: test3
-     *     console.log( testNode.className );
-     *
-     * </script>
-     * ```
-     */
-    removeClasses:function (elm, classNames) {
-        classNames = utils.isArray(classNames) ? classNames :
-            utils.trim(classNames).replace(/[ ]{2,}/g,' ').split(' ');
-        for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){
-            cls = cls.replace(new RegExp('\\b' + ci + '\\b'),'')
-        }
-        cls = utils.trim(cls).replace(/[ ]{2,}/g,' ');
-        if(cls){
-            elm.className = cls;
-        }else{
-            domUtils.removeAttributes(elm,['class']);
-        }
-    },
-    /**
-     * 给元素element添加className
-     * @method addClass
-     * @param { Node } ele 需要增加className的元素
-     * @param { String } classNames 需要添加的className, 多个className之间以空格分割
-     * @remind 相同的类名不会被重复添加
-     * @example
-     * ```html
-     * <span id="test" class="cls1 cls2"></span>
-     *
-     * <script>
-     *     var testNode = document.getElementById("test");
-     *
-     *     UE.dom.domUtils.addClass( testNode, "cls2 cls3 cls4" );
-     *
-     *     //output: cl1 cls2 cls3 cls4
-     *     console.log( testNode.className );
-     *
-     * <script>
-     * ```
-     */
-
-    /**
-     * 给元素element添加className
-     * @method addClass
-     * @param { Node } ele 需要增加className的元素
-     * @param { Array } classNames 需要添加的className的数组
-     * @remind 相同的类名不会被重复添加
-     * @example
-     * ```html
-     * <span id="test" class="cls1 cls2"></span>
-     *
-     * <script>
-     *     var testNode = document.getElementById("test");
-     *
-     *     UE.dom.domUtils.addClass( testNode, ["cls2", "cls3", "cls4"] );
-     *
-     *     //output: cl1 cls2 cls3 cls4
-     *     console.log( testNode.className );
-     *
-     * <script>
-     * ```
-     */
-    addClass:function (elm, classNames) {
-        if(!elm)return;
-        classNames = utils.trim(classNames).replace(/[ ]{2,}/g,' ').split(' ');
-        for(var i = 0,ci,cls = elm.className;ci=classNames[i++];){
-            if(!new RegExp('\\b' + ci + '\\b').test(cls)){
-                cls += ' ' + ci;
-            }
-        }
-        elm.className = utils.trim(cls);
-    },
-    /**
-     * 判断元素element是否包含给定的样式类名className
-     * @method hasClass
-     * @param { Node } ele 需要检测的元素
-     * @param { String } classNames 需要检测的className, 多个className之间用空格分割
-     * @return { Boolean } 元素是否包含所有给定的className
-     * @example
-     * ```html
-     * <span id="test1" class="cls1 cls2"></span>
-     *
-     * <script>
-     *     var test1 = document.getElementById("test1");
-     *
-     *     //output: false
-     *     console.log( UE.dom.domUtils.hasClass( test1, "cls2 cls1 cls3" ) );
-     *
-     *     //output: true
-     *     console.log( UE.dom.domUtils.hasClass( test1, "cls2 cls1" ) );
-     * </script>
-     * ```
-     */
-
-    /**
-     * 判断元素element是否包含给定的样式类名className
-     * @method hasClass
-     * @param { Node } ele 需要检测的元素
-     * @param { Array } classNames 需要检测的className数组
-     * @return { Boolean } 元素是否包含所有给定的className
-     * @example
-     * ```html
-     * <span id="test1" class="cls1 cls2"></span>
-     *
-     * <script>
-     *     var test1 = document.getElementById("test1");
-     *
-     *     //output: false
-     *     console.log( UE.dom.domUtils.hasClass( test1, [ "cls2", "cls1", "cls3" ] ) );
-     *
-     *     //output: true
-     *     console.log( UE.dom.domUtils.hasClass( test1, [ "cls2", "cls1" ]) );
-     * </script>
-     * ```
-     */
-    hasClass:function (element, className) {
-        if(utils.isRegExp(className)){
-            return className.test(element.className)
-        }
-        className = utils.trim(className).replace(/[ ]{2,}/g,' ').split(' ');
-        for(var i = 0,ci,cls = element.className;ci=className[i++];){
-            if(!new RegExp('\\b' + ci + '\\b','i').test(cls)){
-                return false;
-            }
-        }
-        return i - 1 == className.length;
-    },
-
-    /**
-     * 阻止事件默认行为
-     * @method preventDefault
-     * @param { Event } evt 需要阻止默认行为的事件对象
-     * @example
-     * ```javascript
-     * UE.dom.domUtils.preventDefault( evt );
-     * ```
-     */
-    preventDefault:function (evt) {
-        evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false);
-    },
-    /**
-     * 删除元素element指定的样式
-     * @method removeStyle
-     * @param { Element } element 需要删除样式的元素
-     * @param { String } styleName 需要删除的样式名
-     * @example
-     * ```html
-     * <span id="test" style="color: red; background: blue;"></span>
-     *
-     * <script>
-     *
-     *     var testNode = document.getElementById("test");
-     *
-     *     UE.dom.domUtils.removeStyle( testNode, 'color' );
-     *
-     *     //output: background: blue;
-     *     console.log( testNode.style.cssText );
-     *
-     * </script>
-     * ```
-     */
-    removeStyle:function (element, name) {
-        if(browser.ie ){
-            //针对color先单独处理一下
-            if(name == 'color'){
-                name = '(^|;)' + name;
-            }
-            element.style.cssText = element.style.cssText.replace(new RegExp(name + '[^:]*:[^;]+;?','ig'),'')
-        }else{
-            if (element.style.removeProperty) {
-                element.style.removeProperty (name);
-            }else {
-                element.style.removeAttribute (utils.cssStyleToDomStyle(name));
-            }
-        }
-
-
-        if (!element.style.cssText) {
-            domUtils.removeAttributes(element, ['style']);
-        }
-    },
-    /**
-     * 获取元素element的style属性的指定值
-     * @method getStyle
-     * @param { Element } element 需要获取属性值的元素
-     * @param { String } styleName 需要获取的style的名称
-     * @warning 该方法仅获取元素style属性中所标明的值
-     * @return { String } 该元素包含指定的style属性值
-     * @example
-     * ```html
-     * <div id="test" style="color: red;"></div>
-     *
-     * <script>
-     *
-     *      var testNode = document.getElementById( "test" );
-     *
-     *      //output: red
-     *      console.log( UE.dom.domUtils.getStyle( testNode, "color" ) );
-     *
-     *      //output: ""
-     *      console.log( UE.dom.domUtils.getStyle( testNode, "background" ) );
-     *
-     * </script>
-     * ```
-     */
-    getStyle:function (element, name) {
-        var value = element.style[ utils.cssStyleToDomStyle(name) ];
-        return utils.fixColor(name, value);
-    },
-    /**
-     * 为元素element设置样式属性值
-     * @method setStyle
-     * @param { Element } element 需要设置样式的元素
-     * @param { String } styleName 样式名
-     * @param { String } styleValue 样式值
-     * @example
-     * ```html
-     * <div id="test"></div>
-     *
-     * <script>
-     *
-     *      var testNode = document.getElementById( "test" );
-     *
-     *      //output: ""
-     *      console.log( testNode.style.color );
-     *
-     *      UE.dom.domUtils.setStyle( testNode, 'color', 'red' );
-     *      //output: "red"
-     *      console.log( testNode.style.color );
-     *
-     * </script>
-     * ```
-     */
-    setStyle:function (element, name, value) {
-        element.style[utils.cssStyleToDomStyle(name)] = value;
-        if(!utils.trim(element.style.cssText)){
-            this.removeAttributes(element,'style')
-        }
-    },
-    /**
-     * 为元素element设置多个样式属性值
-     * @method setStyles
-     * @param { Element } element 需要设置样式的元素
-     * @param { Object } styles 样式名值对
-     * @example
-     * ```html
-     * <div id="test"></div>
-     *
-     * <script>
-     *
-     *      var testNode = document.getElementById( "test" );
-     *
-     *      //output: ""
-     *      console.log( testNode.style.color );
-     *
-     *      UE.dom.domUtils.setStyles( testNode, {
-     *          'color': 'red'
-     *      } );
-     *      //output: "red"
-     *      console.log( testNode.style.color );
-     *
-     * </script>
-     * ```
-     */
-    setStyles:function (element, styles) {
-        for (var name in styles) {
-            if (styles.hasOwnProperty(name)) {
-                domUtils.setStyle(element, name, styles[name]);
-            }
-        }
-    },
-    /**
-     * 删除_moz_dirty属性
-     * @private
-     * @method removeDirtyAttr
-     */
-    removeDirtyAttr:function (node) {
-        for (var i = 0, ci, nodes = node.getElementsByTagName('*'); ci = nodes[i++];) {
-            ci.removeAttribute('_moz_dirty');
-        }
-        node.removeAttribute('_moz_dirty');
-    },
-    /**
-     * 获取子节点的数量
-     * @method getChildCount
-     * @param { Element } node 需要检测的元素
-     * @return { Number } 给定的node元素的子节点数量
-     * @example
-     * ```html
-     * <div id="test">
-     *      <span></span>
-     * </div>
-     *
-     * <script>
-     *
-     *     //output: 3
-     *     console.log( UE.dom.domUtils.getChildCount( document.getElementById("test") ) );
-     *
-     * </script>
-     * ```
-     */
-
-    /**
-     * 根据给定的过滤规则, 获取符合条件的子节点的数量
-     * @method getChildCount
-     * @param { Element } node 需要检测的元素
-     * @param { Function } fn 过滤器, 要求对符合条件的子节点返回true, 反之则要求返回false
-     * @return { Number } 符合过滤条件的node元素的子节点数量
-     * @example
-     * ```html
-     * <div id="test">
-     *      <span></span>
-     * </div>
-     *
-     * <script>
-     *
-     *     //output: 1
-     *     console.log( UE.dom.domUtils.getChildCount( document.getElementById("test"), function ( node ) {
-     *
-     *         return node.nodeType === 1;
-     *
-     *     } ) );
-     *
-     * </script>
-     * ```
-     */
-    getChildCount:function (node, fn) {
-        var count = 0, first = node.firstChild;
-        fn = fn || function () {
-            return 1;
-        };
-        while (first) {
-            if (fn(first)) {
-                count++;
-            }
-            first = first.nextSibling;
-        }
-        return count;
-    },
-
-    /**
-     * 判断给定节点是否为空节点
-     * @method isEmptyNode
-     * @param { Node } node 需要检测的节点对象
-     * @return { Boolean } 节点是否为空
-     * @example
-     * ```javascript
-     * UE.dom.domUtils.isEmptyNode( document.body );
-     * ```
-     */
-    isEmptyNode:function (node) {
-        return !node.firstChild || domUtils.getChildCount(node, function (node) {
-            return  !domUtils.isBr(node) && !domUtils.isBookmarkNode(node) && !domUtils.isWhitespace(node)
-        }) == 0
-    },
-    clearSelectedArr:function (nodes) {
-        var node;
-        while (node = nodes.pop()) {
-            domUtils.removeAttributes(node, ['class']);
-        }
-    },
-    /**
-     * 将显示区域滚动到指定节点的位置
-     * @method scrollToView
-     * @param    {Node}   node    节点
-     * @param    {window}   win      window对象
-     * @param    {Number}    offsetTop    距离上方的偏移量
-     */
-    scrollToView:function (node, win, offsetTop) {
-        var getViewPaneSize = function () {
-                var doc = win.document,
-                    mode = doc.compatMode == 'CSS1Compat';
-                return {
-                    width:( mode ? doc.documentElement.clientWidth : doc.body.clientWidth ) || 0,
-                    height:( mode ? doc.documentElement.clientHeight : doc.body.clientHeight ) || 0
-                };
-            },
-            getScrollPosition = function (win) {
-                if ('pageXOffset' in win) {
-                    return {
-                        x:win.pageXOffset || 0,
-                        y:win.pageYOffset || 0
-                    };
-                }
-                else {
-                    var doc = win.document;
-                    return {
-                        x:doc.documentElement.scrollLeft || doc.body.scrollLeft || 0,
-                        y:doc.documentElement.scrollTop || doc.body.scrollTop || 0
-                    };
-                }
-            };
-        var winHeight = getViewPaneSize().height, offset = winHeight * -1 + offsetTop;
-        offset += (node.offsetHeight || 0);
-        var elementPosition = domUtils.getXY(node);
-        offset += elementPosition.y;
-        var currentScroll = getScrollPosition(win).y;
-        // offset += 50;
-        if (offset > currentScroll || offset < currentScroll - winHeight) {
-            win.scrollTo(0, offset + (offset < 0 ? -20 : 20));
-        }
-    },
-    /**
-     * 判断给定节点是否为br
-     * @method isBr
-     * @param { Node } node 需要判断的节点对象
-     * @return { Boolean } 给定的节点是否是br节点
-     */
-    isBr:function (node) {
-        return node.nodeType == 1 && node.tagName == 'BR';
-    },
-    /**
-     * 判断给定的节点是否是一个“填充”节点
-     * @private
-     * @method isFillChar
-     * @param { Node } node 需要判断的节点
-     * @param { Boolean } isInStart 是否从节点内容的开始位置匹配
-     * @returns { Boolean } 节点是否是填充节点
-     */
-    isFillChar:function (node,isInStart) {
-        if(node.nodeType != 3)
-            return false;
-        var text = node.nodeValue;
-        if(isInStart){
-            return new RegExp('^' + domUtils.fillChar).test(text)
-        }
-        return !text.replace(new RegExp(domUtils.fillChar,'g'), '').length
-    },
-    isStartInblock:function (range) {
-        var tmpRange = range.cloneRange(),
-            flag = 0,
-            start = tmpRange.startContainer,
-            tmp;
-        if(start.nodeType == 1 && start.childNodes[tmpRange.startOffset]){
-            start = start.childNodes[tmpRange.startOffset];
-            var pre = start.previousSibling;
-            while(pre && domUtils.isFillChar(pre)){
-                start = pre;
-                pre = pre.previousSibling;
-            }
-        }
-        if(this.isFillChar(start,true) && tmpRange.startOffset == 1){
-            tmpRange.setStartBefore(start);
-            start = tmpRange.startContainer;
-        }
-
-        while (start && domUtils.isFillChar(start)) {
-            tmp = start;
-            start = start.previousSibling
-        }
-        if (tmp) {
-            tmpRange.setStartBefore(tmp);
-            start = tmpRange.startContainer;
-        }
-        if (start.nodeType == 1 && domUtils.isEmptyNode(start) && tmpRange.startOffset == 1) {
-            tmpRange.setStart(start, 0).collapse(true);
-        }
-        while (!tmpRange.startOffset) {
-            start = tmpRange.startContainer;
-            if (domUtils.isBlockElm(start) || domUtils.isBody(start)) {
-                flag = 1;
-                break;
-            }
-            var pre = tmpRange.startContainer.previousSibling,
-                tmpNode;
-            if (!pre) {
-                tmpRange.setStartBefore(tmpRange.startContainer);
-            } else {
-                while (pre && domUtils.isFillChar(pre)) {
-                    tmpNode = pre;
-                    pre = pre.previousSibling;
-                }
-                if (tmpNode) {
-                    tmpRange.setStartBefore(tmpNode);
-                } else {
-                    tmpRange.setStartBefore(tmpRange.startContainer);
-                }
-            }
-        }
-        return flag && !domUtils.isBody(tmpRange.startContainer) ? 1 : 0;
-    },
-
-    /**
-     * 判断给定的元素是否是一个空元素
-     * @method isEmptyBlock
-     * @param { Element } node 需要判断的元素
-     * @return { Boolean } 是否是空元素
-     * @example
-     * ```html
-     * <div id="test"></div>
-     *
-     * <script>
-     *     //output: true
-     *     console.log( UE.dom.domUtils.isEmptyBlock( document.getElementById("test") ) );
-     * </script>
-     * ```
-     */
-
-    /**
-     * 根据指定的判断规则判断给定的元素是否是一个空元素
-     * @method isEmptyBlock
-     * @param { Element } node 需要判断的元素
-     * @param { RegExp } reg 对内容执行判断的正则表达式对象
-     * @return { Boolean } 是否是空元素
-     */
-    isEmptyBlock:function (node,reg) {
-        if(node.nodeType != 1)
-            return 0;
-        reg = reg || new RegExp('[ \t\r\n' + domUtils.fillChar + ']', 'g');
-        if (node[browser.ie ? 'innerText' : 'textContent'].replace(reg, '').length > 0) {
-            return 0;
-        }
-        for (var n in dtd.$isNotEmpty) {
-            if (node.getElementsByTagName(n).length) {
-                return 0;
-            }
-        }
-        return 1;
-    },
-
-    /**
-     * 移动元素使得该元素的位置移动指定的偏移量的距离
-     * @method setViewportOffset
-     * @param { Element } element 需要设置偏移量的元素
-     * @param { Object } offset 偏移量, 形如{ left: 100, top: 50 }的一个键值对, 表示该元素将在
-     *                                  现有的位置上向水平方向偏移offset.left的距离, 在竖直方向上偏移
-     *                                  offset.top的距离
-     * @example
-     * ```html
-     * <div id="test" style="top: 100px; left: 50px; position: absolute;"></div>
-     *
-     * <script>
-     *
-     *     var testNode = document.getElementById("test");
-     *
-     *     UE.dom.domUtils.setViewportOffset( testNode, {
-     *         left: 200,
-     *         top: 50
-     *     } );
-     *
-     *     //output: top: 300px; left: 100px; position: absolute;
-     *     console.log( testNode.style.cssText );
-     *
-     * </script>
-     * ```
-     */
-    setViewportOffset:function (element, offset) {
-        var left = parseInt(element.style.left) | 0;
-        var top = parseInt(element.style.top) | 0;
-        var rect = element.getBoundingClientRect();
-        var offsetLeft = offset.left - rect.left;
-        var offsetTop = offset.top - rect.top;
-        if (offsetLeft) {
-            element.style.left = left + offsetLeft + 'px';
-        }
-        if (offsetTop) {
-            element.style.top = top + offsetTop + 'px';
-        }
-    },
-
-    /**
-     * 用“填充字符”填充节点
-     * @method fillNode
-     * @private
-     * @param { DomDocument } doc 填充的节点所在的docment对象
-     * @param { Node } node 需要填充的节点对象
-     * @example
-     * ```html
-     * <div id="test"></div>
-     *
-     * <script>
-     *     var testNode = document.getElementById("test");
-     *
-     *     //output: 0
-     *     console.log( testNode.childNodes.length );
-     *
-     *     UE.dom.domUtils.fillNode( document, testNode );
-     *
-     *     //output: 1
-     *     console.log( testNode.childNodes.length );
-     *
-     * </script>
-     * ```
-     */
-    fillNode:function (doc, node) {
-        var tmpNode = browser.ie ? doc.createTextNode(domUtils.fillChar) : doc.createElement('br');
-        node.innerHTML = '';
-        node.appendChild(tmpNode);
-    },
-
-    /**
-     * 把节点src的所有子节点追加到另一个节点tag上去
-     * @method moveChild
-     * @param { Node } src 源节点, 该节点下的所有子节点将被移除
-     * @param { Node } tag 目标节点, 从源节点移除的子节点将被追加到该节点下
-     * @example
-     * ```html
-     * <div id="test1">
-     *      <span></span>
-     * </div>
-     * <div id="test2">
-     *     <div></div>
-     * </div>
-     *
-     * <script>
-     *
-     *     var test1 = document.getElementById("test1"),
-     *         test2 = document.getElementById("test2");
-     *
-     *     UE.dom.domUtils.moveChild( test1, test2 );
-     *
-     *     //output: ""(空字符串)
-     *     console.log( test1.innerHTML );
-     *
-     *     //output: "<div></div><span></span>"
-     *     console.log( test2.innerHTML );
-     *
-     * </script>
-     * ```
-     */
-
-    /**
-     * 把节点src的所有子节点移动到另一个节点tag上去, 可以通过dir参数控制附加的行为是“追加”还是“插入顶部”
-     * @method moveChild
-     * @param { Node } src 源节点, 该节点下的所有子节点将被移除
-     * @param { Node } tag 目标节点, 从源节点移除的子节点将被附加到该节点下
-     * @param { Boolean } dir 附加方式, 如果为true, 则附加进去的节点将被放到目标节点的顶部, 反之,则放到末尾
-     * @example
-     * ```html
-     * <div id="test1">
-     *      <span></span>
-     * </div>
-     * <div id="test2">
-     *     <div></div>
-     * </div>
-     *
-     * <script>
-     *
-     *     var test1 = document.getElementById("test1"),
-     *         test2 = document.getElementById("test2");
-     *
-     *     UE.dom.domUtils.moveChild( test1, test2, true );
-     *
-     *     //output: ""(空字符串)
-     *     console.log( test1.innerHTML );
-     *
-     *     //output: "<span></span><div></div>"
-     *     console.log( test2.innerHTML );
-     *
-     * </script>
-     * ```
-     */
-    moveChild:function (src, tag, dir) {
-        while (src.firstChild) {
-            if (dir && tag.firstChild) {
-                tag.insertBefore(src.lastChild, tag.firstChild);
-            } else {
-                tag.appendChild(src.firstChild);
-            }
-        }
-    },
-
-    /**
-     * 判断节点的标签上是否不存在任何属性
-     * @method hasNoAttributes
-     * @private
-     * @param { Node } node 需要检测的节点对象
-     * @return { Boolean } 节点是否不包含任何属性
-     * @example
-     * ```html
-     * <div id="test"><span>xxxx</span></div>
-     *
-     * <script>
-     *
-     *     //output: false
-     *     console.log( UE.dom.domUtils.hasNoAttributes( document.getElementById("test") ) );
-     *
-     *     //output: true
-     *     console.log( UE.dom.domUtils.hasNoAttributes( document.getElementById("test").firstChild ) );
-     *
-     * </script>
-     * ```
-     */
-    hasNoAttributes:function (node) {
-        return browser.ie ? /^<\w+\s*?>/.test(node.outerHTML) : node.attributes.length == 0;
-    },
-
-    /**
-     * 检测节点是否是UEditor所使用的辅助节点
-     * @method isCustomeNode
-     * @private
-     * @param { Node } node 需要检测的节点
-     * @remind 辅助节点是指编辑器要完成工作临时添加的节点, 在输出的时候将会从编辑器内移除, 不会影响最终的结果。
-     * @return { Boolean } 给定的节点是否是一个辅助节点
-     */
-    isCustomeNode:function (node) {
-        return node.nodeType == 1 && node.getAttribute('_ue_custom_node_');
-    },
-
-    /**
-     * 检测节点的标签是否是给定的标签
-     * @method isTagNode
-     * @param { Node } node 需要检测的节点对象
-     * @param { String } tagName 标签
-     * @return { Boolean } 节点的标签是否是给定的标签
-     * @example
-     * ```html
-     * <div id="test"></div>
-     *
-     * <script>
-     *
-     *     //output: true
-     *     console.log( UE.dom.domUtils.isTagNode( document.getElementById("test"), "div" ) );
-     *
-     * </script>
-     * ```
-     */
-    isTagNode:function (node, tagNames) {
-        return node.nodeType == 1 && new RegExp('\\b' + node.tagName + '\\b','i').test(tagNames)
-    },
-
-    /**
-     * 给定一个节点数组,在通过指定的过滤器过滤后, 获取其中满足过滤条件的第一个节点
-     * @method filterNodeList
-     * @param { Array } nodeList 需要过滤的节点数组
-     * @param { Function } fn 过滤器, 对符合条件的节点, 执行结果返回true, 反之则返回false
-     * @return { Node | NULL } 如果找到符合过滤条件的节点, 则返回该节点, 否则返回NULL
-     * @example
-     * ```javascript
-     * var divNodes = document.getElementsByTagName("div");
-     * divNodes = [].slice.call( divNodes, 0 );
-     *
-     * //output: null
-     * console.log( UE.dom.domUtils.filterNodeList( divNodes, function ( node ) {
-     *     return node.tagName.toLowerCase() !== 'div';
-     * } ) );
-     * ```
-     */
-
-    /**
-     * 给定一个节点数组nodeList和一组标签名tagNames, 获取其中能够匹配标签名的节点集合中的第一个节点
-     * @method filterNodeList
-     * @param { Array } nodeList 需要过滤的节点数组
-     * @param { String } tagNames 需要匹配的标签名, 多个标签名之间用空格分割
-     * @return { Node | NULL } 如果找到标签名匹配的节点, 则返回该节点, 否则返回NULL
-     * @example
-     * ```javascript
-     * var divNodes = document.getElementsByTagName("div");
-     * divNodes = [].slice.call( divNodes, 0 );
-     *
-     * //output: null
-     * console.log( UE.dom.domUtils.filterNodeList( divNodes, 'a span' ) );
-     * ```
-     */
-
-    /**
-     * 给定一个节点数组,在通过指定的过滤器过滤后, 如果参数forAll为true, 则会返回所有满足过滤
-     * 条件的节点集合, 否则, 返回满足条件的节点集合中的第一个节点
-     * @method filterNodeList
-     * @param { Array } nodeList 需要过滤的节点数组
-     * @param { Function } fn 过滤器, 对符合条件的节点, 执行结果返回true, 反之则返回false
-     * @param { Boolean } forAll 是否返回整个节点数组, 如果该参数为false, 则返回节点集合中的第一个节点
-     * @return { Array | Node | NULL } 如果找到符合过滤条件的节点, 则根据参数forAll的值决定返回满足
-     *                                      过滤条件的节点数组或第一个节点, 否则返回NULL
-     * @example
-     * ```javascript
-     * var divNodes = document.getElementsByTagName("div");
-     * divNodes = [].slice.call( divNodes, 0 );
-     *
-     * //output: 3(假定有3个div)
-     * console.log( divNodes.length );
-     *
-     * var nodes = UE.dom.domUtils.filterNodeList( divNodes, function ( node ) {
-     *     return node.tagName.toLowerCase() === 'div';
-     * }, true );
-     *
-     * //output: 3
-     * console.log( nodes.length );
-     *
-     * var node = UE.dom.domUtils.filterNodeList( divNodes, function ( node ) {
-     *     return node.tagName.toLowerCase() === 'div';
-     * }, false );
-     *
-     * //output: div
-     * console.log( node.nodeName );
-     * ```
-     */
-    filterNodeList : function(nodelist,filter,forAll){
-        var results = [];
-        if(!utils .isFunction(filter)){
-            var str = filter;
-            filter = function(n){
-                return utils.indexOf(utils.isArray(str) ? str:str.split(' '), n.tagName.toLowerCase()) != -1
-            };
-        }
-        utils.each(nodelist,function(n){
-            filter(n) && results.push(n)
-        });
-        return results.length  == 0 ? null : results.length == 1 || !forAll ? results[0] : results
-    },
-
-    /**
-     * 查询给定的range选区是否在给定的node节点内,且在该节点的最末尾
-     * @method isInNodeEndBoundary
-     * @param { UE.dom.Range } rng 需要判断的range对象, 该对象的startContainer不能为NULL
-     * @param node 需要检测的节点对象
-     * @return { Number } 如果给定的选取range对象是在node内部的最末端, 则返回1, 否则返回0
-     */
-    isInNodeEndBoundary : function (rng,node){
-        var start = rng.startContainer;
-        if(start.nodeType == 3 && rng.startOffset != start.nodeValue.length){
-            return 0;
-        }
-        if(start.nodeType == 1 && rng.startOffset != start.childNodes.length){
-            return 0;
-        }
-        while(start !== node){
-            if(start.nextSibling){
-                return 0
-            };
-            start = start.parentNode;
-        }
-        return 1;
-    },
-    isBoundaryNode : function (node,dir){
-        var tmp;
-        while(!domUtils.isBody(node)){
-            tmp = node;
-            node = node.parentNode;
-            if(tmp !== node[dir]){
-                return false;
-            }
-        }
-        return true;
-    }
-};
-var fillCharReg = new RegExp(domUtils.fillChar, 'g');
-/**
- * Range封装
- * @file
- * @module UE.dom
- * @class Range
- * @since 1.2.6.1
- */
-
-/**
- * dom操作封装
- * @unfile
- * @module UE.dom
- */
-
-/**
- * Range实现类,本类是UEditor底层核心类,封装不同浏览器之间的Range操作。
- * @unfile
- * @module UE.dom
- * @class Range
- */
-
-
-(function () {
-    var guid = 0,
-        fillChar = domUtils.fillChar,
-        fillData;
-
-    /*
-     * 更新range的collapse状态
-     * @param  {Range}   range    range对象
-     */
-    function updateCollapse(range) {
-        range.collapsed =
-            range.startContainer && range.endContainer &&
-                range.startContainer === range.endContainer &&
-                range.startOffset == range.endOffset;
-    }
-
-    function selectOneNode(rng){
-        return !rng.collapsed && rng.startContainer.nodeType == 1 && rng.startContainer === rng.endContainer && rng.endOffset - rng.startOffset == 1
-    }
-    function setEndPoint(toStart, node, offset, range) {
-        //如果node是自闭合标签要处理
-        if (node.nodeType == 1 && (dtd.$empty[node.tagName] || dtd.$nonChild[node.tagName])) {
-            offset = domUtils.getNodeIndex(node) + (toStart ? 0 : 1);
-            node = node.parentNode;
-        }
-        if (toStart) {
-            range.startContainer = node;
-            range.startOffset = offset;
-            if (!range.endContainer) {
-                range.collapse(true);
-            }
-        } else {
-            range.endContainer = node;
-            range.endOffset = offset;
-            if (!range.startContainer) {
-                range.collapse(false);
-            }
-        }
-        updateCollapse(range);
-        return range;
-    }
-
-    function execContentsAction(range, action) {
-        //调整边界
-        //range.includeBookmark();
-        var start = range.startContainer,
-            end = range.endContainer,
-            startOffset = range.startOffset,
-            endOffset = range.endOffset,
-            doc = range.document,
-            frag = doc.createDocumentFragment(),
-            tmpStart, tmpEnd;
-        if (start.nodeType == 1) {
-            start = start.childNodes[startOffset] || (tmpStart = start.appendChild(doc.createTextNode('')));
-        }
-        if (end.nodeType == 1) {
-            end = end.childNodes[endOffset] || (tmpEnd = end.appendChild(doc.createTextNode('')));
-        }
-        if (start === end && start.nodeType == 3) {
-            frag.appendChild(doc.createTextNode(start.substringData(startOffset, endOffset - startOffset)));
-            //is not clone
-            if (action) {
-                start.deleteData(startOffset, endOffset - startOffset);
-                range.collapse(true);
-            }
-            return frag;
-        }
-        var current, currentLevel, clone = frag,
-            startParents = domUtils.findParents(start, true), endParents = domUtils.findParents(end, true);
-        for (var i = 0; startParents[i] == endParents[i];) {
-            i++;
-        }
-        for (var j = i, si; si = startParents[j]; j++) {
-            current = si.nextSibling;
-            if (si == start) {
-                if (!tmpStart) {
-                    if (range.startContainer.nodeType == 3) {
-                        clone.appendChild(doc.createTextNode(start.nodeValue.slice(startOffset)));
-                        //is not clone
-                        if (action) {
-                            start.deleteData(startOffset, start.nodeValue.length - startOffset);
-                        }
-                    } else {
-                        clone.appendChild(!action ? start.cloneNode(true) : start);
-                    }
-                }
-            } else {
-                currentLevel = si.cloneNode(false);
-                clone.appendChild(currentLevel);
-            }
-            while (current) {
-                if (current === end || current === endParents[j]) {
-                    break;
-                }
-                si = current.nextSibling;
-                clone.appendChild(!action ? current.cloneNode(true) : current);
-                current = si;
-            }
-            clone = currentLevel;
-        }
-        clone = frag;
-        if (!startParents[i]) {
-            clone.appendChild(startParents[i - 1].cloneNode(false));
-            clone = clone.firstChild;
-        }
-        for (var j = i, ei; ei = endParents[j]; j++) {
-            current = ei.previousSibling;
-            if (ei == end) {
-                if (!tmpEnd && range.endContainer.nodeType == 3) {
-                    clone.appendChild(doc.createTextNode(end.substringData(0, endOffset)));
-                    //is not clone
-                    if (action) {
-                        end.deleteData(0, endOffset);
-                    }
-                }
-            } else {
-                currentLevel = ei.cloneNode(false);
-                clone.appendChild(currentLevel);
-            }
-            //如果两端同级,右边第一次已经被开始做了
-            if (j != i || !startParents[i]) {
-                while (current) {
-                    if (current === start) {
-                        break;
-                    }
-                    ei = current.previousSibling;
-                    clone.insertBefore(!action ? current.cloneNode(true) : current, clone.firstChild);
-                    current = ei;
-                }
-            }
-            clone = currentLevel;
-        }
-        if (action) {
-            range.setStartBefore(!endParents[i] ? endParents[i - 1] : !startParents[i] ? startParents[i - 1] : endParents[i]).collapse(true);
-        }
-        tmpStart && domUtils.remove(tmpStart);
-        tmpEnd && domUtils.remove(tmpEnd);
-        return frag;
-    }
-
-    /**
-     * 创建一个跟document绑定的空的Range实例
-     * @constructor
-     * @param { Document } document 新建的选区所属的文档对象
-     */
-
-    /**
-     * @property { Node } startContainer 当前Range的开始边界的容器节点, 可以是一个元素节点或者是文本节点
-     */
-
-    /**
-     * @property { Node } startOffset 当前Range的开始边界容器节点的偏移量, 如果是元素节点,
-     *                              该值就是childNodes中的第几个节点, 如果是文本节点就是文本内容的第几个字符
-     */
-
-    /**
-     * @property { Node } endContainer 当前Range的结束边界的容器节点, 可以是一个元素节点或者是文本节点
-     */
-
-    /**
-     * @property { Node } endOffset 当前Range的结束边界容器节点的偏移量, 如果是元素节点,
-     *                              该值就是childNodes中的第几个节点, 如果是文本节点就是文本内容的第几个字符
-     */
-
-    /**
-     * @property { Boolean } collapsed 当前Range是否闭合
-     * @default true
-     * @remind Range是闭合的时候, startContainer === endContainer && startOffset === endOffset
-     */
-
-    /**
-     * @property { Document } document 当前Range所属的Document对象
-     * @remind 不同range的的document属性可以是不同的
-     */
-    var Range = dom.Range = function (document) {
-        var me = this;
-        me.startContainer =
-            me.startOffset =
-                me.endContainer =
-                    me.endOffset = null;
-        me.document = document;
-        me.collapsed = true;
-    };
-
-    /*
-     * 删除fillData
-     * @param doc
-     * @param excludeNode
-     */
-    function removeFillData(doc, excludeNode) {
-        try {
-            if (fillData && domUtils.inDoc(fillData, doc)) {
-                if (!fillData.nodeValue.replace(fillCharReg, '').length) {
-                    var tmpNode = fillData.parentNode;
-                    domUtils.remove(fillData);
-                    while (tmpNode && domUtils.isEmptyInlineElement(tmpNode) &&
-                        //safari的contains有bug
-                        (browser.safari ? !(domUtils.getPosition(tmpNode,excludeNode) & domUtils.POSITION_CONTAINS) : !tmpNode.contains(excludeNode))
-                        ) {
-                        fillData = tmpNode.parentNode;
-                        domUtils.remove(tmpNode);
-                        tmpNode = fillData;
-                    }
-                } else {
-                    fillData.nodeValue = fillData.nodeValue.replace(fillCharReg, '');
-                }
-            }
-        } catch (e) {
-        }
-    }
-
-    /*
-     * @param node
-     * @param dir
-     */
-    function mergeSibling(node, dir) {
-        var tmpNode;
-        node = node[dir];
-        while (node && domUtils.isFillChar(node)) {
-            tmpNode = node[dir];
-            domUtils.remove(node);
-            node = tmpNode;
-        }
-    }
-
-    Range.prototype = {
-
-        /**
-         * 克隆选区的内容到一个DocumentFragment里
-         * @method cloneContents
-         * @return { DocumentFragment | NULL } 如果选区是闭合的将返回null, 否则, 返回包含所clone内容的DocumentFragment元素
-         * @example
-         * ```html
-         * <body>
-         *      <!-- 中括号表示选区 -->
-         *      <b>x<i>x[x</i>xx]x</b>
-         *
-         *      <script>
-         *          //range是已选中的选区
-         *          var fragment = range.cloneContents(),
-         *              node = document.createElement("div");
-         *
-         *          node.appendChild( fragment );
-         *
-         *          //output: <i>x</i>xx
-         *          console.log( node.innerHTML );
-         *
-         *      </script>
-         * </body>
-         * ```
-         */
-        cloneContents:function () {
-            return this.collapsed ? null : execContentsAction(this, 0);
-        },
-
-        /**
-         * 删除当前选区范围中的所有内容
-         * @method deleteContents
-         * @remind 执行完该操作后, 当前Range对象变成了闭合状态
-         * @return { UE.dom.Range } 当前操作的Range对象
-         * @example
-         * ```html
-         * <body>
-         *      <!-- 中括号表示选区 -->
-         *      <b>x<i>x[x</i>xx]x</b>
-         *
-         *      <script>
-         *          //range是已选中的选区
-         *          range.deleteContents();
-         *
-         *          //竖线表示闭合后的选区位置
-         *          //output: <b>x<i>x</i>|x</b>
-         *          console.log( document.body.innerHTML );
-         *
-         *          //此时, range的各项属性为
-         *          //output: B
-         *          console.log( range.startContainer.tagName );
-         *          //output: 2
-         *          console.log( range.startOffset );
-         *          //output: B
-         *          console.log( range.endContainer.tagName );
-         *          //output: 2
-         *          console.log( range.endOffset );
-         *          //output: true
-         *          console.log( range.collapsed );
-         *
-         *      </script>
-         * </body>
-         * ```
-         */
-        deleteContents:function () {
-            var txt;
-            if (!this.collapsed) {
-                execContentsAction(this, 1);
-            }
-            if (browser.webkit) {
-                txt = this.startContainer;
-                if (txt.nodeType == 3 && !txt.nodeValue.length) {
-                    this.setStartBefore(txt).collapse(true);
-                    domUtils.remove(txt);
-                }
-            }
-            return this;
-        },
-
-        /**
-         * 将当前选区的内容提取到一个DocumentFragment里
-         * @method extractContents
-         * @remind 执行该操作后, 选区将变成闭合状态
-         * @warning 执行该操作后, 原来选区所选中的内容将从dom树上剥离出来
-         * @return { DocumentFragment } 返回包含所提取内容的DocumentFragment对象
-         * @example
-         * ```html
-         * <body>
-         *      <!-- 中括号表示选区 -->
-         *      <b>x<i>x[x</i>xx]x</b>
-         *
-         *      <script>
-         *          //range是已选中的选区
-         *          var fragment = range.extractContents(),
-         *              node = document.createElement( "div" );
-         *
-         *          node.appendChild( fragment );
-         *
-         *          //竖线表示闭合后的选区位置
-         *
-         *          //output: <b>x<i>x</i>|x</b>
-         *          console.log( document.body.innerHTML );
-         *          //output: <i>x</i>xx
-         *          console.log( node.innerHTML );
-         *
-         *          //此时, range的各项属性为
-         *          //output: B
-         *          console.log( range.startContainer.tagName );
-         *          //output: 2
-         *          console.log( range.startOffset );
-         *          //output: B
-         *          console.log( range.endContainer.tagName );
-         *          //output: 2
-         *          console.log( range.endOffset );
-         *          //output: true
-         *          console.log( range.collapsed );
-         *
-         *      </script>
-         * </body>
-         */
-        extractContents:function () {
-            return this.collapsed ? null : execContentsAction(this, 2);
-        },
-
-        /**
-         * 设置Range的开始容器节点和偏移量
-         * @method  setStart
-         * @remind 如果给定的节点是元素节点,那么offset指的是其子元素中索引为offset的元素,
-         *          如果是文本节点,那么offset指的是其文本内容的第offset个字符
-         * @remind 如果提供的容器节点是一个不能包含子元素的节点, 则该选区的开始容器将被设置
-         *          为该节点的父节点, 此时, 其距离开始容器的偏移量也变成了该节点在其父节点
-         *          中的索引
-         * @param { Node } node 将被设为当前选区开始边界容器的节点对象
-         * @param { int } offset 选区的开始位置偏移量
-         * @return { UE.dom.Range } 当前range对象
-         * @example
-         * ```html
-         * <!-- 选区 -->
-         * <b>xxx<i>x<span>xx</span>xx<em>xx</em>xxx</i>[xxx]</b>
-         *
-         * <script>
-         *
-         *     //执行操作
-         *     range.setStart( document.getElementsByTagName("i")[0], 1 );
-         *
-         *     //此时, 选区变成了
-         *     //<b>xxx<i>x[<span>xx</span>xx<em>xx</em>xxx</i>xxx]</b>
-         *
-         * </script>
-         * ```
-         * @example
-         * ```html
-         * <!-- 选区 -->
-         * <b>xxx<img>[xx]x</b>
-         *
-         * <script>
-         *
-         *     //执行操作
-         *     range.setStart( document.getElementsByTagName("img")[0], 3 );
-         *
-         *     //此时, 选区变成了
-         *     //<b>xxx[<img>xx]x</b>
-         *
-         * </script>
-         * ```
-         */
-        setStart:function (node, offset) {
-            return setEndPoint(true, node, offset, this);
-        },
-
-        /**
-         * 设置Range的结束容器和偏移量
-         * @method  setEnd
-         * @param { Node } node 作为当前选区结束边界容器的节点对象
-         * @param { int } offset 结束边界的偏移量
-         * @see UE.dom.Range:setStart(Node,int)
-         * @return { UE.dom.Range } 当前range对象
-         */
-        setEnd:function (node, offset) {
-            return setEndPoint(false, node, offset, this);
-        },
-
-        /**
-         * 将Range开始位置设置到node节点之后
-         * @method  setStartAfter
-         * @remind 该操作将会把给定节点的父节点作为range的开始容器, 且偏移量是该节点在其父节点中的位置索引+1
-         * @param { Node } node 选区的开始边界将紧接着该节点之后
-         * @return { UE.dom.Range } 当前range对象
-         * @example
-         * ```html
-         * <!-- 选区示例 -->
-         * <b>xx<i>xxx</i><span>xx[x</span>xxx]</b>
-         *
-         * <script>
-         *
-         *     //执行操作
-         *     range.setStartAfter( document.getElementsByTagName("i")[0] );
-         *
-         *     //结果选区
-         *     //<b>xx<i>xxx</i>[<span>xxx</span>xxx]</b>
-         *
-         * </script>
-         * ```
-         */
-        setStartAfter:function (node) {
-            return this.setStart(node.parentNode, domUtils.getNodeIndex(node) + 1);
-        },
-
-        /**
-         * 将Range开始位置设置到node节点之前
-         * @method  setStartBefore
-         * @remind 该操作将会把给定节点的父节点作为range的开始容器, 且偏移量是该节点在其父节点中的位置索引
-         * @param { Node } node 新的选区开始位置在该节点之前
-         * @see UE.dom.Range:setStartAfter(Node)
-         * @return { UE.dom.Range } 当前range对象
-         */
-        setStartBefore:function (node) {
-            return this.setStart(node.parentNode, domUtils.getNodeIndex(node));
-        },
-
-        /**
-         * 将Range结束位置设置到node节点之后
-         * @method  setEndAfter
-         * @remind 该操作将会把给定节点的父节点作为range的结束容器, 且偏移量是该节点在其父节点中的位置索引+1
-         * @param { Node } node 目标节点
-         * @see UE.dom.Range:setStartAfter(Node)
-         * @return { UE.dom.Range } 当前range对象
-         * @example
-         * ```html
-         * <!-- 选区示例 -->
-         * <b>[xx<i>xxx</i><span>xx]x</span>xxx</b>
-         *
-         * <script>
-         *
-         *     //执行操作
-         *     range.setStartAfter( document.getElementsByTagName("span")[0] );
-         *
-         *     //结果选区
-         *     //<b>[xx<i>xxx</i><span>xxx</span>]xxx</b>
-         *
-         * </script>
-         * ```
-         */
-        setEndAfter:function (node) {
-            return this.setEnd(node.parentNode, domUtils.getNodeIndex(node) + 1);
-        },
-
-        /**
-         * 将Range结束位置设置到node节点之前
-         * @method  setEndBefore
-         * @remind 该操作将会把给定节点的父节点作为range的结束容器, 且偏移量是该节点在其父节点中的位置索引
-         * @param { Node } node 目标节点
-         * @see UE.dom.Range:setEndAfter(Node)
-         * @return { UE.dom.Range } 当前range对象
-         */
-        setEndBefore:function (node) {
-            return this.setEnd(node.parentNode, domUtils.getNodeIndex(node));
-        },
-
-        /**
-         * 设置Range的开始位置到node节点内的第一个子节点之前
-         * @method  setStartAtFirst
-         * @remind 选区的开始容器将变成给定的节点, 且偏移量为0
-         * @remind 如果给定的节点是元素节点, 则该节点必须是允许包含子节点的元素。
-         * @param { Node } node 目标节点
-         * @see UE.dom.Range:setStartBefore(Node)
-         * @return { UE.dom.Range } 当前range对象
-         * @example
-         * ```html
-         * <!-- 选区示例 -->
-         * <b>xx<i>xxx</i><span>[xx]x</span>xxx</b>
-         *
-         * <script>
-         *
-         *     //执行操作
-         *     range.setStartAtFirst( document.getElementsByTagName("i")[0] );
-         *
-         *     //结果选区
-         *     //<b>xx<i>[xxx</i><span>xx]x</span>xxx</b>
-         *
-         * </script>
-         * ```
-         */
-        setStartAtFirst:function (node) {
-            return this.setStart(node, 0);
-        },
-
-        /**
-         * 设置Range的开始位置到node节点内的最后一个节点之后
-         * @method setStartAtLast
-         * @remind 选区的开始容器将变成给定的节点, 且偏移量为该节点的子节点数
-         * @remind 如果给定的节点是元素节点, 则该节点必须是允许包含子节点的元素。
-         * @param { Node } node 目标节点
-         * @see UE.dom.Range:setStartAtFirst(Node)
-         * @return { UE.dom.Range } 当前range对象
-         */
-        setStartAtLast:function (node) {
-            return this.setStart(node, node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length);
-        },
-
-        /**
-         * 设置Range的结束位置到node节点内的第一个节点之前
-         * @method  setEndAtFirst
-         * @param { Node } node 目标节点
-         * @remind 选区的结束容器将变成给定的节点, 且偏移量为0
-         * @remind node必须是一个元素节点, 且必须是允许包含子节点的元素。
-         * @see UE.dom.Range:setStartAtFirst(Node)
-         * @return { UE.dom.Range } 当前range对象
-         */
-        setEndAtFirst:function (node) {
-            return this.setEnd(node, 0);
-        },
-
-        /**
-         * 设置Range的结束位置到node节点内的最后一个节点之后
-         * @method  setEndAtLast
-         * @param { Node } node 目标节点
-         * @remind 选区的结束容器将变成给定的节点, 且偏移量为该节点的子节点数量
-         * @remind node必须是一个元素节点, 且必须是允许包含子节点的元素。
-         * @see UE.dom.Range:setStartAtFirst(Node)
-         * @return { UE.dom.Range } 当前range对象
-         */
-        setEndAtLast:function (node) {
-            return this.setEnd(node, node.nodeType == 3 ? node.nodeValue.length : node.childNodes.length);
-        },
-
-        /**
-         * 选中给定节点
-         * @method  selectNode
-         * @remind 此时, 选区的开始容器和结束容器都是该节点的父节点, 其startOffset是该节点在父节点中的位置索引,
-         *          而endOffset为startOffset+1
-         * @param { Node } node 需要选中的节点
-         * @return { UE.dom.Range } 当前range对象,此时的range仅包含当前给定的节点对象
-         * @example
-         * ```html
-         * <!-- 选区示例 -->
-         * <b>xx<i>xxx</i><span>[xx]x</span>xxx</b>
-         *
-         * <script>
-         *
-         *     //执行操作
-         *     range.selectNode( document.getElementsByTagName("i")[0] );
-         *
-         *     //结果选区
-         *     //<b>xx[<i>xxx</i>]<span>xxx</span>xxx</b>
-         *
-         * </script>
-         * ```
-         */
-        selectNode:function (node) {
-            return this.setStartBefore(node).setEndAfter(node);
-        },
-
-        /**
-         * 选中给定节点内部的所有节点
-         * @method  selectNodeContents
-         * @remind 此时, 选区的开始容器和结束容器都是该节点, 其startOffset为0,
-         *          而endOffset是该节点的子节点数。
-         * @param { Node } node 目标节点, 当前range将包含该节点内的所有节点
-         * @return { UE.dom.Range } 当前range对象, 此时range仅包含给定节点的所有子节点
-         * @example
-         * ```html
-         * <!-- 选区示例 -->
-         * <b>xx<i>xxx</i><span>[xx]x</span>xxx</b>
-         *
-         * <script>
-         *
-         *     //执行操作
-         *     range.selectNode( document.getElementsByTagName("b")[0] );
-         *
-         *     //结果选区
-         *     //<b>[xx<i>xxx</i><span>xxx</span>xxx]</b>
-         *
-         * </script>
-         * ```
-         */
-        selectNodeContents:function (node) {
-            return this.setStart(node, 0).setEndAtLast(node);
-        },
-
-        /**
-         * clone当前Range对象
-         * @method  cloneRange
-         * @remind 返回的range是一个全新的range对象, 其内部所有属性与当前被clone的range相同。
-         * @return { UE.dom.Range } 当前range对象的一个副本
-         */
-        cloneRange:function () {
-            var me = this;
-            return new Range(me.document).setStart(me.startContainer, me.startOffset).setEnd(me.endContainer, me.endOffset);
-
-        },
-
-        /**
-         * 向当前选区的结束处闭合选区
-         * @method  collapse
-         * @return { UE.dom.Range } 当前range对象
-         * @example
-         * ```html
-         * <!-- 选区示例 -->
-         * <b>xx<i>xxx</i><span>[xx]x</span>xxx</b>
-         *
-         * <script>
-         *
-         *     //执行操作
-         *     range.collapse();
-         *
-         *     //结果选区
-         *     //“|”表示选区已闭合
-         *     //<b>xx<i>xxx</i><span>xx|x</span>xxx</b>
-         *
-         * </script>
-         * ```
-         */
-
-        /**
-         * 闭合当前选区,根据给定的toStart参数项决定是向当前选区开始处闭合还是向结束处闭合,
-         * 如果toStart的值为true,则向开始位置闭合, 反之,向结束位置闭合。
-         * @method  collapse
-         * @param { Boolean } toStart 是否向选区开始处闭合
-         * @return { UE.dom.Range } 当前range对象,此时range对象处于闭合状态
-         * @see UE.dom.Range:collapse()
-         * @example
-         * ```html
-         * <!-- 选区示例 -->
-         * <b>xx<i>xxx</i><span>[xx]x</span>xxx</b>
-         *
-         * <script>
-         *
-         *     //执行操作
-         *     range.collapse( true );
-         *
-         *     //结果选区
-         *     //“|”表示选区已闭合
-         *     //<b>xx<i>xxx</i><span>|xxx</span>xxx</b>
-         *
-         * </script>
-         * ```
-         */
-        collapse:function (toStart) {
-            var me = this;
-            if (toStart) {
-                me.endContainer = me.startContainer;
-                me.endOffset = me.startOffset;
-            } else {
-                me.startContainer = me.endContainer;
-                me.startOffset = me.endOffset;
-            }
-            me.collapsed = true;
-            return me;
-        },
-
-        /**
-         * 调整range的开始位置和结束位置,使其"收缩"到最小的位置
-         * @method  shrinkBoundary
-         * @return { UE.dom.Range } 当前range对象
-         * @example
-         * ```html
-         * <span>xx<b>xx[</b>xxxxx]</span> => <span>xx<b>xx</b>[xxxxx]</span>
-         * ```
-         *
-         * @example
-         * ```html
-         * <!-- 选区示例 -->
-         * <b>x[xx</b><i>]xxx</i>
-         *
-         * <script>
-         *
-         *     //执行收缩
-         *     range.shrinkBoundary();
-         *
-         *     //结果选区
-         *     //<b>x[xx]</b><i>xxx</i>
-         * </script>
-         * ```
-         *
-         * @example
-         * ```html
-         * [<b><i>xxxx</i>xxxxxxx</b>] => <b><i>[xxxx</i>xxxxxxx]</b>
-         * ```
-         */
-
-        /**
-         * 调整range的开始位置和结束位置,使其"收缩"到最小的位置,
-         * 如果ignoreEnd的值为true,则忽略对结束位置的调整
-         * @method  shrinkBoundary
-         * @param { Boolean } ignoreEnd 是否忽略对结束位置的调整
-         * @return { UE.dom.Range } 当前range对象
-         * @see UE.dom.domUtils.Range:shrinkBoundary()
-         */
-        shrinkBoundary:function (ignoreEnd) {
-            var me = this, child,
-                collapsed = me.collapsed;
-            function check(node){
-                return node.nodeType == 1 && !domUtils.isBookmarkNode(node) && !dtd.$empty[node.tagName] && !dtd.$nonChild[node.tagName]
-            }
-            while (me.startContainer.nodeType == 1 //是element
-                && (child = me.startContainer.childNodes[me.startOffset]) //子节点也是element
-                && check(child)) {
-                me.setStart(child, 0);
-            }
-            if (collapsed) {
-                return me.collapse(true);
-            }
-            if (!ignoreEnd) {
-                while (me.endContainer.nodeType == 1//是element
-                    && me.endOffset > 0 //如果是空元素就退出 endOffset=0那么endOffst-1为负值,childNodes[endOffset]报错
-                    && (child = me.endContainer.childNodes[me.endOffset - 1]) //子节点也是element
-                    && check(child)) {
-                    me.setEnd(child, child.childNodes.length);
-                }
-            }
-            return me;
-        },
-
-        /**
-         * 获取离当前选区内包含的所有节点最近的公共祖先节点,
-         * @method  getCommonAncestor
-         * @remind 返回的公共祖先节点一定不是range自身的容器节点, 但有可能是一个文本节点
-         * @return { Node } 当前range对象内所有节点的公共祖先节点
-         * @example
-         * ```html
-         * //选区示例
-         * <span>xxx<b>x[x<em>xx]x</em>xxx</b>xx</span>
-         * <script>
-         *
-         *     var node = range.getCommonAncestor();
-         *
-         *     //公共祖先节点是: b节点
-         *     //输出: B
-         *     console.log(node.tagName);
-         *
-         * </script>
-         * ```
-         */
-
-        /**
-         * 获取当前选区所包含的所有节点的公共祖先节点, 可以根据给定的参数 includeSelf 决定获取到
-         * 的公共祖先节点是否可以是当前选区的startContainer或endContainer节点, 如果 includeSelf
-         * 的取值为true, 则返回的节点可以是自身的容器节点, 否则, 则不能是容器节点
-         * @method  getCommonAncestor
-         * @param { Boolean } includeSelf 是否允许获取到的公共祖先节点是当前range对象的容器节点
-         * @return { Node } 当前range对象内所有节点的公共祖先节点
-         * @see UE.dom.Range:getCommonAncestor()
-         * @example
-         * ```html
-         * <body>
-         *
-         *     <!-- 选区示例 -->
-         *     <b>xxx<i>xxxx<span>xx[x</span>xx]x</i>xxxxxxx</b>
-         *
-         *     <script>
-         *
-         *         var node = range.getCommonAncestor( false );
-         *
-         *         //这里的公共祖先节点是B而不是I, 是因为参数限制了获取到的节点不能是容器节点
-         *         //output: B
-         *         console.log( node.tagName );
-         *
-         *     </script>
-         *
-         * </body>
-         * ```
-         */
-
-        /**
-         * 获取当前选区所包含的所有节点的公共祖先节点, 可以根据给定的参数 includeSelf 决定获取到
-         * 的公共祖先节点是否可以是当前选区的startContainer或endContainer节点, 如果 includeSelf
-         * 的取值为true, 则返回的节点可以是自身的容器节点, 否则, 则不能是容器节点; 同时可以根据
-         * ignoreTextNode 参数的取值决定是否忽略类型为文本节点的祖先节点。
-         * @method  getCommonAncestor
-         * @param { Boolean } includeSelf 是否允许获取到的公共祖先节点是当前range对象的容器节点
-         * @param { Boolean } ignoreTextNode 获取祖先节点的过程中是否忽略类型为文本节点的祖先节点
-         * @return { Node } 当前range对象内所有节点的公共祖先节点
-         * @see UE.dom.Range:getCommonAncestor()
-         * @see UE.dom.Range:getCommonAncestor(Boolean)
-         * @example
-         * ```html
-         * <body>
-         *
-         *     <!-- 选区示例 -->
-         *     <b>xxx<i>xxxx<span>x[x]x</span>xxx</i>xxxxxxx</b>
-         *
-         *     <script>
-         *
-         *         var node = range.getCommonAncestor( true, false );
-         *
-         *         //output: SPAN
-         *         console.log( node.tagName );
-         *
-         *     </script>
-         *
-         * </body>
-         * ```
-         */
-        getCommonAncestor:function (includeSelf, ignoreTextNode) {
-            var me = this,
-                start = me.startContainer,
-                end = me.endContainer;
-            if (start === end) {
-                if (includeSelf && selectOneNode(this)) {
-                    start = start.childNodes[me.startOffset];
-                    if(start.nodeType == 1)
-                        return start;
-                }
-                //只有在上来就相等的情况下才会出现是文本的情况
-                return ignoreTextNode && start.nodeType == 3 ? start.parentNode : start;
-            }
-            return domUtils.getCommonAncestor(start, end);
-        },
-
-        /**
-         * 调整当前Range的开始和结束边界容器,如果是容器节点是文本节点,就调整到包含该文本节点的父节点上
-         * @method trimBoundary
-         * @remind 该操作有可能会引起文本节点被切开
-         * @return { UE.dom.Range } 当前range对象
-         * @example
-         * ```html
-         *
-         * //选区示例
-         * <b>xxx<i>[xxxxx]</i>xxx</b>
-         *
-         * <script>
-         *     //未调整前, 选区的开始容器和结束都是文本节点
-         *     //执行调整
-         *     range.trimBoundary();
-         *
-         *     //调整之后, 容器节点变成了i节点
-         *     //<b>xxx[<i>xxxxx</i>]xxx</b>
-         * </script>
-         * ```
-         */
-
-        /**
-         * 调整当前Range的开始和结束边界容器,如果是容器节点是文本节点,就调整到包含该文本节点的父节点上,
-         * 可以根据 ignoreEnd 参数的值决定是否调整对结束边界的调整
-         * @method trimBoundary
-         * @param { Boolean } ignoreEnd 是否忽略对结束边界的调整
-         * @return { UE.dom.Range } 当前range对象
-         * @example
-         * ```html
-         *
-         * //选区示例
-         * <b>xxx<i>[xxxxx]</i>xxx</b>
-         *
-         * <script>
-         *     //未调整前, 选区的开始容器和结束都是文本节点
-         *     //执行调整
-         *     range.trimBoundary( true );
-         *
-         *     //调整之后, 开始容器节点变成了i节点
-         *     //但是, 结束容器没有发生变化
-         *     //<b>xxx[<i>xxxxx]</i>xxx</b>
-         * </script>
-         * ```
-         */
-        trimBoundary:function (ignoreEnd) {
-            this.txtToElmBoundary();
-            var start = this.startContainer,
-                offset = this.startOffset,
-                collapsed = this.collapsed,
-                end = this.endContainer;
-            if (start.nodeType == 3) {
-                if (offset == 0) {
-                    this.setStartBefore(start);
-                } else {
-                    if (offset >= start.nodeValue.length) {
-                        this.setStartAfter(start);
-                    } else {
-                        var textNode = domUtils.split(start, offset);
-                        //跟新结束边界
-                        if (start === end) {
-                            this.setEnd(textNode, this.endOffset - offset);
-                        } else if (start.parentNode === end) {
-                            this.endOffset += 1;
-                        }
-                        this.setStartBefore(textNode);
-                    }
-                }
-                if (collapsed) {
-                    return this.collapse(true);
-                }
-            }
-            if (!ignoreEnd) {
-                offset = this.endOffset;
-                end = this.endContainer;
-                if (end.nodeType == 3) {
-                    if (offset == 0) {
-                        this.setEndBefore(end);
-                    } else {
-                        offset < end.nodeValue.length && domUtils.split(end, offset);
-                        this.setEndAfter(end);
-                    }
-                }
-            }
-            return this;
-        },
-
-        /**
-         * 如果选区在文本的边界上,就扩展选区到文本的父节点上, 如果当前选区是闭合的, 则什么也不做
-         * @method txtToElmBoundary
-         * @remind 该操作不会修改dom节点
-         * @return { UE.dom.Range } 当前range对象
-         */
-
-        /**
-         * 如果选区在文本的边界上,就扩展选区到文本的父节点上, 如果当前选区是闭合的, 则根据参数项
-         * ignoreCollapsed 的值决定是否执行该调整
-         * @method txtToElmBoundary
-         * @param { Boolean } ignoreCollapsed 是否忽略选区的闭合状态, 如果该参数取值为true, 则
-         *                      不论选区是否闭合, 都会执行该操作, 反之, 则不会对闭合的选区执行该操作
-         * @return { UE.dom.Range } 当前range对象
-         */
-        txtToElmBoundary:function (ignoreCollapsed) {
-            function adjust(r, c) {
-                var container = r[c + 'Container'],
-                    offset = r[c + 'Offset'];
-                if (container.nodeType == 3) {
-                    if (!offset) {
-                        r['set' + c.replace(/(\w)/, function (a) {
-                            return a.toUpperCase();
-                        }) + 'Before'](container);
-                    } else if (offset >= container.nodeValue.length) {
-                        r['set' + c.replace(/(\w)/, function (a) {
-                            return a.toUpperCase();
-                        }) + 'After' ](container);
-                    }
-                }
-            }
-
-            if (ignoreCollapsed || !this.collapsed) {
-                adjust(this, 'start');
-                adjust(this, 'end');
-            }
-            return this;
-        },
-
-        /**
-         * 在当前选区的开始位置前插入节点,新插入的节点会被该range包含
-         * @method  insertNode
-         * @param { Node } node 需要插入的节点
-         * @remind 插入的节点可以是一个DocumentFragment依次插入多个节点
-         * @return { UE.dom.Range } 当前range对象
-         */
-        insertNode:function (node) {
-            var first = node, length = 1;
-            if (node.nodeType == 11) {
-                first = node.firstChild;
-                length = node.childNodes.length;
-            }
-            this.trimBoundary(true);
-            var start = this.startContainer,
-                offset = this.startOffset;
-            var nextNode = start.childNodes[ offset ];
-            if (nextNode) {
-                start.insertBefore(node, nextNode);
-            } else {
-                start.appendChild(node);
-            }
-            if (first.parentNode === this.endContainer) {
-                this.endOffset = this.endOffset + length;
-            }
-            return this.setStartBefore(first);
-        },
-
-        /**
-         * 闭合选区到当前选区的开始位置, 并且定位光标到闭合后的位置
-         * @method  setCursor
-         * @return { UE.dom.Range } 当前range对象
-         * @see UE.dom.Range:collapse()
-         */
-
-        /**
-         * 闭合选区,可以根据参数toEnd的值控制选区是向前闭合还是向后闭合, 并且定位光标到闭合后的位置。
-         * @method  setCursor
-         * @param { Boolean } toEnd 是否向后闭合, 如果为true, 则闭合选区时, 将向结束容器方向闭合,
-         *                      反之,则向开始容器方向闭合
-         * @return { UE.dom.Range } 当前range对象
-         * @see UE.dom.Range:collapse(Boolean)
-         */
-        setCursor:function (toEnd, noFillData) {
-            return this.collapse(!toEnd).select(noFillData);
-        },
-
-        /**
-         * 创建当前range的一个书签,记录下当前range的位置,方便当dom树改变时,还能找回原来的选区位置
-         * @method createBookmark
-         * @param { Boolean } serialize 控制返回的标记位置是对当前位置的引用还是ID,如果该值为true,则
-         *                              返回标记位置的ID, 反之则返回标记位置节点的引用
-         * @return { Object } 返回一个书签记录键值对, 其包含的key有: start => 开始标记的ID或者引用,
-         *                          end => 结束标记的ID或引用, id => 当前标记的类型, 如果为true,则表示
-         *                          返回的记录的类型为ID, 反之则为引用
-         */
-        createBookmark:function (serialize, same) {
-            var endNode,
-                startNode = this.document.createElement('span');
-            startNode.style.cssText = 'display:none;line-height:0px;';
-            startNode.appendChild(this.document.createTextNode('\u200D'));
-            startNode.id = '_baidu_bookmark_start_' + (same ? '' : guid++);
-
-            if (!this.collapsed) {
-                endNode = startNode.cloneNode(true);
-                endNode.id = '_baidu_bookmark_end_' + (same ? '' : guid++);
-            }
-            this.insertNode(startNode);
-            if (endNode) {
-                this.collapse().insertNode(endNode).setEndBefore(endNode);
-            }
-            this.setStartAfter(startNode);
-            return {
-                start:serialize ? startNode.id : startNode,
-                end:endNode ? serialize ? endNode.id : endNode : null,
-                id:serialize
-            }
-        },
-
-        /**
-         *  调整当前range的边界到书签位置,并删除该书签对象所标记的位置内的节点
-         *  @method  moveToBookmark
-         *  @param { BookMark } bookmark createBookmark所创建的标签对象
-         *  @return { UE.dom.Range } 当前range对象
-         *  @see UE.dom.Range:createBookmark(Boolean)
-         */
-        moveToBookmark:function (bookmark) {
-            var start = bookmark.id ? this.document.getElementById(bookmark.start) : bookmark.start,
-                end = bookmark.end && bookmark.id ? this.document.getElementById(bookmark.end) : bookmark.end;
-            this.setStartBefore(start);
-            domUtils.remove(start);
-            if (end) {
-                this.setEndBefore(end);
-                domUtils.remove(end);
-            } else {
-                this.collapse(true);
-            }
-            return this;
-        },
-
-        /**
-         * 调整range的边界,使其"放大"到最近的父节点
-         * @method  enlarge
-         * @remind 会引起选区的变化
-         * @return { UE.dom.Range } 当前range对象
-         */
-
-        /**
-         * 调整range的边界,使其"放大"到最近的父节点,根据参数 toBlock 的取值, 可以
-         * 要求扩大之后的父节点是block节点
-         * @method  enlarge
-         * @param { Boolean } toBlock 是否要求扩大之后的父节点必须是block节点
-         * @return { UE.dom.Range } 当前range对象
-         */
-        enlarge:function (toBlock, stopFn) {
-            var isBody = domUtils.isBody,
-                pre, node, tmp = this.document.createTextNode('');
-            if (toBlock) {
-                node = this.startContainer;
-                if (node.nodeType == 1) {
-                    if (node.childNodes[this.startOffset]) {
-                        pre = node = node.childNodes[this.startOffset]
-                    } else {
-                        node.appendChild(tmp);
-                        pre = node = tmp;
-                    }
-                } else {
-                    pre = node;
-                }
-                while (1) {
-                    if (domUtils.isBlockElm(node)) {
-                        node = pre;
-                        while ((pre = node.previousSibling) && !domUtils.isBlockElm(pre)) {
-                            node = pre;
-                        }
-                        this.setStartBefore(node);
-                        break;
-                    }
-                    pre = node;
-                    node = node.parentNode;
-                }
-                node = this.endContainer;
-                if (node.nodeType == 1) {
-                    if (pre = node.childNodes[this.endOffset]) {
-                        node.insertBefore(tmp, pre);
-                    } else {
-                        node.appendChild(tmp);
-                    }
-                    pre = node = tmp;
-                } else {
-                    pre = node;
-                }
-                while (1) {
-                    if (domUtils.isBlockElm(node)) {
-                        node = pre;
-                        while ((pre = node.nextSibling) && !domUtils.isBlockElm(pre)) {
-                            node = pre;
-                        }
-                        this.setEndAfter(node);
-                        break;
-                    }
-                    pre = node;
-                    node = node.parentNode;
-                }
-                if (tmp.parentNode === this.endContainer) {
-                    this.endOffset--;
-                }
-                domUtils.remove(tmp);
-            }
-
-            // 扩展边界到最大
-            if (!this.collapsed) {
-                while (this.startOffset == 0) {
-                    if (stopFn && stopFn(this.startContainer)) {
-                        break;
-                    }
-                    if (isBody(this.startContainer)) {
-                        break;
-                    }
-                    this.setStartBefore(this.startContainer);
-                }
-                while (this.endOffset == (this.endContainer.nodeType == 1 ? this.endContainer.childNodes.length : this.endContainer.nodeValue.length)) {
-                    if (stopFn && stopFn(this.endContainer)) {
-                        break;
-                    }
-                    if (isBody(this.endContainer)) {
-                        break;
-                    }
-                    this.setEndAfter(this.endContainer);
-                }
-            }
-            return this;
-        },
-        enlargeToBlockElm:function(ignoreEnd){
-            while(!domUtils.isBlockElm(this.startContainer)){
-                this.setStartBefore(this.startContainer);
-            }
-            if(!ignoreEnd){
-                while(!domUtils.isBlockElm(this.endContainer)){
-                    this.setEndAfter(this.endContainer);
-                }
-            }
-            return this;
-        },
-        /**
-         * 调整Range的边界,使其"缩小"到最合适的位置
-         * @method adjustmentBoundary
-         * @return { UE.dom.Range } 当前range对象
-         * @see UE.dom.Range:shrinkBoundary()
-         */
-        adjustmentBoundary:function () {
-            if (!this.collapsed) {
-                while (!domUtils.isBody(this.startContainer) &&
-                    this.startOffset == this.startContainer[this.startContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length &&
-                    this.startContainer[this.startContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length
-                    ) {
-
-                    this.setStartAfter(this.startContainer);
-                }
-                while (!domUtils.isBody(this.endContainer) && !this.endOffset &&
-                    this.endContainer[this.endContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length
-                    ) {
-                    this.setEndBefore(this.endContainer);
-                }
-            }
-            return this;
-        },
-
-        /**
-         * 给range选区中的内容添加给定的inline标签
-         * @method applyInlineStyle
-         * @param { String } tagName 需要添加的标签名
-         * @example
-         * ```html
-         * <p>xxxx[xxxx]x</p>  ==>  range.applyInlineStyle("strong")  ==>  <p>xxxx[<strong>xxxx</strong>]x</p>
-         * ```
-         */
-
-        /**
-         * 给range选区中的内容添加给定的inline标签, 并且为标签附加上一些初始化属性。
-         * @method applyInlineStyle
-         * @param { String } tagName 需要添加的标签名
-         * @param { Object } attrs 跟随新添加的标签的属性
-         * @return { UE.dom.Range } 当前选区
-         * @example
-         * ```html
-         * <p>xxxx[xxxx]x</p>
-         *
-         * ==>
-         *
-         * <!-- 执行操作 -->
-         * range.applyInlineStyle("strong",{"style":"font-size:12px"})
-         *
-         * ==>
-         *
-         * <p>xxxx[<strong style="font-size:12px">xxxx</strong>]x</p>
-         * ```
-         */
-        applyInlineStyle:function (tagName, attrs, list) {
-            if (this.collapsed)return this;
-            this.trimBoundary().enlarge(false,
-                function (node) {
-                    return node.nodeType == 1 && domUtils.isBlockElm(node)
-                }).adjustmentBoundary();
-            var bookmark = this.createBookmark(),
-                end = bookmark.end,
-                filterFn = function (node) {
-                    return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' : !domUtils.isWhitespace(node);
-                },
-                current = domUtils.getNextDomNode(bookmark.start, false, filterFn),
-                node,
-                pre,
-                range = this.cloneRange();
-            while (current && (domUtils.getPosition(current, end) & domUtils.POSITION_PRECEDING)) {
-                if (current.nodeType == 3 || dtd[tagName][current.tagName]) {
-                    range.setStartBefore(current);
-                    node = current;
-                    while (node && (node.nodeType == 3 || dtd[tagName][node.tagName]) && node !== end) {
-                        pre = node;
-                        node = domUtils.getNextDomNode(node, node.nodeType == 1, null, function (parent) {
-                            return dtd[tagName][parent.tagName];
-                        });
-                    }
-                    var frag = range.setEndAfter(pre).extractContents(), elm;
-                    if (list && list.length > 0) {
-                        var level, top;
-                        top = level = list[0].cloneNode(false);
-                        for (var i = 1, ci; ci = list[i++];) {
-                            level.appendChild(ci.cloneNode(false));
-                            level = level.firstChild;
-                        }
-                        elm = level;
-                    } else {
-                        elm = range.document.createElement(tagName);
-                    }
-                    if (attrs) {
-                        domUtils.setAttributes(elm, attrs);
-                    }
-                    elm.appendChild(frag);
-                    range.insertNode(list ? top : elm);
-                    //处理下滑线在a上的情况
-                    var aNode;
-                    if (tagName == 'span' && attrs.style && /text\-decoration/.test(attrs.style) && (aNode = domUtils.findParentByTagName(elm, 'a', true))) {
-                        domUtils.setAttributes(aNode, attrs);
-                        domUtils.remove(elm, true);
-                        elm = aNode;
-                    } else {
-                        domUtils.mergeSibling(elm);
-                        domUtils.clearEmptySibling(elm);
-                    }
-                    //去除子节点相同的
-                    domUtils.mergeChild(elm, attrs);
-                    current = domUtils.getNextDomNode(elm, false, filterFn);
-                    domUtils.mergeToParent(elm);
-                    if (node === end) {
-                        break;
-                    }
-                } else {
-                    current = domUtils.getNextDomNode(current, true, filterFn);
-                }
-            }
-            return this.moveToBookmark(bookmark);
-        },
-
-        /**
-         * 移除当前选区内指定的inline标签,但保留其中的内容
-         * @method removeInlineStyle
-         * @param { String } tagName 需要移除的标签名
-         * @return { UE.dom.Range } 当前的range对象
-         * @example
-         * ```html
-         * xx[x<span>xxx<em>yyy</em>zz]z</span>  => range.removeInlineStyle(["em"])  => xx[x<span>xxxyyyzz]z</span>
-         * ```
-         */
-
-        /**
-         * 移除当前选区内指定的一组inline标签,但保留其中的内容
-         * @method removeInlineStyle
-         * @param { Array } tagNameArr 需要移除的标签名的数组
-         * @return { UE.dom.Range } 当前的range对象
-         * @see UE.dom.Range:removeInlineStyle(String)
-         */
-        removeInlineStyle:function (tagNames) {
-            if (this.collapsed)return this;
-            tagNames = utils.isArray(tagNames) ? tagNames : [tagNames];
-            this.shrinkBoundary().adjustmentBoundary();
-            var start = this.startContainer, end = this.endContainer;
-            while (1) {
-                if (start.nodeType == 1) {
-                    if (utils.indexOf(tagNames, start.tagName.toLowerCase()) > -1) {
-                        break;
-                    }
-                    if (start.tagName.toLowerCase() == 'body') {
-                        start = null;
-                        break;
-                    }
-                }
-                start = start.parentNode;
-            }
-            while (1) {
-                if (end.nodeType == 1) {
-                    if (utils.indexOf(tagNames, end.tagName.toLowerCase()) > -1) {
-                        break;
-                    }
-                    if (end.tagName.toLowerCase() == 'body') {
-                        end = null;
-                        break;
-                    }
-                }
-                end = end.parentNode;
-            }
-            var bookmark = this.createBookmark(),
-                frag,
-                tmpRange;
-            if (start) {
-                tmpRange = this.cloneRange().setEndBefore(bookmark.start).setStartBefore(start);
-                frag = tmpRange.extractContents();
-                tmpRange.insertNode(frag);
-                domUtils.clearEmptySibling(start, true);
-                start.parentNode.insertBefore(bookmark.start, start);
-            }
-            if (end) {
-                tmpRange = this.cloneRange().setStartAfter(bookmark.end).setEndAfter(end);
-                frag = tmpRange.extractContents();
-                tmpRange.insertNode(frag);
-                domUtils.clearEmptySibling(end, false, true);
-                end.parentNode.insertBefore(bookmark.end, end.nextSibling);
-            }
-            var current = domUtils.getNextDomNode(bookmark.start, false, function (node) {
-                return node.nodeType == 1;
-            }), next;
-            while (current && current !== bookmark.end) {
-                next = domUtils.getNextDomNode(current, true, function (node) {
-                    return node.nodeType == 1;
-                });
-                if (utils.indexOf(tagNames, current.tagName.toLowerCase()) > -1) {
-                    domUtils.remove(current, true);
-                }
-                current = next;
-            }
-            return this.moveToBookmark(bookmark);
-        },
-
-        /**
-         * 获取当前选中的自闭合的节点
-         * @method  getClosedNode
-         * @return { Node | NULL } 如果当前选中的是自闭合节点, 则返回该节点, 否则返回NULL
-         */
-        getClosedNode:function () {
-            var node;
-            if (!this.collapsed) {
-                var range = this.cloneRange().adjustmentBoundary().shrinkBoundary();
-                if (selectOneNode(range)) {
-                    var child = range.startContainer.childNodes[range.startOffset];
-                    if (child && child.nodeType == 1 && (dtd.$empty[child.tagName] || dtd.$nonChild[child.tagName])) {
-                        node = child;
-                    }
-                }
-            }
-            return node;
-        },
-
-        /**
-         * 在页面上高亮range所表示的选区
-         * @method select
-         * @return { UE.dom.Range } 返回当前Range对象
-         */
-            //这里不区分ie9以上,trace:3824
-        select:browser.ie ? function (noFillData, textRange) {
-            var nativeRange;
-            if (!this.collapsed)
-                this.shrinkBoundary();
-            var node = this.getClosedNode();
-            if (node && !textRange) {
-                try {
-                    nativeRange = this.document.body.createControlRange();
-                    nativeRange.addElement(node);
-                    nativeRange.select();
-                } catch (e) {}
-                return this;
-            }
-            var bookmark = this.createBookmark(),
-                start = bookmark.start,
-                end;
-            nativeRange = this.document.body.createTextRange();
-            nativeRange.moveToElementText(start);
-            nativeRange.moveStart('character', 1);
-            if (!this.collapsed) {
-                var nativeRangeEnd = this.document.body.createTextRange();
-                end = bookmark.end;
-                nativeRangeEnd.moveToElementText(end);
-                nativeRange.setEndPoint('EndToEnd', nativeRangeEnd);
-            } else {
-                if (!noFillData && this.startContainer.nodeType != 3) {
-                    //使用<span>|x<span>固定住光标
-                    var tmpText = this.document.createTextNode(fillChar),
-                        tmp = this.document.createElement('span');
-                    tmp.appendChild(this.document.createTextNode(fillChar));
-                    start.parentNode.insertBefore(tmp, start);
-                    start.parentNode.insertBefore(tmpText, start);
-                    //当点b,i,u时,不能清除i上边的b
-                    removeFillData(this.document, tmpText);
-                    fillData = tmpText;
-                    mergeSibling(tmp, 'previousSibling');
-                    mergeSibling(start, 'nextSibling');
-                    nativeRange.moveStart('character', -1);
-                    nativeRange.collapse(true);
-                }
-            }
-            this.moveToBookmark(bookmark);
-            tmp && domUtils.remove(tmp);
-            //IE在隐藏状态下不支持range操作,catch一下
-            try {
-                nativeRange.select();
-            } catch (e) {
-            }
-            return this;
-        } : function (notInsertFillData) {
-            function checkOffset(rng){
-
-                function check(node,offset,dir){
-                    if(node.nodeType == 3 && node.nodeValue.length < offset){
-                        rng[dir + 'Offset'] = node.nodeValue.length
-                    }
-                }
-                check(rng.startContainer,rng.startOffset,'start');
-                check(rng.endContainer,rng.endOffset,'end');
-            }
-            var win = domUtils.getWindow(this.document),
-                sel = win.getSelection(),
-                txtNode;
-            //FF下关闭自动长高时滚动条在关闭dialog时会跳
-            //ff下如果不body.focus将不能定位闭合光标到编辑器内
-            browser.gecko ? this.document.body.focus() : win.focus();
-            if (sel) {
-                sel.removeAllRanges();
-                // trace:870 chrome/safari后边是br对于闭合得range不能定位 所以去掉了判断
-                // this.startContainer.nodeType != 3 &&! ((child = this.startContainer.childNodes[this.startOffset]) && child.nodeType == 1 && child.tagName == 'BR'
-                if (this.collapsed && !notInsertFillData) {
-//                    //opear如果没有节点接着,原生的不能够定位,不能在body的第一级插入空白节点
-//                    if (notInsertFillData && browser.opera && !domUtils.isBody(this.startContainer) && this.startContainer.nodeType == 1) {
-//                        var tmp = this.document.createTextNode('');
-//                        this.insertNode(tmp).setStart(tmp, 0).collapse(true);
-//                    }
-//
-                    //处理光标落在文本节点的情况
-                    //处理以下的情况
-                    //<b>|xxxx</b>
-                    //<b>xxxx</b>|xxxx
-                    //xxxx<b>|</b>
-                    var start = this.startContainer,child = start;
-                    if(start.nodeType == 1){
-                        child = start.childNodes[this.startOffset];
-
-                    }
-                    if( !(start.nodeType == 3 && this.startOffset)  &&
-                        (child ?
-                            (!child.previousSibling || child.previousSibling.nodeType != 3)
-                            :
-                            (!start.lastChild || start.lastChild.nodeType != 3)
-                        )
-                    ){
-                        txtNode = this.document.createTextNode(fillChar);
-                        //跟着前边走
-                        this.insertNode(txtNode);
-                        removeFillData(this.document, txtNode);
-                        mergeSibling(txtNode, 'previousSibling');
-                        mergeSibling(txtNode, 'nextSibling');
-                        fillData = txtNode;
-                        this.setStart(txtNode, browser.webkit ? 1 : 0).collapse(true);
-                    }
-                }
-                var nativeRange = this.document.createRange();
-                if(this.collapsed && browser.opera && this.startContainer.nodeType == 1){
-                    var child = this.startContainer.childNodes[this.startOffset];
-                    if(!child){
-                        //往前靠拢
-                        child = this.startContainer.lastChild;
-                        if( child && domUtils.isBr(child)){
-                            this.setStartBefore(child).collapse(true);
-                        }
-                    }else{
-                        //向后靠拢
-                        while(child && domUtils.isBlockElm(child)){
-                            if(child.nodeType == 1 && child.childNodes[0]){
-                                child = child.childNodes[0]
-                            }else{
-                                break;
-                            }
-                        }
-                        child && this.setStartBefore(child).collapse(true)
-                    }
-
-                }
-                //是createAddress最后一位算的不准,现在这里进行微调
-                checkOffset(this);
-                nativeRange.setStart(this.startContainer, this.startOffset);
-                nativeRange.setEnd(this.endContainer, this.endOffset);
-                sel.addRange(nativeRange);
-            }
-            return this;
-        },
-
-        /**
-         * 滚动到当前range开始的位置
-         * @method scrollToView
-         * @param { Window } win 当前range对象所属的window对象
-         * @return { UE.dom.Range } 当前Range对象
-         */
-
-        /**
-         * 滚动到距离当前range开始位置 offset 的位置处
-         * @method scrollToView
-         * @param { Window } win 当前range对象所属的window对象
-         * @param { Number } offset 距离range开始位置处的偏移量, 如果为正数, 则向下偏移, 反之, 则向上偏移
-         * @return { UE.dom.Range } 当前Range对象
-         */
-        scrollToView:function (win, offset) {
-            win = win ? window : domUtils.getWindow(this.document);
-            var me = this,
-                span = me.document.createElement('span');
-            //trace:717
-            span.innerHTML = '&nbsp;';
-            me.cloneRange().insertNode(span);
-            domUtils.scrollToView(span, win, offset);
-            domUtils.remove(span);
-            return me;
-        },
-
-        /**
-         * 判断当前选区内容是否占位符
-         * @private
-         * @method inFillChar
-         * @return { Boolean } 如果是占位符返回true,否则返回false
-         */
-        inFillChar : function(){
-            var start = this.startContainer;
-            if(this.collapsed && start.nodeType == 3
-                && start.nodeValue.replace(new RegExp('^' + domUtils.fillChar),'').length + 1 == start.nodeValue.length
-                ){
-                return true;
-            }
-            return false;
-        },
-
-        /**
-         * 保存
-         * @method createAddress
-         * @private
-         * @return { Boolean } 返回开始和结束的位置
-         * @example
-         * ```html
-         * <body>
-         *     <p>
-         *         aaaa
-         *         <em>
-         *             <!-- 选区开始 -->
-         *             bbbb
-         *             <!-- 选区结束 -->
-         *         </em>
-         *     </p>
-         *
-         *     <script>
-         *         //output: {startAddress:[0,1,0,0],endAddress:[0,1,0,4]}
-         *         console.log( range.createAddress() );
-         *     </script>
-         * </body>
-         * ```
-         */
-        createAddress : function(ignoreEnd,ignoreTxt){
-            var addr = {},me = this;
-
-            function getAddress(isStart){
-                var node = isStart ? me.startContainer : me.endContainer;
-                var parents = domUtils.findParents(node,true,function(node){return !domUtils.isBody(node)}),
-                    addrs = [];
-                for(var i = 0,ci;ci = parents[i++];){
-                    addrs.push(domUtils.getNodeIndex(ci,ignoreTxt));
-                }
-                var firstIndex = 0;
-
-                if(ignoreTxt){
-                    if(node.nodeType == 3){
-                        var tmpNode = node.previousSibling;
-                        while(tmpNode && tmpNode.nodeType == 3){
-                            firstIndex += tmpNode.nodeValue.replace(fillCharReg,'').length;
-                            tmpNode = tmpNode.previousSibling;
-                        }
-                        firstIndex +=  (isStart ? me.startOffset : me.endOffset)// - (fillCharReg.test(node.nodeValue) ? 1 : 0 )
-                    }else{
-                        node =  node.childNodes[ isStart ? me.startOffset : me.endOffset];
-                        if(node){
-                            firstIndex = domUtils.getNodeIndex(node,ignoreTxt);
-                        }else{
-                            node = isStart ? me.startContainer : me.endContainer;
-                            var first = node.firstChild;
-                            while(first){
-                                if(domUtils.isFillChar(first)){
-                                    first = first.nextSibling;
-                                    continue;
-                                }
-                                firstIndex++;
-                                if(first.nodeType == 3){
-                                    while( first && first.nodeType == 3){
-                                        first = first.nextSibling;
-                                    }
-                                }else{
-                                    first = first.nextSibling;
-                                }
-                            }
-                        }
-                    }
-
-                }else{
-                    firstIndex = isStart ? domUtils.isFillChar(node) ? 0 : me.startOffset  : me.endOffset
-                }
-                if(firstIndex < 0){
-                    firstIndex = 0;
-                }
-                addrs.push(firstIndex);
-                return addrs;
-            }
-            addr.startAddress = getAddress(true);
-            if(!ignoreEnd){
-                addr.endAddress = me.collapsed ? [].concat(addr.startAddress) : getAddress();
-            }
-            return addr;
-        },
-
-        /**
-         * 保存
-         * @method createAddress
-         * @private
-         * @return { Boolean } 返回开始和结束的位置
-         * @example
-         * ```html
-         * <body>
-         *     <p>
-         *         aaaa
-         *         <em>
-         *             <!-- 选区开始 -->
-         *             bbbb
-         *             <!-- 选区结束 -->
-         *         </em>
-         *     </p>
-         *
-         *     <script>
-         *         var range = editor.selection.getRange();
-         *         range.moveToAddress({startAddress:[0,1,0,0],endAddress:[0,1,0,4]});
-         *         range.select();
-         *         //output: 'bbbb'
-         *         console.log(editor.selection.getText());
-         *     </script>
-         * </body>
-         * ```
-         */
-        moveToAddress : function(addr,ignoreEnd){
-            var me = this;
-            function getNode(address,isStart){
-                var tmpNode = me.document.body,
-                    parentNode,offset;
-                for(var i= 0,ci,l=address.length;i<l;i++){
-                    ci = address[i];
-                    parentNode = tmpNode;
-                    tmpNode = tmpNode.childNodes[ci];
-                    if(!tmpNode){
-                        offset = ci;
-                        break;
-                    }
-                }
-                if(isStart){
-                    if(tmpNode){
-                        me.setStartBefore(tmpNode)
-                    }else{
-                        me.setStart(parentNode,offset)
-                    }
-                }else{
-                    if(tmpNode){
-                        me.setEndBefore(tmpNode)
-                    }else{
-                        me.setEnd(parentNode,offset)
-                    }
-                }
-            }
-            getNode(addr.startAddress,true);
-            !ignoreEnd && addr.endAddress &&  getNode(addr.endAddress);
-            return me;
-        },
-
-        /**
-         * 判断给定的Range对象是否和当前Range对象表示的是同一个选区
-         * @method equals
-         * @param { UE.dom.Range } 需要判断的Range对象
-         * @return { Boolean } 如果给定的Range对象与当前Range对象表示的是同一个选区, 则返回true, 否则返回false
-         */
-        equals : function(rng){
-            for(var p in this){
-                if(this.hasOwnProperty(p)){
-                    if(this[p] !== rng[p])
-                        return false
-                }
-            }
-            return true;
-
-        },
-
-        /**
-         * 遍历range内的节点。每当遍历一个节点时, 都会执行参数项 doFn 指定的函数, 该函数的接受当前遍历的节点
-         * 作为其参数。
-         * @method traversal
-         * @param { Function }  doFn 对每个遍历的节点要执行的方法, 该方法接受当前遍历的节点作为其参数
-         * @return { UE.dom.Range } 当前range对象
-         * @example
-         * ```html
-         *
-         * <body>
-         *
-         *     <!-- 选区开始 -->
-         *     <span></span>
-         *     <a></a>
-         *     <!-- 选区结束 -->
-         * </body>
-         *
-         * <script>
-         *
-         *     //output: <span></span><a></a>
-         *     console.log( range.cloneContents() );
-         *
-         *     range.traversal( function ( node ) {
-         *
-         *         if ( node.nodeType === 1 ) {
-         *             node.className = "test";
-         *         }
-         *
-         *     } );
-         *
-         *     //output: <span class="test"></span><a class="test"></a>
-         *     console.log( range.cloneContents() );
-         *
-         * </script>
-         * ```
-         */
-
-        /**
-         * 遍历range内的节点。
-         * 每当遍历一个节点时, 都会执行参数项 doFn 指定的函数, 该函数的接受当前遍历的节点
-         * 作为其参数。
-         * 可以通过参数项 filterFn 来指定一个过滤器, 只有符合该过滤器过滤规则的节点才会触
-         * 发doFn函数的执行
-         * @method traversal
-         * @param { Function } doFn 对每个遍历的节点要执行的方法, 该方法接受当前遍历的节点作为其参数
-         * @param { Function } filterFn 过滤器, 该函数接受当前遍历的节点作为参数, 如果该节点满足过滤
-         *                      规则, 请返回true, 该节点会触发doFn, 否则, 请返回false, 则该节点不
-         *                      会触发doFn。
-         * @return { UE.dom.Range } 当前range对象
-         * @see UE.dom.Range:traversal(Function)
-         * @example
-         * ```html
-         *
-         * <body>
-         *
-         *     <!-- 选区开始 -->
-         *     <span></span>
-         *     <a></a>
-         *     <!-- 选区结束 -->
-         * </body>
-         *
-         * <script>
-         *
-         *     //output: <span></span><a></a>
-         *     console.log( range.cloneContents() );
-         *
-         *     range.traversal( function ( node ) {
-         *
-         *         node.className = "test";
-         *
-         *     }, function ( node ) {
-         *          return node.nodeType === 1;
-         *     } );
-         *
-         *     //output: <span class="test"></span><a class="test"></a>
-         *     console.log( range.cloneContents() );
-         *
-         * </script>
-         * ```
-         */
-        traversal:function(doFn,filterFn){
-            if (this.collapsed)
-                return this;
-            var bookmark = this.createBookmark(),
-                end = bookmark.end,
-                current = domUtils.getNextDomNode(bookmark.start, false, filterFn);
-            while (current && current !== end && (domUtils.getPosition(current, end) & domUtils.POSITION_PRECEDING)) {
-                var tmpNode = domUtils.getNextDomNode(current,false,filterFn);
-                doFn(current);
-                current = tmpNode;
-            }
-            return this.moveToBookmark(bookmark);
-        }
-    };
-})();
-/**
- * 选集
- * @file
- * @module UE.dom
- * @class Selection
- * @since 1.2.6.1
- */
-
-/**
- * 选区集合
- * @unfile
- * @module UE.dom
- * @class Selection
- */
-(function () {
-
-    function getBoundaryInformation( range, start ) {
-        var getIndex = domUtils.getNodeIndex;
-        range = range.duplicate();
-        range.collapse( start );
-        var parent = range.parentElement();
-        //如果节点里没有子节点,直接退出
-        if ( !parent.hasChildNodes() ) {
-            return  {container:parent, offset:0};
-        }
-        var siblings = parent.children,
-            child,
-            testRange = range.duplicate(),
-            startIndex = 0, endIndex = siblings.length - 1, index = -1,
-            distance;
-        while ( startIndex <= endIndex ) {
-            index = Math.floor( (startIndex + endIndex) / 2 );
-            child = siblings[index];
-            testRange.moveToElementText( child );
-            var position = testRange.compareEndPoints( 'StartToStart', range );
-            if ( position > 0 ) {
-                endIndex = index - 1;
-            } else if ( position < 0 ) {
-                startIndex = index + 1;
-            } else {
-                //trace:1043
-                return  {container:parent, offset:getIndex( child )};
-            }
-        }
-        if ( index == -1 ) {
-            testRange.moveToElementText( parent );
-            testRange.setEndPoint( 'StartToStart', range );
-            distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length;
-            siblings = parent.childNodes;
-            if ( !distance ) {
-                child = siblings[siblings.length - 1];
-                return  {container:child, offset:child.nodeValue.length};
-            }
-
-            var i = siblings.length;
-            while ( distance > 0 ){
-                distance -= siblings[ --i ].nodeValue.length;
-            }
-            return {container:siblings[i], offset:-distance};
-        }
-        testRange.collapse( position > 0 );
-        testRange.setEndPoint( position > 0 ? 'StartToStart' : 'EndToStart', range );
-        distance = testRange.text.replace( /(\r\n|\r)/g, '\n' ).length;
-        if ( !distance ) {
-            return  dtd.$empty[child.tagName] || dtd.$nonChild[child.tagName] ?
-            {container:parent, offset:getIndex( child ) + (position > 0 ? 0 : 1)} :
-            {container:child, offset:position > 0 ? 0 : child.childNodes.length}
-        }
-        while ( distance > 0 ) {
-            try {
-                var pre = child;
-                child = child[position > 0 ? 'previousSibling' : 'nextSibling'];
-                distance -= child.nodeValue.length;
-            } catch ( e ) {
-                return {container:parent, offset:getIndex( pre )};
-            }
-        }
-        return  {container:child, offset:position > 0 ? -distance : child.nodeValue.length + distance}
-    }
-
-    /*
-     * 将ieRange转换为Range对象
-     * @param {Range}   ieRange    ieRange对象
-     * @param {Range}   range      Range对象
-     * @return  {Range}  range       返回转换后的Range对象
-     */
-    function transformIERangeToRange( ieRange, range ) {
-        if ( ieRange.item ) {
-            range.selectNode( ieRange.item( 0 ) );
-        } else {
-            var bi = getBoundaryInformation( ieRange, true );
-            range.setStart( bi.container, bi.offset );
-            if ( ieRange.compareEndPoints( 'StartToEnd', ieRange ) != 0 ) {
-                bi = getBoundaryInformation( ieRange, false );
-                range.setEnd( bi.container, bi.offset );
-            }
-        }
-        return range;
-    }
-
-    /*
-     * 获得ieRange
-     * @param {Selection} sel    Selection对象
-     * @return {ieRange}    得到ieRange
-     */
-    function _getIERange( sel ) {
-        var ieRange;
-        //ie下有可能报错
-        try {
-            ieRange = sel.getNative().createRange();
-        } catch ( e ) {
-            return null;
-        }
-        var el = ieRange.item ? ieRange.item( 0 ) : ieRange.parentElement();
-        if ( ( el.ownerDocument || el ) === sel.document ) {
-            return ieRange;
-        }
-        return null;
-    }
-
-    var Selection = dom.Selection = function ( doc ) {
-        var me = this, iframe;
-        me.document = doc;
-        if ( browser.ie9below ) {
-            iframe = domUtils.getWindow( doc ).frameElement;
-            domUtils.on( iframe, 'beforedeactivate', function () {
-                me._bakIERange = me.getIERange();
-            } );
-            domUtils.on( iframe, 'activate', function () {
-                try {
-                    if ( !_getIERange( me ) && me._bakIERange ) {
-                        me._bakIERange.select();
-                    }
-                } catch ( ex ) {
-                }
-                me._bakIERange = null;
-            } );
-        }
-        iframe = doc = null;
-    };
-
-    Selection.prototype = {
-
-        rangeInBody : function(rng,txtRange){
-            var node = browser.ie9below || txtRange ? rng.item ? rng.item() : rng.parentElement() : rng.startContainer;
-
-            return node === this.document.body || domUtils.inDoc(node,this.document);
-        },
-
-        /**
-         * 获取原生seleciton对象
-         * @method getNative
-         * @return { Object } 获得selection对象
-         * @example
-         * ```javascript
-         * editor.selection.getNative();
-         * ```
-         */
-        getNative:function () {
-            var doc = this.document;
-            try {
-                return !doc ? null : browser.ie9below ? doc.selection : domUtils.getWindow( doc ).getSelection();
-            } catch ( e ) {
-                return null;
-            }
-        },
-
-        /**
-         * 获得ieRange
-         * @method getIERange
-         * @return { Object } 返回ie原生的Range
-         * @example
-         * ```javascript
-         * editor.selection.getIERange();
-         * ```
-         */
-        getIERange:function () {
-            var ieRange = _getIERange( this );
-            if ( !ieRange ) {
-                if ( this._bakIERange ) {
-                    return this._bakIERange;
-                }
-            }
-            return ieRange;
-        },
-
-        /**
-         * 缓存当前选区的range和选区的开始节点
-         * @method cache
-         */
-        cache:function () {
-            this.clear();
-            this._cachedRange = this.getRange();
-            this._cachedStartElement = this.getStart();
-            this._cachedStartElementPath = this.getStartElementPath();
-        },
-
-        /**
-         * 获取选区开始位置的父节点到body
-         * @method getStartElementPath
-         * @return { Array } 返回父节点集合
-         * @example
-         * ```javascript
-         * editor.selection.getStartElementPath();
-         * ```
-         */
-        getStartElementPath:function () {
-            if ( this._cachedStartElementPath ) {
-                return this._cachedStartElementPath;
-            }
-            var start = this.getStart();
-            if ( start ) {
-                return domUtils.findParents( start, true, null, true )
-            }
-            return [];
-        },
-
-        /**
-         * 清空缓存
-         * @method clear
-         */
-        clear:function () {
-            this._cachedStartElementPath = this._cachedRange = this._cachedStartElement = null;
-        },
-
-        /**
-         * 编辑器是否得到了选区
-         * @method isFocus
-         */
-        isFocus:function () {
-            try {
-                if(browser.ie9below){
-
-                    var nativeRange = _getIERange(this);
-                    return !!(nativeRange && this.rangeInBody(nativeRange));
-                }else{
-                    return !!this.getNative().rangeCount;
-                }
-            } catch ( e ) {
-                return false;
-            }
-
-        },
-
-        /**
-         * 获取选区对应的Range
-         * @method getRange
-         * @return { Object } 得到Range对象
-         * @example
-         * ```javascript
-         * editor.selection.getRange();
-         * ```
-         */
-        getRange:function () {
-            var me = this;
-            function optimze( range ) {
-                var child = me.document.body.firstChild,
-                    collapsed = range.collapsed;
-                while ( child && child.firstChild ) {
-                    range.setStart( child, 0 );
-                    child = child.firstChild;
-                }
-                if ( !range.startContainer ) {
-                    range.setStart( me.document.body, 0 )
-                }
-                if ( collapsed ) {
-                    range.collapse( true );
-                }
-            }
-
-            if ( me._cachedRange != null ) {
-                return this._cachedRange;
-            }
-            var range = new baidu.editor.dom.Range( me.document );
-
-            if ( browser.ie9below ) {
-                var nativeRange = me.getIERange();
-                if ( nativeRange ) {
-                    //备份的_bakIERange可能已经实效了,dom树发生了变化比如从源码模式切回来,所以try一下,实效就放到body开始位置
-                    try{
-                        transformIERangeToRange( nativeRange, range );
-                    }catch(e){
-                        optimze( range );
-                    }
-
-                } else {
-                    optimze( range );
-                }
-            } else {
-                var sel = me.getNative();
-                if ( sel && sel.rangeCount ) {
-                    var firstRange = sel.getRangeAt( 0 );
-                    var lastRange = sel.getRangeAt( sel.rangeCount - 1 );
-                    range.setStart( firstRange.startContainer, firstRange.startOffset ).setEnd( lastRange.endContainer, lastRange.endOffset );
-                    if ( range.collapsed && domUtils.isBody( range.startContainer ) && !range.startOffset ) {
-                        optimze( range );
-                    }
-                } else {
-                    //trace:1734 有可能已经不在dom树上了,标识的节点
-                    if ( this._bakRange && domUtils.inDoc( this._bakRange.startContainer, this.document ) ){
-                        return this._bakRange;
-                    }
-                    optimze( range );
-                }
-            }
-            return this._bakRange = range;
-        },
-
-        /**
-         * 获取开始元素,用于状态反射
-         * @method getStart
-         * @return { Element } 获得开始元素
-         * @example
-         * ```javascript
-         * editor.selection.getStart();
-         * ```
-         */
-        getStart:function () {
-            if ( this._cachedStartElement ) {
-                return this._cachedStartElement;
-            }
-            var range = browser.ie9below ? this.getIERange() : this.getRange(),
-                tmpRange,
-                start, tmp, parent;
-            if ( browser.ie9below ) {
-                if ( !range ) {
-                    //todo 给第一个值可能会有问题
-                    return this.document.body.firstChild;
-                }
-                //control元素
-                if ( range.item ){
-                    return range.item( 0 );
-                }
-                tmpRange = range.duplicate();
-                //修正ie下<b>x</b>[xx] 闭合后 <b>x|</b>xx
-                tmpRange.text.length > 0 && tmpRange.moveStart( 'character', 1 );
-                tmpRange.collapse( 1 );
-                start = tmpRange.parentElement();
-                parent = tmp = range.parentElement();
-                while ( tmp = tmp.parentNode ) {
-                    if ( tmp == start ) {
-                        start = parent;
-                        break;
-                    }
-                }
-            } else {
-                range.shrinkBoundary();
-                start = range.startContainer;
-                if ( start.nodeType == 1 && start.hasChildNodes() ){
-                    start = start.childNodes[Math.min( start.childNodes.length - 1, range.startOffset )];
-                }
-                if ( start.nodeType == 3 ){
-                    return start.parentNode;
-                }
-            }
-            return start;
-        },
-
-        /**
-         * 得到选区中的文本
-         * @method getText
-         * @return { String } 选区中包含的文本
-         * @example
-         * ```javascript
-         * editor.selection.getText();
-         * ```
-         */
-        getText:function () {
-            var nativeSel, nativeRange;
-            if ( this.isFocus() && (nativeSel = this.getNative()) ) {
-                nativeRange = browser.ie9below ? nativeSel.createRange() : nativeSel.getRangeAt( 0 );
-                return browser.ie9below ? nativeRange.text : nativeRange.toString();
-            }
-            return '';
-        },
-
-        /**
-         * 清除选区
-         * @method clearRange
-         * @example
-         * ```javascript
-         * editor.selection.clearRange();
-         * ```
-         */
-        clearRange : function(){
-            this.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges']();
-        }
-    };
-})();
-/**
- * 编辑器主类,包含编辑器提供的大部分公用接口
- * @file
- * @module UE
- * @class Editor
- * @since 1.2.6.1
- */
-
-/**
- * UEditor公用空间,UEditor所有的功能都挂载在该空间下
- * @unfile
- * @module UE
- */
-
-/**
- * UEditor的核心类,为用户提供与编辑器交互的接口。
- * @unfile
- * @module UE
- * @class Editor
- */
-
-(function () {
-    var uid = 0, _selectionChangeTimer;
-
-    /**
-     * 获取编辑器的html内容,赋值到编辑器所在表单的textarea文本域里面
-     * @private
-     * @method setValue
-     * @param { UE.Editor } editor 编辑器事例
-     */
-    function setValue(form, editor) {
-        var textarea;
-        if (editor.textarea) {
-            if (utils.isString(editor.textarea)) {
-                for (var i = 0, ti, tis = domUtils.getElementsByTagName(form, 'textarea'); ti = tis[i++];) {
-                    if (ti.id == 'ueditor_textarea_' + editor.options.textarea) {
-                        textarea = ti;
-                        break;
-                    }
-                }
-            } else {
-                textarea = editor.textarea;
-            }
-        }
-        if (!textarea) {
-            form.appendChild(textarea = domUtils.createElement(document, 'textarea', {
-                'name': editor.options.textarea,
-                'id': 'ueditor_textarea_' + editor.options.textarea,
-                'style': "display:none"
-            }));
-            //不要产生多个textarea
-            editor.textarea = textarea;
-        }
-        textarea.value = editor.hasContents() ?
-            (editor.options.allHtmlEnabled ? editor.getAllHtml() : editor.getContent(null, null, true)) :
-            ''
-    }
-    function loadPlugins(me){
-        //初始化插件
-        for (var pi in UE.plugins) {
-            UE.plugins[pi].call(me);
-        }
-
-    }
-    function checkCurLang(I18N){
-        for(var lang in I18N){
-            return lang
-        }
-    }
-
-    function langReadied(me){
-        me.langIsReady = true;
-
-        me.fireEvent("langReady");
-    }
-
-    /**
-     * 编辑器准备就绪后会触发该事件
-     * @module UE
-     * @class Editor
-     * @event ready
-     * @remind render方法执行完成之后,会触发该事件
-     * @remind
-     * @example
-     * ```javascript
-     * editor.addListener( 'ready', function( editor ) {
-     *     editor.execCommand( 'focus' ); //编辑器家在完成后,让编辑器拿到焦点
-     * } );
-     * ```
-     */
-    /**
-     * 执行destroy方法,会触发该事件
-     * @module UE
-     * @class Editor
-     * @event destroy
-     * @see UE.Editor:destroy()
-     */
-    /**
-     * 执行reset方法,会触发该事件
-     * @module UE
-     * @class Editor
-     * @event reset
-     * @see UE.Editor:reset()
-     */
-    /**
-     * 执行focus方法,会触发该事件
-     * @module UE
-     * @class Editor
-     * @event focus
-     * @see UE.Editor:focus(Boolean)
-     */
-    /**
-     * 语言加载完成会触发该事件
-     * @module UE
-     * @class Editor
-     * @event langReady
-     */
-    /**
-     * 运行命令之后会触发该命令
-     * @module UE
-     * @class Editor
-     * @event beforeExecCommand
-     */
-    /**
-     * 运行命令之后会触发该命令
-     * @module UE
-     * @class Editor
-     * @event afterExecCommand
-     */
-    /**
-     * 运行命令之前会触发该命令
-     * @module UE
-     * @class Editor
-     * @event firstBeforeExecCommand
-     */
-    /**
-     * 在getContent方法执行之前会触发该事件
-     * @module UE
-     * @class Editor
-     * @event beforeGetContent
-     * @see UE.Editor:getContent()
-     */
-    /**
-     * 在getContent方法执行之后会触发该事件
-     * @module UE
-     * @class Editor
-     * @event afterGetContent
-     * @see UE.Editor:getContent()
-     */
-    /**
-     * 在getAllHtml方法执行时会触发该事件
-     * @module UE
-     * @class Editor
-     * @event getAllHtml
-     * @see UE.Editor:getAllHtml()
-     */
-    /**
-     * 在setContent方法执行之前会触发该事件
-     * @module UE
-     * @class Editor
-     * @event beforeSetContent
-     * @see UE.Editor:setContent(String)
-     */
-    /**
-     * 在setContent方法执行之后会触发该事件
-     * @module UE
-     * @class Editor
-     * @event afterSetContent
-     * @see UE.Editor:setContent(String)
-     */
-    /**
-     * 每当编辑器内部选区发生改变时,将触发该事件
-     * @event selectionchange
-     * @warning 该事件的触发非常频繁,不建议在该事件的处理过程中做重量级的处理
-     * @example
-     * ```javascript
-     * editor.addListener( 'selectionchange', function( editor ) {
-     *     console.log('选区发生改变');
-     * }
-     */
-    /**
-     * 在所有selectionchange的监听函数执行之前,会触发该事件
-     * @module UE
-     * @class Editor
-     * @event beforeSelectionChange
-     * @see UE.Editor:selectionchange
-     */
-    /**
-     * 在所有selectionchange的监听函数执行完之后,会触发该事件
-     * @module UE
-     * @class Editor
-     * @event afterSelectionChange
-     * @see UE.Editor:selectionchange
-     */
-    /**
-     * 编辑器内容发生改变时会触发该事件
-     * @module UE
-     * @class Editor
-     * @event contentChange
-     */
-
-
-    /**
-     * 以默认参数构建一个编辑器实例
-     * @constructor
-     * @remind 通过 改构造方法实例化的编辑器,不带ui层.需要render到一个容器,编辑器实例才能正常渲染到页面
-     * @example
-     * ```javascript
-     * var editor = new UE.Editor();
-     * editor.execCommand('blod');
-     * ```
-     * @see UE.Config
-     */
-
-    /**
-     * 以给定的参数集合创建一个编辑器实例,对于未指定的参数,将应用默认参数。
-     * @constructor
-     * @remind 通过 改构造方法实例化的编辑器,不带ui层.需要render到一个容器,编辑器实例才能正常渲染到页面
-     * @param { Object } setting 创建编辑器的参数
-     * @example
-     * ```javascript
-     * var editor = new UE.Editor();
-     * editor.execCommand('blod');
-     * ```
-     * @see UE.Config
-     */
-    var Editor = UE.Editor = function (options) {
-        var me = this;
-        me.uid = uid++;
-        EventBase.call(me);
-        me.commands = {};
-        me.options = utils.extend(utils.clone(options || {}), UEDITOR_CONFIG, true);
-        me.shortcutkeys = {};
-        me.inputRules = [];
-        me.outputRules = [];
-        //设置默认的常用属性
-        me.setOpt({
-            isShow: true,
-            initialContent: '',
-            initialStyle:'',
-            autoClearinitialContent: false,
-            iframeCssUrl: me.options.UEDITOR_HOME_URL + 'themes/iframe.css',
-            textarea: 'editorValue',
-            focus: false,
-            focusInEnd: true,
-            autoClearEmptyNode: true,
-            fullscreen: false,
-            readonly: false,
-            zIndex: 999,
-            imagePopup: true,
-            enterTag: 'p',
-            customDomain: false,
-            lang: 'zh-cn',
-            langPath: me.options.UEDITOR_HOME_URL + 'lang/',
-            theme: 'default',
-            themePath: me.options.UEDITOR_HOME_URL + 'themes/',
-            allHtmlEnabled: false,
-            scaleEnabled: false,
-            tableNativeEditInFF: false,
-            autoSyncData : true,
-            fileNameFormat: '{time}{rand:6}'
-        });
-
-        if(!utils.isEmptyObject(UE.I18N)){
-            //修改默认的语言类型
-            me.options.lang = checkCurLang(UE.I18N);
-            UE.plugin.load(me);
-            langReadied(me);
-
-        }else{
-            utils.loadFile(document, {
-                src: me.options.langPath + me.options.lang + "/" + me.options.lang + ".js",
-                tag: "script",
-                type: "text/javascript",
-                defer: "defer"
-            }, function () {
-                UE.plugin.load(me);
-                langReadied(me);
-            });
-        }
-
-        UE.instants['ueditorInstant' + me.uid] = me;
-    };
-    Editor.prototype = {
-
-        /**
-         * 编辑器对外提供的监听ready事件的接口, 通过调用该方法,达到的效果与监听ready事件是一致的
-         * @method ready
-         * @param { Function } fn 编辑器ready之后所执行的回调, 如果在注册事件之前编辑器已经ready,将会
-         * 立即触发该回调。
-         * @remind 需要等待编辑器加载完成后才能执行的代码,可以使用该方法传入
-         * @example
-         * ```javascript
-         * editor.ready( function( editor ) {
-         *     editor.setContent('初始化完毕');
-         * } );
-         * ```
-         * @see UE.Editor.event:ready
-         */
-        ready: function (fn) {
-            var me = this;
-            if (fn) {
-                me.isReady ? fn.apply(me) : me.addListener('ready', fn);
-            }
-        },
-
-        /**
-         * 该方法是提供给插件里面使用,设置配置项默认值
-         * @method setOpt
-         * @warning 三处设置配置项的优先级: 实例化时传入参数 > setOpt()设置 > config文件里设置
-         * @warning 该方法仅供编辑器插件内部和编辑器初始化时调用,其他地方不能调用。
-         * @param { String } key 编辑器的可接受的选项名称
-         * @param { * } val  该选项可接受的值
-         * @example
-         * ```javascript
-         * editor.setOpt( 'initContent', '欢迎使用编辑器' );
-         * ```
-         */
-
-        /**
-         * 该方法是提供给插件里面使用,以{key:value}集合的方式设置插件内用到的配置项默认值
-         * @method setOpt
-         * @warning 三处设置配置项的优先级: 实例化时传入参数 > setOpt()设置 > config文件里设置
-         * @warning 该方法仅供编辑器插件内部和编辑器初始化时调用,其他地方不能调用。
-         * @param { Object } options 将要设置的选项的键值对对象
-         * @example
-         * ```javascript
-         * editor.setOpt( {
-         *     'initContent': '欢迎使用编辑器'
-         * } );
-         * ```
-         */
-        setOpt: function (key, val) {
-            var obj = {};
-            if (utils.isString(key)) {
-                obj[key] = val
-            } else {
-                obj = key;
-            }
-            utils.extend(this.options, obj, true);
-        },
-
-        /**
-         * 销毁编辑器实例,使用textarea代替
-         * @method destroy
-         * @example
-         * ```javascript
-         * editor.destroy();
-         * ```
-         */
-        destroy: function () {
-
-            var me = this;
-            me.fireEvent('destroy');
-            var container = me.container.parentNode;
-            var textarea = me.textarea;
-            if (!textarea) {
-                textarea = document.createElement('textarea');
-                container.parentNode.insertBefore(textarea, container);
-            } else {
-                textarea.style.display = ''
-            }
-
-            textarea.style.width = me.iframe.offsetWidth + 'px';
-            textarea.style.height = me.iframe.offsetHeight + 'px';
-            textarea.value = me.getContent();
-            textarea.id = me.key;
-            container.innerHTML = '';
-            domUtils.remove(container);
-            var key = me.key;
-            //trace:2004
-            for (var p in me) {
-                if (me.hasOwnProperty(p)) {
-                    delete this[p];
-                }
-            }
-            UE.delEditor(key);
-        },
-
-        /**
-         * 渲染编辑器的DOM到指定容器
-         * @method render
-         * @param { String } containerId 指定一个容器ID
-         * @remind 执行该方法,会触发ready事件
-         * @warning 必须且只能调用一次
-         */
-
-        /**
-         * 渲染编辑器的DOM到指定容器
-         * @method render
-         * @param { Element } containerDom 直接指定容器对象
-         * @remind 执行该方法,会触发ready事件
-         * @warning 必须且只能调用一次
-         */
-        render: function (container) {
-            var me = this,
-                options = me.options,
-                getStyleValue=function(attr){
-                    return parseInt(domUtils.getComputedStyle(container,attr));
-                };
-            if (utils.isString(container)) {
-                container = document.getElementById(container);
-            }
-            if (container) {
-                if(options.initialFrameWidth){
-                    options.minFrameWidth = options.initialFrameWidth
-                }else{
-                    options.minFrameWidth = options.initialFrameWidth = container.offsetWidth;
-                }
-                if(options.initialFrameHeight){
-                    options.minFrameHeight = options.initialFrameHeight
-                }else{
-                    options.initialFrameHeight = options.minFrameHeight = container.offsetHeight;
-                }
-
-                container.style.width = /%$/.test(options.initialFrameWidth) ?  '100%' : options.initialFrameWidth-
-                    getStyleValue("padding-left")- getStyleValue("padding-right") +'px';
-                container.style.height = /%$/.test(options.initialFrameHeight) ?  '100%' : options.initialFrameHeight -
-                    getStyleValue("padding-top")- getStyleValue("padding-bottom") +'px';
-
-                container.style.zIndex = options.zIndex;
-
-                var html = ( ie && browser.version < 9  ? '' : '<!DOCTYPE html>') +
-                    '<html xmlns=\'http://www.w3.org/1999/xhtml\' class=\'view\' ><head>' +
-                    '<style type=\'text/css\'>' +
-                    //设置四周的留边
-                    '.view{padding:0;word-wrap:break-word;cursor:text;height:90%;}\n' +
-                    //设置默认字体和字号
-                    //font-family不能呢随便改,在safari下fillchar会有解析问题
-                    'body{margin:8px;font-family:sans-serif;font-size:16px;}' +
-                    //设置段落间距
-                    'p{margin:5px 0;}</style>' +
-                    ( options.iframeCssUrl ? '<link rel=\'stylesheet\' type=\'text/css\' href=\'' + utils.unhtml(options.iframeCssUrl) + '\'/>' : '' ) +
-                    (options.initialStyle ? '<style>' + options.initialStyle + '</style>' : '') +
-                    '</head><body class=\'view\' ></body>' +
-                    '<script type=\'text/javascript\' ' + (ie ? 'defer=\'defer\'' : '' ) +' id=\'_initialScript\'>' +
-                    'setTimeout(function(){editor = window.parent.UE.instants[\'ueditorInstant' + me.uid + '\'];editor._setup(document);},0);' +
-                    'var _tmpScript = document.getElementById(\'_initialScript\');_tmpScript.parentNode.removeChild(_tmpScript);</script></html>';
-                container.appendChild(domUtils.createElement(document, 'iframe', {
-                    id: 'ueditor_' + me.uid,
-                    width: "100%",
-                    height: "100%",
-                    frameborder: "0",
-                    //先注释掉了,加的原因忘记了,但开启会直接导致全屏模式下内容多时不会出现滚动条
-//                    scrolling :'no',
-                    src: 'javascript:void(function(){document.open();' + (options.customDomain && document.domain != location.hostname ?  'document.domain="' + document.domain + '";' : '') +
-                        'document.write("' + html + '");document.close();}())'
-                }));
-                container.style.overflow = 'hidden';
-                //解决如果是给定的百分比,会导致高度算不对的问题
-                setTimeout(function(){
-                    if( /%$/.test(options.initialFrameWidth)){
-                        options.minFrameWidth = options.initialFrameWidth = container.offsetWidth;
-                        //如果这里给定宽度,会导致ie在拖动窗口大小时,编辑区域不随着变化
-//                        container.style.width = options.initialFrameWidth + 'px';
-                    }
-                    if(/%$/.test(options.initialFrameHeight)){
-                        options.minFrameHeight = options.initialFrameHeight = container.offsetHeight;
-                        container.style.height = options.initialFrameHeight + 'px';
-                    }
-                })
-            }
-        },
-
-        /**
-         * 编辑器初始化
-         * @method _setup
-         * @private
-         * @param { Element } doc 编辑器Iframe中的文档对象
-         */
-        _setup: function (doc) {
-
-            var me = this,
-                options = me.options;
-            if (ie) {
-                doc.body.disabled = true;
-                doc.body.contentEditable = true;
-                doc.body.disabled = false;
-            } else {
-                doc.body.contentEditable = true;
-            }
-            doc.body.spellcheck = false;
-            me.document = doc;
-            me.window = doc.defaultView || doc.parentWindow;
-            me.iframe = me.window.frameElement;
-            me.body = doc.body;
-            me.selection = new dom.Selection(doc);
-            //gecko初始化就能得到range,无法判断isFocus了
-            var geckoSel;
-            if (browser.gecko && (geckoSel = this.selection.getNative())) {
-                geckoSel.removeAllRanges();
-            }
-            this._initEvents();
-            //为form提交提供一个隐藏的textarea
-            for (var form = this.iframe.parentNode; !domUtils.isBody(form); form = form.parentNode) {
-                if (form.tagName == 'FORM') {
-                    me.form = form;
-                    if(me.options.autoSyncData){
-                        domUtils.on(me.window,'blur',function(){
-                            setValue(form,me);
-                        });
-                    }else{
-                        domUtils.on(form, 'submit', function () {
-                            setValue(this, me);
-                        });
-                    }
-                    break;
-                }
-            }
-            if (options.initialContent) {
-                if (options.autoClearinitialContent) {
-                    var oldExecCommand = me.execCommand;
-                    me.execCommand = function () {
-                        me.fireEvent('firstBeforeExecCommand');
-                        return oldExecCommand.apply(me, arguments);
-                    };
-                    this._setDefaultContent(options.initialContent);
-                } else
-                    this.setContent(options.initialContent, false, true);
-            }
-
-            //编辑器不能为空内容
-
-            if (domUtils.isEmptyNode(me.body)) {
-                me.body.innerHTML = '<p>' + (browser.ie ? '' : '<br/>') + '</p>';
-            }
-            //如果要求focus, 就把光标定位到内容开始
-            if (options.focus) {
-                setTimeout(function () {
-                    me.focus(me.options.focusInEnd);
-                    //如果自动清除开着,就不需要做selectionchange;
-                    !me.options.autoClearinitialContent && me._selectionChange();
-                }, 0);
-            }
-            if (!me.container) {
-                me.container = this.iframe.parentNode;
-            }
-            if (options.fullscreen && me.ui) {
-                me.ui.setFullScreen(true);
-            }
-
-            try {
-                me.document.execCommand('2D-position', false, false);
-            } catch (e) {
-            }
-            try {
-                me.document.execCommand('enableInlineTableEditing', false, false);
-            } catch (e) {
-            }
-            try {
-                me.document.execCommand('enableObjectResizing', false, false);
-            } catch (e) {
-            }
-
-            //挂接快捷键
-            me._bindshortcutKeys();
-            me.isReady = 1;
-            me.fireEvent('ready');
-            options.onready && options.onready.call(me);
-            if (!browser.ie9below) {
-                domUtils.on(me.window, ['blur', 'focus'], function (e) {
-                    //chrome下会出现alt+tab切换时,导致选区位置不对
-                    if (e.type == 'blur') {
-                        me._bakRange = me.selection.getRange();
-                        try {
-                            me._bakNativeRange = me.selection.getNative().getRangeAt(0);
-                            me.selection.getNative().removeAllRanges();
-                        } catch (e) {
-                            me._bakNativeRange = null;
-                        }
-
-                    } else {
-                        try {
-                            me._bakRange && me._bakRange.select();
-                        } catch (e) {
-                        }
-                    }
-                });
-            }
-            //trace:1518 ff3.6body不够寛,会导致点击空白处无法获得焦点
-            if (browser.gecko && browser.version <= 10902) {
-                //修复ff3.6初始化进来,不能点击获得焦点
-                me.body.contentEditable = false;
-                setTimeout(function () {
-                    me.body.contentEditable = true;
-                }, 100);
-                setInterval(function () {
-                    me.body.style.height = me.iframe.offsetHeight - 20 + 'px'
-                }, 100)
-            }
-
-            !options.isShow && me.setHide();
-            options.readonly && me.setDisabled();
-        },
-
-        /**
-         * 同步数据到编辑器所在的form
-         * 从编辑器的容器节点向上查找form元素,若找到,就同步编辑内容到找到的form里,为提交数据做准备,主要用于是手动提交的情况
-         * 后台取得数据的键值,使用你容器上的name属性,如果没有就使用参数里的textarea项
-         * @method sync
-         * @example
-         * ```javascript
-         * editor.sync();
-         * form.sumbit(); //form变量已经指向了form元素
-         * ```
-         */
-
-        /**
-         * 根据传入的formId,在页面上查找要同步数据的表单,若找到,就同步编辑内容到找到的form里,为提交数据做准备
-         * 后台取得数据的键值,该键值默认使用给定的编辑器容器的name属性,如果没有name属性则使用参数项里给定的“textarea”项
-         * @method sync
-         * @param { String } formID 指定一个要同步数据的form的id,编辑器的数据会同步到你指定form下
-         */
-        sync: function (formId) {
-            var me = this,
-                form = formId ? document.getElementById(formId) :
-                    domUtils.findParent(me.iframe.parentNode, function (node) {
-                        return node.tagName == 'FORM'
-                    }, true);
-            form && setValue(form, me);
-        },
-
-        /**
-         * 设置编辑器高度
-         * @method setHeight
-         * @remind 当配置项autoHeightEnabled为真时,该方法无效
-         * @param { Number } number 设置的高度值,纯数值,不带单位
-         * @example
-         * ```javascript
-         * editor.setHeight(number);
-         * ```
-         */
-        setHeight: function (height,notSetHeight) {
-            if (height !== parseInt(this.iframe.parentNode.style.height)) {
-                this.iframe.parentNode.style.height = height + 'px';
-            }
-            !notSetHeight && (this.options.minFrameHeight = this.options.initialFrameHeight = height);
-            this.body.style.height = height + 'px';
-        },
-
-        /**
-         * 为编辑器的编辑命令提供快捷键
-         * 这个接口是为插件扩展提供的接口,主要是为新添加的插件,如果需要添加快捷键,所提供的接口
-         * @method addshortcutkey
-         * @param { Object } keyset 命令名和快捷键键值对对象,多个按钮的快捷键用“+”分隔
-         * @example
-         * ```javascript
-         * editor.addshortcutkey({
-         *     "Bold" : "ctrl+66",//^B
-         *     "Italic" : "ctrl+73", //^I
-         * });
-         * ```
-         */
-        /**
-         * 这个接口是为插件扩展提供的接口,主要是为新添加的插件,如果需要添加快捷键,所提供的接口
-         * @method addshortcutkey
-         * @param { String } cmd 触发快捷键时,响应的命令
-         * @param { String } keys 快捷键的字符串,多个按钮用“+”分隔
-         * @example
-         * ```javascript
-         * editor.addshortcutkey("Underline", "ctrl+85"); //^U
-         * ```
-         */
-        addshortcutkey: function (cmd, keys) {
-            var obj = {};
-            if (keys) {
-                obj[cmd] = keys
-            } else {
-                obj = cmd;
-            }
-            utils.extend(this.shortcutkeys, obj)
-        },
-
-        /**
-         * 对编辑器设置keydown事件监听,绑定快捷键和命令,当快捷键组合触发成功,会响应对应的命令
-         * @method _bindshortcutKeys
-         * @private
-         */
-        _bindshortcutKeys: function () {
-            var me = this, shortcutkeys = this.shortcutkeys;
-            me.addListener('keydown', function (type, e) {
-                var keyCode = e.keyCode || e.which;
-                for (var i in shortcutkeys) {
-                    var tmp = shortcutkeys[i].split(',');
-                    for (var t = 0, ti; ti = tmp[t++];) {
-                        ti = ti.split(':');
-                        var key = ti[0], param = ti[1];
-                        if (/^(ctrl)(\+shift)?\+(\d+)$/.test(key.toLowerCase()) || /^(\d+)$/.test(key)) {
-                            if (( (RegExp.$1 == 'ctrl' ? (e.ctrlKey || e.metaKey) : 0)
-                                && (RegExp.$2 != "" ? e[RegExp.$2.slice(1) + "Key"] : 1)
-                                && keyCode == RegExp.$3
-                                ) ||
-                                keyCode == RegExp.$1
-                                ) {
-                                if (me.queryCommandState(i,param) != -1)
-                                    me.execCommand(i, param);
-                                domUtils.preventDefault(e);
-                            }
-                        }
-                    }
-
-                }
-            });
-        },
-
-        /**
-         * 获取编辑器的内容
-         * @method getContent
-         * @warning 该方法获取到的是经过编辑器内置的过滤规则进行过滤后得到的内容
-         * @return { String } 编辑器的内容字符串, 如果编辑器的内容为空,或者是空的标签内容(如:”&lt;p&gt;&lt;br/&gt;&lt;/p&gt;“), 则返回空字符串
-         * @example
-         * ```javascript
-         * //编辑器html内容:<p>1<strong>2<em>34</em>5</strong>6</p>
-         * var content = editor.getContent(); //返回值:<p>1<strong>2<em>34</em>5</strong>6</p>
-         * ```
-         */
-
-        /**
-         * 获取编辑器的内容。 可以通过参数定义编辑器内置的判空规则
-         * @method getContent
-         * @param { Function } fn 自定的判空规则, 要求该方法返回一个boolean类型的值,
-         *                      代表当前编辑器的内容是否空,
-         *                      如果返回true, 则该方法将直接返回空字符串;如果返回false,则编辑器将返回
-         *                      经过内置过滤规则处理后的内容。
-         * @remind 该方法在处理包含有初始化内容的时候能起到很好的作用。
-         * @warning 该方法获取到的是经过编辑器内置的过滤规则进行过滤后得到的内容
-         * @return { String } 编辑器的内容字符串
-         * @example
-         * ```javascript
-         * // editor 是一个编辑器的实例
-         * var content = editor.getContent( function ( editor ) {
-         *      return editor.body.innerHTML === '欢迎使用UEditor'; //返回空字符串
-         * } );
-         * ```
-         */
-        getContent: function (cmd, fn,notSetCursor,ignoreBlank,formatter) {
-            var me = this;
-            if (cmd && utils.isFunction(cmd)) {
-                fn = cmd;
-                cmd = '';
-            }
-            if (fn ? !fn() : !this.hasContents()) {
-                return '';
-            }
-            me.fireEvent('beforegetcontent');
-            var root = UE.htmlparser(me.body.innerHTML,ignoreBlank);
-            me.filterOutputRule(root);
-            me.fireEvent('aftergetcontent', cmd,root);
-            return  root.toHtml(formatter);
-        },
-
-        /**
-         * 取得完整的html代码,可以直接显示成完整的html文档
-         * @method getAllHtml
-         * @return { String } 编辑器的内容html文档字符串
-         * @eaxmple
-         * ```javascript
-         * editor.getAllHtml(); //返回格式大致是: <html><head>...</head><body>...</body></html>
-         * ```
-         */
-        getAllHtml: function () {
-            var me = this,
-                headHtml = [],
-                html = '';
-            me.fireEvent('getAllHtml', headHtml);
-            if (browser.ie && browser.version > 8) {
-                var headHtmlForIE9 = '';
-                utils.each(me.document.styleSheets, function (si) {
-                    headHtmlForIE9 += ( si.href ? '<link rel="stylesheet" type="text/css" href="' + si.href + '" />' : '<style>' + si.cssText + '</style>');
-                });
-                utils.each(me.document.getElementsByTagName('script'), function (si) {
-                    headHtmlForIE9 += si.outerHTML;
-                });
-
-            }
-            return '<html><head>' + (me.options.charset ? '<meta http-equiv="Content-Type" content="text/html; charset=' + me.options.charset + '"/>' : '')
-                + (headHtmlForIE9 || me.document.getElementsByTagName('head')[0].innerHTML) + headHtml.join('\n') + '</head>'
-                + '<body ' + (ie && browser.version < 9 ? 'class="view"' : '') + '>' + me.getContent(null, null, true) + '</body></html>';
-        },
-
-        /**
-         * 得到编辑器的纯文本内容,但会保留段落格式
-         * @method getPlainTxt
-         * @return { String } 编辑器带段落格式的纯文本内容字符串
-         * @example
-         * ```javascript
-         * //编辑器html内容:<p><strong>1</strong></p><p><strong>2</strong></p>
-         * console.log(editor.getPlainTxt()); //输出:"1\n2\n
-         * ```
-         */
-        getPlainTxt: function () {
-            var reg = new RegExp(domUtils.fillChar, 'g'),
-                html = this.body.innerHTML.replace(/[\n\r]/g, '');//ie要先去了\n在处理
-            html = html.replace(/<(p|div)[^>]*>(<br\/?>|&nbsp;)<\/\1>/gi, '\n')
-                .replace(/<br\/?>/gi, '\n')
-                .replace(/<[^>/]+>/g, '')
-                .replace(/(\n)?<\/([^>]+)>/g, function (a, b, c) {
-                    return dtd.$block[c] ? '\n' : b ? b : '';
-                });
-            //取出来的空格会有c2a0会变成乱码,处理这种情况\u00a0
-            return html.replace(reg, '').replace(/\u00a0/g, ' ').replace(/&nbsp;/g, ' ');
-        },
-
-        /**
-         * 获取编辑器中的纯文本内容,没有段落格式
-         * @method getContentTxt
-         * @return { String } 编辑器不带段落格式的纯文本内容字符串
-         * @example
-         * ```javascript
-         * //编辑器html内容:<p><strong>1</strong></p><p><strong>2</strong></p>
-         * console.log(editor.getPlainTxt()); //输出:"12
-         * ```
-         */
-        getContentTxt: function () {
-            var reg = new RegExp(domUtils.fillChar, 'g');
-            //取出来的空格会有c2a0会变成乱码,处理这种情况\u00a0
-            return this.body[browser.ie ? 'innerText' : 'textContent'].replace(reg, '').replace(/\u00a0/g, ' ');
-        },
-
-        /**
-         * 设置编辑器的内容,可修改编辑器当前的html内容
-         * @method setContent
-         * @warning 通过该方法插入的内容,是经过编辑器内置的过滤规则进行过滤后得到的内容
-         * @warning 该方法会触发selectionchange事件
-         * @param { String } html 要插入的html内容
-         * @example
-         * ```javascript
-         * editor.getContent('<p>test</p>');
-         * ```
-         */
-
-        /**
-         * 设置编辑器的内容,可修改编辑器当前的html内容
-         * @method setContent
-         * @warning 通过该方法插入的内容,是经过编辑器内置的过滤规则进行过滤后得到的内容
-         * @warning 该方法会触发selectionchange事件
-         * @param { String } html 要插入的html内容
-         * @param { Boolean } isAppendTo 若传入true,不清空原来的内容,在最后插入内容,否则,清空内容再插入
-         * @example
-         * ```javascript
-         * //假设设置前的编辑器内容是 <p>old text</p>
-         * editor.setContent('<p>new text</p>', true); //插入的结果是<p>old text</p><p>new text</p>
-         * ```
-         */
-        setContent: function (html, isAppendTo, notFireSelectionchange) {
-            var me = this;
-
-            me.fireEvent('beforesetcontent', html);
-            var root = UE.htmlparser(html);
-            me.filterInputRule(root);
-            html = root.toHtml();
-
-            me.body.innerHTML = (isAppendTo ? me.body.innerHTML : '') + html;
-
-
-            function isCdataDiv(node){
-                return  node.tagName == 'DIV' && node.getAttribute('cdata_tag');
-            }
-            //给文本或者inline节点套p标签
-            if (me.options.enterTag == 'p') {
-
-                var child = this.body.firstChild, tmpNode;
-                if (!child || child.nodeType == 1 &&
-                    (dtd.$cdata[child.tagName] || isCdataDiv(child) ||
-                        domUtils.isCustomeNode(child)
-                        )
-                    && child === this.body.lastChild) {
-                    this.body.innerHTML = '<p>' + (browser.ie ? '&nbsp;' : '<br/>') + '</p>' + this.body.innerHTML;
-
-                } else {
-                    var p = me.document.createElement('p');
-                    while (child) {
-                        while (child && (child.nodeType == 3 || child.nodeType == 1 && dtd.p[child.tagName] && !dtd.$cdata[child.tagName])) {
-                            tmpNode = child.nextSibling;
-                            p.appendChild(child);
-                            child = tmpNode;
-                        }
-                        if (p.firstChild) {
-                            if (!child) {
-                                me.body.appendChild(p);
-                                break;
-                            } else {
-                                child.parentNode.insertBefore(p, child);
-                                p = me.document.createElement('p');
-                            }
-                        }
-                        child = child.nextSibling;
-                    }
-                }
-            }
-            me.fireEvent('aftersetcontent');
-            me.fireEvent('contentchange');
-
-            !notFireSelectionchange && me._selectionChange();
-            //清除保存的选区
-            me._bakRange = me._bakIERange = me._bakNativeRange = null;
-            //trace:1742 setContent后gecko能得到焦点问题
-            var geckoSel;
-            if (browser.gecko && (geckoSel = this.selection.getNative())) {
-                geckoSel.removeAllRanges();
-            }
-            if(me.options.autoSyncData){
-                me.form && setValue(me.form,me);
-            }
-        },
-
-        /**
-         * 让编辑器获得焦点,默认focus到编辑器头部
-         * @method focus
-         * @example
-         * ```javascript
-         * editor.focus()
-         * ```
-         */
-
-        /**
-         * 让编辑器获得焦点,toEnd确定focus位置
-         * @method focus
-         * @param { Boolean } toEnd 默认focus到编辑器头部,toEnd为true时focus到内容尾部
-         * @example
-         * ```javascript
-         * editor.focus(true)
-         * ```
-         */
-        focus: function (toEnd) {
-            try {
-                var me = this,
-                    rng = me.selection.getRange();
-                if (toEnd) {
-                    var node = me.body.lastChild;
-                    if(node && node.nodeType == 1 && !dtd.$empty[node.tagName]){
-                        if(domUtils.isEmptyBlock(node)){
-                            rng.setStartAtFirst(node)
-                        }else{
-                            rng.setStartAtLast(node)
-                        }
-                        rng.collapse(true);
-                    }
-                    rng.setCursor(true);
-                } else {
-                    if(!rng.collapsed && domUtils.isBody(rng.startContainer) && rng.startOffset == 0){
-
-                        var node = me.body.firstChild;
-                        if(node && node.nodeType == 1 && !dtd.$empty[node.tagName]){
-                            rng.setStartAtFirst(node).collapse(true);
-                        }
-                    }
-
-                    rng.select(true);
-
-                }
-                this.fireEvent('focus selectionchange');
-            } catch (e) {
-            }
-
-        },
-        isFocus:function(){
-            return this.selection.isFocus();
-        },
-        blur:function(){
-            var sel = this.selection.getNative();
-            if(sel.empty && browser.ie){
-                var nativeRng = document.body.createTextRange();
-                nativeRng.moveToElementText(document.body);
-                nativeRng.collapse(true);
-                nativeRng.select();
-                sel.empty()
-            }else{
-                sel.removeAllRanges()
-            }
-
-            //this.fireEvent('blur selectionchange');
-        },
-        /**
-         * 初始化UE事件及部分事件代理
-         * @method _initEvents
-         * @private
-         */
-        _initEvents: function () {
-            var me = this,
-                doc = me.document,
-                win = me.window;
-            me._proxyDomEvent = utils.bind(me._proxyDomEvent, me);
-            domUtils.on(doc, ['click', 'contextmenu', 'mousedown', 'keydown', 'keyup', 'keypress', 'mouseup', 'mouseover', 'mouseout', 'selectstart'], me._proxyDomEvent);
-            domUtils.on(win, ['focus', 'blur'], me._proxyDomEvent);
-            domUtils.on(me.body,'drop',function(e){
-                //阻止ff下默认的弹出新页面打开图片
-                if(browser.gecko && e.stopPropagation) { e.stopPropagation(); }
-                me.fireEvent('contentchange')
-            });
-            domUtils.on(doc, ['mouseup', 'keydown'], function (evt) {
-                //特殊键不触发selectionchange
-                if (evt.type == 'keydown' && (evt.ctrlKey || evt.metaKey || evt.shiftKey || evt.altKey)) {
-                    return;
-                }
-                if (evt.button == 2)return;
-                me._selectionChange(250, evt);
-            });
-        },
-        /**
-         * 触发事件代理
-         * @method _proxyDomEvent
-         * @private
-         * @return { * } fireEvent的返回值
-         * @see UE.EventBase:fireEvent(String)
-         */
-        _proxyDomEvent: function (evt) {
-            if(this.fireEvent('before' + evt.type.replace(/^on/, '').toLowerCase()) === false){
-                return false;
-            }
-            if(this.fireEvent(evt.type.replace(/^on/, ''), evt) === false){
-                return false;
-            }
-            return this.fireEvent('after' + evt.type.replace(/^on/, '').toLowerCase())
-        },
-        /**
-         * 变化选区
-         * @method _selectionChange
-         * @private
-         */
-        _selectionChange: function (delay, evt) {
-            var me = this;
-            //有光标才做selectionchange 为了解决未focus时点击source不能触发更改工具栏状态的问题(source命令notNeedUndo=1)
-//            if ( !me.selection.isFocus() ){
-//                return;
-//            }
-
-
-            var hackForMouseUp = false;
-            var mouseX, mouseY;
-            if (browser.ie && browser.version < 9 && evt && evt.type == 'mouseup') {
-                var range = this.selection.getRange();
-                if (!range.collapsed) {
-                    hackForMouseUp = true;
-                    mouseX = evt.clientX;
-                    mouseY = evt.clientY;
-                }
-            }
-            clearTimeout(_selectionChangeTimer);
-            _selectionChangeTimer = setTimeout(function () {
-                if (!me.selection || !me.selection.getNative()) {
-                    return;
-                }
-                //修复一个IE下的bug: 鼠标点击一段已选择的文本中间时,可能在mouseup后的一段时间内取到的range是在selection的type为None下的错误值.
-                //IE下如果用户是拖拽一段已选择文本,则不会触发mouseup事件,所以这里的特殊处理不会对其有影响
-                var ieRange;
-                if (hackForMouseUp && me.selection.getNative().type == 'None') {
-                    ieRange = me.document.body.createTextRange();
-                    try {
-                        ieRange.moveToPoint(mouseX, mouseY);
-                    } catch (ex) {
-                        ieRange = null;
-                    }
-                }
-                var bakGetIERange;
-                if (ieRange) {
-                    bakGetIERange = me.selection.getIERange;
-                    me.selection.getIERange = function () {
-                        return ieRange;
-                    };
-                }
-                me.selection.cache();
-                if (bakGetIERange) {
-                    me.selection.getIERange = bakGetIERange;
-                }
-                if (me.selection._cachedRange && me.selection._cachedStartElement) {
-                    me.fireEvent('beforeselectionchange');
-                    // 第二个参数causeByUi为true代表由用户交互造成的selectionchange.
-                    me.fireEvent('selectionchange', !!evt);
-                    me.fireEvent('afterselectionchange');
-                    me.selection.clear();
-                }
-            }, delay || 50);
-        },
-
-        /**
-         * 执行编辑命令
-         * @method _callCmdFn
-         * @private
-         * @param { String } fnName 函数名称
-         * @param { * } args 传给命令函数的参数
-         * @return { * } 返回命令函数运行的返回值
-         */
-        _callCmdFn: function (fnName, args) {
-            var cmdName = args[0].toLowerCase(),
-                cmd, cmdFn;
-            cmd = this.commands[cmdName] || UE.commands[cmdName];
-            cmdFn = cmd && cmd[fnName];
-            //没有querycommandstate或者没有command的都默认返回0
-            if ((!cmd || !cmdFn) && fnName == 'queryCommandState') {
-                return 0;
-            } else if (cmdFn) {
-                return cmdFn.apply(this, args);
-            }
-        },
-
-        /**
-         * 执行编辑命令cmdName,完成富文本编辑效果
-         * @method execCommand
-         * @param { String } cmdName 需要执行的命令
-         * @remind 具体命令的使用请参考<a href="#COMMAND.LIST">命令列表</a>
-         * @return { * } 返回命令函数运行的返回值
-         * @example
-         * ```javascript
-         * editor.execCommand(cmdName);
-         * ```
-         */
-        execCommand: function (cmdName) {
-            cmdName = cmdName.toLowerCase();
-            var me = this,
-                result,
-                cmd = me.commands[cmdName] || UE.commands[cmdName];
-            if (!cmd || !cmd.execCommand) {
-                return null;
-            }
-            if (!cmd.notNeedUndo && !me.__hasEnterExecCommand) {
-                me.__hasEnterExecCommand = true;
-                if (me.queryCommandState.apply(me,arguments) != -1) {
-                    me.fireEvent('saveScene');
-                    me.fireEvent('beforeexeccommand', cmdName);
-                    result = this._callCmdFn('execCommand', arguments);
-                    (!cmd.ignoreContentChange && !me._ignoreContentChange) && me.fireEvent('contentchange');
-                    me.fireEvent('afterexeccommand', cmdName);
-                    me.fireEvent('saveScene');
-                }
-                me.__hasEnterExecCommand = false;
-            } else {
-                result = this._callCmdFn('execCommand', arguments);
-                (!me.__hasEnterExecCommand && !cmd.ignoreContentChange && !me._ignoreContentChange) && me.fireEvent('contentchange')
-            }
-            (!me.__hasEnterExecCommand && !cmd.ignoreContentChange && !me._ignoreContentChange) && me._selectionChange();
-            return result;
-        },
-
-        /**
-         * 根据传入的command命令,查选编辑器当前的选区,返回命令的状态
-         * @method  queryCommandState
-         * @param { String } cmdName 需要查询的命令名称
-         * @remind 具体命令的使用请参考<a href="#COMMAND.LIST">命令列表</a>
-         * @return { Number } number 返回放前命令的状态,返回值三种情况:(-1|0|1)
-         * @example
-         * ```javascript
-         * editor.queryCommandState(cmdName)  => (-1|0|1)
-         * ```
-         * @see COMMAND.LIST
-         */
-        queryCommandState: function (cmdName) {
-            return this._callCmdFn('queryCommandState', arguments);
-        },
-
-        /**
-         * 根据传入的command命令,查选编辑器当前的选区,根据命令返回相关的值
-         * @method queryCommandValue
-         * @param { String } cmdName 需要查询的命令名称
-         * @remind 具体命令的使用请参考<a href="#COMMAND.LIST">命令列表</a>
-         * @remind 只有部分插件有此方法
-         * @return { * } 返回每个命令特定的当前状态值
-         * @grammar editor.queryCommandValue(cmdName)  =>  {*}
-         * @see COMMAND.LIST
-         */
-        queryCommandValue: function (cmdName) {
-            return this._callCmdFn('queryCommandValue', arguments);
-        },
-
-        /**
-         * 检查编辑区域中是否有内容
-         * @method  hasContents
-         * @remind 默认有文本内容,或者有以下节点都不认为是空
-         * table,ul,ol,dl,iframe,area,base,col,hr,img,embed,input,link,meta,param
-         * @return { Boolean } 检查有内容返回true,否则返回false
-         * @example
-         * ```javascript
-         * editor.hasContents()
-         * ```
-         */
-
-        /**
-         * 检查编辑区域中是否有内容,若包含参数tags中的节点类型,直接返回true
-         * @method  hasContents
-         * @param { Array } tags 传入数组判断时用到的节点类型
-         * @return { Boolean } 若文档中包含tags数组里对应的tag,返回true,否则返回false
-         * @example
-         * ```javascript
-         * editor.hasContents(['span']);
-         * ```
-         */
-        hasContents: function (tags) {
-            if (tags) {
-                for (var i = 0, ci; ci = tags[i++];) {
-                    if (this.document.getElementsByTagName(ci).length > 0) {
-                        return true;
-                    }
-                }
-            }
-            if (!domUtils.isEmptyBlock(this.body)) {
-                return true
-            }
-            //随时添加,定义的特殊标签如果存在,不能认为是空
-            tags = ['div'];
-            for (i = 0; ci = tags[i++];) {
-                var nodes = domUtils.getElementsByTagName(this.document, ci);
-                for (var n = 0, cn; cn = nodes[n++];) {
-                    if (domUtils.isCustomeNode(cn)) {
-                        return true;
-                    }
-                }
-            }
-            return false;
-        },
-
-        /**
-         * 重置编辑器,可用来做多个tab使用同一个编辑器实例
-         * @method  reset
-         * @remind 此方法会清空编辑器内容,清空回退列表,会触发reset事件
-         * @example
-         * ```javascript
-         * editor.reset()
-         * ```
-         */
-        reset: function () {
-            this.fireEvent('reset');
-        },
-
-        /**
-         * 设置当前编辑区域可以编辑
-         * @method setEnabled
-         * @example
-         * ```javascript
-         * editor.setEnabled()
-         * ```
-         */
-        setEnabled: function () {
-            var me = this, range;
-            if (me.body.contentEditable == 'false') {
-                me.body.contentEditable = true;
-                range = me.selection.getRange();
-                //有可能内容丢失了
-                try {
-                    range.moveToBookmark(me.lastBk);
-                    delete me.lastBk
-                } catch (e) {
-                    range.setStartAtFirst(me.body).collapse(true)
-                }
-                range.select(true);
-                if (me.bkqueryCommandState) {
-                    me.queryCommandState = me.bkqueryCommandState;
-                    delete me.bkqueryCommandState;
-                }
-                me.fireEvent('selectionchange');
-            }
-        },
-        enable: function () {
-            return this.setEnabled();
-        },
-
-        /** 设置当前编辑区域不可编辑
-         * @method setDisabled
-         */
-
-        /** 设置当前编辑区域不可编辑,except中的命令除外
-         * @method setDisabled
-         * @param { String } except 例外命令的字符串
-         * @remind 即使设置了disable,此处配置的例外命令仍然可以执行
-         * @example
-         * ```javascript
-         * editor.setDisabled('bold'); //禁用工具栏中除加粗之外的所有功能
-         * ```
-         */
-
-        /** 设置当前编辑区域不可编辑,except中的命令除外
-         * @method setDisabled
-         * @param { Array } except 例外命令的字符串数组,数组中的命令仍然可以执行
-         * @remind 即使设置了disable,此处配置的例外命令仍然可以执行
-         * @example
-         * ```javascript
-         * editor.setDisabled(['bold','insertimage']); //禁用工具栏中除加粗和插入图片之外的所有功能
-         * ```
-         */
-        setDisabled: function (except) {
-            var me = this;
-            except = except ? utils.isArray(except) ? except : [except] : [];
-            if (me.body.contentEditable == 'true') {
-                if (!me.lastBk) {
-                    me.lastBk = me.selection.getRange().createBookmark(true);
-                }
-                me.body.contentEditable = false;
-                me.bkqueryCommandState = me.queryCommandState;
-                me.queryCommandState = function (type) {
-                    if (utils.indexOf(except, type) != -1) {
-                        return me.bkqueryCommandState.apply(me, arguments);
-                    }
-                    return -1;
-                };
-                me.fireEvent('selectionchange');
-            }
-        },
-        disable: function (except) {
-            return this.setDisabled(except);
-        },
-
-        /**
-         * 设置默认内容
-         * @method _setDefaultContent
-         * @private
-         * @param  { String } cont 要存入的内容
-         */
-        _setDefaultContent: function () {
-            function clear() {
-                var me = this;
-                if (me.document.getElementById('initContent')) {
-                    me.body.innerHTML = '<p>' + (ie ? '' : '<br/>') + '</p>';
-                    me.removeListener('firstBeforeExecCommand focus', clear);
-                    setTimeout(function () {
-                        me.focus();
-                        me._selectionChange();
-                    }, 0)
-                }
-            }
-
-            return function (cont) {
-                var me = this;
-                me.body.innerHTML = '<p id="initContent">' + cont + '</p>';
-
-                me.addListener('firstBeforeExecCommand focus', clear);
-            }
-        }(),
-
-        /**
-         * 显示编辑器
-         * @method setShow
-         * @example
-         * ```javascript
-         * editor.setShow()
-         * ```
-         */
-        setShow: function () {
-            var me = this, range = me.selection.getRange();
-            if (me.container.style.display == 'none') {
-                //有可能内容丢失了
-                try {
-                    range.moveToBookmark(me.lastBk);
-                    delete me.lastBk
-                } catch (e) {
-                    range.setStartAtFirst(me.body).collapse(true)
-                }
-                //ie下focus实效,所以做了个延迟
-                setTimeout(function () {
-                    range.select(true);
-                }, 100);
-                me.container.style.display = '';
-            }
-
-        },
-        show: function () {
-            return this.setShow();
-        },
-        /**
-         * 隐藏编辑器
-         * @method setHide
-         * @example
-         * ```javascript
-         * editor.setHide()
-         * ```
-         */
-        setHide: function () {
-            var me = this;
-            if (!me.lastBk) {
-                me.lastBk = me.selection.getRange().createBookmark(true);
-            }
-            me.container.style.display = 'none'
-        },
-        hide: function () {
-            return this.setHide();
-        },
-
-        /**
-         * 根据指定的路径,获取对应的语言资源
-         * @method getLang
-         * @param { String } path 路径根据的是lang目录下的语言文件的路径结构
-         * @return { Object | String } 根据路径返回语言资源的Json格式对象或者语言字符串
-         * @example
-         * ```javascript
-         * editor.getLang('contextMenu.delete'); //如果当前是中文,那返回是的是'删除'
-         * ```
-         */
-        getLang: function (path) {
-            var lang = UE.I18N[this.options.lang];
-            if (!lang) {
-                throw Error("not import language file");
-            }
-            path = (path || "").split(".");
-            for (var i = 0, ci; ci = path[i++];) {
-                lang = lang[ci];
-                if (!lang)break;
-            }
-            return lang;
-        },
-
-        /**
-         * 计算编辑器html内容字符串的长度
-         * @method  getContentLength
-         * @return { Number } 返回计算的长度
-         * @example
-         * ```javascript
-         * //编辑器html内容<p><strong>132</strong></p>
-         * editor.getContentLength() //返回27
-         * ```
-         */
-        /**
-         * 计算编辑器当前纯文本内容的长度
-         * @method  getContentLength
-         * @param { Boolean } ingoneHtml 传入true时,只按照纯文本来计算
-         * @return { Number } 返回计算的长度,内容中有hr/img/iframe标签,长度加1
-         * @example
-         * ```javascript
-         * //编辑器html内容<p><strong>132</strong></p>
-         * editor.getContentLength() //返回3
-         * ```
-         */
-        getContentLength: function (ingoneHtml, tagNames) {
-            var count = this.getContent(false,false,true).length;
-            if (ingoneHtml) {
-                tagNames = (tagNames || []).concat([ 'hr', 'img', 'iframe']);
-                count = this.getContentTxt().replace(/[\t\r\n]+/g, '').length;
-                for (var i = 0, ci; ci = tagNames[i++];) {
-                    count += this.document.getElementsByTagName(ci).length;
-                }
-            }
-            return count;
-        },
-
-        /**
-         * 注册输入过滤规则
-         * @method  addInputRule
-         * @param { Function } rule 要添加的过滤规则
-         * @example
-         * ```javascript
-         * editor.addInputRule(function(root){
-         *   $.each(root.getNodesByTagName('div'),function(i,node){
-         *       node.tagName="p";
-         *   });
-         * });
-         * ```
-         */
-        addInputRule: function (rule) {
-            this.inputRules.push(rule);
-        },
-
-        /**
-         * 执行注册的过滤规则
-         * @method  filterInputRule
-         * @param { UE.uNode } root 要过滤的uNode节点
-         * @remind 执行editor.setContent方法和执行'inserthtml'命令后,会运行该过滤函数
-         * @example
-         * ```javascript
-         * editor.filterInputRule(editor.body);
-         * ```
-         * @see UE.Editor:addInputRule
-         */
-        filterInputRule: function (root) {
-            for (var i = 0, ci; ci = this.inputRules[i++];) {
-                ci.call(this, root)
-            }
-        },
-
-        /**
-         * 注册输出过滤规则
-         * @method  addOutputRule
-         * @param { Function } rule 要添加的过滤规则
-         * @example
-         * ```javascript
-         * editor.addOutputRule(function(root){
-         *   $.each(root.getNodesByTagName('p'),function(i,node){
-         *       node.tagName="div";
-         *   });
-         * });
-         * ```
-         */
-        addOutputRule: function (rule) {
-            this.outputRules.push(rule)
-        },
-
-        /**
-         * 根据输出过滤规则,过滤编辑器内容
-         * @method  filterOutputRule
-         * @remind 执行editor.getContent方法的时候,会先运行该过滤函数
-         * @param { UE.uNode } root 要过滤的uNode节点
-         * @example
-         * ```javascript
-         * editor.filterOutputRule(editor.body);
-         * ```
-         * @see UE.Editor:addOutputRule
-         */
-        filterOutputRule: function (root) {
-            for (var i = 0, ci; ci = this.outputRules[i++];) {
-                ci.call(this, root)
-            }
-        }
-
-    };
-    utils.inherits(Editor, EventBase);
-})();
-
-/**
- * @file
- * @module UE.ajax
- * @since 1.2.6.1
- */
-
-/**
- * 提供对ajax请求的支持
- * @module UE.ajax
- */
-UE.ajax = function() {
-
-    //创建一个ajaxRequest对象
-    var fnStr = 'XMLHttpRequest()';
-    try {
-        new ActiveXObject("Msxml2.XMLHTTP");
-        fnStr = 'ActiveXObject(\'Msxml2.XMLHTTP\')';
-    } catch (e) {
-        try {
-            new ActiveXObject("Microsoft.XMLHTTP");
-            fnStr = 'ActiveXObject(\'Microsoft.XMLHTTP\')'
-        } catch (e) {
-        }
-    }
-    var creatAjaxRequest = new Function('return new ' + fnStr);
-
-
-    /*
-     * 将json参数转化成适合ajax提交的参数列表
-     * @param json
-     */
-    function json2str(json) {
-        var strArr = [];
-        for (var i in json) {
-            //忽略默认的几个参数
-            if(i=="method" || i=="timeout" || i=="async") continue;
-            //传递过来的对象和函数不在提交之列
-            if (!((typeof json[i]).toLowerCase() == "function" || (typeof json[i]).toLowerCase() == "object")) {
-                strArr.push( encodeURIComponent(i) + "="+encodeURIComponent(json[i]) );
-            }
-        }
-        return strArr.join("&");
-
-    }
-
-
-    return {
-        /**
-         * 根据给定的参数项,向指定的url发起一个ajax请求。 ajax请求完成后,会根据请求结果调用相应回调: 如果请求
-         * 成功, 则调用onsuccess回调, 失败则调用 onerror 回调
-         * @method request
-         * @param { URLString } url ajax请求的url地址
-         * @param { Object } ajaxOptions ajax请求选项的键值对,支持的选项如下:
-         * @example
-         * ```javascript
-         * //向sayhello.php发起一个异步的Ajax GET请求, 请求超时时间为10s, 请求完成后执行相应的回调。
-         * UE.ajax.requeset( 'sayhello.php', {
-         *
-         *     //请求方法。可选值: 'GET', 'POST',默认值是'POST'
-         *     method: 'GET',
-         *
-         *     //超时时间。 默认为5000, 单位是ms
-         *     timeout: 10000,
-         *
-         *     //是否是异步请求。 true为异步请求, false为同步请求
-         *     async: true,
-         *
-         *     //请求携带的数据。如果请求为GET请求, data会经过stringify后附加到请求url之后。
-         *     data: {
-         *         name: 'ueditor'
-         *     },
-         *
-         *     //请求成功后的回调, 该回调接受当前的XMLHttpRequest对象作为参数。
-         *     onsuccess: function ( xhr ) {
-         *         console.log( xhr.responseText );
-         *     },
-         *
-         *     //请求失败或者超时后的回调。
-         *     onerror: function ( xhr ) {
-         *          alert( 'Ajax请求失败' );
-         *     }
-         *
-         * } );
-         * ```
-         */
-
-        /**
-         * 根据给定的参数项发起一个ajax请求, 参数项里必须包含一个url地址。 ajax请求完成后,会根据请求结果调用相应回调: 如果请求
-         * 成功, 则调用onsuccess回调, 失败则调用 onerror 回调。
-         * @method request
-         * @warning 如果在参数项里未提供一个key为“url”的地址值,则该请求将直接退出。
-         * @param { Object } ajaxOptions ajax请求选项的键值对,支持的选项如下:
-         * @example
-         * ```javascript
-         *
-         * //向sayhello.php发起一个异步的Ajax POST请求, 请求超时时间为5s, 请求完成后不执行任何回调。
-         * UE.ajax.requeset( 'sayhello.php', {
-         *
-         *     //请求的地址, 该项是必须的。
-         *     url: 'sayhello.php'
-         *
-         * } );
-         * ```
-         */
-		request:function(url, ajaxOptions) {
-            var ajaxRequest = creatAjaxRequest(),
-                //是否超时
-                timeIsOut = false,
-                //默认参数
-                defaultAjaxOptions = {
-                    method:"POST",
-                    timeout:5000,
-                    async:true,
-                    data:{},//需要传递对象的话只能覆盖
-                    onsuccess:function() {
-                    },
-                    onerror:function() {
-                    }
-                };
-
-			if (typeof url === "object") {
-				ajaxOptions = url;
-				url = ajaxOptions.url;
-			}
-			if (!ajaxRequest || !url) return;
-			var ajaxOpts = ajaxOptions ? utils.extend(defaultAjaxOptions,ajaxOptions) : defaultAjaxOptions;
-
-			var submitStr = json2str(ajaxOpts);  // { name:"Jim",city:"Beijing" } --> "name=Jim&city=Beijing"
-			//如果用户直接通过data参数传递json对象过来,则也要将此json对象转化为字符串
-			if (!utils.isEmptyObject(ajaxOpts.data)){
-                submitStr += (submitStr? "&":"") + json2str(ajaxOpts.data);
-			}
-            //超时检测
-            var timerID = setTimeout(function() {
-                if (ajaxRequest.readyState != 4) {
-                    timeIsOut = true;
-                    ajaxRequest.abort();
-                    clearTimeout(timerID);
-                }
-            }, ajaxOpts.timeout);
-
-			var method = ajaxOpts.method.toUpperCase();
-            var str = url + (url.indexOf("?")==-1?"?":"&") + (method=="POST"?"":submitStr+ "&noCache=" + +new Date);
-			ajaxRequest.open(method, str, ajaxOpts.async);
-			ajaxRequest.onreadystatechange = function() {
-				if (ajaxRequest.readyState == 4) {
-					if (!timeIsOut && ajaxRequest.status == 200) {
-						ajaxOpts.onsuccess(ajaxRequest);
-					} else {
-						ajaxOpts.onerror(ajaxRequest);
-					}
-				}
-			};
-			if (method == "POST") {
-				ajaxRequest.setRequestHeader('Content-Type', 'application/x-www-form-urlencoded');
-				ajaxRequest.send(submitStr);
-			} else {
-				ajaxRequest.send(null);
-			}
-		}
-	};
-
-
-}();
-
-/**
- * UE过滤word的静态方法
- * @file
- */
-
-/**
- * UEditor公用空间,UEditor所有的功能都挂载在该空间下
- * @module UE
- */
-
-
-/**
- * 根据传入html字符串过滤word
- * @module UE
- * @since 1.2.6.1
- * @method filterWord
- * @param { String } html html字符串
- * @return { String } 已过滤后的结果字符串
- * @example
- * ```javascript
- * UE.filterWord(html);
- * ```
- */
-var filterWord = UE.filterWord = function () {
-
-    //是否是word过来的内容
-    function isWordDocument( str ) {
-        return /(class="?Mso|style="[^"]*\bmso\-|w:WordDocument|<(v|o):|lang=)/ig.test( str );
-    }
-    //去掉小数
-    function transUnit( v ) {
-        v = v.replace( /[\d.]+\w+/g, function ( m ) {
-            return utils.transUnitToPx(m);
-        } );
-        return v;
-    }
-
-    function filterPasteWord( str ) {
-        return str.replace(/[\t\r\n]+/g,' ')
-                .replace( /<!--[\s\S]*?-->/ig, "" )
-                //转换图片
-                .replace(/<v:shape [^>]*>[\s\S]*?.<\/v:shape>/gi,function(str){
-                    //opera能自己解析出image所这里直接返回空
-                    if(browser.opera){
-                        return '';
-                    }
-                    try{
-                        //有可能是bitmap占为图,无用,直接过滤掉,主要体现在粘贴excel表格中
-                        if(/Bitmap/i.test(str)){
-                            return '';
-                        }
-                        var width = str.match(/width:([ \d.]*p[tx])/i)[1],
-                            height = str.match(/height:([ \d.]*p[tx])/i)[1],
-                            src =  str.match(/src=\s*"([^"]*)"/i)[1];
-                        return '<img width="'+ transUnit(width) +'" height="'+transUnit(height) +'" src="' + src + '" />';
-                    } catch(e){
-                        return '';
-                    }
-                })
-                //针对wps添加的多余标签处理
-                .replace(/<\/?div[^>]*>/g,'')
-                //去掉多余的属性
-                .replace( /v:\w+=(["']?)[^'"]+\1/g, '' )
-                .replace( /<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|xml|meta|link|style|\w+:\w+)(?=[\s\/>]))[^>]*>/gi, "" )
-                .replace( /<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi, "<p><strong>$1</strong></p>" )
-                //去掉多余的属性
-                .replace( /\s+(class|lang|align)\s*=\s*(['"]?)([\w-]+)\2/ig, function(str,name,marks,val){
-                    //保留list的标示
-                    return name == 'class' && val == 'MsoListParagraph' ? str : ''
-                })
-                //清除多余的font/span不能匹配&nbsp;有可能是空格
-                .replace( /<(font|span)[^>]*>(\s*)<\/\1>/gi, function(a,b,c){
-                    return c.replace(/[\t\r\n ]+/g,' ')
-                })
-                //处理style的问题
-                .replace( /(<[a-z][^>]*)\sstyle=(["'])([^\2]*?)\2/gi, function( str, tag, tmp, style ) {
-                    var n = [],
-                        s = style.replace( /^\s+|\s+$/, '' )
-                            .replace(/&#39;/g,'\'')
-                            .replace( /&quot;/gi, "'" )
-                            .split( /;\s*/g );
-
-                    for ( var i = 0,v; v = s[i];i++ ) {
-
-                        var name, value,
-                            parts = v.split( ":" );
-
-                        if ( parts.length == 2 ) {
-                            name = parts[0].toLowerCase();
-                            value = parts[1].toLowerCase();
-                            if(/^(background)\w*/.test(name) && value.replace(/(initial|\s)/g,'').length == 0
-                                ||
-                                /^(margin)\w*/.test(name) && /^0\w+$/.test(value)
-                            ){
-                                continue;
-                            }
-
-                            switch ( name ) {
-                                case "mso-padding-alt":
-                                case "mso-padding-top-alt":
-                                case "mso-padding-right-alt":
-                                case "mso-padding-bottom-alt":
-                                case "mso-padding-left-alt":
-                                case "mso-margin-alt":
-                                case "mso-margin-top-alt":
-                                case "mso-margin-right-alt":
-                                case "mso-margin-bottom-alt":
-                                case "mso-margin-left-alt":
-                                //ie下会出现挤到一起的情况
-                               //case "mso-table-layout-alt":
-                                case "mso-height":
-                                case "mso-width":
-                                case "mso-vertical-align-alt":
-                                    //trace:1819 ff下会解析出padding在table上
-                                    if(!/<table/.test(tag))
-                                        n[i] = name.replace( /^mso-|-alt$/g, "" ) + ":" + transUnit( value );
-                                    continue;
-                                case "horiz-align":
-                                    n[i] = "text-align:" + value;
-                                    continue;
-
-                                case "vert-align":
-                                    n[i] = "vertical-align:" + value;
-                                    continue;
-
-                                case "font-color":
-                                case "mso-foreground":
-                                    n[i] = "color:" + value;
-                                    continue;
-
-                                case "mso-background":
-                                case "mso-highlight":
-                                    n[i] = "background:" + value;
-                                    continue;
-
-                                case "mso-default-height":
-                                    n[i] = "min-height:" + transUnit( value );
-                                    continue;
-
-                                case "mso-default-width":
-                                    n[i] = "min-width:" + transUnit( value );
-                                    continue;
-
-                                case "mso-padding-between-alt":
-                                    n[i] = "border-collapse:separate;border-spacing:" + transUnit( value );
-                                    continue;
-
-                                case "text-line-through":
-                                    if ( (value == "single") || (value == "double") ) {
-                                        n[i] = "text-decoration:line-through";
-                                    }
-                                    continue;
-                                case "mso-zero-height":
-                                    if ( value == "yes" ) {
-                                        n[i] = "display:none";
-                                    }
-                                    continue;
-//                                case 'background':
-//                                    break;
-                                case 'margin':
-                                    if ( !/[1-9]/.test( value ) ) {
-                                        continue;
-                                    }
-
-                            }
-
-                            if ( /^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?:decor|trans)|top-bar|version|vnd|word-break)/.test( name )
-                                ||
-                                /text\-indent|padding|margin/.test(name) && /\-[\d.]+/.test(value)
-                            ) {
-                                continue;
-                            }
-
-                            n[i] = name + ":" + parts[1];
-                        }
-                    }
-                    return tag + (n.length ? ' style="' + n.join( ';').replace(/;{2,}/g,';') + '"' : '');
-                })
-            .replace(/[\d.]+(cm|pt)/g,function(str){
-                return utils.transUnitToPx(str)
-            })
-
-    }
-
-    return function ( html ) {
-        return (isWordDocument( html ) ? filterPasteWord( html ) : html);
-    };
-}();
-/**
- * 编辑器模拟的节点类
- * @file
- * @module UE
- * @class uNode
- * @since 1.2.6.1
- */
-
-/**
- * UEditor公用空间,UEditor所有的功能都挂载在该空间下
- * @unfile
- * @module UE
- */
-
-(function () {
-
-    /**
-     * 编辑器模拟的节点类
-     * @unfile
-     * @module UE
-     * @class uNode
-     */
-
-    /**
-     * 通过一个键值对,创建一个uNode对象
-     * @constructor
-     * @param { Object } attr 传入要创建的uNode的初始属性
-     * @example
-     * ```javascript
-     * var node = new uNode({
-     *     type:'element',
-     *     tagName:'span',
-     *     attrs:{style:'font-size:14px;'}
-     * }
-     * ```
-     */
-    var uNode = UE.uNode = function (obj) {
-        this.type = obj.type;
-        this.data = obj.data;
-        this.tagName = obj.tagName;
-        this.parentNode = obj.parentNode;
-        this.attrs = obj.attrs || {};
-        this.children = obj.children;
-    };
-
-    var notTransAttrs = {
-        'href':1,
-        'src':1,
-        '_src':1,
-        '_href':1,
-        'cdata_data':1
-    };
-
-    var notTransTagName = {
-        style:1,
-        script:1
-    };
-
-    var indentChar = '    ',
-        breakChar = '\n';
-
-    function insertLine(arr, current, begin) {
-        arr.push(breakChar);
-        return current + (begin ? 1 : -1);
-    }
-
-    function insertIndent(arr, current) {
-        //插入缩进
-        for (var i = 0; i < current; i++) {
-            arr.push(indentChar);
-        }
-    }
-
-    //创建uNode的静态方法
-    //支持标签和html
-    uNode.createElement = function (html) {
-        if (/[<>]/.test(html)) {
-            return UE.htmlparser(html).children[0]
-        } else {
-            return new uNode({
-                type:'element',
-                children:[],
-                tagName:html
-            })
-        }
-    };
-    uNode.createText = function (data,noTrans) {
-        return new UE.uNode({
-            type:'text',
-            'data':noTrans ? data : utils.unhtml(data || '')
-        })
-    };
-    function nodeToHtml(node, arr, formatter, current) {
-        switch (node.type) {
-            case 'root':
-                for (var i = 0, ci; ci = node.children[i++];) {
-                    //插入新行
-                    if (formatter && ci.type == 'element' && !dtd.$inlineWithA[ci.tagName] && i > 1) {
-                        insertLine(arr, current, true);
-                        insertIndent(arr, current)
-                    }
-                    nodeToHtml(ci, arr, formatter, current)
-                }
-                break;
-            case 'text':
-                isText(node, arr);
-                break;
-            case 'element':
-                isElement(node, arr, formatter, current);
-                break;
-            case 'comment':
-                isComment(node, arr, formatter);
-        }
-        return arr;
-    }
-
-    function isText(node, arr) {
-        if(node.parentNode.tagName == 'pre'){
-            //源码模式下输入html标签,不能做转换处理,直接输出
-            arr.push(node.data)
-        }else{
-            arr.push(notTransTagName[node.parentNode.tagName] ? utils.html(node.data) : node.data.replace(/[ ]{2}/g,' &nbsp;'))
-        }
-
-    }
-
-    function isElement(node, arr, formatter, current) {
-        var attrhtml = '';
-        if (node.attrs) {
-            attrhtml = [];
-            var attrs = node.attrs;
-            for (var a in attrs) {
-                //这里就针对
-                //<p>'<img src='http://nsclick.baidu.com/u.gif?&asdf=\"sdf&asdfasdfs;asdf'></p>
-                //这里边的\"做转换,要不用innerHTML直接被截断了,属性src
-                //有可能做的不够
-                attrhtml.push(a + (attrs[a] !== undefined ? '="' + (notTransAttrs[a] ? utils.html(attrs[a]).replace(/["]/g, function (a) {
-                   return '&quot;'
-                }) : utils.unhtml(attrs[a])) + '"' : ''))
-            }
-            attrhtml = attrhtml.join(' ');
-        }
-        arr.push('<' + node.tagName +
-            (attrhtml ? ' ' + attrhtml  : '') +
-            (dtd.$empty[node.tagName] ? '\/' : '' ) + '>'
-        );
-        //插入新行
-        if (formatter  &&  !dtd.$inlineWithA[node.tagName] && node.tagName != 'pre') {
-            if(node.children && node.children.length){
-                current = insertLine(arr, current, true);
-                insertIndent(arr, current)
-            }
-
-        }
-        if (node.children && node.children.length) {
-            for (var i = 0, ci; ci = node.children[i++];) {
-                if (formatter && ci.type == 'element' &&  !dtd.$inlineWithA[ci.tagName] && i > 1) {
-                    insertLine(arr, current);
-                    insertIndent(arr, current)
-                }
-                nodeToHtml(ci, arr, formatter, current)
-            }
-        }
-        if (!dtd.$empty[node.tagName]) {
-            if (formatter && !dtd.$inlineWithA[node.tagName]  && node.tagName != 'pre') {
-
-                if(node.children && node.children.length){
-                    current = insertLine(arr, current);
-                    insertIndent(arr, current)
-                }
-            }
-            arr.push('<\/' + node.tagName + '>');
-        }
-
-    }
-
-    function isComment(node, arr) {
-        arr.push('<!--' + node.data + '-->');
-    }
-
-    function getNodeById(root, id) {
-        var node;
-        if (root.type == 'element' && root.getAttr('id') == id) {
-            return root;
-        }
-        if (root.children && root.children.length) {
-            for (var i = 0, ci; ci = root.children[i++];) {
-                if (node = getNodeById(ci, id)) {
-                    return node;
-                }
-            }
-        }
-    }
-
-    function getNodesByTagName(node, tagName, arr) {
-        if (node.type == 'element' && node.tagName == tagName) {
-            arr.push(node);
-        }
-        if (node.children && node.children.length) {
-            for (var i = 0, ci; ci = node.children[i++];) {
-                getNodesByTagName(ci, tagName, arr)
-            }
-        }
-    }
-    function nodeTraversal(root,fn){
-        if(root.children && root.children.length){
-            for(var i= 0,ci;ci=root.children[i];){
-                nodeTraversal(ci,fn);
-                //ci被替换的情况,这里就不再走 fn了
-                if(ci.parentNode ){
-                    if(ci.children && ci.children.length){
-                        fn(ci)
-                    }
-                    if(ci.parentNode) i++
-                }
-            }
-        }else{
-            fn(root)
-        }
-
-    }
-    uNode.prototype = {
-
-        /**
-         * 当前节点对象,转换成html文本
-         * @method toHtml
-         * @return { String } 返回转换后的html字符串
-         * @example
-         * ```javascript
-         * node.toHtml();
-         * ```
-         */
-
-        /**
-         * 当前节点对象,转换成html文本
-         * @method toHtml
-         * @param { Boolean } formatter 是否格式化返回值
-         * @return { String } 返回转换后的html字符串
-         * @example
-         * ```javascript
-         * node.toHtml( true );
-         * ```
-         */
-        toHtml:function (formatter) {
-            var arr = [];
-            nodeToHtml(this, arr, formatter, 0);
-            return arr.join('')
-        },
-
-        /**
-         * 获取节点的html内容
-         * @method innerHTML
-         * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点
-         * @return { String } 返回节点的html内容
-         * @example
-         * ```javascript
-         * var htmlstr = node.innerHTML();
-         * ```
-         */
-
-        /**
-         * 设置节点的html内容
-         * @method innerHTML
-         * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点
-         * @param { String } htmlstr 传入要设置的html内容
-         * @return { UE.uNode } 返回节点本身
-         * @example
-         * ```javascript
-         * node.innerHTML('<span>text</span>');
-         * ```
-         */
-        innerHTML:function (htmlstr) {
-            if (this.type != 'element' || dtd.$empty[this.tagName]) {
-                return this;
-            }
-            if (utils.isString(htmlstr)) {
-                if(this.children){
-                    for (var i = 0, ci; ci = this.children[i++];) {
-                        ci.parentNode = null;
-                    }
-                }
-                this.children = [];
-                var tmpRoot = UE.htmlparser(htmlstr);
-                for (var i = 0, ci; ci = tmpRoot.children[i++];) {
-                    this.children.push(ci);
-                    ci.parentNode = this;
-                }
-                return this;
-            } else {
-                var tmpRoot = new UE.uNode({
-                    type:'root',
-                    children:this.children
-                });
-                return tmpRoot.toHtml();
-            }
-        },
-
-        /**
-         * 获取节点的纯文本内容
-         * @method innerText
-         * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点
-         * @return { String } 返回节点的存文本内容
-         * @example
-         * ```javascript
-         * var textStr = node.innerText();
-         * ```
-         */
-
-        /**
-         * 设置节点的纯文本内容
-         * @method innerText
-         * @warning 假如节点的type不是'element',或节点的标签名称不在dtd列表里,直接返回当前节点
-         * @param { String } textStr 传入要设置的文本内容
-         * @return { UE.uNode } 返回节点本身
-         * @example
-         * ```javascript
-         * node.innerText('<span>text</span>');
-         * ```
-         */
-        innerText:function (textStr,noTrans) {
-            if (this.type != 'element' || dtd.$empty[this.tagName]) {
-                return this;
-            }
-            if (textStr) {
-                if(this.children){
-                    for (var i = 0, ci; ci = this.children[i++];) {
-                        ci.parentNode = null;
-                    }
-                }
-                this.children = [];
-                this.appendChild(uNode.createText(textStr,noTrans));
-                return this;
-            } else {
-                return this.toHtml().replace(/<[^>]+>/g, '');
-            }
-        },
-
-        /**
-         * 获取当前对象的data属性
-         * @method getData
-         * @return { Object } 若节点的type值是elemenet,返回空字符串,否则返回节点的data属性
-         * @example
-         * ```javascript
-         * node.getData();
-         * ```
-         */
-        getData:function () {
-            if (this.type == 'element')
-                return '';
-            return this.data
-        },
-
-        /**
-         * 获取当前节点下的第一个子节点
-         * @method firstChild
-         * @return { UE.uNode } 返回第一个子节点
-         * @example
-         * ```javascript
-         * node.firstChild(); //返回第一个子节点
-         * ```
-         */
-        firstChild:function () {
-//            if (this.type != 'element' || dtd.$empty[this.tagName]) {
-//                return this;
-//            }
-            return this.children ? this.children[0] : null;
-        },
-
-        /**
-         * 获取当前节点下的最后一个子节点
-         * @method lastChild
-         * @return { UE.uNode } 返回最后一个子节点
-         * @example
-         * ```javascript
-         * node.lastChild(); //返回最后一个子节点
-         * ```
-         */
-        lastChild:function () {
-//            if (this.type != 'element' || dtd.$empty[this.tagName] ) {
-//                return this;
-//            }
-            return this.children ? this.children[this.children.length - 1] : null;
-        },
-
-        /**
-         * 获取和当前节点有相同父亲节点的前一个节点
-         * @method previousSibling
-         * @return { UE.uNode } 返回前一个节点
-         * @example
-         * ```javascript
-         * node.children[2].previousSibling(); //返回子节点node.children[1]
-         * ```
-         */
-        previousSibling : function(){
-            var parent = this.parentNode;
-            for (var i = 0, ci; ci = parent.children[i]; i++) {
-                if (ci === this) {
-                   return i == 0 ? null : parent.children[i-1];
-                }
-            }
-
-        },
-
-        /**
-         * 获取和当前节点有相同父亲节点的后一个节点
-         * @method nextSibling
-         * @return { UE.uNode } 返回后一个节点,找不到返回null
-         * @example
-         * ```javascript
-         * node.children[2].nextSibling(); //如果有,返回子节点node.children[3]
-         * ```
-         */
-        nextSibling : function(){
-            var parent = this.parentNode;
-            for (var i = 0, ci; ci = parent.children[i++];) {
-                if (ci === this) {
-                    return parent.children[i];
-                }
-            }
-        },
-
-        /**
-         * 用新的节点替换当前节点
-         * @method replaceChild
-         * @param { UE.uNode } target 要替换成该节点参数
-         * @param { UE.uNode } source 要被替换掉的节点
-         * @return { UE.uNode } 返回替换之后的节点对象
-         * @example
-         * ```javascript
-         * node.replaceChild(newNode, childNode); //用newNode替换childNode,childNode是node的子节点
-         * ```
-         */
-        replaceChild:function (target, source) {
-            if (this.children) {
-                if(target.parentNode){
-                    target.parentNode.removeChild(target);
-                }
-                for (var i = 0, ci; ci = this.children[i]; i++) {
-                    if (ci === source) {
-                        this.children.splice(i, 1, target);
-                        source.parentNode = null;
-                        target.parentNode = this;
-                        return target;
-                    }
-                }
-            }
-        },
-
-        /**
-         * 在节点的子节点列表最后位置插入一个节点
-         * @method appendChild
-         * @param { UE.uNode } node 要插入的节点
-         * @return { UE.uNode } 返回刚插入的子节点
-         * @example
-         * ```javascript
-         * node.appendChild( newNode ); //在node内插入子节点newNode
-         * ```
-         */
-        appendChild:function (node) {
-            if (this.type == 'root' || (this.type == 'element' && !dtd.$empty[this.tagName])) {
-                if (!this.children) {
-                    this.children = []
-                }
-                if(node.parentNode){
-                    node.parentNode.removeChild(node);
-                }
-                for (var i = 0, ci; ci = this.children[i]; i++) {
-                    if (ci === node) {
-                        this.children.splice(i, 1);
-                        break;
-                    }
-                }
-                this.children.push(node);
-                node.parentNode = this;
-                return node;
-            }
-
-
-        },
-
-        /**
-         * 在传入节点的前面插入一个节点
-         * @method insertBefore
-         * @param { UE.uNode } target 要插入的节点
-         * @param { UE.uNode } source 在该参数节点前面插入
-         * @return { UE.uNode } 返回刚插入的子节点
-         * @example
-         * ```javascript
-         * node.parentNode.insertBefore(newNode, node); //在node节点后面插入newNode
-         * ```
-         */
-        insertBefore:function (target, source) {
-            if (this.children) {
-                if(target.parentNode){
-                    target.parentNode.removeChild(target);
-                }
-                for (var i = 0, ci; ci = this.children[i]; i++) {
-                    if (ci === source) {
-                        this.children.splice(i, 0, target);
-                        target.parentNode = this;
-                        return target;
-                    }
-                }
-
-            }
-        },
-
-        /**
-         * 在传入节点的后面插入一个节点
-         * @method insertAfter
-         * @param { UE.uNode } target 要插入的节点
-         * @param { UE.uNode } source 在该参数节点后面插入
-         * @return { UE.uNode } 返回刚插入的子节点
-         * @example
-         * ```javascript
-         * node.parentNode.insertAfter(newNode, node); //在node节点后面插入newNode
-         * ```
-         */
-        insertAfter:function (target, source) {
-            if (this.children) {
-                if(target.parentNode){
-                    target.parentNode.removeChild(target);
-                }
-                for (var i = 0, ci; ci = this.children[i]; i++) {
-                    if (ci === source) {
-                        this.children.splice(i + 1, 0, target);
-                        target.parentNode = this;
-                        return target;
-                    }
-
-                }
-            }
-        },
-
-        /**
-         * 从当前节点的子节点列表中,移除节点
-         * @method removeChild
-         * @param { UE.uNode } node 要移除的节点引用
-         * @param { Boolean } keepChildren 是否保留移除节点的子节点,若传入true,自动把移除节点的子节点插入到移除的位置
-         * @return { * } 返回刚移除的子节点
-         * @example
-         * ```javascript
-         * node.removeChild(childNode,true); //在node的子节点列表中移除child节点,并且吧child的子节点插入到移除的位置
-         * ```
-         */
-        removeChild:function (node,keepChildren) {
-            if (this.children) {
-                for (var i = 0, ci; ci = this.children[i]; i++) {
-                    if (ci === node) {
-                        this.children.splice(i, 1);
-                        ci.parentNode = null;
-                        if(keepChildren && ci.children && ci.children.length){
-                            for(var j= 0,cj;cj=ci.children[j];j++){
-                                this.children.splice(i+j,0,cj);
-                                cj.parentNode = this;
-
-                            }
-                        }
-                        return ci;
-                    }
-                }
-            }
-        },
-
-        /**
-         * 获取当前节点所代表的元素属性,即获取attrs对象下的属性值
-         * @method getAttr
-         * @param { String } attrName 要获取的属性名称
-         * @return { * } 返回attrs对象下的属性值
-         * @example
-         * ```javascript
-         * node.getAttr('title');
-         * ```
-         */
-        getAttr:function (attrName) {
-            return this.attrs && this.attrs[attrName.toLowerCase()]
-        },
-
-        /**
-         * 设置当前节点所代表的元素属性,即设置attrs对象下的属性值
-         * @method setAttr
-         * @param { String } attrName 要设置的属性名称
-         * @param { * } attrVal 要设置的属性值,类型视设置的属性而定
-         * @return { * } 返回attrs对象下的属性值
-         * @example
-         * ```javascript
-         * node.setAttr('title','标题');
-         * ```
-         */
-        setAttr:function (attrName, attrVal) {
-            if (!attrName) {
-                delete this.attrs;
-                return;
-            }
-            if(!this.attrs){
-                this.attrs = {};
-            }
-            if (utils.isObject(attrName)) {
-                for (var a in attrName) {
-                    if (!attrName[a]) {
-                        delete this.attrs[a]
-                    } else {
-                        this.attrs[a.toLowerCase()] = attrName[a];
-                    }
-                }
-            } else {
-                if (!attrVal) {
-                    delete this.attrs[attrName]
-                } else {
-                    this.attrs[attrName.toLowerCase()] = attrVal;
-                }
-
-            }
-        },
-
-        /**
-         * 获取当前节点在父节点下的位置索引
-         * @method getIndex
-         * @return { Number } 返回索引数值,如果没有父节点,返回-1
-         * @example
-         * ```javascript
-         * node.getIndex();
-         * ```
-         */
-        getIndex:function(){
-            var parent = this.parentNode;
-            for(var i= 0,ci;ci=parent.children[i];i++){
-                if(ci === this){
-                    return i;
-                }
-            }
-            return -1;
-        },
-
-        /**
-         * 在当前节点下,根据id查找节点
-         * @method getNodeById
-         * @param { String } id 要查找的id
-         * @return { UE.uNode } 返回找到的节点
-         * @example
-         * ```javascript
-         * node.getNodeById('textId');
-         * ```
-         */
-        getNodeById:function (id) {
-            var node;
-            if (this.children && this.children.length) {
-                for (var i = 0, ci; ci = this.children[i++];) {
-                    if (node = getNodeById(ci, id)) {
-                        return node;
-                    }
-                }
-            }
-        },
-
-        /**
-         * 在当前节点下,根据元素名称查找节点列表
-         * @method getNodesByTagName
-         * @param { String } tagNames 要查找的元素名称
-         * @return { Array } 返回找到的节点列表
-         * @example
-         * ```javascript
-         * node.getNodesByTagName('span');
-         * ```
-         */
-        getNodesByTagName:function (tagNames) {
-            tagNames = utils.trim(tagNames).replace(/[ ]{2,}/g, ' ').split(' ');
-            var arr = [], me = this;
-            utils.each(tagNames, function (tagName) {
-                if (me.children && me.children.length) {
-                    for (var i = 0, ci; ci = me.children[i++];) {
-                        getNodesByTagName(ci, tagName, arr)
-                    }
-                }
-            });
-            return arr;
-        },
-
-        /**
-         * 根据样式名称,获取节点的样式值
-         * @method getStyle
-         * @param { String } name 要获取的样式名称
-         * @return { String } 返回样式值
-         * @example
-         * ```javascript
-         * node.getStyle('font-size');
-         * ```
-         */
-        getStyle:function (name) {
-            var cssStyle = this.getAttr('style');
-            if (!cssStyle) {
-                return ''
-            }
-            var reg = new RegExp('(^|;)\\s*' + name + ':([^;]+)','i');
-            var match = cssStyle.match(reg);
-            if (match && match[0]) {
-                return match[2]
-            }
-            return '';
-        },
-
-        /**
-         * 给节点设置样式
-         * @method setStyle
-         * @param { String } name 要设置的的样式名称
-         * @param { String } val 要设置的的样值
-         * @example
-         * ```javascript
-         * node.setStyle('font-size', '12px');
-         * ```
-         */
-        setStyle:function (name, val) {
-            function exec(name, val) {
-                var reg = new RegExp('(^|;)\\s*' + name + ':([^;]+;?)', 'gi');
-                cssStyle = cssStyle.replace(reg, '$1');
-                if (val) {
-                    cssStyle = name + ':' + utils.unhtml(val) + ';' + cssStyle
-                }
-
-            }
-
-            var cssStyle = this.getAttr('style');
-            if (!cssStyle) {
-                cssStyle = '';
-            }
-            if (utils.isObject(name)) {
-                for (var a in name) {
-                    exec(a, name[a])
-                }
-            } else {
-                exec(name, val)
-            }
-            this.setAttr('style', utils.trim(cssStyle))
-        },
-
-        /**
-         * 传入一个函数,递归遍历当前节点下的所有节点
-         * @method traversal
-         * @param { Function } fn 遍历到节点的时,传入节点作为参数,运行此函数
-         * @example
-         * ```javascript
-         * traversal(node, function(){
-         *     console.log(node.type);
-         * });
-         * ```
-         */
-        traversal:function(fn){
-            if(this.children && this.children.length){
-                nodeTraversal(this,fn);
-            }
-            return this;
-        }
-    }
-})();
-
-/**
- * html字符串转换成uNode节点
- * @file
- * @module UE
- * @since 1.2.6.1
- */
-
-/**
- * UEditor公用空间,UEditor所有的功能都挂载在该空间下
- * @unfile
- * @module UE
- */
-
-/**
- * html字符串转换成uNode节点的静态方法
- * @method htmlparser
- * @param { String } htmlstr 要转换的html代码
- * @param { Boolean } ignoreBlank 若设置为true,转换的时候忽略\n\r\t等空白字符
- * @return { uNode } 给定的html片段转换形成的uNode对象
- * @example
- * ```javascript
- * var root = UE.htmlparser('<p><b>htmlparser</b></p>', true);
- * ```
- */
-
-var htmlparser = UE.htmlparser = function (htmlstr,ignoreBlank) {
-    //todo 原来的方式  [^"'<>\/] 有\/就不能配对上 <TD vAlign=top background=../AAA.JPG> 这样的标签了
-    //先去掉了,加上的原因忘了,这里先记录
-    var re_tag = /<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)-->)|(?:([^\s\/>]+)\s*((?:(?:"[^"]*")|(?:'[^']*')|[^"'<>])*)\/?>))/g,
-        re_attr = /([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g;
-
-    //ie下取得的html可能会有\n存在,要去掉,在处理replace(/[\t\r\n]*/g,'');代码高量的\n不能去除
-    var allowEmptyTags = {
-        b:1,code:1,i:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,span:1,
-        sub:1,img:1,sup:1,font:1,big:1,small:1,iframe:1,a:1,br:1,pre:1
-    };
-    htmlstr = htmlstr.replace(new RegExp(domUtils.fillChar, 'g'), '');
-    if(!ignoreBlank){
-        htmlstr = htmlstr.replace(new RegExp('[\\r\\t\\n'+(ignoreBlank?'':' ')+']*<\/?(\\w+)\\s*(?:[^>]*)>[\\r\\t\\n'+(ignoreBlank?'':' ')+']*','g'), function(a,b){
-            //br暂时单独处理
-            if(b && allowEmptyTags[b.toLowerCase()]){
-                return a.replace(/(^[\n\r]+)|([\n\r]+$)/g,'');
-            }
-            return a.replace(new RegExp('^[\\r\\n'+(ignoreBlank?'':' ')+']+'),'').replace(new RegExp('[\\r\\n'+(ignoreBlank?'':' ')+']+$'),'');
-        });
-    }
-
-    var notTransAttrs = {
-        'href':1,
-        'src':1
-    };
-
-    var uNode = UE.uNode,
-        needParentNode = {
-            'td':'tr',
-            'tr':['tbody','thead','tfoot'],
-            'tbody':'table',
-            'th':'tr',
-            'thead':'table',
-            'tfoot':'table',
-            'caption':'table',
-            'li':['ul', 'ol'],
-            'dt':'dl',
-            'dd':'dl',
-            'option':'select'
-        },
-        needChild = {
-            'ol':'li',
-            'ul':'li'
-        };
-
-    function text(parent, data) {
-
-        if(needChild[parent.tagName]){
-            var tmpNode = uNode.createElement(needChild[parent.tagName]);
-            parent.appendChild(tmpNode);
-            tmpNode.appendChild(uNode.createText(data));
-            parent = tmpNode;
-        }else{
-
-            parent.appendChild(uNode.createText(data));
-        }
-    }
-
-    function element(parent, tagName, htmlattr) {
-        var needParentTag;
-        if (needParentTag = needParentNode[tagName]) {
-            var tmpParent = parent,hasParent;
-            while(tmpParent.type != 'root'){
-                if(utils.isArray(needParentTag) ? utils.indexOf(needParentTag, tmpParent.tagName) != -1 : needParentTag == tmpParent.tagName){
-                    parent = tmpParent;
-                    hasParent = true;
-                    break;
-                }
-                tmpParent = tmpParent.parentNode;
-            }
-            if(!hasParent){
-                parent = element(parent, utils.isArray(needParentTag) ? needParentTag[0] : needParentTag)
-            }
-        }
-        //按dtd处理嵌套
-//        if(parent.type != 'root' && !dtd[parent.tagName][tagName])
-//            parent = parent.parentNode;
-        var elm = new uNode({
-            parentNode:parent,
-            type:'element',
-            tagName:tagName.toLowerCase(),
-            //是自闭合的处理一下
-            children:dtd.$empty[tagName] ? null : []
-        });
-        //如果属性存在,处理属性
-        if (htmlattr) {
-            var attrs = {}, match;
-            while (match = re_attr.exec(htmlattr)) {
-                attrs[match[1].toLowerCase()] = notTransAttrs[match[1].toLowerCase()] ? (match[2] || match[3] || match[4]) : utils.unhtml(match[2] || match[3] || match[4])
-            }
-            elm.attrs = attrs;
-        }
-
-        parent.children.push(elm);
-        //如果是自闭合节点返回父亲节点
-        return  dtd.$empty[tagName] ? parent : elm
-    }
-
-    function comment(parent, data) {
-        parent.children.push(new uNode({
-            type:'comment',
-            data:data,
-            parentNode:parent
-        }));
-    }
-
-    var match, currentIndex = 0, nextIndex = 0;
-    //设置根节点
-    var root = new uNode({
-        type:'root',
-        children:[]
-    });
-    var currentParent = root;
-
-    while (match = re_tag.exec(htmlstr)) {
-        currentIndex = match.index;
-        try{
-            if (currentIndex > nextIndex) {
-                //text node
-                text(currentParent, htmlstr.slice(nextIndex, currentIndex));
-            }
-            if (match[3]) {
-
-                if(dtd.$cdata[currentParent.tagName]){
-                    text(currentParent, match[0]);
-                }else{
-                    //start tag
-                    currentParent = element(currentParent, match[3].toLowerCase(), match[4]);
-                }
-
-
-            } else if (match[1]) {
-                if(currentParent.type != 'root'){
-                    if(dtd.$cdata[currentParent.tagName] && !dtd.$cdata[match[1]]){
-                        text(currentParent, match[0]);
-                    }else{
-                        var tmpParent = currentParent;
-                        while(currentParent.type == 'element' && currentParent.tagName != match[1].toLowerCase()){
-                            currentParent = currentParent.parentNode;
-                            if(currentParent.type == 'root'){
-                                currentParent = tmpParent;
-                                throw 'break'
-                            }
-                        }
-                        //end tag
-                        currentParent = currentParent.parentNode;
-                    }
-
-                }
-
-            } else if (match[2]) {
-                //comment
-                comment(currentParent, match[2])
-            }
-        }catch(e){}
-
-        nextIndex = re_tag.lastIndex;
-
-    }
-    //如果结束是文本,就有可能丢掉,所以这里手动判断一下
-    //例如 <li>sdfsdfsdf<li>sdfsdfsdfsdf
-    if (nextIndex < htmlstr.length) {
-        text(currentParent, htmlstr.slice(nextIndex));
-    }
-    return root;
-};
-/**
- * UE过滤节点的静态方法
- * @file
- */
-
-/**
- * UEditor公用空间,UEditor所有的功能都挂载在该空间下
- * @module UE
- */
-
-
-/**
- * 根据传入节点和过滤规则过滤相应节点
- * @module UE
- * @since 1.2.6.1
- * @method filterNode
- * @param { Object } root 指定root节点
- * @param { Object } rules 过滤规则json对象
- * @example
- * ```javascript
- * UE.filterNode(root,editor.options.filterRules);
- * ```
- */
-var filterNode = UE.filterNode = function () {
-    function filterNode(node,rules){
-        switch (node.type) {
-            case 'text':
-                break;
-            case 'element':
-                var val;
-                if(val = rules[node.tagName]){
-                   if(val === '-'){
-                       node.parentNode.removeChild(node)
-                   }else if(utils.isFunction(val)){
-                       var parentNode = node.parentNode,
-                           index = node.getIndex();
-                       val(node);
-                       if(node.parentNode){
-                           if(node.children){
-                               for(var i = 0,ci;ci=node.children[i];){
-                                   filterNode(ci,rules);
-                                   if(ci.parentNode){
-                                       i++;
-                                   }
-                               }
-                           }
-                       }else{
-                           for(var i = index,ci;ci=parentNode.children[i];){
-                               filterNode(ci,rules);
-                               if(ci.parentNode){
-                                   i++;
-                               }
-                           }
-                       }
-
-
-                   }else{
-                       var attrs = val['$'];
-                       if(attrs && node.attrs){
-                           var tmpAttrs = {},tmpVal;
-                           for(var a in attrs){
-                               tmpVal = node.getAttr(a);
-                               //todo 只先对style单独处理
-                               if(a == 'style' && utils.isArray(attrs[a])){
-                                   var tmpCssStyle = [];
-                                   utils.each(attrs[a],function(v){
-                                       var tmp;
-                                       if(tmp = node.getStyle(v)){
-                                           tmpCssStyle.push(v + ':' + tmp);
-                                       }
-                                   });
-                                   tmpVal = tmpCssStyle.join(';')
-                               }
-                               if(tmpVal){
-                                   tmpAttrs[a] = tmpVal;
-                               }
-
-                           }
-                           node.attrs = tmpAttrs;
-                       }
-                       if(node.children){
-                           for(var i = 0,ci;ci=node.children[i];){
-                               filterNode(ci,rules);
-                               if(ci.parentNode){
-                                   i++;
-                               }
-                           }
-                       }
-                   }
-                }else{
-                    //如果不在名单里扣出子节点并删除该节点,cdata除外
-                    if(dtd.$cdata[node.tagName]){
-                        node.parentNode.removeChild(node)
-                    }else{
-                        var parentNode = node.parentNode,
-                            index = node.getIndex();
-                        node.parentNode.removeChild(node,true);
-                        for(var i = index,ci;ci=parentNode.children[i];){
-                            filterNode(ci,rules);
-                            if(ci.parentNode){
-                                i++;
-                            }
-                        }
-                    }
-                }
-                break;
-            case 'comment':
-                node.parentNode.removeChild(node)
-        }
-
-    }
-    return function(root,rules){
-        if(utils.isEmptyObject(rules)){
-            return root;
-        }
-        var val;
-        if(val = rules['-']){
-            utils.each(val.split(' '),function(k){
-                rules[k] = '-'
-            })
-        }
-        for(var i= 0,ci;ci=root.children[i];){
-            filterNode(ci,rules);
-            if(ci.parentNode){
-               i++;
-            }
-        }
-        return root;
-    }
-}();
-/*
- * Created with JetBrains PhpStorm.
- * User: campaign
- * Date: 10/8/13
- * Time: 6:15 PM
- * To change this template use File | Settings | File Templates.
- */
-UE.plugin = function(){
-    var _plugins = {};
-    return {
-        register : function(pluginName,fn,oldOptionName,afterDisabled){
-            if(oldOptionName && utils.isFunction(oldOptionName)){
-                afterDisabled = oldOptionName;
-                oldOptionName = null
-            }
-            _plugins[pluginName] = {
-                optionName : oldOptionName || pluginName,
-                execFn : fn,
-                //当插件被禁用时执行
-                afterDisabled : afterDisabled
-            }
-        },
-        load : function(editor){
-            utils.each(_plugins,function(plugin){
-                var _export = plugin.execFn.call(editor);
-                if(editor.options[plugin.optionName] !== false){
-                    if(_export){
-                        //后边需要再做扩展
-                        utils.each(_export,function(v,k){
-                            switch(k.toLowerCase()){
-                                case 'shortcutkey':
-                                    editor.addshortcutkey(v);
-                                    break;
-                                case 'bindevents':
-                                    utils.each(v,function(fn,eventName){
-                                        editor.addListener(eventName,fn);
-                                    });
-                                    break;
-                                case 'bindmultievents':
-                                    utils.each(utils.isArray(v) ? v:[v],function(event){
-                                        var types = utils.trim(event.type).split(/\s+/);
-                                        utils.each(types,function(eventName){
-                                            editor.addListener(eventName, event.handler);
-                                        });
-                                    });
-                                    break;
-                                case 'commands':
-                                    utils.each(v,function(execFn,execName){
-                                        editor.commands[execName] = execFn
-                                    });
-                                    break;
-                                case 'outputrule':
-                                    editor.addOutputRule(v);
-                                    break;
-                                case 'inputrule':
-                                    editor.addInputRule(v);
-                                    break;
-                                case 'defaultoptions':
-                                    editor.setOpt(v)
-                            }
-                        })
-                    }
-
-                }else if(plugin.afterDisabled){
-                    plugin.afterDisabled.call(editor)
-                }
-
-            });
-            //向下兼容
-            utils.each(UE.plugins,function(plugin){
-                plugin.call(editor);
-            });
-        },
-        run : function(plugnName,editor){
-            var plugin = _plugins[pluginName];
-            if(plugin){
-                plugin.exeFn.call(editor)
-            }
-        }
-    }
-}();
-///import core
-///plugin 编辑器默认的过滤转换机制
-
-UE.plugins['defaultfilter'] = function () {
-    var me = this;
-    me.setOpt({
-        'allowDivTransToP':true,
-        'disabledTableInTable':true
-    });
-    //默认的过滤处理
-    //进入编辑器的内容处理
-    me.addInputRule(function (root) {
-        var allowDivTransToP = this.options.allowDivTransToP;
-        var val;
-        function tdParent(node){
-            while(node && node.type == 'element'){
-                if(node.tagName == 'td'){
-                    return true;
-                }
-                node = node.parentNode;
-            }
-            return false;
-        }
-        //进行默认的处理
-        root.traversal(function (node) {
-            if (node.type == 'element') {
-                if (!dtd.$cdata[node.tagName] && me.options.autoClearEmptyNode && dtd.$inline[node.tagName] && !dtd.$empty[node.tagName] && (!node.attrs || utils.isEmptyObject(node.attrs))) {
-                    if (!node.firstChild()) node.parentNode.removeChild(node);
-                    else if (node.tagName == 'span' && (!node.attrs || utils.isEmptyObject(node.attrs))) {
-                        node.parentNode.removeChild(node, true)
-                    }
-                    return;
-                }
-                switch (node.tagName) {
-                    case 'style':
-                    case 'script':
-                        node.setAttr({
-                            cdata_tag: node.tagName,
-                            cdata_data: (node.innerHTML() || ''),
-                            '_ue_custom_node_':'true'
-                        });
-                        node.tagName = 'div';
-                        node.innerHTML('');
-                        break;
-                    case 'a':
-                        if (val = node.getAttr('href')) {
-                            node.setAttr('_href', val)
-                        }
-                        break;
-                    case 'img':
-                        //todo base64暂时去掉,后边做远程图片上传后,干掉这个
-                        if (val = node.getAttr('src')) {
-                            if (/^data:/.test(val)) {
-                                node.parentNode.removeChild(node);
-                                break;
-                            }
-                        }
-                        node.setAttr('_src', node.getAttr('src'));
-                        break;
-                    case 'span':
-                        if (browser.webkit && (val = node.getStyle('white-space'))) {
-                            if (/nowrap|normal/.test(val)) {
-                                node.setStyle('white-space', '');
-                                if (me.options.autoClearEmptyNode && utils.isEmptyObject(node.attrs)) {
-                                    node.parentNode.removeChild(node, true)
-                                }
-                            }
-                        }
-                        break;
-                    case 'p':
-                        if (val = node.getAttr('align')) {
-                            node.setAttr('align');
-                            node.setStyle('text-align', val)
-                        }
-                        //trace:3431
-//                        var cssStyle = node.getAttr('style');
-//                        if (cssStyle) {
-//                            cssStyle = cssStyle.replace(/(margin|padding)[^;]+/g, '');
-//                            node.setAttr('style', cssStyle)
-//
-//                        }
-                        //p标签不允许嵌套
-                        utils.each(node.children,function(n){
-                            if(n.type == 'element' && n.tagName == 'p'){
-                                var next = n.nextSibling();
-                                node.parentNode.insertAfter(n,node);
-                                var last = n;
-                                while(next){
-                                    var tmp = next.nextSibling();
-                                    node.parentNode.insertAfter(next,last);
-                                    last = next;
-                                    next = tmp;
-                                }
-                                return false;
-                            }
-                        });
-                        if (!node.firstChild()) {
-                            node.innerHTML(browser.ie ? '&nbsp;' : '<br/>')
-                        }
-                        break;
-                    case 'div':
-                        if(node.getAttr('cdata_tag')){
-                            break;
-                        }
-                        //针对代码这里不处理插入代码的div
-                        val = node.getAttr('class');
-                        if(val && /^line number\d+/.test(val)){
-                            break;
-                        }
-                        if(!allowDivTransToP){
-                            break;
-                        }
-                        var tmpNode, p = UE.uNode.createElement('p');
-                        while (tmpNode = node.firstChild()) {
-                            if (tmpNode.type == 'text' || !UE.dom.dtd.$block[tmpNode.tagName]) {
-                                p.appendChild(tmpNode);
-                            } else {
-                                if (p.firstChild()) {
-                                    node.parentNode.insertBefore(p, node);
-                                    p = UE.uNode.createElement('p');
-                                } else {
-                                    node.parentNode.insertBefore(tmpNode, node);
-                                }
-                            }
-                        }
-                        if (p.firstChild()) {
-                            node.parentNode.insertBefore(p, node);
-                        }
-                        node.parentNode.removeChild(node);
-                        break;
-                    case 'dl':
-                        node.tagName = 'ul';
-                        break;
-                    case 'dt':
-                    case 'dd':
-                        node.tagName = 'li';
-                        break;
-                    case 'li':
-                        var className = node.getAttr('class');
-                        if (!className || !/list\-/.test(className)) {
-                            node.setAttr()
-                        }
-                        var tmpNodes = node.getNodesByTagName('ol ul');
-                        UE.utils.each(tmpNodes, function (n) {
-                            node.parentNode.insertAfter(n, node);
-                        });
-                        break;
-                    case 'td':
-                    case 'th':
-                    case 'caption':
-                        if(!node.children || !node.children.length){
-
-                            node.appendChild(browser.ie ? UE.uNode.createText(' ') : UE.uNode.createElement('br'))
-                        }
-                        break;
-                    case 'table':
-                        if(me.options.disabledTableInTable && tdParent(node)){
-                            node.parentNode.insertBefore(UE.uNode.createText(node.innerText()),node);
-                            node.parentNode.removeChild(node)
-                        }
-                }
-
-            }
-//            if(node.type == 'comment'){
-//                node.parentNode.removeChild(node);
-//            }
-        })
-
-    });
-
-    //从编辑器出去的内容处理
-    me.addOutputRule(function (root) {
-
-        var val;
-        root.traversal(function (node) {
-            if (node.type == 'element') {
-
-                if (me.options.autoClearEmptyNode && dtd.$inline[node.tagName] && !dtd.$empty[node.tagName] && (!node.attrs || utils.isEmptyObject(node.attrs))) {
-
-                    if (!node.firstChild()) node.parentNode.removeChild(node);
-                    else if (node.tagName == 'span' && (!node.attrs || utils.isEmptyObject(node.attrs))) {
-                        node.parentNode.removeChild(node, true)
-                    }
-                    return;
-                }
-                switch (node.tagName) {
-                    case 'div':
-                        if (val = node.getAttr('cdata_tag')) {
-                            node.tagName = val;
-                            node.appendChild(UE.uNode.createText(node.getAttr('cdata_data')));
-                            node.setAttr({cdata_tag: '', cdata_data: '','_ue_custom_node_':''});
-                        }
-                        break;
-                    case 'a':
-                        if (val = node.getAttr('_href')) {
-                            node.setAttr({
-                                'href': utils.html(val),
-                                '_href': ''
-                            })
-                        }
-                        break;
-                    case 'img':
-                        if (val = node.getAttr('_src')) {
-                            node.setAttr({
-                                'src': node.getAttr('_src'),
-                                '_src': ''
-                            })
-                        }
-
-
-                }
-            }
-
-        })
-
-
-    });
-};
-
-/**
- * 插入html字符串插件
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 插入html代码
- * @command inserthtml
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param { String } html 插入的html字符串
- * @remaind 插入的标签内容是在当前的选区位置上插入,如果当前是闭合状态,那直接插入内容, 如果当前是选中状态,将先清除当前选中内容后,再做插入
- * @warning 注意:该命令会对当前选区的位置,对插入的内容进行过滤转换处理。 过滤的规则遵循html语意化的原则。
- * @example
- * ```javascript
- * //xxx[BB]xxx 当前选区为非闭合选区,选中BB这两个文本
- * //执行命令,插入<b>CC</b>
- * //插入后的效果 xxx<b>CC</b>xxx
- * //<p>xx|xxx</p> 当前选区为闭合状态
- * //插入<p>CC</p>
- * //结果 <p>xx</p><p>CC</p><p>xxx</p>
- * //<p>xxxx</p>|</p>xxx</p> 当前选区在两个p标签之间
- * //插入 xxxx
- * //结果 <p>xxxx</p><p>xxxx</p></p>xxx</p>
- * ```
- */
-
-UE.commands['inserthtml'] = {
-    execCommand: function (command,html,notNeedFilter){
-        var me = this,
-            range,
-            div;
-        if(!html){
-            return;
-        }
-        if(me.fireEvent('beforeinserthtml',html) === true){
-            return;
-        }
-        range = me.selection.getRange();
-        div = range.document.createElement( 'div' );
-        div.style.display = 'inline';
-
-        if (!notNeedFilter) {
-            var root = UE.htmlparser(html);
-            //如果给了过滤规则就先进行过滤
-            if(me.options.filterRules){
-                UE.filterNode(root,me.options.filterRules);
-            }
-            //执行默认的处理
-            me.filterInputRule(root);
-            html = root.toHtml()
-        }
-        div.innerHTML = utils.trim( html );
-
-        if ( !range.collapsed ) {
-            var tmpNode = range.startContainer;
-            if(domUtils.isFillChar(tmpNode)){
-                range.setStartBefore(tmpNode)
-            }
-            tmpNode = range.endContainer;
-            if(domUtils.isFillChar(tmpNode)){
-                range.setEndAfter(tmpNode)
-            }
-            range.txtToElmBoundary();
-            //结束边界可能放到了br的前边,要把br包含进来
-            // x[xxx]<br/>
-            if(range.endContainer && range.endContainer.nodeType == 1){
-                tmpNode = range.endContainer.childNodes[range.endOffset];
-                if(tmpNode && domUtils.isBr(tmpNode)){
-                    range.setEndAfter(tmpNode);
-                }
-            }
-            if(range.startOffset == 0){
-                tmpNode = range.startContainer;
-                if(domUtils.isBoundaryNode(tmpNode,'firstChild') ){
-                    tmpNode = range.endContainer;
-                    if(range.endOffset == (tmpNode.nodeType == 3 ? tmpNode.nodeValue.length : tmpNode.childNodes.length) && domUtils.isBoundaryNode(tmpNode,'lastChild')){
-                        me.body.innerHTML = '<p>'+(browser.ie ? '' : '<br/>')+'</p>';
-                        range.setStart(me.body.firstChild,0).collapse(true)
-
-                    }
-                }
-            }
-            !range.collapsed && range.deleteContents();
-            if(range.startContainer.nodeType == 1){
-                var child = range.startContainer.childNodes[range.startOffset],pre;
-                if(child && domUtils.isBlockElm(child) && (pre = child.previousSibling) && domUtils.isBlockElm(pre)){
-                    range.setEnd(pre,pre.childNodes.length).collapse();
-                    while(child.firstChild){
-                        pre.appendChild(child.firstChild);
-                    }
-                    domUtils.remove(child);
-                }
-            }
-
-        }
-
-
-        var child,parent,pre,tmp,hadBreak = 0, nextNode;
-        //如果当前位置选中了fillchar要干掉,要不会产生空行
-        if(range.inFillChar()){
-            child = range.startContainer;
-            if(domUtils.isFillChar(child)){
-                range.setStartBefore(child).collapse(true);
-                domUtils.remove(child);
-            }else if(domUtils.isFillChar(child,true)){
-                child.nodeValue = child.nodeValue.replace(fillCharReg,'');
-                range.startOffset--;
-                range.collapsed && range.collapse(true)
-            }
-        }
-        //列表单独处理
-        var li = domUtils.findParentByTagName(range.startContainer,'li',true);
-        if(li){
-            var next,last;
-            while(child = div.firstChild){
-                //针对hr单独处理一下先
-                while(child && (child.nodeType == 3 || !domUtils.isBlockElm(child) || child.tagName=='HR' )){
-                    next = child.nextSibling;
-                    range.insertNode( child).collapse();
-                    last = child;
-                    child = next;
-
-                }
-                if(child){
-                    if(/^(ol|ul)$/i.test(child.tagName)){
-                        while(child.firstChild){
-                            last = child.firstChild;
-                            domUtils.insertAfter(li,child.firstChild);
-                            li = li.nextSibling;
-                        }
-                        domUtils.remove(child)
-                    }else{
-                        var tmpLi;
-                        next = child.nextSibling;
-                        tmpLi = me.document.createElement('li');
-                        domUtils.insertAfter(li,tmpLi);
-                        tmpLi.appendChild(child);
-                        last = child;
-                        child = next;
-                        li = tmpLi;
-                    }
-                }
-            }
-            li = domUtils.findParentByTagName(range.startContainer,'li',true);
-            if(domUtils.isEmptyBlock(li)){
-                domUtils.remove(li)
-            }
-            if(last){
-
-                range.setStartAfter(last).collapse(true).select(true)
-            }
-        }else{
-            while ( child = div.firstChild ) {
-                if(hadBreak){
-                    var p = me.document.createElement('p');
-                    while(child && (child.nodeType == 3 || !dtd.$block[child.tagName])){
-                        nextNode = child.nextSibling;
-                        p.appendChild(child);
-                        child = nextNode;
-                    }
-                    if(p.firstChild){
-
-                        child = p
-                    }
-                }
-                range.insertNode( child );
-                nextNode = child.nextSibling;
-                if ( !hadBreak && child.nodeType == domUtils.NODE_ELEMENT && domUtils.isBlockElm( child ) ){
-
-                    parent = domUtils.findParent( child,function ( node ){ return domUtils.isBlockElm( node ); } );
-                    if ( parent && parent.tagName.toLowerCase() != 'body' && !(dtd[parent.tagName][child.nodeName] && child.parentNode === parent)){
-                        if(!dtd[parent.tagName][child.nodeName]){
-                            pre = parent;
-                        }else{
-                            tmp = child.parentNode;
-                            while (tmp !== parent){
-                                pre = tmp;
-                                tmp = tmp.parentNode;
-
-                            }
-                        }
-
-
-                        domUtils.breakParent( child, pre || tmp );
-                        //去掉break后前一个多余的节点  <p>|<[p> ==> <p></p><div></div><p>|</p>
-                        var pre = child.previousSibling;
-                        domUtils.trimWhiteTextNode(pre);
-                        if(!pre.childNodes.length){
-                            domUtils.remove(pre);
-                        }
-                        //trace:2012,在非ie的情况,切开后剩下的节点有可能不能点入光标添加br占位
-
-                        if(!browser.ie &&
-                            (next = child.nextSibling) &&
-                            domUtils.isBlockElm(next) &&
-                            next.lastChild &&
-                            !domUtils.isBr(next.lastChild)){
-                            next.appendChild(me.document.createElement('br'));
-                        }
-                        hadBreak = 1;
-                    }
-                }
-                var next = child.nextSibling;
-                if(!div.firstChild && next && domUtils.isBlockElm(next)){
-
-                    range.setStart(next,0).collapse(true);
-                    break;
-                }
-                range.setEndAfter( child ).collapse();
-
-            }
-
-            child = range.startContainer;
-
-            if(nextNode && domUtils.isBr(nextNode)){
-                domUtils.remove(nextNode)
-            }
-            //用chrome可能有空白展位符
-            if(domUtils.isBlockElm(child) && domUtils.isEmptyNode(child)){
-                if(nextNode = child.nextSibling){
-                    domUtils.remove(child);
-                    if(nextNode.nodeType == 1 && dtd.$block[nextNode.tagName]){
-
-                        range.setStart(nextNode,0).collapse(true).shrinkBoundary()
-                    }
-                }else{
-
-                    try{
-                        child.innerHTML = browser.ie ? domUtils.fillChar : '<br/>';
-                    }catch(e){
-                        range.setStartBefore(child);
-                        domUtils.remove(child)
-                    }
-
-                }
-
-            }
-            //加上true因为在删除表情等时会删两次,第一次是删的fillData
-            try{
-                range.select(true);
-            }catch(e){}
-
-        }
-
-
-
-        setTimeout(function(){
-            range = me.selection.getRange();
-            range.scrollToView(me.autoHeightEnabled,me.autoHeightEnabled ? domUtils.getXY(me.iframe).y:0);
-            me.fireEvent('afterinserthtml');
-        },200);
-    }
-};
-
-/**
- * 自动排版
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 对当前编辑器的内容执行自动排版, 排版的行为根据config配置文件里的“autotypeset”选项进行控制。
- * @command autotypeset
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'autotypeset' );
- * ```
- */
-
-UE.plugins['autotypeset'] = function(){
-
-    this.setOpt({'autotypeset':{
-        mergeEmptyline : true,          //合并空行
-            removeClass : true,            //去掉冗余的class
-            removeEmptyline : false,        //去掉空行
-            textAlign : "left",             //段落的排版方式,可以是 left,right,center,justify 去掉这个属性表示不执行排版
-            imageBlockLine : 'center',      //图片的浮动方式,独占一行剧中,左右浮动,默认: center,left,right,none 去掉这个属性表示不执行排版
-            pasteFilter : false,             //根据规则过滤没事粘贴进来的内容
-            clearFontSize : false,           //去掉所有的内嵌字号,使用编辑器默认的字号
-            clearFontFamily : false,         //去掉所有的内嵌字体,使用编辑器默认的字体
-            removeEmptyNode : false,         // 去掉空节点
-            //可以去掉的标签
-            removeTagNames : utils.extend({div:1},dtd.$removeEmpty),
-            indent : false,                  // 行首缩进
-            indentValue : '2em'             //行首缩进的大小
-    }});
-    var me = this,
-        opt = me.options.autotypeset,
-        remainClass = {
-            'selectTdClass':1,
-            'pagebreak':1,
-            'anchorclass':1
-        },
-        remainTag = {
-            'li':1
-        },
-        tags = {
-            div:1,
-            p:1,
-            //trace:2183 这些也认为是行
-            blockquote:1,center:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,
-            span:1
-        },
-        highlightCont;
-    //升级了版本,但配置项目里没有autotypeset
-    if(!opt){
-        return;
-    }
-    function isLine(node,notEmpty){
-        if(!node || node.nodeType == 3)
-            return 0;
-        if(domUtils.isBr(node))
-            return 1;
-        if(node && node.parentNode && tags[node.tagName.toLowerCase()]){
-            if(highlightCont && highlightCont.contains(node)
-                ||
-                node.getAttribute('pagebreak')
-            ){
-                return 0;
-            }
-
-            return notEmpty ? !domUtils.isEmptyBlock(node) : domUtils.isEmptyBlock(node,new RegExp('[\\s'+domUtils.fillChar
-                +']','g'));
-        }
-    }
-
-    function removeNotAttributeSpan(node){
-        if(!node.style.cssText){
-            domUtils.removeAttributes(node,['style']);
-            if(node.tagName.toLowerCase() == 'span' && domUtils.hasNoAttributes(node)){
-                domUtils.remove(node,true);
-            }
-        }
-    }
-    function autotype(type,html){
-        var me = this,cont;
-        if(html){
-            if(!opt.pasteFilter){
-                return;
-            }
-            cont = me.document.createElement('div');
-            cont.innerHTML = html.html;
-        }else{
-            cont = me.document.body;
-        }
-        var nodes = domUtils.getElementsByTagName(cont,'*');
-
-          // 行首缩进,段落方向,段间距,段内间距
-        for(var i=0,ci;ci=nodes[i++];){
-
-            if(me.fireEvent('excludeNodeinautotype',ci) === true){
-                continue;
-            }
-             //font-size
-            if(opt.clearFontSize && ci.style.fontSize){
-                domUtils.removeStyle(ci,'font-size');
-
-                removeNotAttributeSpan(ci);
-
-            }
-            //font-family
-            if(opt.clearFontFamily && ci.style.fontFamily){
-                domUtils.removeStyle(ci,'font-family');
-                removeNotAttributeSpan(ci);
-            }
-
-            if(isLine(ci)){
-                //合并空行
-                if(opt.mergeEmptyline ){
-                    var next = ci.nextSibling,tmpNode,isBr = domUtils.isBr(ci);
-                    while(isLine(next)){
-                        tmpNode = next;
-                        next = tmpNode.nextSibling;
-                        if(isBr && (!next || next && !domUtils.isBr(next))){
-                            break;
-                        }
-                        domUtils.remove(tmpNode);
-                    }
-
-                }
-                 //去掉空行,保留占位的空行
-                if(opt.removeEmptyline && domUtils.inDoc(ci,cont) && !remainTag[ci.parentNode.tagName.toLowerCase()] ){
-                    if(domUtils.isBr(ci)){
-                        next = ci.nextSibling;
-                        if(next && !domUtils.isBr(next)){
-                            continue;
-                        }
-                    }
-                    domUtils.remove(ci);
-                    continue;
-
-                }
-
-            }
-            if(isLine(ci,true) && ci.tagName != 'SPAN'){
-                if(opt.indent){
-                    ci.style.textIndent = opt.indentValue;
-                }
-                if(opt.textAlign){
-                    ci.style.textAlign = opt.textAlign;
-                }
-//                if(opt.lineHeight)
-//                    ci.style.lineHeight = opt.lineHeight + 'cm';
-
-
-            }
-
-            //去掉class,保留的class不去掉
-            if(opt.removeClass && ci.className && !remainClass[ci.className.toLowerCase()]){
-
-                if(highlightCont && highlightCont.contains(ci)){
-                     continue;
-                }
-                domUtils.removeAttributes(ci,['class']);
-            }
-
-            //表情不处理
-            if(opt.imageBlockLine && ci.tagName.toLowerCase() == 'img' && !ci.getAttribute('emotion')){
-                if(html){
-                    var img = ci;
-                    switch (opt.imageBlockLine){
-                        case 'left':
-                        case 'right':
-                        case 'none':
-                            var pN = img.parentNode,tmpNode,pre,next;
-                            while(dtd.$inline[pN.tagName] || pN.tagName == 'A'){
-                                pN = pN.parentNode;
-                            }
-                            tmpNode = pN;
-                            if(tmpNode.tagName == 'P' && domUtils.getStyle(tmpNode,'text-align') == 'center'){
-                                if(!domUtils.isBody(tmpNode) && domUtils.getChildCount(tmpNode,function(node){return !domUtils.isBr(node) && !domUtils.isWhitespace(node)}) == 1){
-                                    pre = tmpNode.previousSibling;
-                                    next = tmpNode.nextSibling;
-                                    if(pre && next && pre.nodeType == 1 &&  next.nodeType == 1 && pre.tagName == next.tagName && domUtils.isBlockElm(pre)){
-                                        pre.appendChild(tmpNode.firstChild);
-                                        while(next.firstChild){
-                                            pre.appendChild(next.firstChild);
-                                        }
-                                        domUtils.remove(tmpNode);
-                                        domUtils.remove(next);
-                                    }else{
-                                        domUtils.setStyle(tmpNode,'text-align','');
-                                    }
-
-
-                                }
-
-
-                            }
-                            domUtils.setStyle(img,'float',opt.imageBlockLine);
-                            break;
-                        case 'center':
-                            if(me.queryCommandValue('imagefloat') != 'center'){
-                                pN = img.parentNode;
-                                domUtils.setStyle(img,'float','none');
-                                tmpNode = img;
-                                while(pN && domUtils.getChildCount(pN,function(node){return !domUtils.isBr(node) && !domUtils.isWhitespace(node)}) == 1
-                                    && (dtd.$inline[pN.tagName] || pN.tagName == 'A')){
-                                    tmpNode = pN;
-                                    pN = pN.parentNode;
-                                }
-                                var pNode = me.document.createElement('p');
-                                domUtils.setAttributes(pNode,{
-
-                                    style:'text-align:center'
-                                });
-                                tmpNode.parentNode.insertBefore(pNode,tmpNode);
-                                pNode.appendChild(tmpNode);
-                                domUtils.setStyle(tmpNode,'float','');
-
-                            }
-
-
-                    }
-                }else{
-                    var range = me.selection.getRange();
-                    range.selectNode(ci).select();
-                    me.execCommand('imagefloat',opt.imageBlockLine);
-                }
-
-
-
-            }
-
-            //去掉冗余的标签
-            if(opt.removeEmptyNode){
-                if(opt.removeTagNames[ci.tagName.toLowerCase()] && domUtils.hasNoAttributes(ci) && domUtils.isEmptyBlock(ci)){
-                    domUtils.remove(ci);
-                }
-            }
-        }
-        if(html){
-            html.html = cont.innerHTML;
-        }
-    }
-    if(opt.pasteFilter){
-        me.addListener('beforepaste',autotype);
-    }
-
-    me.commands['autotypeset'] = {
-        execCommand:function () {
-            me.removeListener('beforepaste',autotype);
-            if(opt.pasteFilter){
-                me.addListener('beforepaste',autotype);
-            }
-            autotype.call(me)
-        }
-
-    };
-
-};
-
-
-/**
- * 快捷键提交
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 提交表单
- * @command autosubmit
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'autosubmit' );
- * ```
- */
-
-UE.plugin.register('autosubmit',function(){
-    return {
-        shortcutkey:{
-            "autosubmit":"ctrl+13" //手动提交
-        },
-        commands:{
-            'autosubmit':{
-                execCommand:function () {
-                    var me=this,
-                        form = domUtils.findParentByTagName(me.iframe,"form", false);
-                    if (form){
-                        if(me.fireEvent("beforesubmit")===false){
-                            return;
-                        }
-                        me.sync();
-                        form.submit();
-                    }
-                }
-            }
-        }
-    }
-});
-/**
- * 背景插件,为UEditor提供设置背景功能
- * @file
- * @since 1.2.6.1
- */
-UE.plugin.register('background', function () {
-    var me = this,
-        cssRuleId = 'editor_background',
-        isSetColored,
-        reg = new RegExp('body[\\s]*\\{(.+)\\}', 'i');
-
-    function stringToObj(str) {
-        var obj = {}, styles = str.split(';');
-        utils.each(styles, function (v) {
-            var index = v.indexOf(':'),
-                key = utils.trim(v.substr(0, index)).toLowerCase();
-            key && (obj[key] = utils.trim(v.substr(index + 1) || ''));
-        });
-        return obj;
-    }
-
-    function setBackground(obj) {
-        if (obj) {
-            var styles = [];
-            for (var name in obj) {
-                if (obj.hasOwnProperty(name)) {
-                    styles.push(name + ":" + obj[name] + '; ');
-                }
-            }
-            utils.cssRule(cssRuleId, styles.length ? ('body{' + styles.join("") + '}') : '', me.document);
-        } else {
-            utils.cssRule(cssRuleId, '', me.document)
-        }
-    }
-    //重写editor.hasContent方法
-
-    var orgFn = me.hasContents;
-    me.hasContents = function(){
-        if(me.queryCommandValue('background')){
-            return true
-        }
-        return orgFn.apply(me,arguments);
-    };
-    return {
-        bindEvents: {
-            'getAllHtml': function (type, headHtml) {
-                var body = this.body,
-                    su = domUtils.getComputedStyle(body, "background-image"),
-                    url = "";
-                if (su.indexOf(me.options.imagePath) > 0) {
-                    url = su.substring(su.indexOf(me.options.imagePath), su.length - 1).replace(/"|\(|\)/ig, "");
-                } else {
-                    url = su != "none" ? su.replace(/url\("?|"?\)/ig, "") : "";
-                }
-                var html = '<style type="text/css">body{';
-                var bgObj = {
-                    "background-color": domUtils.getComputedStyle(body, "background-color") || "#ffffff",
-                    'background-image': url ? 'url(' + url + ')' : '',
-                    'background-repeat': domUtils.getComputedStyle(body, "background-repeat") || "",
-                    'background-position': browser.ie ? (domUtils.getComputedStyle(body, "background-position-x") + " " + domUtils.getComputedStyle(body, "background-position-y")) : domUtils.getComputedStyle(body, "background-position"),
-                    'height': domUtils.getComputedStyle(body, "height")
-                };
-                for (var name in bgObj) {
-                    if (bgObj.hasOwnProperty(name)) {
-                        html += name + ":" + bgObj[name] + "; ";
-                    }
-                }
-                html += '}</style> ';
-                headHtml.push(html);
-            },
-            'aftersetcontent': function () {
-                if(isSetColored == false) setBackground();
-            }
-        },
-        inputRule: function (root) {
-            isSetColored = false;
-            utils.each(root.getNodesByTagName('p'), function (p) {
-                var styles = p.getAttr('data-background');
-                if (styles) {
-                    isSetColored = true;
-                    setBackground(stringToObj(styles));
-                    p.parentNode.removeChild(p);
-                }
-            })
-        },
-        outputRule: function (root) {
-            var me = this,
-                styles = (utils.cssRule(cssRuleId, me.document) || '').replace(/[\n\r]+/g, '').match(reg);
-            if (styles) {
-                root.appendChild(UE.uNode.createElement('<p style="display:none;" data-background="' + utils.trim(styles[1].replace(/"/g, '').replace(/[\s]+/g, ' ')) + '"><br/></p>'));
-            }
-        },
-        commands: {
-            'background': {
-                execCommand: function (cmd, obj) {
-                    setBackground(obj);
-                },
-                queryCommandValue: function () {
-                    var me = this,
-                        styles = (utils.cssRule(cssRuleId, me.document) || '').replace(/[\n\r]+/g, '').match(reg);
-                    return styles ? stringToObj(styles[1]) : null;
-                },
-                notNeedUndo: true
-            }
-        }
-    }
-});
-/**
- * 图片插入、排版插件
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 图片对齐方式
- * @command imagefloat
- * @method execCommand
- * @remind 值center为独占一行居中
- * @param { String } cmd 命令字符串
- * @param { String } align 对齐方式,可传left、right、none、center
- * @remaind center表示图片独占一行
- * @example
- * ```javascript
- * editor.execCommand( 'imagefloat', 'center' );
- * ```
- */
-
-/**
- * 如果选区所在位置是图片区域
- * @command imagefloat
- * @method queryCommandValue
- * @param { String } cmd 命令字符串
- * @return { String } 返回图片对齐方式
- * @example
- * ```javascript
- * editor.queryCommandValue( 'imagefloat' );
- * ```
- */
-
-UE.commands['imagefloat'] = {
-    execCommand:function (cmd, align) {
-        var me = this,
-            range = me.selection.getRange();
-        if (!range.collapsed) {
-            var img = range.getClosedNode();
-            if (img && img.tagName == 'IMG') {
-                switch (align) {
-                    case 'left':
-                    case 'right':
-                    case 'none':
-                        var pN = img.parentNode, tmpNode, pre, next;
-                        while (dtd.$inline[pN.tagName] || pN.tagName == 'A') {
-                            pN = pN.parentNode;
-                        }
-                        tmpNode = pN;
-                        if (tmpNode.tagName == 'P' && domUtils.getStyle(tmpNode, 'text-align') == 'center') {
-                            if (!domUtils.isBody(tmpNode) && domUtils.getChildCount(tmpNode, function (node) {
-                                return !domUtils.isBr(node) && !domUtils.isWhitespace(node);
-                            }) == 1) {
-                                pre = tmpNode.previousSibling;
-                                next = tmpNode.nextSibling;
-                                if (pre && next && pre.nodeType == 1 && next.nodeType == 1 && pre.tagName == next.tagName && domUtils.isBlockElm(pre)) {
-                                    pre.appendChild(tmpNode.firstChild);
-                                    while (next.firstChild) {
-                                        pre.appendChild(next.firstChild);
-                                    }
-                                    domUtils.remove(tmpNode);
-                                    domUtils.remove(next);
-                                } else {
-                                    domUtils.setStyle(tmpNode, 'text-align', '');
-                                }
-
-
-                            }
-
-                            range.selectNode(img).select();
-                        }
-                        domUtils.setStyle(img, 'float', align == 'none' ? '' : align);
-                        if(align == 'none'){
-                            domUtils.removeAttributes(img,'align');
-                        }
-
-                        break;
-                    case 'center':
-                        if (me.queryCommandValue('imagefloat') != 'center') {
-                            pN = img.parentNode;
-                            domUtils.setStyle(img, 'float', '');
-                            domUtils.removeAttributes(img,'align');
-                            tmpNode = img;
-                            while (pN && domUtils.getChildCount(pN, function (node) {
-                                return !domUtils.isBr(node) && !domUtils.isWhitespace(node);
-                            }) == 1
-                                && (dtd.$inline[pN.tagName] || pN.tagName == 'A')) {
-                                tmpNode = pN;
-                                pN = pN.parentNode;
-                            }
-                            range.setStartBefore(tmpNode).setCursor(false);
-                            pN = me.document.createElement('div');
-                            pN.appendChild(tmpNode);
-                            domUtils.setStyle(tmpNode, 'float', '');
-
-                            me.execCommand('insertHtml', '<p id="_img_parent_tmp" style="text-align:center">' + pN.innerHTML + '</p>');
-
-                            tmpNode = me.document.getElementById('_img_parent_tmp');
-                            tmpNode.removeAttribute('id');
-                            tmpNode = tmpNode.firstChild;
-                            range.selectNode(tmpNode).select();
-                            //去掉后边多余的元素
-                            next = tmpNode.parentNode.nextSibling;
-                            if (next && domUtils.isEmptyNode(next)) {
-                                domUtils.remove(next);
-                            }
-
-                        }
-
-                        break;
-                }
-
-            }
-        }
-    },
-    queryCommandValue:function () {
-        var range = this.selection.getRange(),
-            startNode, floatStyle;
-        if (range.collapsed) {
-            return 'none';
-        }
-        startNode = range.getClosedNode();
-        if (startNode && startNode.nodeType == 1 && startNode.tagName == 'IMG') {
-            floatStyle = domUtils.getComputedStyle(startNode, 'float') || startNode.getAttribute('align');
-
-            if (floatStyle == 'none') {
-                floatStyle = domUtils.getComputedStyle(startNode.parentNode, 'text-align') == 'center' ? 'center' : floatStyle;
-            }
-            return {
-                left:1,
-                right:1,
-                center:1
-            }[floatStyle] ? floatStyle : 'none';
-        }
-        return 'none';
-
-
-    },
-    queryCommandState:function () {
-        var range = this.selection.getRange(),
-            startNode;
-
-        if (range.collapsed)  return -1;
-
-        startNode = range.getClosedNode();
-        if (startNode && startNode.nodeType == 1 && startNode.tagName == 'IMG') {
-            return 0;
-        }
-        return -1;
-    }
-};
-
-
-/**
- * 插入图片
- * @command insertimage
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param { Object } opt 属性键值对,这些属性都将被复制到当前插入图片
- * @remind 该命令第二个参数可接受一个图片配置项对象的数组,可以插入多张图片,
- * 此时数组的每一个元素都是一个Object类型的图片属性集合。
- * @example
- * ```javascript
- * editor.execCommand( 'insertimage', {
- *     src:'a/b/c.jpg',
- *     width:'100',
- *     height:'100'
- * } );
- * ```
- * @example
- * ```javascript
- * editor.execCommand( 'insertimage', [{
- *     src:'a/b/c.jpg',
- *     width:'100',
- *     height:'100'
- * },{
- *     src:'a/b/d.jpg',
- *     width:'100',
- *     height:'100'
- * }] );
- * ```
- */
-
-UE.commands['insertimage'] = {
-    execCommand:function (cmd, opt) {
-
-        opt = utils.isArray(opt) ? opt : [opt];
-        if (!opt.length) {
-            return;
-        }
-        var me = this,
-            range = me.selection.getRange(),
-            img = range.getClosedNode();
-        if (img && /img/i.test(img.tagName) && (img.className != "edui-faked-video" || img.className.indexOf("edui-upload-video")!=-1) && !img.getAttribute("word_img")) {
-            var first = opt.shift();
-            var floatStyle = first['floatStyle'];
-            delete first['floatStyle'];
-////                img.style.border = (first.border||0) +"px solid #000";
-////                img.style.margin = (first.margin||0) +"px";
-//                img.style.cssText += ';margin:' + (first.margin||0) +"px;" + 'border:' + (first.border||0) +"px solid #000";
-            domUtils.setAttributes(img, first);
-            me.execCommand('imagefloat', floatStyle);
-            if (opt.length > 0) {
-                range.setStartAfter(img).setCursor(false, true);
-                me.execCommand('insertimage', opt);
-            }
-
-        } else {
-            var html = [], str = '', ci;
-            ci = opt[0];
-            if (opt.length == 1) {
-                str = '<img src="' + ci.src + '" ' + (ci._src ? ' _src="' + ci._src + '" ' : '') +
-                    (ci.width ? 'width="' + ci.width + '" ' : '') +
-                    (ci.height ? ' height="' + ci.height + '" ' : '') +
-                    (ci['floatStyle'] == 'left' || ci['floatStyle'] == 'right' ? ' style="float:' + ci['floatStyle'] + ';"' : '') +
-                    (ci.title && ci.title != "" ? ' title="' + ci.title + '"' : '') +
-                    (ci.border && ci.border != "0" ? ' border="' + ci.border + '"' : '') +
-                    (ci.alt && ci.alt != "" ? ' alt="' + ci.alt + '"' : '') +
-                    (ci.hspace && ci.hspace != "0" ? ' hspace = "' + ci.hspace + '"' : '') +
-                    (ci.vspace && ci.vspace != "0" ? ' vspace = "' + ci.vspace + '"' : '') + '/>';
-                if (ci['floatStyle'] == 'center') {
-                    str = '<p style="text-align: center">' + str + '</p>';
-                }
-                html.push(str);
-
-            } else {
-                for (var i = 0; ci = opt[i++];) {
-                    str = '<p ' + (ci['floatStyle'] == 'center' ? 'style="text-align: center" ' : '') + '><img src="' + ci.src + '" ' +
-                        (ci.width ? 'width="' + ci.width + '" ' : '') + (ci._src ? ' _src="' + ci._src + '" ' : '') +
-                        (ci.height ? ' height="' + ci.height + '" ' : '') +
-                        ' style="' + (ci['floatStyle'] && ci['floatStyle'] != 'center' ? 'float:' + ci['floatStyle'] + ';' : '') +
-                        (ci.border || '') + '" ' +
-                        (ci.title ? ' title="' + ci.title + '"' : '') + ' /></p>';
-                    html.push(str);
-                }
-            }
-
-            me.execCommand('insertHtml', html.join(''));
-        }
-    }
-};
-/**
- * 段落格式
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 段落对齐方式
- * @command justify
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param { String } align 对齐方式:left => 居左,right => 居右,center => 居中,justify => 两端对齐
- * @example
- * ```javascript
- * editor.execCommand( 'justify', 'center' );
- * ```
- */
-/**
- * 如果选区所在位置是段落区域,返回当前段落对齐方式
- * @command justify
- * @method queryCommandValue
- * @param { String } cmd 命令字符串
- * @return { String } 返回段落对齐方式
- * @example
- * ```javascript
- * editor.queryCommandValue( 'justify' );
- * ```
- */
-
-UE.plugins['justify']=function(){
-    var me=this,
-        block = domUtils.isBlockElm,
-        defaultValue = {
-            left:1,
-            right:1,
-            center:1,
-            justify:1
-        },
-        doJustify = function (range, style) {
-            var bookmark = range.createBookmark(),
-                filterFn = function (node) {
-                    return node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' && !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace(node);
-                };
-
-            range.enlarge(true);
-            var bookmark2 = range.createBookmark(),
-                current = domUtils.getNextDomNode(bookmark2.start, false, filterFn),
-                tmpRange = range.cloneRange(),
-                tmpNode;
-            while (current && !(domUtils.getPosition(current, bookmark2.end) & domUtils.POSITION_FOLLOWING)) {
-                if (current.nodeType == 3 || !block(current)) {
-                    tmpRange.setStartBefore(current);
-                    while (current && current !== bookmark2.end && !block(current)) {
-                        tmpNode = current;
-                        current = domUtils.getNextDomNode(current, false, null, function (node) {
-                            return !block(node);
-                        });
-                    }
-                    tmpRange.setEndAfter(tmpNode);
-                    var common = tmpRange.getCommonAncestor();
-                    if (!domUtils.isBody(common) && block(common)) {
-                        domUtils.setStyles(common, utils.isString(style) ? {'text-align':style} : style);
-                        current = common;
-                    } else {
-                        var p = range.document.createElement('p');
-                        domUtils.setStyles(p, utils.isString(style) ? {'text-align':style} : style);
-                        var frag = tmpRange.extractContents();
-                        p.appendChild(frag);
-                        tmpRange.insertNode(p);
-                        current = p;
-                    }
-                    current = domUtils.getNextDomNode(current, false, filterFn);
-                } else {
-                    current = domUtils.getNextDomNode(current, true, filterFn);
-                }
-            }
-            return range.moveToBookmark(bookmark2).moveToBookmark(bookmark);
-        };
-
-    UE.commands['justify'] = {
-        execCommand:function (cmdName, align) {
-            var range = this.selection.getRange(),
-                txt;
-
-            //闭合时单独处理
-            if (range.collapsed) {
-                txt = this.document.createTextNode('p');
-                range.insertNode(txt);
-            }
-            doJustify(range, align);
-            if (txt) {
-                range.setStartBefore(txt).collapse(true);
-                domUtils.remove(txt);
-            }
-
-            range.select();
-
-
-            return true;
-        },
-        queryCommandValue:function () {
-            var startNode = this.selection.getStart(),
-                value = domUtils.getComputedStyle(startNode, 'text-align');
-            return defaultValue[value] ? value : 'left';
-        },
-        queryCommandState:function () {
-            var start = this.selection.getStart(),
-                cell = start && domUtils.findParentByTagName(start, ["td", "th","caption"], true);
-
-            return cell? -1:0;
-        }
-
-    };
-};
-
-/**
- * 字体颜色,背景色,字号,字体,下划线,删除线
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 字体颜色
- * @command forecolor
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param { String } value 色值(必须十六进制)
- * @example
- * ```javascript
- * editor.execCommand( 'forecolor', '#000' );
- * ```
- */
-/**
- * 返回选区字体颜色
- * @command forecolor
- * @method queryCommandValue
- * @param { String } cmd 命令字符串
- * @return { String } 返回字体颜色
- * @example
- * ```javascript
- * editor.queryCommandValue( 'forecolor' );
- * ```
- */
-
-/**
- * 字体背景颜色
- * @command backcolor
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param { String } value 色值(必须十六进制)
- * @example
- * ```javascript
- * editor.execCommand( 'backcolor', '#000' );
- * ```
- */
-/**
- * 返回选区字体颜色
- * @command backcolor
- * @method queryCommandValue
- * @param { String } cmd 命令字符串
- * @return { String } 返回字体背景颜色
- * @example
- * ```javascript
- * editor.queryCommandValue( 'backcolor' );
- * ```
- */
-
-/**
- * 字体大小
- * @command fontsize
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param { String } value 字体大小
- * @example
- * ```javascript
- * editor.execCommand( 'fontsize', '14px' );
- * ```
- */
-/**
- * 返回选区字体大小
- * @command fontsize
- * @method queryCommandValue
- * @param { String } cmd 命令字符串
- * @return { String } 返回字体大小
- * @example
- * ```javascript
- * editor.queryCommandValue( 'fontsize' );
- * ```
- */
-
-/**
- * 字体样式
- * @command fontfamily
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param { String } value 字体样式
- * @example
- * ```javascript
- * editor.execCommand( 'fontfamily', '微软雅黑' );
- * ```
- */
-/**
- * 返回选区字体样式
- * @command fontfamily
- * @method queryCommandValue
- * @param { String } cmd 命令字符串
- * @return { String } 返回字体样式
- * @example
- * ```javascript
- * editor.queryCommandValue( 'fontfamily' );
- * ```
- */
-
-/**
- * 字体下划线,与删除线互斥
- * @command underline
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'underline' );
- * ```
- */
-
-/**
- * 字体删除线,与下划线互斥
- * @command strikethrough
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'strikethrough' );
- * ```
- */
-
-/**
- * 字体边框
- * @command fontborder
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'fontborder' );
- * ```
- */
-
-UE.plugins['font'] = function () {
-    var me = this,
-        fonts = {
-            'forecolor': 'color',
-            'backcolor': 'background-color',
-            'fontsize': 'font-size',
-            'fontfamily': 'font-family',
-            'underline': 'text-decoration',
-            'strikethrough': 'text-decoration',
-            'fontborder': 'border'
-        },
-        needCmd = {'underline': 1, 'strikethrough': 1, 'fontborder': 1},
-        needSetChild = {
-            'forecolor': 'color',
-            'backcolor': 'background-color',
-            'fontsize': 'font-size',
-            'fontfamily': 'font-family'
-
-        };
-    me.setOpt({
-        'fontfamily': [
-            { name: 'songti', val: '宋体,SimSun'},
-            { name: 'yahei', val: '微软雅黑,Microsoft YaHei'},
-            { name: 'kaiti', val: '楷体,楷体_GB2312, SimKai'},
-            { name: 'heiti', val: '黑体, SimHei'},
-            { name: 'lishu', val: '隶书, SimLi'},
-            { name: 'andaleMono', val: 'andale mono'},
-            { name: 'arial', val: 'arial, helvetica,sans-serif'},
-            { name: 'arialBlack', val: 'arial black,avant garde'},
-            { name: 'comicSansMs', val: 'comic sans ms'},
-            { name: 'impact', val: 'impact,chicago'},
-            { name: 'timesNewRoman', val: 'times new roman'}
-        ],
-        'fontsize': [10, 11, 12, 14, 16, 18, 20, 24, 36]
-    });
-
-    function mergeWithParent(node){
-        var parent;
-        while(parent = node.parentNode){
-            if(parent.tagName == 'SPAN' && domUtils.getChildCount(parent,function(child){
-                return !domUtils.isBookmarkNode(child) && !domUtils.isBr(child)
-            }) == 1) {
-                parent.style.cssText += node.style.cssText;
-                domUtils.remove(node,true);
-                node = parent;
-
-            }else{
-                break;
-            }
-        }
-
-    }
-    function mergeChild(rng,cmdName,value){
-        if(needSetChild[cmdName]){
-            rng.adjustmentBoundary();
-            if(!rng.collapsed && rng.startContainer.nodeType == 1){
-                var start = rng.startContainer.childNodes[rng.startOffset];
-                if(start && domUtils.isTagNode(start,'span')){
-                    var bk = rng.createBookmark();
-                    utils.each(domUtils.getElementsByTagName(start, 'span'), function (span) {
-                        if (!span.parentNode || domUtils.isBookmarkNode(span))return;
-                        if(cmdName == 'backcolor' && domUtils.getComputedStyle(span,'background-color').toLowerCase() === value){
-                            return;
-                        }
-                        domUtils.removeStyle(span,needSetChild[cmdName]);
-                        if(span.style.cssText.replace(/^\s+$/,'').length == 0){
-                            domUtils.remove(span,true)
-                        }
-                    });
-                    rng.moveToBookmark(bk)
-                }
-            }
-        }
-
-    }
-    function mergesibling(rng,cmdName,value) {
-        var collapsed = rng.collapsed,
-            bk = rng.createBookmark(), common;
-        if (collapsed) {
-            common = bk.start.parentNode;
-            while (dtd.$inline[common.tagName]) {
-                common = common.parentNode;
-            }
-        } else {
-            common = domUtils.getCommonAncestor(bk.start, bk.end);
-        }
-        utils.each(domUtils.getElementsByTagName(common, 'span'), function (span) {
-            if (!span.parentNode || domUtils.isBookmarkNode(span))return;
-            if (/\s*border\s*:\s*none;?\s*/i.test(span.style.cssText)) {
-                if(/^\s*border\s*:\s*none;?\s*$/.test(span.style.cssText)){
-                    domUtils.remove(span, true);
-                }else{
-                    domUtils.removeStyle(span,'border');
-                }
-                return
-            }
-            if (/border/i.test(span.style.cssText) && span.parentNode.tagName == 'SPAN' && /border/i.test(span.parentNode.style.cssText)) {
-                span.style.cssText = span.style.cssText.replace(/border[^:]*:[^;]+;?/gi, '');
-            }
-            if(!(cmdName=='fontborder' && value=='none')){
-                var next = span.nextSibling;
-                while (next && next.nodeType == 1 && next.tagName == 'SPAN' ) {
-                    if(domUtils.isBookmarkNode(next) && cmdName == 'fontborder') {
-                        span.appendChild(next);
-                        next = span.nextSibling;
-                        continue;
-                    }
-                    if (next.style.cssText == span.style.cssText) {
-                        domUtils.moveChild(next, span);
-                        domUtils.remove(next);
-                    }
-                    if (span.nextSibling === next)
-                        break;
-                    next = span.nextSibling;
-                }
-            }
-
-
-            mergeWithParent(span);
-            if(browser.ie && browser.version > 8 ){
-                //拷贝父亲们的特别的属性,这里只做背景颜色的处理
-                var parent = domUtils.findParent(span,function(n){return n.tagName == 'SPAN' && /background-color/.test(n.style.cssText)});
-                if(parent && !/background-color/.test(span.style.cssText)){
-                    span.style.backgroundColor = parent.style.backgroundColor;
-                }
-            }
-
-        });
-        rng.moveToBookmark(bk);
-        mergeChild(rng,cmdName,value)
-    }
-
-    me.addInputRule(function (root) {
-        utils.each(root.getNodesByTagName('u s del font strike'), function (node) {
-            if (node.tagName == 'font') {
-                var cssStyle = [];
-                for (var p in node.attrs) {
-                    switch (p) {
-                        case 'size':
-                            cssStyle.push('font-size:' +
-                                ({
-                                '1':'10',
-                                '2':'12',
-                                '3':'16',
-                                '4':'18',
-                                '5':'24',
-                                '6':'32',
-                                '7':'48'
-                            }[node.attrs[p]] || node.attrs[p]) + 'px');
-                            break;
-                        case 'color':
-                            cssStyle.push('color:' + node.attrs[p]);
-                            break;
-                        case 'face':
-                            cssStyle.push('font-family:' + node.attrs[p]);
-                            break;
-                        case 'style':
-                            cssStyle.push(node.attrs[p]);
-                    }
-                }
-                node.attrs = {
-                    'style': cssStyle.join(';')
-                };
-            } else {
-                var val = node.tagName == 'u' ? 'underline' : 'line-through';
-                node.attrs = {
-                    'style': (node.getAttr('style') || '') + 'text-decoration:' + val + ';'
-                }
-            }
-            node.tagName = 'span';
-        });
-//        utils.each(root.getNodesByTagName('span'), function (node) {
-//            var val;
-//            if(val = node.getAttr('class')){
-//                if(/fontstrikethrough/.test(val)){
-//                    node.setStyle('text-decoration','line-through');
-//                    if(node.attrs['class']){
-//                        node.attrs['class'] = node.attrs['class'].replace(/fontstrikethrough/,'');
-//                    }else{
-//                        node.setAttr('class')
-//                    }
-//                }
-//                if(/fontborder/.test(val)){
-//                    node.setStyle('border','1px solid #000');
-//                    if(node.attrs['class']){
-//                        node.attrs['class'] = node.attrs['class'].replace(/fontborder/,'');
-//                    }else{
-//                        node.setAttr('class')
-//                    }
-//                }
-//            }
-//        });
-    });
-//    me.addOutputRule(function(root){
-//        utils.each(root.getNodesByTagName('span'), function (node) {
-//            var val;
-//            if(val = node.getStyle('text-decoration')){
-//                if(/line-through/.test(val)){
-//                    if(node.attrs['class']){
-//                        node.attrs['class'] += ' fontstrikethrough';
-//                    }else{
-//                        node.setAttr('class','fontstrikethrough')
-//                    }
-//                }
-//
-//                node.setStyle('text-decoration')
-//            }
-//            if(val = node.getStyle('border')){
-//                if(/1px/.test(val) && /solid/.test(val)){
-//                    if(node.attrs['class']){
-//                        node.attrs['class'] += ' fontborder';
-//
-//                    }else{
-//                        node.setAttr('class','fontborder')
-//                    }
-//                }
-//                node.setStyle('border')
-//
-//            }
-//        });
-//    });
-    for (var p in fonts) {
-        (function (cmd, style) {
-            UE.commands[cmd] = {
-                execCommand: function (cmdName, value) {
-                    value = value || (this.queryCommandState(cmdName) ? 'none' : cmdName == 'underline' ? 'underline' :
-                        cmdName == 'fontborder' ? '1px solid #000' :
-                            'line-through');
-                    var me = this,
-                        range = this.selection.getRange(),
-                        text;
-
-                    if (value == 'default') {
-
-                        if (range.collapsed) {
-                            text = me.document.createTextNode('font');
-                            range.insertNode(text).select();
-
-                        }
-                        me.execCommand('removeFormat', 'span,a', style);
-                        if (text) {
-                            range.setStartBefore(text).collapse(true);
-                            domUtils.remove(text);
-                        }
-                        mergesibling(range,cmdName,value);
-                        range.select()
-                    } else {
-                        if (!range.collapsed) {
-                            if (needCmd[cmd] && me.queryCommandValue(cmd)) {
-                                me.execCommand('removeFormat', 'span,a', style);
-                            }
-                            range = me.selection.getRange();
-
-                            range.applyInlineStyle('span', {'style': style + ':' + value});
-                            mergesibling(range, cmdName,value);
-                            range.select();
-                        } else {
-
-                            var span = domUtils.findParentByTagName(range.startContainer, 'span', true);
-                            text = me.document.createTextNode('font');
-                            if (span && !span.children.length && !span[browser.ie ? 'innerText' : 'textContent'].replace(fillCharReg, '').length) {
-                                //for ie hack when enter
-                                range.insertNode(text);
-                                if (needCmd[cmd]) {
-                                    range.selectNode(text).select();
-                                    me.execCommand('removeFormat', 'span,a', style, null);
-
-                                    span = domUtils.findParentByTagName(text, 'span', true);
-                                    range.setStartBefore(text);
-
-                                }
-                                span && (span.style.cssText += ';' + style + ':' + value);
-                                range.collapse(true).select();
-
-
-                            } else {
-                                range.insertNode(text);
-                                range.selectNode(text).select();
-                                span = range.document.createElement('span');
-
-                                if (needCmd[cmd]) {
-                                    //a标签内的不处理跳过
-                                    if (domUtils.findParentByTagName(text, 'a', true)) {
-                                        range.setStartBefore(text).setCursor();
-                                        domUtils.remove(text);
-                                        return;
-                                    }
-                                    me.execCommand('removeFormat', 'span,a', style);
-                                }
-
-                                span.style.cssText = style + ':' + value;
-
-
-                                text.parentNode.insertBefore(span, text);
-                                //修复,span套span 但样式不继承的问题
-                                if (!browser.ie || browser.ie && browser.version == 9) {
-                                    var spanParent = span.parentNode;
-                                    while (!domUtils.isBlockElm(spanParent)) {
-                                        if (spanParent.tagName == 'SPAN') {
-                                            //opera合并style不会加入";"
-                                            span.style.cssText = spanParent.style.cssText + ";" + span.style.cssText;
-                                        }
-                                        spanParent = spanParent.parentNode;
-                                    }
-                                }
-
-
-                                if (opera) {
-                                    setTimeout(function () {
-                                        range.setStart(span, 0).collapse(true);
-                                        mergesibling(range, cmdName,value);
-                                        range.select();
-                                    });
-                                } else {
-                                    range.setStart(span, 0).collapse(true);
-                                    mergesibling(range,cmdName,value);
-                                    range.select();
-                                }
-
-                                //trace:981
-                                //domUtils.mergeToParent(span)
-                            }
-                            domUtils.remove(text);
-                        }
-
-
-                    }
-                    return true;
-                },
-                queryCommandValue: function (cmdName) {
-                    var startNode = this.selection.getStart();
-
-                    //trace:946
-                    if (cmdName == 'underline' || cmdName == 'strikethrough') {
-                        var tmpNode = startNode, value;
-                        while (tmpNode && !domUtils.isBlockElm(tmpNode) && !domUtils.isBody(tmpNode)) {
-                            if (tmpNode.nodeType == 1) {
-                                value = domUtils.getComputedStyle(tmpNode, style);
-                                if (value != 'none') {
-                                    return value;
-                                }
-                            }
-
-                            tmpNode = tmpNode.parentNode;
-                        }
-                        return 'none';
-                    }
-                    if (cmdName == 'fontborder') {
-                        var tmp = startNode, val;
-                        while (tmp && dtd.$inline[tmp.tagName]) {
-                            if (val = domUtils.getComputedStyle(tmp, 'border')) {
-
-                                if (/1px/.test(val) && /solid/.test(val)) {
-                                    return val;
-                                }
-                            }
-                            tmp = tmp.parentNode;
-                        }
-                        return ''
-                    }
-
-                    if( cmdName == 'FontSize' ) {
-                        var styleVal = domUtils.getComputedStyle(startNode, style),
-                            tmp = /^([\d\.]+)(\w+)$/.exec( styleVal );
-
-                        if( tmp ) {
-
-                            return Math.floor( tmp[1] ) + tmp[2];
-
-                        }
-
-                        return styleVal;
-
-                    }
-
-                    return  domUtils.getComputedStyle(startNode, style);
-                },
-                queryCommandState: function (cmdName) {
-                    if (!needCmd[cmdName])
-                        return 0;
-                    var val = this.queryCommandValue(cmdName);
-                    if (cmdName == 'fontborder') {
-                        return /1px/.test(val) && /solid/.test(val)
-                    } else {
-                        return  cmdName == 'underline' ? /underline/.test(val) : /line\-through/.test(val);
-
-                    }
-
-                }
-            };
-        })(p, fonts[p]);
-    }
-};
-/**
- * 超链接
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 插入超链接
- * @command link
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param { Object } options   设置自定义属性,例如:url、title、target
- * @example
- * ```javascript
- * editor.execCommand( 'link', '{
- *     url:'ueditor.baidu.com',
- *     title:'ueditor',
- *     target:'_blank'
- * }' );
- * ```
- */
-/**
- * 返回当前选中的第一个超链接节点
- * @command link
- * @method queryCommandValue
- * @param { String } cmd 命令字符串
- * @return { Element } 超链接节点
- * @example
- * ```javascript
- * editor.queryCommandValue( 'link' );
- * ```
- */
-
-/**
- * 取消超链接
- * @command unlink
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'unlink');
- * ```
- */
-
-UE.plugins['link'] = function(){
-    function optimize( range ) {
-        var start = range.startContainer,end = range.endContainer;
-
-        if ( start = domUtils.findParentByTagName( start, 'a', true ) ) {
-            range.setStartBefore( start );
-        }
-        if ( end = domUtils.findParentByTagName( end, 'a', true ) ) {
-            range.setEndAfter( end );
-        }
-    }
-
-
-    UE.commands['unlink'] = {
-        execCommand : function() {
-            var range = this.selection.getRange(),
-                bookmark;
-            if(range.collapsed && !domUtils.findParentByTagName( range.startContainer, 'a', true )){
-                return;
-            }
-            bookmark = range.createBookmark();
-            optimize( range );
-            range.removeInlineStyle( 'a' ).moveToBookmark( bookmark ).select();
-        },
-        queryCommandState : function(){
-            return !this.highlight && this.queryCommandValue('link') ?  0 : -1;
-        }
-
-    };
-    function doLink(range,opt,me){
-        var rngClone = range.cloneRange(),
-            link = me.queryCommandValue('link');
-        optimize( range = range.adjustmentBoundary() );
-        var start = range.startContainer;
-        if(start.nodeType == 1 && link){
-            start = start.childNodes[range.startOffset];
-            if(start && start.nodeType == 1 && start.tagName == 'A' && /^(?:https?|ftp|file)\s*:\s*\/\//.test(start[browser.ie?'innerText':'textContent'])){
-                start[browser.ie ? 'innerText' : 'textContent'] =  utils.html(opt.textValue||opt.href);
-
-            }
-        }
-        if( !rngClone.collapsed || link){
-            range.removeInlineStyle( 'a' );
-            rngClone = range.cloneRange();
-        }
-
-        if ( rngClone.collapsed ) {
-            var a = range.document.createElement( 'a'),
-                text = '';
-            if(opt.textValue){
-
-                text =   utils.html(opt.textValue);
-                delete opt.textValue;
-            }else{
-                text =   utils.html(opt.href);
-
-            }
-            domUtils.setAttributes( a, opt );
-            start =  domUtils.findParentByTagName( rngClone.startContainer, 'a', true );
-            if(start && domUtils.isInNodeEndBoundary(rngClone,start)){
-                range.setStartAfter(start).collapse(true);
-
-            }
-            a[browser.ie ? 'innerText' : 'textContent'] = text;
-            range.insertNode(a).selectNode( a );
-        } else {
-            range.applyInlineStyle( 'a', opt );
-
-        }
-    }
-    UE.commands['link'] = {
-        execCommand : function( cmdName, opt ) {
-            var range;
-            opt._href && (opt._href = utils.unhtml(opt._href,/[<">]/g));
-            opt.href && (opt.href = utils.unhtml(opt.href,/[<">]/g));
-            opt.textValue && (opt.textValue = utils.unhtml(opt.textValue,/[<">]/g));
-            doLink(range=this.selection.getRange(),opt,this);
-            //闭合都不加占位符,如果加了会在a后边多个占位符节点,导致a是图片背景组成的列表,出现空白问题
-            range.collapse().select(true);
-
-        },
-        queryCommandValue : function() {
-            var range = this.selection.getRange(),
-                node;
-            if ( range.collapsed ) {
-//                    node = this.selection.getStart();
-                //在ie下getstart()取值偏上了
-                node = range.startContainer;
-                node = node.nodeType == 1 ? node : node.parentNode;
-
-                if ( node && (node = domUtils.findParentByTagName( node, 'a', true )) && ! domUtils.isInNodeEndBoundary(range,node)) {
-
-                    return node;
-                }
-            } else {
-                //trace:1111  如果是<p><a>xx</a></p> startContainer是p就会找不到a
-                range.shrinkBoundary();
-                var start = range.startContainer.nodeType  == 3 || !range.startContainer.childNodes[range.startOffset] ? range.startContainer : range.startContainer.childNodes[range.startOffset],
-                    end =  range.endContainer.nodeType == 3 || range.endOffset == 0 ? range.endContainer : range.endContainer.childNodes[range.endOffset-1],
-                    common = range.getCommonAncestor();
-                node = domUtils.findParentByTagName( common, 'a', true );
-                if ( !node && common.nodeType == 1){
-
-                    var as = common.getElementsByTagName( 'a' ),
-                        ps,pe;
-
-                    for ( var i = 0,ci; ci = as[i++]; ) {
-                        ps = domUtils.getPosition( ci, start ),pe = domUtils.getPosition( ci,end);
-                        if ( (ps & domUtils.POSITION_FOLLOWING || ps & domUtils.POSITION_CONTAINS)
-                            &&
-                            (pe & domUtils.POSITION_PRECEDING || pe & domUtils.POSITION_CONTAINS)
-                            ) {
-                            node = ci;
-                            break;
-                        }
-                    }
-                }
-                return node;
-            }
-
-        },
-        queryCommandState : function() {
-            //判断如果是视频的话连接不可用
-            //fix 853
-            var img = this.selection.getRange().getClosedNode(),
-                flag = img && (img.className == "edui-faked-video" || img.className.indexOf("edui-upload-video")!=-1);
-            return flag ? -1 : 0;
-        }
-    };
-};
-///import core
-///import plugins\inserthtml.js
-///commands 插入框架
-///commandsName  InsertFrame
-///commandsTitle  插入Iframe
-///commandsDialog  dialogs\insertframe
-
-UE.plugins['insertframe'] = function() {
-   var me =this;
-    function deleteIframe(){
-        me._iframe && delete me._iframe;
-    }
-
-    me.addListener("selectionchange",function(){
-        deleteIframe();
-    });
-
-};
-
-
-///import core
-///commands 涂鸦
-///commandsName  Scrawl
-///commandsTitle  涂鸦
-///commandsDialog  dialogs\scrawl
-UE.commands['scrawl'] = {
-    queryCommandState : function(){
-        return ( browser.ie && browser.version  <= 8 ) ? -1 :0;
-    }
-};
-
-/**
- * 清除格式
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 清除文字样式
- * @command removeformat
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param   {String}   tags     以逗号隔开的标签。如:strong
- * @param   {String}   style    样式如:color
- * @param   {String}   attrs    属性如:width
- * @example
- * ```javascript
- * editor.execCommand( 'removeformat', 'strong','color','width' );
- * ```
- */
-
-UE.plugins['removeformat'] = function(){
-    var me = this;
-    me.setOpt({
-       'removeFormatTags': 'b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var',
-       'removeFormatAttributes':'class,style,lang,width,height,align,hspace,valign'
-    });
-    me.commands['removeformat'] = {
-        execCommand : function( cmdName, tags, style, attrs,notIncludeA ) {
-
-            var tagReg = new RegExp( '^(?:' + (tags || this.options.removeFormatTags).replace( /,/g, '|' ) + ')$', 'i' ) ,
-                removeFormatAttributes = style ? [] : (attrs || this.options.removeFormatAttributes).split( ',' ),
-                range = new dom.Range( this.document ),
-                bookmark,node,parent,
-                filter = function( node ) {
-                    return node.nodeType == 1;
-                };
-
-            function isRedundantSpan (node) {
-                if (node.nodeType == 3 || node.tagName.toLowerCase() != 'span'){
-                    return 0;
-                }
-                if (browser.ie) {
-                    //ie 下判断实效,所以只能简单用style来判断
-                    //return node.style.cssText == '' ? 1 : 0;
-                    var attrs = node.attributes;
-                    if ( attrs.length ) {
-                        for ( var i = 0,l = attrs.length; i<l; i++ ) {
-                            if ( attrs[i].specified ) {
-                                return 0;
-                            }
-                        }
-                        return 1;
-                    }
-                }
-                return !node.attributes.length;
-            }
-            function doRemove( range ) {
-
-                var bookmark1 = range.createBookmark();
-                if ( range.collapsed ) {
-                    range.enlarge( true );
-                }
-
-                //不能把a标签切了
-                if(!notIncludeA){
-                    var aNode = domUtils.findParentByTagName(range.startContainer,'a',true);
-                    if(aNode){
-                        range.setStartBefore(aNode);
-                    }
-
-                    aNode = domUtils.findParentByTagName(range.endContainer,'a',true);
-                    if(aNode){
-                        range.setEndAfter(aNode);
-                    }
-
-                }
-
-
-                bookmark = range.createBookmark();
-
-                node = bookmark.start;
-
-                //切开始
-                while ( (parent = node.parentNode) && !domUtils.isBlockElm( parent ) ) {
-                    domUtils.breakParent( node, parent );
-
-                    domUtils.clearEmptySibling( node );
-                }
-                if ( bookmark.end ) {
-                    //切结束
-                    node = bookmark.end;
-                    while ( (parent = node.parentNode) && !domUtils.isBlockElm( parent ) ) {
-                        domUtils.breakParent( node, parent );
-                        domUtils.clearEmptySibling( node );
-                    }
-
-                    //开始去除样式
-                    var current = domUtils.getNextDomNode( bookmark.start, false, filter ),
-                        next;
-                    while ( current ) {
-                        if ( current == bookmark.end ) {
-                            break;
-                        }
-
-                        next = domUtils.getNextDomNode( current, true, filter );
-
-                        if ( !dtd.$empty[current.tagName.toLowerCase()] && !domUtils.isBookmarkNode( current ) ) {
-                            if ( tagReg.test( current.tagName ) ) {
-                                if ( style ) {
-                                    domUtils.removeStyle( current, style );
-                                    if ( isRedundantSpan( current ) && style != 'text-decoration'){
-                                        domUtils.remove( current, true );
-                                    }
-                                } else {
-                                    domUtils.remove( current, true );
-                                }
-                            } else {
-                                //trace:939  不能把list上的样式去掉
-                                if(!dtd.$tableContent[current.tagName] && !dtd.$list[current.tagName]){
-                                    domUtils.removeAttributes( current, removeFormatAttributes );
-                                    if ( isRedundantSpan( current ) ){
-                                        domUtils.remove( current, true );
-                                    }
-                                }
-
-                            }
-                        }
-                        current = next;
-                    }
-                }
-                //trace:1035
-                //trace:1096 不能把td上的样式去掉,比如边框
-                var pN = bookmark.start.parentNode;
-                if(domUtils.isBlockElm(pN) && !dtd.$tableContent[pN.tagName] && !dtd.$list[pN.tagName]){
-                    domUtils.removeAttributes(  pN,removeFormatAttributes );
-                }
-                pN = bookmark.end.parentNode;
-                if(bookmark.end && domUtils.isBlockElm(pN) && !dtd.$tableContent[pN.tagName]&& !dtd.$list[pN.tagName]){
-                    domUtils.removeAttributes(  pN,removeFormatAttributes );
-                }
-                range.moveToBookmark( bookmark ).moveToBookmark(bookmark1);
-                //清除冗余的代码 <b><bookmark></b>
-                var node = range.startContainer,
-                    tmp,
-                    collapsed = range.collapsed;
-                while(node.nodeType == 1 && domUtils.isEmptyNode(node) && dtd.$removeEmpty[node.tagName]){
-                    tmp = node.parentNode;
-                    range.setStartBefore(node);
-                    //trace:937
-                    //更新结束边界
-                    if(range.startContainer === range.endContainer){
-                        range.endOffset--;
-                    }
-                    domUtils.remove(node);
-                    node = tmp;
-                }
-
-                if(!collapsed){
-                    node = range.endContainer;
-                    while(node.nodeType == 1 && domUtils.isEmptyNode(node) && dtd.$removeEmpty[node.tagName]){
-                        tmp = node.parentNode;
-                        range.setEndBefore(node);
-                        domUtils.remove(node);
-
-                        node = tmp;
-                    }
-
-
-                }
-            }
-
-
-
-            range = this.selection.getRange();
-            doRemove( range );
-            range.select();
-
-        }
-
-    };
-
-};
-
-/**
- * 添加引用
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 添加引用
- * @command blockquote
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'blockquote' );
- * ```
- */
-
-/**
- * 添加引用
- * @command blockquote
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param { Object } attrs 节点属性
- * @example
- * ```javascript
- * editor.execCommand( 'blockquote',{
- *     style: "color: red;"
- * } );
- * ```
- */
-
-
-UE.plugins['blockquote'] = function(){
-    var me = this;
-    function getObj(editor){
-        return domUtils.filterNodeList(editor.selection.getStartElementPath(),'blockquote');
-    }
-    me.commands['blockquote'] = {
-        execCommand : function( cmdName, attrs ) {
-            var range = this.selection.getRange(),
-                obj = getObj(this),
-                blockquote = dtd.blockquote,
-                bookmark = range.createBookmark();
-
-            if ( obj ) {
-
-                    var start = range.startContainer,
-                        startBlock = domUtils.isBlockElm(start) ? start : domUtils.findParent(start,function(node){return domUtils.isBlockElm(node)}),
-
-                        end = range.endContainer,
-                        endBlock = domUtils.isBlockElm(end) ? end :  domUtils.findParent(end,function(node){return domUtils.isBlockElm(node)});
-
-                    //处理一下li
-                    startBlock = domUtils.findParentByTagName(startBlock,'li',true) || startBlock;
-                    endBlock = domUtils.findParentByTagName(endBlock,'li',true) || endBlock;
-
-
-                    if(startBlock.tagName == 'LI' || startBlock.tagName == 'TD' || startBlock === obj || domUtils.isBody(startBlock)){
-                        domUtils.remove(obj,true);
-                    }else{
-                        domUtils.breakParent(startBlock,obj);
-                    }
-
-                    if(startBlock !== endBlock){
-                        obj = domUtils.findParentByTagName(endBlock,'blockquote');
-                        if(obj){
-                            if(endBlock.tagName == 'LI' || endBlock.tagName == 'TD'|| domUtils.isBody(endBlock)){
-                                obj.parentNode && domUtils.remove(obj,true);
-                            }else{
-                                domUtils.breakParent(endBlock,obj);
-                            }
-
-                        }
-                    }
-
-                    var blockquotes = domUtils.getElementsByTagName(this.document,'blockquote');
-                    for(var i=0,bi;bi=blockquotes[i++];){
-                        if(!bi.childNodes.length){
-                            domUtils.remove(bi);
-                        }else if(domUtils.getPosition(bi,startBlock)&domUtils.POSITION_FOLLOWING && domUtils.getPosition(bi,endBlock)&domUtils.POSITION_PRECEDING){
-                            domUtils.remove(bi,true);
-                        }
-                    }
-
-
-
-
-            } else {
-
-                var tmpRange = range.cloneRange(),
-                    node = tmpRange.startContainer.nodeType == 1 ? tmpRange.startContainer : tmpRange.startContainer.parentNode,
-                    preNode = node,
-                    doEnd = 1;
-
-                //调整开始
-                while ( 1 ) {
-                    if ( domUtils.isBody(node) ) {
-                        if ( preNode !== node ) {
-                            if ( range.collapsed ) {
-                                tmpRange.selectNode( preNode );
-                                doEnd = 0;
-                            } else {
-                                tmpRange.setStartBefore( preNode );
-                            }
-                        }else{
-                            tmpRange.setStart(node,0);
-                        }
-
-                        break;
-                    }
-                    if ( !blockquote[node.tagName] ) {
-                        if ( range.collapsed ) {
-                            tmpRange.selectNode( preNode );
-                        } else{
-                            tmpRange.setStartBefore( preNode);
-                        }
-                        break;
-                    }
-
-                    preNode = node;
-                    node = node.parentNode;
-                }
-
-                //调整结束
-                if ( doEnd ) {
-                    preNode = node =  node = tmpRange.endContainer.nodeType == 1 ? tmpRange.endContainer : tmpRange.endContainer.parentNode;
-                    while ( 1 ) {
-
-                        if ( domUtils.isBody( node ) ) {
-                            if ( preNode !== node ) {
-
-                                tmpRange.setEndAfter( preNode );
-
-                            } else {
-                                tmpRange.setEnd( node, node.childNodes.length );
-                            }
-
-                            break;
-                        }
-                        if ( !blockquote[node.tagName] ) {
-                            tmpRange.setEndAfter( preNode );
-                            break;
-                        }
-
-                        preNode = node;
-                        node = node.parentNode;
-                    }
-
-                }
-
-
-                node = range.document.createElement( 'blockquote' );
-                domUtils.setAttributes( node, attrs );
-                node.appendChild( tmpRange.extractContents() );
-                tmpRange.insertNode( node );
-                //去除重复的
-                var childs = domUtils.getElementsByTagName(node,'blockquote');
-                for(var i=0,ci;ci=childs[i++];){
-                    if(ci.parentNode){
-                        domUtils.remove(ci,true);
-                    }
-                }
-
-            }
-            range.moveToBookmark( bookmark ).select();
-        },
-        queryCommandState : function() {
-            return getObj(this) ? 1 : 0;
-        }
-    };
-};
-
-
-/**
- * 大小写转换
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 把选区内文本变大写,与“tolowercase”命令互斥
- * @command touppercase
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'touppercase' );
- * ```
- */
-
-/**
- * 把选区内文本变小写,与“touppercase”命令互斥
- * @command tolowercase
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'tolowercase' );
- * ```
- */
-UE.commands['touppercase'] =
-UE.commands['tolowercase'] = {
-    execCommand:function (cmd) {
-        var me = this;
-        var rng = me.selection.getRange();
-        if(rng.collapsed){
-            return rng;
-        }
-        var bk = rng.createBookmark(),
-            bkEnd = bk.end,
-            filterFn = function( node ) {
-                return !domUtils.isBr(node) && !domUtils.isWhitespace( node );
-            },
-            curNode = domUtils.getNextDomNode( bk.start, false, filterFn );
-        while ( curNode && (domUtils.getPosition( curNode, bkEnd ) & domUtils.POSITION_PRECEDING) ) {
-
-            if ( curNode.nodeType == 3 ) {
-                curNode.nodeValue = curNode.nodeValue[cmd == 'touppercase' ? 'toUpperCase' : 'toLowerCase']();
-            }
-            curNode = domUtils.getNextDomNode( curNode, true, filterFn );
-            if(curNode === bkEnd){
-                break;
-            }
-
-        }
-        rng.moveToBookmark(bk).select();
-    }
-};
-
-
-/**
- * 首行缩进
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 缩进
- * @command indent
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'indent' );
- * ```
- */
-UE.commands['indent'] = {
-    execCommand : function() {
-         var me = this,value = me.queryCommandState("indent") ? "0em" : (me.options.indentValue || '2em');
-         me.execCommand('Paragraph','p',{style:'text-indent:'+ value});
-    },
-    queryCommandState : function() {
-        var pN = domUtils.filterNodeList(this.selection.getStartElementPath(),'p h1 h2 h3 h4 h5 h6');
-        return pN && pN.style.textIndent && parseInt(pN.style.textIndent) ?  1 : 0;
-    }
-
-};
-
-/**
- * 打印
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 打印
- * @command print
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'print' );
- * ```
- */
-UE.commands['print'] = {
-    execCommand : function(){
-        this.window.print();
-    },
-    notNeedUndo : 1
-};
-
-
-/**
- * 全选
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 选中所有内容
- * @command selectall
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'selectall' );
- * ```
- */
-UE.plugins['selectall'] = function(){
-    var me = this;
-    me.commands['selectall'] = {
-        execCommand : function(){
-            //去掉了原生的selectAll,因为会出现报错和当内容为空时,不能出现闭合状态的光标
-            var me = this,body = me.body,
-                range = me.selection.getRange();
-            range.selectNodeContents(body);
-            if(domUtils.isEmptyBlock(body)){
-                //opera不能自动合并到元素的里边,要手动处理一下
-                if(browser.opera && body.firstChild && body.firstChild.nodeType == 1){
-                    range.setStartAtFirst(body.firstChild);
-                }
-                range.collapse(true);
-            }
-            range.select(true);
-        },
-        notNeedUndo : 1
-    };
-
-
-    //快捷键
-    me.addshortcutkey({
-         "selectAll" : "ctrl+65"
-    });
-};
-
-/**
- * 段落样式
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 段落格式
- * @command paragraph
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param {String}   style               标签值为:'p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6'
- * @param {Object}   attrs               标签的属性
- * @example
- * ```javascript
- * editor.execCommand( 'Paragraph','h1','{
- *     class:'test'
- * }' );
- * ```
- */
-
-/**
- * 返回选区内节点标签名
- * @command paragraph
- * @method queryCommandValue
- * @param { String } cmd 命令字符串
- * @return { String } 节点标签名
- * @example
- * ```javascript
- * editor.queryCommandValue( 'Paragraph' );
- * ```
- */
-
-UE.plugins['paragraph'] = function() {
-    var me = this,
-        block = domUtils.isBlockElm,
-        notExchange = ['TD','LI','PRE'],
-
-        doParagraph = function(range,style,attrs,sourceCmdName){
-            var bookmark = range.createBookmark(),
-                filterFn = function( node ) {
-                    return   node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' &&  !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace( node );
-                },
-                para;
-
-            range.enlarge( true );
-            var bookmark2 = range.createBookmark(),
-                current = domUtils.getNextDomNode( bookmark2.start, false, filterFn ),
-                tmpRange = range.cloneRange(),
-                tmpNode;
-            while ( current && !(domUtils.getPosition( current, bookmark2.end ) & domUtils.POSITION_FOLLOWING) ) {
-                if ( current.nodeType == 3 || !block( current ) ) {
-                    tmpRange.setStartBefore( current );
-                    while ( current && current !== bookmark2.end && !block( current ) ) {
-                        tmpNode = current;
-                        current = domUtils.getNextDomNode( current, false, null, function( node ) {
-                            return !block( node );
-                        } );
-                    }
-                    tmpRange.setEndAfter( tmpNode );
-                    
-                    para = range.document.createElement( style );
-                    if(attrs){
-                        domUtils.setAttributes(para,attrs);
-                        if(sourceCmdName && sourceCmdName == 'customstyle' && attrs.style){
-                            para.style.cssText = attrs.style;
-                        }
-                    }
-                    para.appendChild( tmpRange.extractContents() );
-                    //需要内容占位
-                    if(domUtils.isEmptyNode(para)){
-                        domUtils.fillChar(range.document,para);
-                        
-                    }
-
-                    tmpRange.insertNode( para );
-
-                    var parent = para.parentNode;
-                    //如果para上一级是一个block元素且不是body,td就删除它
-                    if ( block( parent ) && !domUtils.isBody( para.parentNode ) && utils.indexOf(notExchange,parent.tagName)==-1) {
-                        //存储dir,style
-                        if(!(sourceCmdName && sourceCmdName == 'customstyle')){
-                            parent.getAttribute('dir') && para.setAttribute('dir',parent.getAttribute('dir'));
-                            //trace:1070
-                            parent.style.cssText && (para.style.cssText = parent.style.cssText + ';' + para.style.cssText);
-                            //trace:1030
-                            parent.style.textAlign && !para.style.textAlign && (para.style.textAlign = parent.style.textAlign);
-                            parent.style.textIndent && !para.style.textIndent && (para.style.textIndent = parent.style.textIndent);
-                            parent.style.padding && !para.style.padding && (para.style.padding = parent.style.padding);
-                        }
-
-                        //trace:1706 选择的就是h1-6要删除
-                        if(attrs && /h\d/i.test(parent.tagName) && !/h\d/i.test(para.tagName) ){
-                            domUtils.setAttributes(parent,attrs);
-                            if(sourceCmdName && sourceCmdName == 'customstyle' && attrs.style){
-                                parent.style.cssText = attrs.style;
-                            }
-                            domUtils.remove(para,true);
-                            para = parent;
-                        }else{
-                            domUtils.remove( para.parentNode, true );
-                        }
-
-                    }
-                    if(  utils.indexOf(notExchange,parent.tagName)!=-1){
-                        current = parent;
-                    }else{
-                       current = para;
-                    }
-
-
-                    current = domUtils.getNextDomNode( current, false, filterFn );
-                } else {
-                    current = domUtils.getNextDomNode( current, true, filterFn );
-                }
-            }
-            return range.moveToBookmark( bookmark2 ).moveToBookmark( bookmark );
-        };
-    me.setOpt('paragraph',{'p':'', 'h1':'', 'h2':'', 'h3':'', 'h4':'', 'h5':'', 'h6':''});
-    me.commands['paragraph'] = {
-        execCommand : function( cmdName, style,attrs,sourceCmdName ) {
-            var range = this.selection.getRange();
-             //闭合时单独处理
-            if(range.collapsed){
-                var txt = this.document.createTextNode('p');
-                range.insertNode(txt);
-                //去掉冗余的fillchar
-                if(browser.ie){
-                    var node = txt.previousSibling;
-                    if(node && domUtils.isWhitespace(node)){
-                        domUtils.remove(node);
-                    }
-                    node = txt.nextSibling;
-                    if(node && domUtils.isWhitespace(node)){
-                        domUtils.remove(node);
-                    }
-                }
-
-            }
-            range = doParagraph(range,style,attrs,sourceCmdName);
-            if(txt){
-                range.setStartBefore(txt).collapse(true);
-                pN = txt.parentNode;
-
-                domUtils.remove(txt);
-
-                if(domUtils.isBlockElm(pN)&&domUtils.isEmptyNode(pN)){
-                    domUtils.fillNode(this.document,pN);
-                }
-
-            }
-
-            if(browser.gecko && range.collapsed && range.startContainer.nodeType == 1){
-                var child = range.startContainer.childNodes[range.startOffset];
-                if(child && child.nodeType == 1 && child.tagName.toLowerCase() == style){
-                    range.setStart(child,0).collapse(true);
-                }
-            }
-            //trace:1097 原来有true,原因忘了,但去了就不能清除多余的占位符了
-            range.select();
-
-
-            return true;
-        },
-        queryCommandValue : function() {
-            var node = domUtils.filterNodeList(this.selection.getStartElementPath(),'p h1 h2 h3 h4 h5 h6');
-            return node ? node.tagName.toLowerCase() : '';
-        }
-    };
-};
-
-/**
- * 设置文字输入的方向的插件
- * @file
- * @since 1.2.6.1
- */
-(function() {
-    var block = domUtils.isBlockElm ,
-        getObj = function(editor){
-//            var startNode = editor.selection.getStart(),
-//                parents;
-//            if ( startNode ) {
-//                //查找所有的是block的父亲节点
-//                parents = domUtils.findParents( startNode, true, block, true );
-//                for ( var i = 0,ci; ci = parents[i++]; ) {
-//                    if ( ci.getAttribute( 'dir' ) ) {
-//                        return ci;
-//                    }
-//                }
-//            }
-            return domUtils.filterNodeList(editor.selection.getStartElementPath(),function(n){return n.getAttribute('dir')});
-
-        },
-        doDirectionality = function(range,editor,forward){
-            
-            var bookmark,
-                filterFn = function( node ) {
-                    return   node.nodeType == 1 ? !domUtils.isBookmarkNode(node) : !domUtils.isWhitespace(node);
-                },
-
-                obj = getObj( editor );
-
-            if ( obj && range.collapsed ) {
-                obj.setAttribute( 'dir', forward );
-                return range;
-            }
-            bookmark = range.createBookmark();
-            range.enlarge( true );
-            var bookmark2 = range.createBookmark(),
-                current = domUtils.getNextDomNode( bookmark2.start, false, filterFn ),
-                tmpRange = range.cloneRange(),
-                tmpNode;
-            while ( current &&  !(domUtils.getPosition( current, bookmark2.end ) & domUtils.POSITION_FOLLOWING) ) {
-                if ( current.nodeType == 3 || !block( current ) ) {
-                    tmpRange.setStartBefore( current );
-                    while ( current && current !== bookmark2.end && !block( current ) ) {
-                        tmpNode = current;
-                        current = domUtils.getNextDomNode( current, false, null, function( node ) {
-                            return !block( node );
-                        } );
-                    }
-                    tmpRange.setEndAfter( tmpNode );
-                    var common = tmpRange.getCommonAncestor();
-                    if ( !domUtils.isBody( common ) && block( common ) ) {
-                        //遍历到了block节点
-                        common.setAttribute( 'dir', forward );
-                        current = common;
-                    } else {
-                        //没有遍历到,添加一个block节点
-                        var p = range.document.createElement( 'p' );
-                        p.setAttribute( 'dir', forward );
-                        var frag = tmpRange.extractContents();
-                        p.appendChild( frag );
-                        tmpRange.insertNode( p );
-                        current = p;
-                    }
-
-                    current = domUtils.getNextDomNode( current, false, filterFn );
-                } else {
-                    current = domUtils.getNextDomNode( current, true, filterFn );
-                }
-            }
-            return range.moveToBookmark( bookmark2 ).moveToBookmark( bookmark );
-        };
-
-    /**
-     * 文字输入方向
-     * @command directionality
-     * @method execCommand
-     * @param { String } cmdName 命令字符串
-     * @param { String } forward 传入'ltr'表示从左向右输入,传入'rtl'表示从右向左输入
-     * @example
-     * ```javascript
-     * editor.execCommand( 'directionality', 'ltr');
-     * ```
-     */
-
-    /**
-     * 查询当前选区的文字输入方向
-     * @command directionality
-     * @method queryCommandValue
-     * @param { String } cmdName 命令字符串
-     * @return { String } 返回'ltr'表示从左向右输入,返回'rtl'表示从右向左输入
-     * @example
-     * ```javascript
-     * editor.queryCommandValue( 'directionality');
-     * ```
-     */
-    UE.commands['directionality'] = {
-        execCommand : function( cmdName,forward ) {
-            var range = this.selection.getRange();
-            //闭合时单独处理
-            if(range.collapsed){
-                var txt = this.document.createTextNode('d');
-                range.insertNode(txt);
-            }
-            doDirectionality(range,this,forward);
-            if(txt){
-                range.setStartBefore(txt).collapse(true);
-                domUtils.remove(txt);
-            }
-
-            range.select();
-            return true;
-        },
-        queryCommandValue : function() {
-            var node = getObj(this);
-            return node ? node.getAttribute('dir') : 'ltr';
-        }
-    };
-})();
-
-
-/**
- * 插入分割线插件
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 插入分割线
- * @command horizontal
- * @method execCommand
- * @param { String } cmdName 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'horizontal' );
- * ```
- */
-UE.plugins['horizontal'] = function(){
-    var me = this;
-    me.commands['horizontal'] = {
-        execCommand : function( cmdName ) {
-            var me = this;
-            if(me.queryCommandState(cmdName)!==-1){
-                me.execCommand('insertHtml','<hr>');
-                var range = me.selection.getRange(),
-                    start = range.startContainer;
-                if(start.nodeType == 1 && !start.childNodes[range.startOffset] ){
-
-                    var tmp;
-                    if(tmp = start.childNodes[range.startOffset - 1]){
-                        if(tmp.nodeType == 1 && tmp.tagName == 'HR'){
-                            if(me.options.enterTag == 'p'){
-                                tmp = me.document.createElement('p');
-                                range.insertNode(tmp);
-                                range.setStart(tmp,0).setCursor();
-
-                            }else{
-                                tmp = me.document.createElement('br');
-                                range.insertNode(tmp);
-                                range.setStartBefore(tmp).setCursor();
-                            }
-                        }
-                    }
-
-                }
-                return true;
-            }
-
-        },
-        //边界在table里不能加分隔线
-        queryCommandState : function() {
-            return domUtils.filterNodeList(this.selection.getStartElementPath(),'table') ? -1 : 0;
-        }
-    };
-//    me.addListener('delkeyup',function(){
-//        var rng = this.selection.getRange();
-//        if(browser.ie && browser.version > 8){
-//            rng.txtToElmBoundary(true);
-//            if(domUtils.isStartInblock(rng)){
-//                var tmpNode = rng.startContainer;
-//                var pre = tmpNode.previousSibling;
-//                if(pre && domUtils.isTagNode(pre,'hr')){
-//                    domUtils.remove(pre);
-//                    rng.select();
-//                    return;
-//                }
-//            }
-//        }
-//        if(domUtils.isBody(rng.startContainer)){
-//            var hr = rng.startContainer.childNodes[rng.startOffset -1];
-//            if(hr && hr.nodeName == 'HR'){
-//                var next = hr.nextSibling;
-//                if(next){
-//                    rng.setStart(next,0)
-//                }else if(hr.previousSibling){
-//                    rng.setStartAtLast(hr.previousSibling)
-//                }else{
-//                    var p = this.document.createElement('p');
-//                    hr.parentNode.insertBefore(p,hr);
-//                    domUtils.fillNode(this.document,p);
-//                    rng.setStart(p,0);
-//                }
-//                domUtils.remove(hr);
-//                rng.setCursor(false,true);
-//            }
-//        }
-//    })
-    me.addListener('delkeydown',function(name,evt){
-        var rng = this.selection.getRange();
-        rng.txtToElmBoundary(true);
-        if(domUtils.isStartInblock(rng)){
-            var tmpNode = rng.startContainer;
-            var pre = tmpNode.previousSibling;
-            if(pre && domUtils.isTagNode(pre,'hr')){
-                domUtils.remove(pre);
-                rng.select();
-                domUtils.preventDefault(evt);
-                return true;
-
-            }
-        }
-
-    })
-};
-
-
-/**
- * 插入时间和日期
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 插入时间,默认格式:12:59:59
- * @command time
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'time');
- * ```
- */
-
-/**
- * 插入日期,默认格式:2013-08-30
- * @command date
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'date');
- * ```
- */
-UE.commands['time'] = UE.commands["date"] = {
-    execCommand : function(cmd, format){
-        var date = new Date;
-
-        function formatTime(date, format) {
-            var hh = ('0' + date.getHours()).slice(-2),
-                ii = ('0' + date.getMinutes()).slice(-2),
-                ss = ('0' + date.getSeconds()).slice(-2);
-            format = format || 'hh:ii:ss';
-            return format.replace(/hh/ig, hh).replace(/ii/ig, ii).replace(/ss/ig, ss);
-        }
-        function formatDate(date, format) {
-            var yyyy = ('000' + date.getFullYear()).slice(-4),
-                yy = yyyy.slice(-2),
-                mm = ('0' + (date.getMonth()+1)).slice(-2),
-                dd = ('0' + date.getDate()).slice(-2);
-            format = format || 'yyyy-mm-dd';
-            return format.replace(/yyyy/ig, yyyy).replace(/yy/ig, yy).replace(/mm/ig, mm).replace(/dd/ig, dd);
-        }
-
-        this.execCommand('insertHtml',cmd == "time" ? formatTime(date, format):formatDate(date, format) );
-    }
-};
-
-/**
- * 段前段后间距插件
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 设置段间距
- * @command rowspacing
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @param { String } value 段间距的值,以px为单位
- * @param { String } dir 间距位置,top或bottom,分别表示段前和段后
- * @example
- * ```javascript
- * editor.execCommand( 'rowspacing', '10', 'top' );
- * ```
- */
-
-UE.plugins['rowspacing'] = function(){
-    var me = this;
-    me.setOpt({
-        'rowspacingtop':['5', '10', '15', '20', '25'],
-        'rowspacingbottom':['5', '10', '15', '20', '25']
-
-    });
-    me.commands['rowspacing'] =  {
-        execCommand : function( cmdName,value,dir ) {
-            this.execCommand('paragraph','p',{style:'margin-'+dir+':'+value + 'px'});
-            return true;
-        },
-        queryCommandValue : function(cmdName,dir) {
-            var pN = domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node) }),
-                value;
-            //trace:1026
-            if(pN){
-                value = domUtils.getComputedStyle(pN,'margin-'+dir).replace(/[^\d]/g,'');
-                return !value ? 0 : value;
-            }
-            return 0;
-
-        }
-    };
-};
-
-
-
-/**
- * 设置行内间距
- * @file
- * @since 1.2.6.1
- */
-UE.plugins['lineheight'] = function(){
-    var me = this;
-    me.setOpt({'lineheight':['1', '1.5','1.75','2', '3', '4', '5']});
-
-    /**
-     * 行距
-     * @command lineheight
-     * @method execCommand
-     * @param { String } cmdName 命令字符串
-     * @param { String } value 传入的行高值, 该值是当前字体的倍数, 例如: 1.5, 1.75
-     * @example
-     * ```javascript
-     * editor.execCommand( 'lineheight', 1.5);
-     * ```
-     */
-    /**
-     * 查询当前选区内容的行高大小
-     * @command lineheight
-     * @method queryCommandValue
-     * @param { String } cmd 命令字符串
-     * @return { String } 返回当前行高大小
-     * @example
-     * ```javascript
-     * editor.queryCommandValue( 'lineheight' );
-     * ```
-     */
-
-    me.commands['lineheight'] =  {
-        execCommand : function( cmdName,value ) {
-            this.execCommand('paragraph','p',{style:'line-height:'+ (value == "1" ? "normal" : value + 'em') });
-            return true;
-        },
-        queryCommandValue : function() {
-            var pN = domUtils.filterNodeList(this.selection.getStartElementPath(),function(node){return domUtils.isBlockElm(node)});
-            if(pN){
-                var value = domUtils.getComputedStyle(pN,'line-height');
-                return value == 'normal' ? 1 : value.replace(/[^\d.]*/ig,"");
-            }
-        }
-    };
-};
-
-
-
-/**
- * 插入代码插件
- * @file
- * @since 1.2.6.1
- */
-
-UE.plugins['insertcode'] = function() {
-    var me = this;
-    me.ready(function(){
-        utils.cssRule('pre','pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;}',
-            me.document)
-    });
-    me.setOpt('insertcode',{
-            'as3':'ActionScript3',
-            'bash':'Bash/Shell',
-            'cpp':'C/C++',
-            'css':'Css',
-            'cf':'CodeFunction',
-            'c#':'C#',
-            'delphi':'Delphi',
-            'diff':'Diff',
-            'erlang':'Erlang',
-            'groovy':'Groovy',
-            'html':'Html',
-            'java':'Java',
-            'jfx':'JavaFx',
-            'js':'Javascript',
-            'pl':'Perl',
-            'php':'Php',
-            'plain':'Plain Text',
-            'ps':'PowerShell',
-            'python':'Python',
-            'ruby':'Ruby',
-            'scala':'Scala',
-            'sql':'Sql',
-            'vb':'Vb',
-            'xml':'Xml'
-    });
-
-    /**
-     * 插入代码
-     * @command insertcode
-     * @method execCommand
-     * @param { String } cmd 命令字符串
-     * @param { String } lang 插入代码的语言
-     * @example
-     * ```javascript
-     * editor.execCommand( 'insertcode', 'javascript' );
-     * ```
-     */
-
-    /**
-     * 如果选区所在位置是插入插入代码区域,返回代码的语言
-     * @command insertcode
-     * @method queryCommandValue
-     * @param { String } cmd 命令字符串
-     * @return { String } 返回代码的语言
-     * @example
-     * ```javascript
-     * editor.queryCommandValue( 'insertcode' );
-     * ```
-     */
-
-    me.commands['insertcode'] = {
-        execCommand : function(cmd,lang){
-            var me = this,
-                rng = me.selection.getRange(),
-                pre = domUtils.findParentByTagName(rng.startContainer,'pre',true);
-            if(pre){
-                pre.className = 'brush:'+lang+';toolbar:false;';
-            }else{
-                var code = '';
-                if(rng.collapsed){
-                    code = browser.ie? (browser.version > 8 ? '' : '&nbsp;'):'<br/>';
-                }else{
-                    var frag = rng.extractContents();
-                    var div = me.document.createElement('div');
-                    div.appendChild(frag);
-
-                    utils.each(UE.filterNode(UE.htmlparser(div.innerHTML.replace(/[\r\t]/g,'')),me.options.filterTxtRules).children,function(node){
-                        if(browser.ie && browser.version > 8){
-
-                            if(node.type =='element'){
-                                if(node.tagName == 'br'){
-                                    code += '\n'
-                                }else if(!dtd.$empty[node.tagName]){
-                                    utils.each(node.children,function(cn){
-                                        if(cn.type =='element'){
-                                            if(cn.tagName == 'br'){
-                                                code += '\n'
-                                            }else if(!dtd.$empty[node.tagName]){
-                                                code += cn.innerText();
-                                            }
-                                        }else{
-                                            code += cn.data
-                                        }
-                                    })
-                                    if(!/\n$/.test(code)){
-                                        code += '\n';
-                                    }
-                                }
-                            }else{
-                                code += node.data + '\n'
-                            }
-                            if(!node.nextSibling() && /\n$/.test(code)){
-                                code = code.replace(/\n$/,'');
-                            }
-                        }else{
-                            if(browser.ie){
-
-                                if(node.type =='element'){
-                                    if(node.tagName == 'br'){
-                                        code += '<br>'
-                                    }else if(!dtd.$empty[node.tagName]){
-                                        utils.each(node.children,function(cn){
-                                            if(cn.type =='element'){
-                                                if(cn.tagName == 'br'){
-                                                    code += '<br>'
-                                                }else if(!dtd.$empty[node.tagName]){
-                                                    code += cn.innerText();
-                                                }
-                                            }else{
-                                                code += cn.data
-                                            }
-                                        });
-                                        if(!/br>$/.test(code)){
-                                            code += '<br>';
-                                        }
-                                    }
-                                }else{
-                                    code += node.data + '<br>'
-                                }
-                                if(!node.nextSibling() && /<br>$/.test(code)){
-                                    code = code.replace(/<br>$/,'');
-                                }
-
-                            }else{
-                                code += (node.type == 'element' ? (dtd.$empty[node.tagName] ?  '' : node.innerText()) : node.data);
-                                if(!/br\/?\s*>$/.test(code)){
-                                    if(!node.nextSibling())
-                                        return;
-                                    code += '<br>'
-                                }
-                            }
-
-                        }
-
-                    });
-                }
-                me.execCommand('inserthtml','<pre id="coder"class="brush:'+lang+';toolbar:false">'+code+'</pre>',true);
-
-                pre = me.document.getElementById('coder');
-                domUtils.removeAttributes(pre,'id');
-                var tmpNode = pre.previousSibling;
-
-                if(tmpNode && (tmpNode.nodeType == 3 && tmpNode.nodeValue.length == 1 && browser.ie && browser.version == 6 ||  domUtils.isEmptyBlock(tmpNode))){
-
-                    domUtils.remove(tmpNode)
-                }
-                var rng = me.selection.getRange();
-                if(domUtils.isEmptyBlock(pre)){
-                    rng.setStart(pre,0).setCursor(false,true)
-                }else{
-                    rng.selectNodeContents(pre).select()
-                }
-            }
-
-
-
-        },
-        queryCommandValue : function(){
-            var path = this.selection.getStartElementPath();
-            var lang = '';
-            utils.each(path,function(node){
-                if(node.nodeName =='PRE'){
-                    var match = node.className.match(/brush:([^;]+)/);
-                    lang = match && match[1] ? match[1] : '';
-                    return false;
-                }
-            });
-            return lang;
-        }
-    };
-
-    me.addInputRule(function(root){
-       utils.each(root.getNodesByTagName('pre'),function(pre){
-           var brs = pre.getNodesByTagName('br');
-           if(brs.length){
-               browser.ie && browser.version > 8 && utils.each(brs,function(br){
-                   var txt = UE.uNode.createText('\n');
-                   br.parentNode.insertBefore(txt,br);
-                   br.parentNode.removeChild(br);
-               });
-               return;
-            }
-           if(browser.ie && browser.version > 8)
-                return;
-            var code = pre.innerText().split(/\n/);
-            pre.innerHTML('');
-            utils.each(code,function(c){
-                if(c.length){
-                    pre.appendChild(UE.uNode.createText(c));
-                }
-                pre.appendChild(UE.uNode.createElement('br'))
-            })
-       })
-    });
-    me.addOutputRule(function(root){
-        utils.each(root.getNodesByTagName('pre'),function(pre){
-            var code = '';
-            utils.each(pre.children,function(n){
-               if(n.type == 'text'){
-                   //在ie下文本内容有可能末尾带有\n要去掉
-                   //trace:3396
-                   code += n.data.replace(/[ ]/g,'&nbsp;').replace(/\n$/,'');
-               }else{
-                   if(n.tagName == 'br'){
-                       code  += '\n'
-                   }else{
-                       code += (!dtd.$empty[n.tagName] ? '' : n.innerText());
-                   }
-
-               }
-
-            });
-
-            pre.innerText(code.replace(/(&nbsp;|\n)+$/,''))
-        })
-    });
-    //不需要判断highlight的command列表
-    me.notNeedCodeQuery ={
-        help:1,
-        undo:1,
-        redo:1,
-        source:1,
-        print:1,
-        searchreplace:1,
-        fullscreen:1,
-        preview:1,
-        insertparagraph:1,
-        elementpath:1,
-        insertcode:1,
-        inserthtml:1,
-        selectall:1
-    };
-    //将queyCommamndState重置
-    var orgQuery = me.queryCommandState;
-    me.queryCommandState = function(cmd){
-        var me = this;
-
-        if(!me.notNeedCodeQuery[cmd.toLowerCase()] && me.selection && me.queryCommandValue('insertcode')){
-            return -1;
-        }
-        return UE.Editor.prototype.queryCommandState.apply(this,arguments)
-    };
-    me.addListener('beforeenterkeydown',function(){
-        var rng = me.selection.getRange();
-        var pre = domUtils.findParentByTagName(rng.startContainer,'pre',true);
-        if(pre){
-            me.fireEvent('saveScene');
-            if(!rng.collapsed){
-               rng.deleteContents();
-            }
-            if(!browser.ie || browser.ie9above){
-                var tmpNode = me.document.createElement('br'),pre;
-                rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true);
-                var next = tmpNode.nextSibling;
-                if(!next && (!browser.ie || browser.version > 10)){
-                    rng.insertNode(tmpNode.cloneNode(false));
-                }else{
-                    rng.setStartAfter(tmpNode);
-                }
-                pre = tmpNode.previousSibling;
-                var tmp;
-                while(pre ){
-                    tmp = pre;
-                    pre = pre.previousSibling;
-                    if(!pre || pre.nodeName == 'BR'){
-                        pre = tmp;
-                        break;
-                    }
-                }
-                if(pre){
-                    var str = '';
-                    while(pre && pre.nodeName != 'BR' &&  new RegExp('^[\\s'+domUtils.fillChar+']*$').test(pre.nodeValue)){
-                        str += pre.nodeValue;
-                        pre = pre.nextSibling;
-                    }
-                    if(pre.nodeName != 'BR'){
-                        var match = pre.nodeValue.match(new RegExp('^([\\s'+domUtils.fillChar+']+)'));
-                        if(match && match[1]){
-                            str += match[1]
-                        }
-
-                    }
-                    if(str){
-                        str = me.document.createTextNode(str);
-                        rng.insertNode(str).setStartAfter(str);
-                    }
-                }
-                rng.collapse(true).select(true);
-            }else{
-                if(browser.version > 8){
-
-                    var txt = me.document.createTextNode('\n');
-                    var start = rng.startContainer;
-                    if(rng.startOffset == 0){
-                        var preNode = start.previousSibling;
-                        if(preNode){
-                            rng.insertNode(txt);
-                            var fillchar = me.document.createTextNode(' ');
-                            rng.setStartAfter(txt).insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true)
-                        }
-                    }else{
-                        rng.insertNode(txt).setStartAfter(txt);
-                        var fillchar = me.document.createTextNode(' ');
-                        start = rng.startContainer.childNodes[rng.startOffset];
-                        if(start && !/^\n/.test(start.nodeValue)){
-                            rng.setStartBefore(txt)
-                        }
-                        rng.insertNode(fillchar).setStart(fillchar,0).collapse(true).select(true)
-                    }
-
-                }else{
-                    var tmpNode = me.document.createElement('br');
-                    rng.insertNode(tmpNode);
-                    rng.insertNode(me.document.createTextNode(domUtils.fillChar));
-                    rng.setStartAfter(tmpNode);
-                    pre = tmpNode.previousSibling;
-                    var tmp;
-                    while(pre ){
-                        tmp = pre;
-                        pre = pre.previousSibling;
-                        if(!pre || pre.nodeName == 'BR'){
-                            pre = tmp;
-                            break;
-                        }
-                    }
-                    if(pre){
-                        var str = '';
-                        while(pre && pre.nodeName != 'BR' &&  new RegExp('^[ '+domUtils.fillChar+']*$').test(pre.nodeValue)){
-                            str += pre.nodeValue;
-                            pre = pre.nextSibling;
-                        }
-                        if(pre.nodeName != 'BR'){
-                            var match = pre.nodeValue.match(new RegExp('^([ '+domUtils.fillChar+']+)'));
-                            if(match && match[1]){
-                                str += match[1]
-                            }
-
-                        }
-
-                        str = me.document.createTextNode(str);
-                        rng.insertNode(str).setStartAfter(str);
-                    }
-                    rng.collapse(true).select();
-                }
-
-
-            }
-            me.fireEvent('saveScene');
-            return true;
-        }
-
-
-    });
-
-    me.addListener('tabkeydown',function(cmd,evt){
-        var rng = me.selection.getRange();
-        var pre = domUtils.findParentByTagName(rng.startContainer,'pre',true);
-        if(pre){
-            me.fireEvent('saveScene');
-            if(evt.shiftKey){
-
-            }else{
-                if(!rng.collapsed){
-                    var bk = rng.createBookmark();
-                    var start = bk.start.previousSibling;
-
-                    while(start){
-                        if(pre.firstChild === start && !domUtils.isBr(start)){
-                            pre.insertBefore(me.document.createTextNode('    '),start);
-
-                            break;
-                        }
-                        if(domUtils.isBr(start)){
-                            pre.insertBefore(me.document.createTextNode('    '),start.nextSibling);
-
-                            break;
-                        }
-                        start = start.previousSibling;
-                    }
-                    var end = bk.end;
-                    start = bk.start.nextSibling;
-                    if(pre.firstChild === bk.start){
-                        pre.insertBefore(me.document.createTextNode('    '),start.nextSibling)
-
-                    }
-                    while(start && start !== end){
-                        if(domUtils.isBr(start) && start.nextSibling){
-                            if(start.nextSibling === end){
-                                break;
-                            }
-                            pre.insertBefore(me.document.createTextNode('    '),start.nextSibling)
-                        }
-
-                        start = start.nextSibling;
-                    }
-                    rng.moveToBookmark(bk).select();
-                }else{
-                    var tmpNode = me.document.createTextNode('    ');
-                    rng.insertNode(tmpNode).setStartAfter(tmpNode).collapse(true).select(true);
-                }
-            }
-
-
-            me.fireEvent('saveScene');
-            return true;
-        }
-
-
-    });
-
-
-    me.addListener('beforeinserthtml',function(evtName,html){
-        var me = this,
-            rng = me.selection.getRange(),
-            pre = domUtils.findParentByTagName(rng.startContainer,'pre',true);
-        if(pre){
-            if(!rng.collapsed){
-                rng.deleteContents()
-            }
-            var htmlstr = '';
-            if(browser.ie && browser.version > 8){
-
-                utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){
-                    if(node.type =='element'){
-                        if(node.tagName == 'br'){
-                            htmlstr += '\n'
-                        }else if(!dtd.$empty[node.tagName]){
-                            utils.each(node.children,function(cn){
-                                if(cn.type =='element'){
-                                    if(cn.tagName == 'br'){
-                                        htmlstr += '\n'
-                                    }else if(!dtd.$empty[node.tagName]){
-                                        htmlstr += cn.innerText();
-                                    }
-                                }else{
-                                    htmlstr += cn.data
-                                }
-                            })
-                            if(!/\n$/.test(htmlstr)){
-                                htmlstr += '\n';
-                            }
-                        }
-                    }else{
-                        htmlstr += node.data + '\n'
-                    }
-                    if(!node.nextSibling() && /\n$/.test(htmlstr)){
-                        htmlstr = htmlstr.replace(/\n$/,'');
-                    }
-                });
-                var tmpNode = me.document.createTextNode(utils.html(htmlstr.replace(/&nbsp;/g,' ')));
-                rng.insertNode(tmpNode).selectNode(tmpNode).select();
-            }else{
-                var frag = me.document.createDocumentFragment();
-
-                utils.each(UE.filterNode(UE.htmlparser(html),me.options.filterTxtRules).children,function(node){
-                    if(node.type =='element'){
-                        if(node.tagName == 'br'){
-                            frag.appendChild(me.document.createElement('br'))
-                        }else if(!dtd.$empty[node.tagName]){
-                            utils.each(node.children,function(cn){
-                                if(cn.type =='element'){
-                                    if(cn.tagName == 'br'){
-
-                                        frag.appendChild(me.document.createElement('br'))
-                                    }else if(!dtd.$empty[node.tagName]){
-                                        frag.appendChild(me.document.createTextNode(utils.html(cn.innerText().replace(/&nbsp;/g,' '))));
-
-                                    }
-                                }else{
-                                    frag.appendChild(me.document.createTextNode(utils.html( cn.data.replace(/&nbsp;/g,' '))));
-
-                                }
-                            })
-                            if(frag.lastChild.nodeName != 'BR'){
-                                frag.appendChild(me.document.createElement('br'))
-                            }
-                        }
-                    }else{
-                        frag.appendChild(me.document.createTextNode(utils.html( node.data.replace(/&nbsp;/g,' '))));
-                    }
-                    if(!node.nextSibling() && frag.lastChild.nodeName == 'BR'){
-                       frag.removeChild(frag.lastChild)
-                    }
-
-
-                });
-                rng.insertNode(frag).select();
-
-            }
-
-            return true;
-        }
-    });
-    //方向键的处理
-    me.addListener('keydown',function(cmd,evt){
-        var me = this,keyCode = evt.keyCode || evt.which;
-        if(keyCode == 40){
-            var rng = me.selection.getRange(),pre,start = rng.startContainer;
-            if(rng.collapsed && (pre = domUtils.findParentByTagName(rng.startContainer,'pre',true)) && !pre.nextSibling){
-                var last = pre.lastChild
-                while(last && last.nodeName == 'BR'){
-                    last = last.previousSibling;
-                }
-                if(last === start || rng.startContainer === pre && rng.startOffset == pre.childNodes.length){
-                    me.execCommand('insertparagraph');
-                    domUtils.preventDefault(evt)
-                }
-
-            }
-        }
-    });
-    //trace:3395
-    me.addListener('delkeydown',function(type,evt){
-        var rng = this.selection.getRange();
-        rng.txtToElmBoundary(true);
-        var start = rng.startContainer;
-        if(domUtils.isTagNode(start,'pre') && rng.collapsed && domUtils.isStartInblock(rng)){
-            var p = me.document.createElement('p');
-            domUtils.fillNode(me.document,p);
-            start.parentNode.insertBefore(p,start);
-            domUtils.remove(start);
-            rng.setStart(p,0).setCursor(false,true);
-            domUtils.preventDefault(evt);
-            return true;
-        }
-    })
-};
-
-/**
- * 清空文档插件
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 清空文档
- * @command cleardoc
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * //editor 是编辑器实例
- * editor.execCommand('cleardoc');
- * ```
- */
-
-UE.commands['cleardoc'] = {
-    execCommand : function( cmdName) {
-        var me = this,
-            enterTag = me.options.enterTag,
-            range = me.selection.getRange();
-        if(enterTag == "br"){
-            me.body.innerHTML = "<br/>";
-            range.setStart(me.body,0).setCursor();
-        }else{
-            me.body.innerHTML = "<p>"+(ie ? "" : "<br/>")+"</p>";
-            range.setStart(me.body.firstChild,0).setCursor(false,true);
-        }
-        setTimeout(function(){
-            me.fireEvent("clearDoc");
-        },0);
-
-    }
-};
-
-
-/**
- * 锚点插件,为UEditor提供插入锚点支持
- * @file
- * @since 1.2.6.1
- */
-UE.plugin.register('anchor', function (){
-
-    return {
-        bindEvents:{
-            'ready':function(){
-                utils.cssRule('anchor',
-                    '.anchorclass{background: url(\''
-                        + this.options.themePath
-                        + this.options.theme +'/images/anchor.gif\') no-repeat scroll left center transparent;border: 1px dotted #0000FF;cursor: auto;display: inline-block;height: 16px;width: 15px;}',
-                    this.document);
-            }
-        },
-       outputRule: function(root){
-           utils.each(root.getNodesByTagName('img'),function(a){
-               var val;
-               if(val = a.getAttr('anchorname')){
-                   a.tagName = 'a';
-                   a.setAttr({
-                       anchorname : '',
-                       name : val,
-                       'class' : ''
-                   })
-               }
-           })
-       },
-       inputRule:function(root){
-           utils.each(root.getNodesByTagName('a'),function(a){
-               var val;
-               if((val = a.getAttr('name')) && !a.getAttr('href')){
-                   a.tagName = 'img';
-                   a.setAttr({
-                       anchorname :a.getAttr('name'),
-                       'class' : 'anchorclass'
-                   });
-                   a.setAttr('name')
-
-               }
-           })
-
-       },
-       commands:{
-           /**
-            * 插入锚点
-            * @command anchor
-            * @method execCommand
-            * @param { String } cmd 命令字符串
-            * @param { String } name 锚点名称字符串
-            * @example
-            * ```javascript
-            * //editor 是编辑器实例
-            * editor.execCommand('anchor', 'anchor1');
-            * ```
-            */
-           'anchor':{
-               execCommand:function (cmd, name) {
-                   var range = this.selection.getRange(),img = range.getClosedNode();
-                   if (img && img.getAttribute('anchorname')) {
-                       if (name) {
-                           img.setAttribute('anchorname', name);
-                       } else {
-                           range.setStartBefore(img).setCursor();
-                           domUtils.remove(img);
-                       }
-                   } else {
-                       if (name) {
-                           //只在选区的开始插入
-                           var anchor = this.document.createElement('img');
-                           range.collapse(true);
-                           domUtils.setAttributes(anchor,{
-                               'anchorname':name,
-                               'class':'anchorclass'
-                           });
-                           range.insertNode(anchor).setStartAfter(anchor).setCursor(false,true);
-                       }
-                   }
-               }
-           }
-       }
-    }
-});
-
-///import core
-///commands 字数统计
-///commandsName  WordCount,wordCount
-///commandsTitle  字数统计
-/*
- * Created by JetBrains WebStorm.
- * User: taoqili
- * Date: 11-9-7
- * Time: 下午8:18
- * To change this template use File | Settings | File Templates.
- */
-
-UE.plugins['wordcount'] = function(){
-    var me = this;
-    me.setOpt('wordCount',true);
-    me.addListener('contentchange',function(){
-        me.fireEvent('wordcount');
-    });
-    var timer;
-    me.addListener('ready',function(){
-        var me = this;
-        domUtils.on(me.body,"keyup",function(evt){
-            var code = evt.keyCode||evt.which,
-                //忽略的按键,ctr,alt,shift,方向键
-                ignores = {"16":1,"18":1,"20":1,"37":1,"38":1,"39":1,"40":1};
-            if(code in ignores) return;
-            clearTimeout(timer);
-            timer = setTimeout(function(){
-                me.fireEvent('wordcount');
-            },200)
-        })
-    });
-};
-
-/**
- * 分页功能插件
- * @file
- * @since 1.2.6.1
- */
-UE.plugins['pagebreak'] = function () {
-    var me = this,
-        notBreakTags = ['td'];
-    me.setOpt('pageBreakTag','_ueditor_page_break_tag_');
-
-    function fillNode(node){
-        if(domUtils.isEmptyBlock(node)){
-            var firstChild = node.firstChild,tmpNode;
-
-            while(firstChild && firstChild.nodeType == 1 && domUtils.isEmptyBlock(firstChild)){
-                tmpNode = firstChild;
-                firstChild = firstChild.firstChild;
-            }
-            !tmpNode && (tmpNode = node);
-            domUtils.fillNode(me.document,tmpNode);
-        }
-    }
-    //分页符样式添加
-
-    me.ready(function(){
-        utils.cssRule('pagebreak','.pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}',me.document);
-    });
-    function isHr(node){
-        return node && node.nodeType == 1 && node.tagName == 'HR' && node.className == 'pagebreak';
-    }
-    me.addInputRule(function(root){
-        root.traversal(function(node){
-            if(node.type == 'text' && node.data == me.options.pageBreakTag){
-                var hr = UE.uNode.createElement('<hr class="pagebreak" noshade="noshade" size="5" style="-webkit-user-select: none;">');
-                node.parentNode.insertBefore(hr,node);
-                node.parentNode.removeChild(node)
-            }
-        })
-    });
-    me.addOutputRule(function(node){
-        utils.each(node.getNodesByTagName('hr'),function(n){
-            if(n.getAttr('class') == 'pagebreak'){
-                var txt = UE.uNode.createText(me.options.pageBreakTag);
-                n.parentNode.insertBefore(txt,n);
-                n.parentNode.removeChild(n);
-            }
-        })
-
-    });
-
-    /**
-     * 插入分页符
-     * @command pagebreak
-     * @method execCommand
-     * @param { String } cmd 命令字符串
-     * @remind 在表格中插入分页符会把表格切分成两部分
-     * @remind 获取编辑器内的数据时, 编辑器会把分页符转换成“_ueditor_page_break_tag_”字符串,
-     *          以便于提交数据到服务器端后处理分页。
-     * @example
-     * ```javascript
-     * editor.execCommand( 'pagebreak'); //插入一个hr标签,带有样式类名pagebreak
-     * ```
-     */
-
-    me.commands['pagebreak'] = {
-        execCommand:function () {
-            var range = me.selection.getRange(),hr = me.document.createElement('hr');
-            domUtils.setAttributes(hr,{
-                'class' : 'pagebreak',
-                noshade:"noshade",
-                size:"5"
-            });
-            domUtils.unSelectable(hr);
-            //table单独处理
-            var node = domUtils.findParentByTagName(range.startContainer, notBreakTags, true),
-
-                parents = [], pN;
-            if (node) {
-                switch (node.tagName) {
-                    case 'TD':
-                        pN = node.parentNode;
-                        if (!pN.previousSibling) {
-                            var table = domUtils.findParentByTagName(pN, 'table');
-//                            var tableWrapDiv = table.parentNode;
-//                            if(tableWrapDiv && tableWrapDiv.nodeType == 1
-//                                && tableWrapDiv.tagName == 'DIV'
-//                                && tableWrapDiv.getAttribute('dropdrag')
-//                                ){
-//                                domUtils.remove(tableWrapDiv,true);
-//                            }
-                            table.parentNode.insertBefore(hr, table);
-                            parents = domUtils.findParents(hr, true);
-
-                        } else {
-                            pN.parentNode.insertBefore(hr, pN);
-                            parents = domUtils.findParents(hr);
-
-                        }
-                        pN = parents[1];
-                        if (hr !== pN) {
-                            domUtils.breakParent(hr, pN);
-
-                        }
-                        //table要重写绑定一下拖拽
-                        me.fireEvent('afteradjusttable',me.document);
-                }
-
-            } else {
-
-                if (!range.collapsed) {
-                    range.deleteContents();
-                    var start = range.startContainer;
-                    while ( !domUtils.isBody(start) && domUtils.isBlockElm(start) && domUtils.isEmptyNode(start)) {
-                        range.setStartBefore(start).collapse(true);
-                        domUtils.remove(start);
-                        start = range.startContainer;
-                    }
-
-                }
-                range.insertNode(hr);
-
-                var pN = hr.parentNode, nextNode;
-                while (!domUtils.isBody(pN)) {
-                    domUtils.breakParent(hr, pN);
-                    nextNode = hr.nextSibling;
-                    if (nextNode && domUtils.isEmptyBlock(nextNode)) {
-                        domUtils.remove(nextNode);
-                    }
-                    pN = hr.parentNode;
-                }
-                nextNode = hr.nextSibling;
-                var pre = hr.previousSibling;
-                if(isHr(pre)){
-                    domUtils.remove(pre);
-                }else{
-                    pre && fillNode(pre);
-                }
-
-                if(!nextNode){
-                    var p = me.document.createElement('p');
-
-                    hr.parentNode.appendChild(p);
-                    domUtils.fillNode(me.document,p);
-                    range.setStart(p,0).collapse(true);
-                }else{
-                    if(isHr(nextNode)){
-                        domUtils.remove(nextNode);
-                    }else{
-                        fillNode(nextNode);
-                    }
-                    range.setEndAfter(hr).collapse(false);
-                }
-
-                range.select(true);
-
-            }
-
-        }
-    };
-};
-///import core
-///commands 本地图片引导上传
-///commandsName  WordImage
-///commandsTitle  本地图片引导上传
-///commandsDialog  dialogs\wordimage
-
-UE.plugin.register('wordimage',function(){
-    var me = this,
-        images = [];
-    return {
-        commands : {
-            'wordimage':{
-                execCommand:function () {
-                    var images = domUtils.getElementsByTagName(me.body, "img");
-                    var urlList = [];
-                    for (var i = 0, ci; ci = images[i++];) {
-                        var url = ci.getAttribute("word_img");
-                        url && urlList.push(url);
-                    }
-                    return urlList;
-                },
-                queryCommandState:function () {
-                    images = domUtils.getElementsByTagName(me.body, "img");
-                    for (var i = 0, ci; ci = images[i++];) {
-                        if (ci.getAttribute("word_img")) {
-                            return 1;
-                        }
-                    }
-                    return -1;
-                },
-                notNeedUndo:true
-            }
-        },
-        inputRule : function (root) {
-            utils.each(root.getNodesByTagName('img'), function (img) {
-                var attrs = img.attrs,
-                    flag = parseInt(attrs.width) < 128 || parseInt(attrs.height) < 43,
-                    opt = me.options,
-                    src = opt.UEDITOR_HOME_URL + 'themes/default/images/spacer.gif';
-                if (attrs['src'] && /^(?:(file:\/+))/.test(attrs['src'])) {
-                    img.setAttr({
-                        width:attrs.width,
-                        height:attrs.height,
-                        alt:attrs.alt,
-                        word_img: attrs.src,
-                        src:src,
-                        'style':'background:url(' + ( flag ? opt.themePath + opt.theme + '/images/word.gif' : opt.langPath + opt.lang + '/images/localimage.png') + ') no-repeat center center;border:1px solid #ddd'
-                    })
-                }
-            })
-        }
-    }
-});
-UE.plugins['dragdrop'] = function (){
-
-    var me = this;
-    me.ready(function(){
-        domUtils.on(this.body,'dragend',function(){
-            var rng = me.selection.getRange();
-            var node = rng.getClosedNode()||me.selection.getStart();
-
-            if(node && node.tagName == 'IMG'){
-
-                var pre = node.previousSibling,next;
-                while(next = node.nextSibling){
-                    if(next.nodeType == 1 && next.tagName == 'SPAN' && !next.firstChild){
-                        domUtils.remove(next)
-                    }else{
-                        break;
-                    }
-                }
-
-
-                if((pre && pre.nodeType == 1 && !domUtils.isEmptyBlock(pre) || !pre) && (!next || next && !domUtils.isEmptyBlock(next))){
-                    if(pre && pre.tagName == 'P' && !domUtils.isEmptyBlock(pre)){
-                        pre.appendChild(node);
-                        domUtils.moveChild(next,pre);
-                        domUtils.remove(next);
-                    }else  if(next && next.tagName == 'P' && !domUtils.isEmptyBlock(next)){
-                        next.insertBefore(node,next.firstChild);
-                    }
-
-                    if(pre && pre.tagName == 'P' && domUtils.isEmptyBlock(pre)){
-                        domUtils.remove(pre)
-                    }
-                    if(next && next.tagName == 'P' && domUtils.isEmptyBlock(next)){
-                        domUtils.remove(next)
-                    }
-                    rng.selectNode(node).select();
-                    me.fireEvent('saveScene');
-
-                }
-
-            }
-
-        })
-    });
-    me.addListener('keyup', function(type, evt) {
-        var keyCode = evt.keyCode || evt.which;
-        if (keyCode == 13) {
-            var rng = me.selection.getRange(),node;
-            if(node = domUtils.findParentByTagName(rng.startContainer,'p',true)){
-                if(domUtils.getComputedStyle(node,'text-align') == 'center'){
-                    domUtils.removeStyle(node,'text-align')
-                }
-            }
-        }
-    })
-};
-
-/**
- * undo redo
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 撤销上一次执行的命令
- * @command undo
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'undo' );
- * ```
- */
-
-/**
- * 重做上一次执行的命令
- * @command redo
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'redo' );
- * ```
- */
-
-UE.plugins['undo'] = function () {
-    var saveSceneTimer;
-    var me = this,
-        maxUndoCount = me.options.maxUndoCount || 20,
-        maxInputCount = me.options.maxInputCount || 20,
-        fillchar = new RegExp(domUtils.fillChar + '|<\/hr>', 'gi');// ie会产生多余的</hr>
-    var noNeedFillCharTags = {
-        ol:1,ul:1,table:1,tbody:1,tr:1,body:1
-    };
-    var orgState = me.options.autoClearEmptyNode;
-    function compareAddr(indexA, indexB) {
-        if (indexA.length != indexB.length)
-            return 0;
-        for (var i = 0, l = indexA.length; i < l; i++) {
-            if (indexA[i] != indexB[i])
-                return 0
-        }
-        return 1;
-    }
-
-    function compareRangeAddress(rngAddrA, rngAddrB) {
-        if (rngAddrA.collapsed != rngAddrB.collapsed) {
-            return 0;
-        }
-        if (!compareAddr(rngAddrA.startAddress, rngAddrB.startAddress) || !compareAddr(rngAddrA.endAddress, rngAddrB.endAddress)) {
-            return 0;
-        }
-        return 1;
-    }
-
-    function UndoManager() {
-        this.list = [];
-        this.index = 0;
-        this.hasUndo = false;
-        this.hasRedo = false;
-        this.undo = function () {
-            if (this.hasUndo) {
-                if (!this.list[this.index - 1] && this.list.length == 1) {
-                    this.reset();
-                    return;
-                }
-                while (this.list[this.index].content == this.list[this.index - 1].content) {
-                    this.index--;
-                    if (this.index == 0) {
-                        return this.restore(0);
-                    }
-                }
-                this.restore(--this.index);
-            }
-        };
-        this.redo = function () {
-            if (this.hasRedo) {
-                while (this.list[this.index].content == this.list[this.index + 1].content) {
-                    this.index++;
-                    if (this.index == this.list.length - 1) {
-                        return this.restore(this.index);
-                    }
-                }
-                this.restore(++this.index);
-            }
-        };
-
-        this.restore = function () {
-            var me = this.editor;
-            var scene = this.list[this.index];
-            var root = UE.htmlparser(scene.content.replace(fillchar, ''));
-            me.options.autoClearEmptyNode = false;
-            me.filterInputRule(root);
-            me.options.autoClearEmptyNode = orgState;
-            //trace:873
-            //去掉展位符
-            me.document.body.innerHTML = root.toHtml();
-            me.fireEvent('afterscencerestore');
-            //处理undo后空格不展位的问题
-            if (browser.ie) {
-                utils.each(domUtils.getElementsByTagName(me.document,'td th caption p'),function(node){
-                    if(domUtils.isEmptyNode(node)){
-                        domUtils.fillNode(me.document, node);
-                    }
-                })
-            }
-
-            try{
-                var rng = new dom.Range(me.document).moveToAddress(scene.address);
-                rng.select(noNeedFillCharTags[rng.startContainer.nodeName.toLowerCase()]);
-            }catch(e){}
-
-            this.update();
-            this.clearKey();
-            //不能把自己reset了
-            me.fireEvent('reset', true);
-        };
-
-        this.getScene = function () {
-            var me = this.editor;
-            var rng = me.selection.getRange(),
-                rngAddress = rng.createAddress(false,true);
-            me.fireEvent('beforegetscene');
-            var root = UE.htmlparser(me.body.innerHTML);
-            me.options.autoClearEmptyNode = false;
-            me.filterOutputRule(root);
-            me.options.autoClearEmptyNode = orgState;
-            var cont = root.toHtml();
-            //trace:3461
-            //这个会引起回退时导致空格丢失的情况
-//            browser.ie && (cont = cont.replace(/>&nbsp;</g, '><').replace(/\s*</g, '<').replace(/>\s*/g, '>'));
-            me.fireEvent('aftergetscene');
-
-            return {
-                address:rngAddress,
-                content:cont
-            }
-        };
-        this.save = function (notCompareRange,notSetCursor) {
-            clearTimeout(saveSceneTimer);
-            var currentScene = this.getScene(notSetCursor),
-                lastScene = this.list[this.index];
-            //内容相同位置相同不存
-            if (lastScene && lastScene.content == currentScene.content &&
-                ( notCompareRange ? 1 : compareRangeAddress(lastScene.address, currentScene.address) )
-                ) {
-                return;
-            }
-            this.list = this.list.slice(0, this.index + 1);
-            this.list.push(currentScene);
-            //如果大于最大数量了,就把最前的剔除
-            if (this.list.length > maxUndoCount) {
-                this.list.shift();
-            }
-            this.index = this.list.length - 1;
-            this.clearKey();
-            //跟新undo/redo状态
-            this.update();
-
-        };
-        this.update = function () {
-            this.hasRedo = !!this.list[this.index + 1];
-            this.hasUndo = !!this.list[this.index - 1];
-        };
-        this.reset = function () {
-            this.list = [];
-            this.index = 0;
-            this.hasUndo = false;
-            this.hasRedo = false;
-            this.clearKey();
-        };
-        this.clearKey = function () {
-            keycont = 0;
-            lastKeyCode = null;
-        };
-    }
-
-    me.undoManger = new UndoManager();
-    me.undoManger.editor = me;
-    function saveScene() {
-        this.undoManger.save();
-    }
-
-    me.addListener('saveScene', function () {
-        var args = Array.prototype.splice.call(arguments,1);
-        this.undoManger.save.apply(this.undoManger,args);
-    });
-
-//    me.addListener('beforeexeccommand', saveScene);
-//    me.addListener('afterexeccommand', saveScene);
-
-    me.addListener('reset', function (type, exclude) {
-        if (!exclude) {
-            this.undoManger.reset();
-        }
-    });
-    me.commands['redo'] = me.commands['undo'] = {
-        execCommand:function (cmdName) {
-            this.undoManger[cmdName]();
-        },
-        queryCommandState:function (cmdName) {
-            return this.undoManger['has' + (cmdName.toLowerCase() == 'undo' ? 'Undo' : 'Redo')] ? 0 : -1;
-        },
-        notNeedUndo:1
-    };
-
-    var keys = {
-            //  /*Backspace*/ 8:1, /*Delete*/ 46:1,
-            /*Shift*/ 16:1, /*Ctrl*/ 17:1, /*Alt*/ 18:1,
-            37:1, 38:1, 39:1, 40:1
-
-        },
-        keycont = 0,
-        lastKeyCode;
-    //输入法状态下不计算字符数
-    var inputType = false;
-    me.addListener('ready', function () {
-        domUtils.on(this.body, 'compositionstart', function () {
-            inputType = true;
-        });
-        domUtils.on(this.body, 'compositionend', function () {
-            inputType = false;
-        })
-    });
-    //快捷键
-    me.addshortcutkey({
-        "Undo":"ctrl+90", //undo
-        "Redo":"ctrl+89" //redo
-
-    });
-    var isCollapsed = true;
-    me.addListener('keydown', function (type, evt) {
-
-        var me = this;
-        var keyCode = evt.keyCode || evt.which;
-        if (!keys[keyCode] && !evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey) {
-            if (inputType)
-                return;
-
-            if(!me.selection.getRange().collapsed){
-                me.undoManger.save(false,true);
-                isCollapsed = false;
-                return;
-            }
-            if (me.undoManger.list.length == 0) {
-                me.undoManger.save(true);
-            }
-            clearTimeout(saveSceneTimer);
-            function save(cont){
-
-                if (cont.selection.getRange().collapsed)
-                    cont.fireEvent('contentchange');
-                cont.undoManger.save(false,true);
-                cont.fireEvent('selectionchange');
-            }
-            saveSceneTimer = setTimeout(function(){
-                if(inputType){
-                    var interalTimer = setInterval(function(){
-                        if(!inputType){
-                            save(me);
-                            clearInterval(interalTimer)
-                        }
-                    },300)
-                    return;
-                }
-                save(me);
-            },200);
-
-            lastKeyCode = keyCode;
-            keycont++;
-            if (keycont >= maxInputCount ) {
-                save(me)
-            }
-        }
-    });
-    me.addListener('keyup', function (type, evt) {
-        var keyCode = evt.keyCode || evt.which;
-        if (!keys[keyCode] && !evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey) {
-            if (inputType)
-                return;
-            if(!isCollapsed){
-                this.undoManger.save(false,true);
-                isCollapsed = true;
-            }
-        }
-    });
-    //扩展实例,添加关闭和开启命令undo
-    me.stopCmdUndo = function(){
-        me.__hasEnterExecCommand = true;
-    };
-    me.startCmdUndo = function(){
-        me.__hasEnterExecCommand = false;
-    }
-};
-
-///import core
-///import plugins/inserthtml.js
-///import plugins/undo.js
-///import plugins/serialize.js
-///commands 粘贴
-///commandsName  PastePlain
-///commandsTitle  纯文本粘贴模式
-/*
- ** @description 粘贴
- * @author zhanyi
- */
-UE.plugins['paste'] = function () {
-    function getClipboardData(callback) {
-        var doc = this.document;
-        if (doc.getElementById('baidu_pastebin')) {
-            return;
-        }
-        var range = this.selection.getRange(),
-            bk = range.createBookmark(),
-        //创建剪贴的容器div
-            pastebin = doc.createElement('div');
-        pastebin.id = 'baidu_pastebin';
-        // Safari 要求div必须有内容,才能粘贴内容进来
-        browser.webkit && pastebin.appendChild(doc.createTextNode(domUtils.fillChar + domUtils.fillChar));
-        doc.body.appendChild(pastebin);
-        //trace:717 隐藏的span不能得到top
-        //bk.start.innerHTML = '&nbsp;';
-        bk.start.style.display = '';
-        pastebin.style.cssText = "position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:" +
-            //要在现在光标平行的位置加入,否则会出现跳动的问题
-            domUtils.getXY(bk.start).y + 'px';
-
-        range.selectNodeContents(pastebin).select(true);
-
-        setTimeout(function () {
-            if (browser.webkit) {
-                for (var i = 0, pastebins = doc.querySelectorAll('#baidu_pastebin'), pi; pi = pastebins[i++];) {
-                    if (domUtils.isEmptyNode(pi)) {
-                        domUtils.remove(pi);
-                    } else {
-                        pastebin = pi;
-                        break;
-                    }
-                }
-            }
-            try {
-                pastebin.parentNode.removeChild(pastebin);
-            } catch (e) {
-            }
-            range.moveToBookmark(bk).select(true);
-            callback(pastebin);
-        }, 0);
-    }
-
-    var me = this;
-
-    var txtContent, htmlContent, address;
-
-    function filter(div) {
-        var html;
-        if (div.firstChild) {
-            //去掉cut中添加的边界值
-            var nodes = domUtils.getElementsByTagName(div, 'span');
-            for (var i = 0, ni; ni = nodes[i++];) {
-                if (ni.id == '_baidu_cut_start' || ni.id == '_baidu_cut_end') {
-                    domUtils.remove(ni);
-                }
-            }
-
-            if (browser.webkit) {
-
-                var brs = div.querySelectorAll('div br');
-                for (var i = 0, bi; bi = brs[i++];) {
-                    var pN = bi.parentNode;
-                    if (pN.tagName == 'DIV' && pN.childNodes.length == 1) {
-                        pN.innerHTML = '<p><br/></p>';
-                        domUtils.remove(pN);
-                    }
-                }
-                var divs = div.querySelectorAll('#baidu_pastebin');
-                for (var i = 0, di; di = divs[i++];) {
-                    var tmpP = me.document.createElement('p');
-                    di.parentNode.insertBefore(tmpP, di);
-                    while (di.firstChild) {
-                        tmpP.appendChild(di.firstChild);
-                    }
-                    domUtils.remove(di);
-                }
-
-                var metas = div.querySelectorAll('meta');
-                for (var i = 0, ci; ci = metas[i++];) {
-                    domUtils.remove(ci);
-                }
-
-                var brs = div.querySelectorAll('br');
-                for (i = 0; ci = brs[i++];) {
-                    if (/^apple-/i.test(ci.className)) {
-                        domUtils.remove(ci);
-                    }
-                }
-            }
-            if (browser.gecko) {
-                var dirtyNodes = div.querySelectorAll('[_moz_dirty]');
-                for (i = 0; ci = dirtyNodes[i++];) {
-                    ci.removeAttribute('_moz_dirty');
-                }
-            }
-            if (!browser.ie) {
-                var spans = div.querySelectorAll('span.Apple-style-span');
-                for (var i = 0, ci; ci = spans[i++];) {
-                    domUtils.remove(ci, true);
-                }
-            }
-
-            //ie下使用innerHTML会产生多余的\r\n字符,也会产生&nbsp;这里过滤掉
-            html = div.innerHTML;//.replace(/>(?:(\s|&nbsp;)*?)</g,'><');
-
-            //过滤word粘贴过来的冗余属性
-            html = UE.filterWord(html);
-            //取消了忽略空白的第二个参数,粘贴过来的有些是有空白的,会被套上相关的标签
-            var root = UE.htmlparser(html);
-            //如果给了过滤规则就先进行过滤
-            if (me.options.filterRules) {
-                UE.filterNode(root, me.options.filterRules);
-            }
-            //执行默认的处理
-            me.filterInputRule(root);
-            //针对chrome的处理
-            if (browser.webkit) {
-                var br = root.lastChild();
-                if (br && br.type == 'element' && br.tagName == 'br') {
-                    root.removeChild(br)
-                }
-                utils.each(me.body.querySelectorAll('div'), function (node) {
-                    if (domUtils.isEmptyBlock(node)) {
-                        domUtils.remove(node,true)
-                    }
-                })
-            }
-            html = {'html': root.toHtml()};
-            me.fireEvent('beforepaste', html, root);
-            //抢了默认的粘贴,那后边的内容就不执行了,比如表格粘贴
-            if(!html.html){
-                return;
-            }
-            root = UE.htmlparser(html.html,true);
-            //如果开启了纯文本模式
-            if (me.queryCommandState('pasteplain') === 1) {
-                me.execCommand('insertHtml', UE.filterNode(root, me.options.filterTxtRules).toHtml(), true);
-            } else {
-                //文本模式
-                UE.filterNode(root, me.options.filterTxtRules);
-                txtContent = root.toHtml();
-                //完全模式
-                htmlContent = html.html;
-
-                address = me.selection.getRange().createAddress(true);
-                me.execCommand('insertHtml', htmlContent, true);
-            }
-            me.fireEvent("afterpaste", html);
-        }
-    }
-
-    me.addListener('pasteTransfer', function (cmd, plainType) {
-
-        if (address && txtContent && htmlContent && txtContent != htmlContent) {
-            var range = me.selection.getRange();
-            range.moveToAddress(address, true);
-
-            if (!range.collapsed) {
-
-                while (!domUtils.isBody(range.startContainer)
-                    ) {
-                    var start = range.startContainer;
-                    if(start.nodeType == 1){
-                        start = start.childNodes[range.startOffset];
-                        if(!start){
-                            range.setStartBefore(range.startContainer);
-                            continue;
-                        }
-                        var pre = start.previousSibling;
-
-                        if(pre && pre.nodeType == 3 && new RegExp('^[\n\r\t '+domUtils.fillChar+']*$').test(pre.nodeValue)){
-                            range.setStartBefore(pre)
-                        }
-                    }
-                    if(range.startOffset == 0){
-                        range.setStartBefore(range.startContainer);
-                    }else{
-                        break;
-                    }
-
-                }
-                while (!domUtils.isBody(range.endContainer)
-                    ) {
-                    var end = range.endContainer;
-                    if(end.nodeType == 1){
-                        end = end.childNodes[range.endOffset];
-                        if(!end){
-                            range.setEndAfter(range.endContainer);
-                            continue;
-                        }
-                        var next = end.nextSibling;
-                        if(next && next.nodeType == 3 && new RegExp('^[\n\r\t'+domUtils.fillChar+']*$').test(next.nodeValue)){
-                            range.setEndAfter(next)
-                        }
-                    }
-                    if(range.endOffset == range.endContainer[range.endContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length){
-                        range.setEndAfter(range.endContainer);
-                    }else{
-                        break;
-                    }
-
-                }
-
-            }
-
-            range.deleteContents();
-            range.select(true);
-            me.__hasEnterExecCommand = true;
-            var html = htmlContent;
-            if (plainType === 2) {
-                html = html.replace(/<(\/?)([\w\-]+)([^>]*)>/gi, function (a, b, tagName, attrs) {
-                    tagName = tagName.toLowerCase();
-                    if ({img: 1}[tagName]) {
-                        return a;
-                    }
-                    attrs = attrs.replace(/([\w\-]*?)\s*=\s*(("([^"]*)")|('([^']*)')|([^\s>]+))/gi, function (str, atr, val) {
-                        if ({
-                            'src': 1,
-                            'href': 1,
-                            'name': 1
-                        }[atr.toLowerCase()]) {
-                            return atr + '=' + val + ' '
-                        }
-                        return ''
-                    });
-                    if ({
-                        'span': 1,
-                        'div': 1
-                    }[tagName]) {
-                        return ''
-                    } else {
-
-                        return '<' + b + tagName + ' ' + utils.trim(attrs) + '>'
-                    }
-
-                });
-            } else if (plainType) {
-                html = txtContent;
-            }
-            me.execCommand('inserthtml', html, true);
-            me.__hasEnterExecCommand = false;
-            var rng = me.selection.getRange();
-            while (!domUtils.isBody(rng.startContainer) && !rng.startOffset &&
-                rng.startContainer[rng.startContainer.nodeType == 3 ? 'nodeValue' : 'childNodes'].length
-                ) {
-                rng.setStartBefore(rng.startContainer);
-            }
-            var tmpAddress = rng.createAddress(true);
-            address.endAddress = tmpAddress.startAddress;
-        }
-    });
-    me.addListener('ready', function () {
-        domUtils.on(me.body, 'cut', function () {
-            var range = me.selection.getRange();
-            if (!range.collapsed && me.undoManger) {
-                me.undoManger.save();
-            }
-        });
-
-        //ie下beforepaste在点击右键时也会触发,所以用监控键盘才处理
-        domUtils.on(me.body, browser.ie || browser.opera ? 'keydown' : 'paste', function (e) {
-            if ((browser.ie || browser.opera) && ((!e.ctrlKey && !e.metaKey) || e.keyCode != '86')) {
-                return;
-            }
-            getClipboardData.call(me, function (div) {
-                filter(div);
-            });
-        });
-
-    });
-};
-
-
-/**
- * 有序列表,无序列表插件
- * @file
- * @since 1.2.6.1
- */
-
-UE.plugins['list'] = function () {
-    var me = this,
-        notExchange = {
-            'TD':1,
-            'PRE':1,
-            'BLOCKQUOTE':1
-        };
-    var customStyle = {
-        'cn' : 'cn-1-',
-        'cn1' : 'cn-2-',
-        'cn2' : 'cn-3-',
-        'num':  'num-1-',
-        'num1' : 'num-2-',
-        'num2' : 'num-3-',
-        'dash'  : 'dash',
-        'dot':'dot'
-    };
-
-    me.setOpt( {
-        'autoTransWordToList':false,
-        'insertorderedlist':{
-            'num':'',
-            'num1':'',
-            'num2':'',
-            'cn':'',
-            'cn1':'',
-            'cn2':'',
-            'decimal':'',
-            'lower-alpha':'',
-            'lower-roman':'',
-            'upper-alpha':'',
-            'upper-roman':''
-        },
-        'insertunorderedlist':{
-            'circle':'',
-            'disc':'',
-            'square':'',
-            'dash' : '',
-            'dot':''
-        },
-        listDefaultPaddingLeft : '30',
-        listiconpath : 'http://bs.baidu.com/listicon/',
-        maxListLevel : -1//-1不限制
-    } );
-    function listToArray(list){
-        var arr = [];
-        for(var p in list){
-            arr.push(p)
-        }
-        return arr;
-    }
-    var listStyle = {
-        'OL':listToArray(me.options.insertorderedlist),
-        'UL':listToArray(me.options.insertunorderedlist)
-    };
-    var liiconpath = me.options.listiconpath;
-
-    //根据用户配置,调整customStyle
-    for(var s in customStyle){
-        if(!me.options.insertorderedlist.hasOwnProperty(s) && !me.options.insertunorderedlist.hasOwnProperty(s)){
-            delete customStyle[s];
-        }
-    }
-
-    me.ready(function () {
-        var customCss = [];
-        for(var p in customStyle){
-            if(p == 'dash' || p == 'dot'){
-                customCss.push('li.list-' + customStyle[p] + '{background-image:url(' + liiconpath +customStyle[p]+'.gif)}');
-                customCss.push('ul.custom_'+p+'{list-style:none;}ul.custom_'+p+' li{background-position:0 3px;background-repeat:no-repeat}');
-            }else{
-                for(var i= 0;i<99;i++){
-                    customCss.push('li.list-' + customStyle[p] + i + '{background-image:url(' + liiconpath + 'list-'+customStyle[p] + i + '.gif)}')
-                }
-                customCss.push('ol.custom_'+p+'{list-style:none;}ol.custom_'+p+' li{background-position:0 3px;background-repeat:no-repeat}');
-            }
-            switch(p){
-                case 'cn':
-                    customCss.push('li.list-'+p+'-paddingleft-1{padding-left:25px}');
-                    customCss.push('li.list-'+p+'-paddingleft-2{padding-left:40px}');
-                    customCss.push('li.list-'+p+'-paddingleft-3{padding-left:55px}');
-                    break;
-                case 'cn1':
-                    customCss.push('li.list-'+p+'-paddingleft-1{padding-left:30px}');
-                    customCss.push('li.list-'+p+'-paddingleft-2{padding-left:40px}');
-                    customCss.push('li.list-'+p+'-paddingleft-3{padding-left:55px}');
-                    break;
-                case 'cn2':
-                    customCss.push('li.list-'+p+'-paddingleft-1{padding-left:40px}');
-                    customCss.push('li.list-'+p+'-paddingleft-2{padding-left:55px}');
-                    customCss.push('li.list-'+p+'-paddingleft-3{padding-left:68px}');
-                    break;
-                case 'num':
-                case 'num1':
-                    customCss.push('li.list-'+p+'-paddingleft-1{padding-left:25px}');
-                    break;
-                case 'num2':
-                    customCss.push('li.list-'+p+'-paddingleft-1{padding-left:35px}');
-                    customCss.push('li.list-'+p+'-paddingleft-2{padding-left:40px}');
-                    break;
-                case 'dash':
-                    customCss.push('li.list-'+p+'-paddingleft{padding-left:35px}');
-                    break;
-                case 'dot':
-                    customCss.push('li.list-'+p+'-paddingleft{padding-left:20px}');
-            }
-        }
-        customCss.push('.list-paddingleft-1{padding-left:0}');
-        customCss.push('.list-paddingleft-2{padding-left:'+me.options.listDefaultPaddingLeft+'px}');
-        customCss.push('.list-paddingleft-3{padding-left:'+me.options.listDefaultPaddingLeft*2+'px}');
-        //如果不给宽度会在自定应样式里出现滚动条
-        utils.cssRule('list', 'ol,ul{margin:0;pading:0;'+(browser.ie ? '' : 'width:95%')+'}li{clear:both;}'+customCss.join('\n'), me.document);
-    });
-    //单独处理剪切的问题
-    me.ready(function(){
-        domUtils.on(me.body,'cut',function(){
-            setTimeout(function(){
-                var rng = me.selection.getRange(),li;
-                //trace:3416
-                if(!rng.collapsed){
-                    if(li = domUtils.findParentByTagName(rng.startContainer,'li',true)){
-                        if(!li.nextSibling && domUtils.isEmptyBlock(li)){
-                            var pn = li.parentNode,node;
-                            if(node = pn.previousSibling){
-                                domUtils.remove(pn);
-                                rng.setStartAtLast(node).collapse(true);
-                                rng.select(true);
-                            }else if(node = pn.nextSibling){
-                                domUtils.remove(pn);
-                                rng.setStartAtFirst(node).collapse(true);
-                                rng.select(true);
-                            }else{
-                                var tmpNode = me.document.createElement('p');
-                                domUtils.fillNode(me.document,tmpNode);
-                                pn.parentNode.insertBefore(tmpNode,pn);
-                                domUtils.remove(pn);
-                                rng.setStart(tmpNode,0).collapse(true);
-                                rng.select(true);
-                            }
-                        }
-                    }
-                }
-
-            })
-        })
-    });
-
-    function getStyle(node){
-        var cls = node.className;
-        if(domUtils.hasClass(node,/custom_/)){
-            return cls.match(/custom_(\w+)/)[1]
-        }
-        return domUtils.getStyle(node, 'list-style-type')
-
-    }
-
-    me.addListener('beforepaste',function(type,html){
-        var me = this,
-            rng = me.selection.getRange(),li;
-        var root = UE.htmlparser(html.html,true);
-        if(li = domUtils.findParentByTagName(rng.startContainer,'li',true)){
-            var list = li.parentNode,tagName = list.tagName == 'OL' ? 'ul':'ol';
-            utils.each(root.getNodesByTagName(tagName),function(n){
-                n.tagName = list.tagName;
-                n.setAttr();
-                if(n.parentNode === root){
-                    type = getStyle(list) || (list.tagName == 'OL' ? 'decimal' : 'disc')
-                }else{
-                    var className = n.parentNode.getAttr('class');
-                    if(className && /custom_/.test(className)){
-                        type = className.match(/custom_(\w+)/)[1]
-                    }else{
-                        type = n.parentNode.getStyle('list-style-type');
-                    }
-                    if(!type){
-                        type = list.tagName == 'OL' ? 'decimal' : 'disc';
-                    }
-                }
-                var index = utils.indexOf(listStyle[list.tagName], type);
-                if(n.parentNode !== root)
-                    index = index + 1 == listStyle[list.tagName].length ? 0 : index + 1;
-                var currentStyle = listStyle[list.tagName][index];
-                if(customStyle[currentStyle]){
-                    n.setAttr('class', 'custom_' + currentStyle)
-
-                }else{
-                    n.setStyle('list-style-type',currentStyle)
-                }
-            })
-
-        }
-
-        html.html = root.toHtml();
-    });
-    //进入编辑器的li要套p标签
-    me.addInputRule(function(root){
-        utils.each(root.getNodesByTagName('li'),function(li){
-            var tmpP = UE.uNode.createElement('p');
-            for(var i= 0,ci;ci=li.children[i];){
-                if(ci.type == 'text' || dtd.p[ci.tagName]){
-                    tmpP.appendChild(ci);
-                }else{
-                    if(tmpP.firstChild()){
-                        li.insertBefore(tmpP,ci);
-                        tmpP = UE.uNode.createElement('p');
-                        i = i + 2;
-                    }else{
-                        i++;
-                    }
-
-                }
-            }
-            if(tmpP.firstChild() && !tmpP.parentNode || !li.firstChild()){
-                li.appendChild(tmpP);
-            }
-            //trace:3357
-            //p不能为空
-            if (!tmpP.firstChild()) {
-                tmpP.innerHTML(browser.ie ? '&nbsp;' : '<br/>')
-            }
-            //去掉末尾的空白
-            var p = li.firstChild();
-            var lastChild = p.lastChild();
-            if(lastChild && lastChild.type == 'text' && /^\s*$/.test(lastChild.data)){
-                p.removeChild(lastChild)
-            }
-        });
-        if(me.options.autoTransWordToList){
-            var orderlisttype = {
-                    'num1':/^\d+\)/,
-                    'decimal':/^\d+\./,
-                    'lower-alpha':/^[a-z]+\)/,
-                    'upper-alpha':/^[A-Z]+\./,
-                    'cn':/^[\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+[\u3001]/,
-                    'cn2':/^\([\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+\)/
-                },
-                unorderlisttype = {
-                    'square':'n'
-                };
-            function checkListType(content,container){
-                var span = container.firstChild();
-                if(span &&  span.type == 'element' && span.tagName == 'span' && /Wingdings|Symbol/.test(span.getStyle('font-family'))){
-                    for(var p in unorderlisttype){
-                        if(unorderlisttype[p] == span.data){
-                            return p
-                        }
-                    }
-                    return 'disc'
-                }
-                for(var p in orderlisttype){
-                    if(orderlisttype[p].test(content)){
-                        return p;
-                    }
-                }
-
-            }
-            utils.each(root.getNodesByTagName('p'),function(node){
-                if(node.getAttr('class') != 'MsoListParagraph'){
-                    return
-                }
-
-                //word粘贴过来的会带有margin要去掉,但这样也可能会误命中一些央视
-                node.setStyle('margin','');
-                node.setStyle('margin-left','');
-                node.setAttr('class','');
-
-                function appendLi(list,p,type){
-                    if(list.tagName == 'ol'){
-                        if(browser.ie){
-                            var first = p.firstChild();
-                            if(first.type =='element' && first.tagName == 'span' && orderlisttype[type].test(first.innerText())){
-                                p.removeChild(first);
-                            }
-                        }else{
-                            p.innerHTML(p.innerHTML().replace(orderlisttype[type],''));
-                        }
-                    }else{
-                        p.removeChild(p.firstChild())
-                    }
-
-                    var li = UE.uNode.createElement('li');
-                    li.appendChild(p);
-                    list.appendChild(li);
-                }
-                var tmp = node,type,cacheNode = node;
-
-                if(node.parentNode.tagName != 'li' && (type = checkListType(node.innerText(),node))){
-
-                    var list = UE.uNode.createElement(me.options.insertorderedlist.hasOwnProperty(type) ? 'ol' : 'ul');
-                    if(customStyle[type]){
-                        list.setAttr('class','custom_'+type)
-                    }else{
-                        list.setStyle('list-style-type',type)
-                    }
-                    while(node && node.parentNode.tagName != 'li' && checkListType(node.innerText(),node)){
-                        tmp = node.nextSibling();
-                        if(!tmp){
-                            node.parentNode.insertBefore(list,node)
-                        }
-                        appendLi(list,node,type);
-                        node = tmp;
-                    }
-                    if(!list.parentNode && node && node.parentNode){
-                        node.parentNode.insertBefore(list,node)
-                    }
-                }
-                var span = cacheNode.firstChild();
-                if(span && span.type == 'element' && span.tagName == 'span' && /^\s*(&nbsp;)+\s*$/.test(span.innerText())){
-                    span.parentNode.removeChild(span)
-                }
-            })
-        }
-
-    });
-
-    //调整索引标签
-    me.addListener('contentchange',function(){
-        adjustListStyle(me.document)
-    });
-
-    function adjustListStyle(doc,ignore){
-        utils.each(domUtils.getElementsByTagName(doc,'ol ul'),function(node){
-
-            if(!domUtils.inDoc(node,doc))
-                return;
-
-            var parent = node.parentNode;
-            if(parent.tagName == node.tagName){
-                var nodeStyleType = getStyle(node) || (node.tagName == 'OL' ? 'decimal' : 'disc'),
-                    parentStyleType = getStyle(parent) || (parent.tagName == 'OL' ? 'decimal' : 'disc');
-                if(nodeStyleType == parentStyleType){
-                    var styleIndex = utils.indexOf(listStyle[node.tagName], nodeStyleType);
-                    styleIndex = styleIndex + 1 == listStyle[node.tagName].length ? 0 : styleIndex + 1;
-                    setListStyle(node,listStyle[node.tagName][styleIndex])
-                }
-
-            }
-            var index = 0,type = 2;
-            if( domUtils.hasClass(node,/custom_/)){
-                if(!(/[ou]l/i.test(parent.tagName) && domUtils.hasClass(parent,/custom_/))){
-                    type = 1;
-                }
-            }else{
-                if(/[ou]l/i.test(parent.tagName) && domUtils.hasClass(parent,/custom_/)){
-                    type = 3;
-                }
-            }
-
-            var style = domUtils.getStyle(node, 'list-style-type');
-            style && (node.style.cssText = 'list-style-type:' + style);
-            node.className = utils.trim(node.className.replace(/list-paddingleft-\w+/,'')) + ' list-paddingleft-' + type;
-            utils.each(domUtils.getElementsByTagName(node,'li'),function(li){
-                li.style.cssText && (li.style.cssText = '');
-                if(!li.firstChild){
-                    domUtils.remove(li);
-                    return;
-                }
-                if(li.parentNode !== node){
-                    return;
-                }
-                index++;
-                if(domUtils.hasClass(node,/custom_/) ){
-                    var paddingLeft = 1,currentStyle = getStyle(node);
-                    if(node.tagName == 'OL'){
-                        if(currentStyle){
-                            switch(currentStyle){
-                                case 'cn' :
-                                case 'cn1':
-                                case 'cn2':
-                                    if(index > 10 && (index % 10 == 0 || index > 10 && index < 20)){
-                                        paddingLeft = 2
-                                    }else if(index > 20){
-                                        paddingLeft = 3
-                                    }
-                                    break;
-                                case 'num2' :
-                                    if(index > 9){
-                                        paddingLeft = 2
-                                    }
-                            }
-                        }
-                        li.className = 'list-'+customStyle[currentStyle]+ index + ' ' + 'list-'+currentStyle+'-paddingleft-' + paddingLeft;
-                    }else{
-                        li.className = 'list-'+customStyle[currentStyle]  + ' ' + 'list-'+currentStyle+'-paddingleft';
-                    }
-                }else{
-                    li.className = li.className.replace(/list-[\w\-]+/gi,'');
-                }
-                var className = li.getAttribute('class');
-                if(className !== null && !className.replace(/\s/g,'')){
-                    domUtils.removeAttributes(li,'class')
-                }
-            });
-            !ignore && adjustList(node,node.tagName.toLowerCase(),getStyle(node)||domUtils.getStyle(node, 'list-style-type'),true);
-        })
-    }
-    function adjustList(list, tag, style,ignoreEmpty) {
-        var nextList = list.nextSibling;
-        if (nextList && nextList.nodeType == 1 && nextList.tagName.toLowerCase() == tag && (getStyle(nextList) || domUtils.getStyle(nextList, 'list-style-type') || (tag == 'ol' ? 'decimal' : 'disc')) == style) {
-            domUtils.moveChild(nextList, list);
-            if (nextList.childNodes.length == 0) {
-                domUtils.remove(nextList);
-            }
-        }
-        if(nextList && domUtils.isFillChar(nextList)){
-            domUtils.remove(nextList);
-        }
-        var preList = list.previousSibling;
-        if (preList && preList.nodeType == 1 && preList.tagName.toLowerCase() == tag && (getStyle(preList) || domUtils.getStyle(preList, 'list-style-type') || (tag == 'ol' ? 'decimal' : 'disc')) == style) {
-            domUtils.moveChild(list, preList);
-        }
-        if(preList && domUtils.isFillChar(preList)){
-            domUtils.remove(preList);
-        }
-        !ignoreEmpty && domUtils.isEmptyBlock(list) && domUtils.remove(list);
-        if(getStyle(list)){
-            adjustListStyle(list.ownerDocument,true)
-        }
-    }
-
-    function setListStyle(list,style){
-        if(customStyle[style]){
-            list.className = 'custom_' + style;
-        }
-        try{
-            domUtils.setStyle(list, 'list-style-type', style);
-        }catch(e){}
-    }
-    function clearEmptySibling(node) {
-        var tmpNode = node.previousSibling;
-        if (tmpNode && domUtils.isEmptyBlock(tmpNode)) {
-            domUtils.remove(tmpNode);
-        }
-        tmpNode = node.nextSibling;
-        if (tmpNode && domUtils.isEmptyBlock(tmpNode)) {
-            domUtils.remove(tmpNode);
-        }
-    }
-
-    me.addListener('keydown', function (type, evt) {
-        function preventAndSave() {
-            evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false);
-            me.fireEvent('contentchange');
-            me.undoManger && me.undoManger.save();
-        }
-        function findList(node,filterFn){
-            while(node && !domUtils.isBody(node)){
-                if(filterFn(node)){
-                    return null
-                }
-                if(node.nodeType == 1 && /[ou]l/i.test(node.tagName)){
-                    return node;
-                }
-                node = node.parentNode;
-            }
-            return null;
-        }
-        var keyCode = evt.keyCode || evt.which;
-        if (keyCode == 13 && !evt.shiftKey) {//回车
-            var rng = me.selection.getRange(),
-                parent = domUtils.findParent(rng.startContainer,function(node){return domUtils.isBlockElm(node)},true),
-                li = domUtils.findParentByTagName(rng.startContainer,'li',true);
-            if(parent && parent.tagName != 'PRE' && !li){
-                var html = parent.innerHTML.replace(new RegExp(domUtils.fillChar, 'g'),'');
-                if(/^\s*1\s*\.[^\d]/.test(html)){
-                    parent.innerHTML = html.replace(/^\s*1\s*\./,'');
-                    rng.setStartAtLast(parent).collapse(true).select();
-                    me.__hasEnterExecCommand = true;
-                    me.execCommand('insertorderedlist');
-                    me.__hasEnterExecCommand = false;
-                }
-            }
-            var range = me.selection.getRange(),
-                start = findList(range.startContainer,function (node) {
-                    return node.tagName == 'TABLE';
-                }),
-                end = range.collapsed ? start : findList(range.endContainer,function (node) {
-                    return node.tagName == 'TABLE';
-                });
-
-            if (start && end && start === end) {
-
-                if (!range.collapsed) {
-                    start = domUtils.findParentByTagName(range.startContainer, 'li', true);
-                    end = domUtils.findParentByTagName(range.endContainer, 'li', true);
-                    if (start && end && start === end) {
-                        range.deleteContents();
-                        li = domUtils.findParentByTagName(range.startContainer, 'li', true);
-                        if (li && domUtils.isEmptyBlock(li)) {
-
-                            pre = li.previousSibling;
-                            next = li.nextSibling;
-                            p = me.document.createElement('p');
-
-                            domUtils.fillNode(me.document, p);
-                            parentList = li.parentNode;
-                            if (pre && next) {
-                                range.setStart(next, 0).collapse(true).select(true);
-                                domUtils.remove(li);
-
-                            } else {
-                                if (!pre && !next || !pre) {
-
-                                    parentList.parentNode.insertBefore(p, parentList);
-
-
-                                } else {
-                                    li.parentNode.parentNode.insertBefore(p, parentList.nextSibling);
-                                }
-                                domUtils.remove(li);
-                                if (!parentList.firstChild) {
-                                    domUtils.remove(parentList);
-                                }
-                                range.setStart(p, 0).setCursor();
-
-
-                            }
-                            preventAndSave();
-                            return;
-
-                        }
-                    } else {
-                        var tmpRange = range.cloneRange(),
-                            bk = tmpRange.collapse(false).createBookmark();
-
-                        range.deleteContents();
-                        tmpRange.moveToBookmark(bk);
-                        var li = domUtils.findParentByTagName(tmpRange.startContainer, 'li', true);
-
-                        clearEmptySibling(li);
-                        tmpRange.select();
-                        preventAndSave();
-                        return;
-                    }
-                }
-
-
-                li = domUtils.findParentByTagName(range.startContainer, 'li', true);
-
-                if (li) {
-                    if (domUtils.isEmptyBlock(li)) {
-                        bk = range.createBookmark();
-                        var parentList = li.parentNode;
-                        if (li !== parentList.lastChild) {
-                            domUtils.breakParent(li, parentList);
-                            clearEmptySibling(li);
-                        } else {
-
-                            parentList.parentNode.insertBefore(li, parentList.nextSibling);
-                            if (domUtils.isEmptyNode(parentList)) {
-                                domUtils.remove(parentList);
-                            }
-                        }
-                        //嵌套不处理
-                        if (!dtd.$list[li.parentNode.tagName]) {
-
-                            if (!domUtils.isBlockElm(li.firstChild)) {
-                                p = me.document.createElement('p');
-                                li.parentNode.insertBefore(p, li);
-                                while (li.firstChild) {
-                                    p.appendChild(li.firstChild);
-                                }
-                                domUtils.remove(li);
-                            } else {
-                                domUtils.remove(li, true);
-                            }
-                        }
-                        range.moveToBookmark(bk).select();
-
-
-                    } else {
-                        var first = li.firstChild;
-                        if (!first || !domUtils.isBlockElm(first)) {
-                            var p = me.document.createElement('p');
-
-                            !li.firstChild && domUtils.fillNode(me.document, p);
-                            while (li.firstChild) {
-
-                                p.appendChild(li.firstChild);
-                            }
-                            li.appendChild(p);
-                            first = p;
-                        }
-
-                        var span = me.document.createElement('span');
-
-                        range.insertNode(span);
-                        domUtils.breakParent(span, li);
-
-                        var nextLi = span.nextSibling;
-                        first = nextLi.firstChild;
-
-                        if (!first) {
-                            p = me.document.createElement('p');
-
-                            domUtils.fillNode(me.document, p);
-                            nextLi.appendChild(p);
-                            first = p;
-                        }
-                        if (domUtils.isEmptyNode(first)) {
-                            first.innerHTML = '';
-                            domUtils.fillNode(me.document, first);
-                        }
-
-                        range.setStart(first, 0).collapse(true).shrinkBoundary().select();
-                        domUtils.remove(span);
-                        var pre = nextLi.previousSibling;
-                        if (pre && domUtils.isEmptyBlock(pre)) {
-                            pre.innerHTML = '<p></p>';
-                            domUtils.fillNode(me.document, pre.firstChild);
-                        }
-
-                    }
-//                        }
-                    preventAndSave();
-                }
-
-
-            }
-
-
-        }
-        if (keyCode == 8) {
-            //修中ie中li下的问题
-            range = me.selection.getRange();
-            if (range.collapsed && domUtils.isStartInblock(range)) {
-                tmpRange = range.cloneRange().trimBoundary();
-                li = domUtils.findParentByTagName(range.startContainer, 'li', true);
-                //要在li的最左边,才能处理
-                if (li && domUtils.isStartInblock(tmpRange)) {
-                    start = domUtils.findParentByTagName(range.startContainer, 'p', true);
-                    if (start && start !== li.firstChild) {
-                        var parentList = domUtils.findParentByTagName(start,['ol','ul']);
-                        domUtils.breakParent(start,parentList);
-                        clearEmptySibling(start);
-                        me.fireEvent('contentchange');
-                        range.setStart(start,0).setCursor(false,true);
-                        me.fireEvent('saveScene');
-                        domUtils.preventDefault(evt);
-                        return;
-                    }
-
-                    if (li && (pre = li.previousSibling)) {
-                        if (keyCode == 46 && li.childNodes.length) {
-                            return;
-                        }
-                        //有可能上边的兄弟节点是个2级菜单,要追加到2级菜单的最后的li
-                        if (dtd.$list[pre.tagName]) {
-                            pre = pre.lastChild;
-                        }
-                        me.undoManger && me.undoManger.save();
-                        first = li.firstChild;
-                        if (domUtils.isBlockElm(first)) {
-                            if (domUtils.isEmptyNode(first)) {
-//                                    range.setEnd(pre, pre.childNodes.length).shrinkBoundary().collapse().select(true);
-                                pre.appendChild(first);
-                                range.setStart(first, 0).setCursor(false, true);
-                                //first不是唯一的节点
-                                while (li.firstChild) {
-                                    pre.appendChild(li.firstChild);
-                                }
-                            } else {
-
-                                span = me.document.createElement('span');
-                                range.insertNode(span);
-                                //判断pre是否是空的节点,如果是<p><br/></p>类型的空节点,干掉p标签防止它占位
-                                if (domUtils.isEmptyBlock(pre)) {
-                                    pre.innerHTML = '';
-                                }
-                                domUtils.moveChild(li, pre);
-                                range.setStartBefore(span).collapse(true).select(true);
-
-                                domUtils.remove(span);
-
-                            }
-                        } else {
-                            if (domUtils.isEmptyNode(li)) {
-                                var p = me.document.createElement('p');
-                                pre.appendChild(p);
-                                range.setStart(p, 0).setCursor();
-//                                    range.setEnd(pre, pre.childNodes.length).shrinkBoundary().collapse().select(true);
-                            } else {
-                                range.setEnd(pre, pre.childNodes.length).collapse().select(true);
-                                while (li.firstChild) {
-                                    pre.appendChild(li.firstChild);
-                                }
-                            }
-                        }
-                        domUtils.remove(li);
-                        me.fireEvent('contentchange');
-                        me.fireEvent('saveScene');
-                        domUtils.preventDefault(evt);
-                        return;
-
-                    }
-                    //trace:980
-
-                    if (li && !li.previousSibling) {
-                        var parentList = li.parentNode;
-                        var bk = range.createBookmark();
-                        if(domUtils.isTagNode(parentList.parentNode,'ol ul')){
-                            parentList.parentNode.insertBefore(li,parentList);
-                            if(domUtils.isEmptyNode(parentList)){
-                                domUtils.remove(parentList)
-                            }
-                        }else{
-
-                            while(li.firstChild){
-                                parentList.parentNode.insertBefore(li.firstChild,parentList);
-                            }
-
-                            domUtils.remove(li);
-                            if(domUtils.isEmptyNode(parentList)){
-                                domUtils.remove(parentList)
-                            }
-
-                        }
-                        range.moveToBookmark(bk).setCursor(false,true);
-                        me.fireEvent('contentchange');
-                        me.fireEvent('saveScene');
-                        domUtils.preventDefault(evt);
-                        return;
-
-                    }
-
-
-                }
-
-
-            }
-
-        }
-    });
-
-    me.addListener('keyup',function(type, evt){
-        var keyCode = evt.keyCode || evt.which;
-        if (keyCode == 8) {
-            var rng = me.selection.getRange(),list;
-            if(list = domUtils.findParentByTagName(rng.startContainer,['ol', 'ul'],true)){
-                adjustList(list,list.tagName.toLowerCase(),getStyle(list)||domUtils.getComputedStyle(list,'list-style-type'),true)
-            }
-        }
-    });
-    //处理tab键
-    me.addListener('tabkeydown',function(){
-
-        var range = me.selection.getRange();
-
-        //控制级数
-        function checkLevel(li){
-            if(me.options.maxListLevel != -1){
-                var level = li.parentNode,levelNum = 0;
-                while(/[ou]l/i.test(level.tagName)){
-                    levelNum++;
-                    level = level.parentNode;
-                }
-                if(levelNum >= me.options.maxListLevel){
-                    return true;
-                }
-            }
-        }
-        //只以开始为准
-        //todo 后续改进
-        var li = domUtils.findParentByTagName(range.startContainer, 'li', true);
-        if(li){
-
-            var bk;
-            if(range.collapsed){
-                if(checkLevel(li))
-                    return true;
-                var parentLi = li.parentNode,
-                    list = me.document.createElement(parentLi.tagName),
-                    index = utils.indexOf(listStyle[list.tagName], getStyle(parentLi)||domUtils.getComputedStyle(parentLi, 'list-style-type'));
-                index = index + 1 == listStyle[list.tagName].length ? 0 : index + 1;
-                var currentStyle = listStyle[list.tagName][index];
-                setListStyle(list,currentStyle);
-                if(domUtils.isStartInblock(range)){
-                    me.fireEvent('saveScene');
-                    bk = range.createBookmark();
-                    parentLi.insertBefore(list, li);
-                    list.appendChild(li);
-                    adjustList(list,list.tagName.toLowerCase(),currentStyle);
-                    me.fireEvent('contentchange');
-                    range.moveToBookmark(bk).select(true);
-                    return true;
-                }
-            }else{
-                me.fireEvent('saveScene');
-                bk = range.createBookmark();
-                for(var i= 0,closeList,parents = domUtils.findParents(li),ci;ci=parents[i++];){
-                    if(domUtils.isTagNode(ci,'ol ul')){
-                        closeList = ci;
-                        break;
-                    }
-                }
-                var current = li;
-                if(bk.end){
-                    while(current && !(domUtils.getPosition(current, bk.end) & domUtils.POSITION_FOLLOWING)){
-                        if(checkLevel(current)){
-                            current = domUtils.getNextDomNode(current,false,null,function(node){return node !== closeList});
-                            continue;
-                        }
-                        var parentLi = current.parentNode,
-                            list = me.document.createElement(parentLi.tagName),
-                            index = utils.indexOf(listStyle[list.tagName], getStyle(parentLi)||domUtils.getComputedStyle(parentLi, 'list-style-type'));
-                        var currentIndex = index + 1 == listStyle[list.tagName].length ? 0 : index + 1;
-                        var currentStyle = listStyle[list.tagName][currentIndex];
-                        setListStyle(list,currentStyle);
-                        parentLi.insertBefore(list, current);
-                        while(current && !(domUtils.getPosition(current, bk.end) & domUtils.POSITION_FOLLOWING)){
-                            li = current.nextSibling;
-                            list.appendChild(current);
-                            if(!li || domUtils.isTagNode(li,'ol ul')){
-                                if(li){
-                                    while(li = li.firstChild){
-                                        if(li.tagName == 'LI'){
-                                            break;
-                                        }
-                                    }
-                                }else{
-                                    li = domUtils.getNextDomNode(current,false,null,function(node){return node !== closeList});
-                                }
-                                break;
-                            }
-                            current = li;
-                        }
-                        adjustList(list,list.tagName.toLowerCase(),currentStyle);
-                        current = li;
-                    }
-                }
-                me.fireEvent('contentchange');
-                range.moveToBookmark(bk).select();
-                return true;
-            }
-        }
-
-    });
-    function getLi(start){
-        while(start && !domUtils.isBody(start)){
-            if(start.nodeName == 'TABLE'){
-                return null;
-            }
-            if(start.nodeName == 'LI'){
-                return start
-            }
-            start = start.parentNode;
-        }
-    }
-
-    /**
-     * 有序列表,与“insertunorderedlist”命令互斥
-     * @command insertorderedlist
-     * @method execCommand
-     * @param { String } command 命令字符串
-     * @param { String } style 插入的有序列表类型,值为:decimal,lower-alpha,lower-roman,upper-alpha,upper-roman,cn,cn1,cn2,num,num1,num2
-     * @example
-     * ```javascript
-     * editor.execCommand( 'insertunorderedlist','decimal');
-     * ```
-     */
-    /**
-     * 查询当前选区内容是否有序列表
-     * @command insertorderedlist
-     * @method queryCommandState
-     * @param { String } cmd 命令字符串
-     * @return { int } 如果当前选区是有序列表返回1,否则返回0
-     * @example
-     * ```javascript
-     * editor.queryCommandState( 'insertorderedlist' );
-     * ```
-     */
-    /**
-     * 查询当前选区内容是否有序列表
-     * @command insertorderedlist
-     * @method queryCommandValue
-     * @param { String } cmd 命令字符串
-     * @return { String } 返回当前有序列表的类型,值为null或decimal,lower-alpha,lower-roman,upper-alpha,upper-roman,cn,cn1,cn2,num,num1,num2
-     * @example
-     * ```javascript
-     * editor.queryCommandValue( 'insertorderedlist' );
-     * ```
-     */
-
-    /**
-     * 无序列表,与“insertorderedlist”命令互斥
-     * @command insertunorderedlist
-     * @method execCommand
-     * @param { String } command 命令字符串
-     * @param { String } style 插入的无序列表类型,值为:circle,disc,square,dash,dot
-     * @example
-     * ```javascript
-     * editor.execCommand( 'insertunorderedlist','circle');
-     * ```
-     */
-    /**
-     * 查询当前是否有word文档粘贴进来的图片
-     * @command insertunorderedlist
-     * @method insertunorderedlist
-     * @param { String } command 命令字符串
-     * @return { int } 如果当前选区是无序列表返回1,否则返回0
-     * @example
-     * ```javascript
-     * editor.queryCommandState( 'insertunorderedlist' );
-     * ```
-     */
-    /**
-     * 查询当前选区内容是否有序列表
-     * @command insertunorderedlist
-     * @method queryCommandValue
-     * @param { String } command 命令字符串
-     * @return { String } 返回当前无序列表的类型,值为null或circle,disc,square,dash,dot
-     * @example
-     * ```javascript
-     * editor.queryCommandValue( 'insertunorderedlist' );
-     * ```
-     */
-
-    me.commands['insertorderedlist'] =
-    me.commands['insertunorderedlist'] = {
-            execCommand:function (command, style) {
-
-                if (!style) {
-                    style = command.toLowerCase() == 'insertorderedlist' ? 'decimal' : 'disc';
-                }
-                var me = this,
-                    range = this.selection.getRange(),
-                    filterFn = function (node) {
-                        return   node.nodeType == 1 ? node.tagName.toLowerCase() != 'br' : !domUtils.isWhitespace(node);
-                    },
-                    tag = command.toLowerCase() == 'insertorderedlist' ? 'ol' : 'ul',
-                    frag = me.document.createDocumentFragment();
-                //去掉是因为会出现选到末尾,导致adjustmentBoundary缩到ol/ul的位置
-                //range.shrinkBoundary();//.adjustmentBoundary();
-                range.adjustmentBoundary().shrinkBoundary();
-                var bko = range.createBookmark(true),
-                    start = getLi(me.document.getElementById(bko.start)),
-                    modifyStart = 0,
-                    end =  getLi(me.document.getElementById(bko.end)),
-                    modifyEnd = 0,
-                    startParent, endParent,
-                    list, tmp;
-
-                if (start || end) {
-                    start && (startParent = start.parentNode);
-                    if (!bko.end) {
-                        end = start;
-                    }
-                    end && (endParent = end.parentNode);
-
-                    if (startParent === endParent) {
-                        while (start !== end) {
-                            tmp = start;
-                            start = start.nextSibling;
-                            if (!domUtils.isBlockElm(tmp.firstChild)) {
-                                var p = me.document.createElement('p');
-                                while (tmp.firstChild) {
-                                    p.appendChild(tmp.firstChild);
-                                }
-                                tmp.appendChild(p);
-                            }
-                            frag.appendChild(tmp);
-                        }
-                        tmp = me.document.createElement('span');
-                        startParent.insertBefore(tmp, end);
-                        if (!domUtils.isBlockElm(end.firstChild)) {
-                            p = me.document.createElement('p');
-                            while (end.firstChild) {
-                                p.appendChild(end.firstChild);
-                            }
-                            end.appendChild(p);
-                        }
-                        frag.appendChild(end);
-                        domUtils.breakParent(tmp, startParent);
-                        if (domUtils.isEmptyNode(tmp.previousSibling)) {
-                            domUtils.remove(tmp.previousSibling);
-                        }
-                        if (domUtils.isEmptyNode(tmp.nextSibling)) {
-                            domUtils.remove(tmp.nextSibling)
-                        }
-                        var nodeStyle = getStyle(startParent) || domUtils.getComputedStyle(startParent, 'list-style-type') || (command.toLowerCase() == 'insertorderedlist' ? 'decimal' : 'disc');
-                        if (startParent.tagName.toLowerCase() == tag && nodeStyle == style) {
-                            for (var i = 0, ci, tmpFrag = me.document.createDocumentFragment(); ci = frag.firstChild;) {
-                                if(domUtils.isTagNode(ci,'ol ul')){
-//                                  删除时,子列表不处理
-//                                  utils.each(domUtils.getElementsByTagName(ci,'li'),function(li){
-//                                        while(li.firstChild){
-//                                            tmpFrag.appendChild(li.firstChild);
-//                                        }
-//
-//                                    });
-                                    tmpFrag.appendChild(ci);
-                                }else{
-                                    while (ci.firstChild) {
-
-                                        tmpFrag.appendChild(ci.firstChild);
-                                        domUtils.remove(ci);
-                                    }
-                                }
-
-                            }
-                            tmp.parentNode.insertBefore(tmpFrag, tmp);
-                        } else {
-                            list = me.document.createElement(tag);
-                            setListStyle(list,style);
-                            list.appendChild(frag);
-                            tmp.parentNode.insertBefore(list, tmp);
-                        }
-
-                        domUtils.remove(tmp);
-                        list && adjustList(list, tag, style);
-                        range.moveToBookmark(bko).select();
-                        return;
-                    }
-                    //开始
-                    if (start) {
-                        while (start) {
-                            tmp = start.nextSibling;
-                            if (domUtils.isTagNode(start, 'ol ul')) {
-                                frag.appendChild(start);
-                            } else {
-                                var tmpfrag = me.document.createDocumentFragment(),
-                                    hasBlock = 0;
-                                while (start.firstChild) {
-                                    if (domUtils.isBlockElm(start.firstChild)) {
-                                        hasBlock = 1;
-                                    }
-                                    tmpfrag.appendChild(start.firstChild);
-                                }
-                                if (!hasBlock) {
-                                    var tmpP = me.document.createElement('p');
-                                    tmpP.appendChild(tmpfrag);
-                                    frag.appendChild(tmpP);
-                                } else {
-                                    frag.appendChild(tmpfrag);
-                                }
-                                domUtils.remove(start);
-                            }
-
-                            start = tmp;
-                        }
-                        startParent.parentNode.insertBefore(frag, startParent.nextSibling);
-                        if (domUtils.isEmptyNode(startParent)) {
-                            range.setStartBefore(startParent);
-                            domUtils.remove(startParent);
-                        } else {
-                            range.setStartAfter(startParent);
-                        }
-                        modifyStart = 1;
-                    }
-
-                    if (end && domUtils.inDoc(endParent, me.document)) {
-                        //结束
-                        start = endParent.firstChild;
-                        while (start && start !== end) {
-                            tmp = start.nextSibling;
-                            if (domUtils.isTagNode(start, 'ol ul')) {
-                                frag.appendChild(start);
-                            } else {
-                                tmpfrag = me.document.createDocumentFragment();
-                                hasBlock = 0;
-                                while (start.firstChild) {
-                                    if (domUtils.isBlockElm(start.firstChild)) {
-                                        hasBlock = 1;
-                                    }
-                                    tmpfrag.appendChild(start.firstChild);
-                                }
-                                if (!hasBlock) {
-                                    tmpP = me.document.createElement('p');
-                                    tmpP.appendChild(tmpfrag);
-                                    frag.appendChild(tmpP);
-                                } else {
-                                    frag.appendChild(tmpfrag);
-                                }
-                                domUtils.remove(start);
-                            }
-                            start = tmp;
-                        }
-                        var tmpDiv = domUtils.createElement(me.document, 'div', {
-                            'tmpDiv':1
-                        });
-                        domUtils.moveChild(end, tmpDiv);
-
-                        frag.appendChild(tmpDiv);
-                        domUtils.remove(end);
-                        endParent.parentNode.insertBefore(frag, endParent);
-                        range.setEndBefore(endParent);
-                        if (domUtils.isEmptyNode(endParent)) {
-                            domUtils.remove(endParent);
-                        }
-
-                        modifyEnd = 1;
-                    }
-
-
-                }
-
-                if (!modifyStart) {
-                    range.setStartBefore(me.document.getElementById(bko.start));
-                }
-                if (bko.end && !modifyEnd) {
-                    range.setEndAfter(me.document.getElementById(bko.end));
-                }
-                range.enlarge(true, function (node) {
-                    return notExchange[node.tagName];
-                });
-
-                frag = me.document.createDocumentFragment();
-
-                var bk = range.createBookmark(),
-                    current = domUtils.getNextDomNode(bk.start, false, filterFn),
-                    tmpRange = range.cloneRange(),
-                    tmpNode,
-                    block = domUtils.isBlockElm;
-
-                while (current && current !== bk.end && (domUtils.getPosition(current, bk.end) & domUtils.POSITION_PRECEDING)) {
-
-                    if (current.nodeType == 3 || dtd.li[current.tagName]) {
-                        if (current.nodeType == 1 && dtd.$list[current.tagName]) {
-                            while (current.firstChild) {
-                                frag.appendChild(current.firstChild);
-                            }
-                            tmpNode = domUtils.getNextDomNode(current, false, filterFn);
-                            domUtils.remove(current);
-                            current = tmpNode;
-                            continue;
-
-                        }
-                        tmpNode = current;
-                        tmpRange.setStartBefore(current);
-
-                        while (current && current !== bk.end && (!block(current) || domUtils.isBookmarkNode(current) )) {
-                            tmpNode = current;
-                            current = domUtils.getNextDomNode(current, false, null, function (node) {
-                                return !notExchange[node.tagName];
-                            });
-                        }
-
-                        if (current && block(current)) {
-                            tmp = domUtils.getNextDomNode(tmpNode, false, filterFn);
-                            if (tmp && domUtils.isBookmarkNode(tmp)) {
-                                current = domUtils.getNextDomNode(tmp, false, filterFn);
-                                tmpNode = tmp;
-                            }
-                        }
-                        tmpRange.setEndAfter(tmpNode);
-
-                        current = domUtils.getNextDomNode(tmpNode, false, filterFn);
-
-                        var li = range.document.createElement('li');
-
-                        li.appendChild(tmpRange.extractContents());
-                        if(domUtils.isEmptyNode(li)){
-                            var tmpNode = range.document.createElement('p');
-                            while(li.firstChild){
-                                tmpNode.appendChild(li.firstChild)
-                            }
-                            li.appendChild(tmpNode);
-                        }
-                        frag.appendChild(li);
-                    } else {
-                        current = domUtils.getNextDomNode(current, true, filterFn);
-                    }
-                }
-                range.moveToBookmark(bk).collapse(true);
-                list = me.document.createElement(tag);
-                setListStyle(list,style);
-                list.appendChild(frag);
-                range.insertNode(list);
-                //当前list上下看能否合并
-                adjustList(list, tag, style);
-                //去掉冗余的tmpDiv
-                for (var i = 0, ci, tmpDivs = domUtils.getElementsByTagName(list, 'div'); ci = tmpDivs[i++];) {
-                    if (ci.getAttribute('tmpDiv')) {
-                        domUtils.remove(ci, true)
-                    }
-                }
-                range.moveToBookmark(bko).select();
-
-            },
-            queryCommandState:function (command) {
-                var tag = command.toLowerCase() == 'insertorderedlist' ? 'ol' : 'ul';
-                var path = this.selection.getStartElementPath();
-                for(var i= 0,ci;ci = path[i++];){
-                    if(ci.nodeName == 'TABLE'){
-                        return 0
-                    }
-                    if(tag == ci.nodeName.toLowerCase()){
-                        return 1
-                    };
-                }
-                return 0;
-
-            },
-            queryCommandValue:function (command) {
-                var tag = command.toLowerCase() == 'insertorderedlist' ? 'ol' : 'ul';
-                var path = this.selection.getStartElementPath(),
-                    node;
-                for(var i= 0,ci;ci = path[i++];){
-                    if(ci.nodeName == 'TABLE'){
-                        node = null;
-                        break;
-                    }
-                    if(tag == ci.nodeName.toLowerCase()){
-                        node = ci;
-                        break;
-                    };
-                }
-                return node ? getStyle(node) || domUtils.getComputedStyle(node, 'list-style-type') : null;
-            }
-        };
-};
-
-
-/**
- * 源码编辑插件
- * @file
- * @since 1.2.6.1
- */
-
-(function (){
-    var sourceEditors = {
-        textarea: function (editor, holder){
-            var textarea = holder.ownerDocument.createElement('textarea');
-            textarea.style.cssText = 'position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;';
-            // todo: IE下只有onresize属性可用... 很纠结
-            if (browser.ie && browser.version < 8) {
-                textarea.style.width = holder.offsetWidth + 'px';
-                textarea.style.height = holder.offsetHeight + 'px';
-                holder.onresize = function (){
-                    textarea.style.width = holder.offsetWidth + 'px';
-                    textarea.style.height = holder.offsetHeight + 'px';
-                };
-            }
-            holder.appendChild(textarea);
-            return {
-                setContent: function (content){
-                    textarea.value = content;
-                },
-                getContent: function (){
-                    return textarea.value;
-                },
-                select: function (){
-                    var range;
-                    if (browser.ie) {
-                        range = textarea.createTextRange();
-                        range.collapse(true);
-                        range.select();
-                    } else {
-                        //todo: chrome下无法设置焦点
-                        textarea.setSelectionRange(0, 0);
-                        textarea.focus();
-                    }
-                },
-                dispose: function (){
-                    holder.removeChild(textarea);
-                    // todo
-                    holder.onresize = null;
-                    textarea = null;
-                    holder = null;
-                }
-            };
-        },
-        codemirror: function (editor, holder){
-
-            var codeEditor = window.CodeMirror(holder, {
-                mode: "text/html",
-                tabMode: "indent",
-                lineNumbers: true,
-                lineWrapping:true
-            });
-            var dom = codeEditor.getWrapperElement();
-            dom.style.cssText = 'position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,"Courier new",monospace;font-size:13px;';
-            codeEditor.getScrollerElement().style.cssText = 'position:absolute;left:0;top:0;width:100%;height:100%;';
-            codeEditor.refresh();
-            return {
-                getCodeMirror:function(){
-                    return codeEditor;
-                },
-                setContent: function (content){
-                    codeEditor.setValue(content);
-                },
-                getContent: function (){
-                    return codeEditor.getValue();
-                },
-                select: function (){
-                    codeEditor.focus();
-                },
-                dispose: function (){
-                    holder.removeChild(dom);
-                    dom = null;
-                    codeEditor = null;
-                }
-            };
-        }
-    };
-
-    UE.plugins['source'] = function (){
-        var me = this;
-        var opt = this.options;
-        var sourceMode = false;
-        var sourceEditor;
-        var orgSetContent;
-        opt.sourceEditor = browser.ie  ? 'textarea' : (opt.sourceEditor || 'codemirror');
-
-        me.setOpt({
-            sourceEditorFirst:false
-        });
-        function createSourceEditor(holder){
-            return sourceEditors[opt.sourceEditor == 'codemirror' && window.CodeMirror ? 'codemirror' : 'textarea'](me, holder);
-        }
-
-        var bakCssText;
-        //解决在源码模式下getContent不能得到最新的内容问题
-        var oldGetContent,
-            bakAddress;
-
-        /**
-         * 切换源码模式和编辑模式
-         * @command source
-         * @method execCommand
-         * @param { String } cmd 命令字符串
-         * @example
-         * ```javascript
-         * editor.execCommand( 'source');
-         * ```
-         */
-
-        /**
-         * 查询当前编辑区域的状态是源码模式还是可视化模式
-         * @command source
-         * @method queryCommandState
-         * @param { String } cmd 命令字符串
-         * @return { int } 如果当前是源码编辑模式,返回1,否则返回0
-         * @example
-         * ```javascript
-         * editor.queryCommandState( 'source' );
-         * ```
-         */
-
-        me.commands['source'] = {
-            execCommand: function (){
-
-                sourceMode = !sourceMode;
-                if (sourceMode) {
-                    bakAddress = me.selection.getRange().createAddress(false,true);
-                    me.undoManger && me.undoManger.save(true);
-                    if(browser.gecko){
-                        me.body.contentEditable = false;
-                    }
-
-                    bakCssText = me.iframe.style.cssText;
-                    me.iframe.style.cssText += 'position:absolute;left:-32768px;top:-32768px;';
-
-
-                    me.fireEvent('beforegetcontent');
-                    var root = UE.htmlparser(me.body.innerHTML);
-                    me.filterOutputRule(root);
-                    root.traversal(function (node) {
-                        if (node.type == 'element') {
-                            switch (node.tagName) {
-                                case 'td':
-                                case 'th':
-                                case 'caption':
-                                if(node.children && node.children.length == 1){
-                                    if(node.firstChild().tagName == 'br' ){
-                                        node.removeChild(node.firstChild())
-                                    }
-                                };
-                                break;
-                                case 'pre':
-                                    node.innerText(node.innerText().replace(/&nbsp;/g,' '))
-
-                            }
-                        }
-                    });
-
-                    me.fireEvent('aftergetcontent');
-
-                    var content = root.toHtml(true);
-
-                    sourceEditor = createSourceEditor(me.iframe.parentNode);
-
-                    sourceEditor.setContent(content);
-
-                    orgSetContent = me.setContent;
-
-                    me.setContent = function(html){
-                        //这里暂时不触发事件,防止报错
-                        var root = UE.htmlparser(html);
-                        me.filterInputRule(root);
-                        html = root.toHtml();
-                        sourceEditor.setContent(html);
-                    };
-
-                    setTimeout(function (){
-                        sourceEditor.select();
-                        me.addListener('fullscreenchanged', function(){
-                            try{
-                                sourceEditor.getCodeMirror().refresh()
-                            }catch(e){}
-                        });
-                    });
-
-                    //重置getContent,源码模式下取值也能是最新的数据
-                    oldGetContent = me.getContent;
-                    me.getContent = function (){
-                        return sourceEditor.getContent() || '<p>' + (browser.ie ? '' : '<br/>')+'</p>';
-                    };
-                } else {
-                    me.iframe.style.cssText = bakCssText;
-                    var cont = sourceEditor.getContent() || '<p>' + (browser.ie ? '' : '<br/>')+'</p>';
-                    //处理掉block节点前后的空格,有可能会误命中,暂时不考虑
-                    cont = cont.replace(new RegExp('[\\r\\t\\n ]*<\/?(\\w+)\\s*(?:[^>]*)>','g'), function(a,b){
-                        if(b && !dtd.$inlineWithA[b.toLowerCase()]){
-                            return a.replace(/(^[\n\r\t ]*)|([\n\r\t ]*$)/g,'');
-                        }
-                        return a.replace(/(^[\n\r\t]*)|([\n\r\t]*$)/g,'')
-                    });
-
-                    me.setContent = orgSetContent;
-
-                    me.setContent(cont);
-                    sourceEditor.dispose();
-                    sourceEditor = null;
-                    //还原getContent方法
-                    me.getContent = oldGetContent;
-                    var first = me.body.firstChild;
-                    //trace:1106 都删除空了,下边会报错,所以补充一个p占位
-                    if(!first){
-                        me.body.innerHTML = '<p>'+(browser.ie?'':'<br/>')+'</p>';
-                        first = me.body.firstChild;
-                    }
-
-
-                    //要在ifm为显示时ff才能取到selection,否则报错
-                    //这里不能比较位置了
-                    me.undoManger && me.undoManger.save(true);
-
-                    if(browser.gecko){
-
-                        var input = document.createElement('input');
-                        input.style.cssText = 'position:absolute;left:0;top:-32768px';
-
-                        document.body.appendChild(input);
-
-                        me.body.contentEditable = false;
-                        setTimeout(function(){
-                            domUtils.setViewportOffset(input, { left: -32768, top: 0 });
-                            input.focus();
-                            setTimeout(function(){
-                                me.body.contentEditable = true;
-                                me.selection.getRange().moveToAddress(bakAddress).select(true);
-                                domUtils.remove(input);
-                            });
-
-                        });
-                    }else{
-                        //ie下有可能报错,比如在代码顶头的情况
-                        try{
-                            me.selection.getRange().moveToAddress(bakAddress).select(true);
-                        }catch(e){}
-
-                    }
-                }
-                this.fireEvent('sourcemodechanged', sourceMode);
-            },
-            queryCommandState: function (){
-                return sourceMode|0;
-            },
-            notNeedUndo : 1
-        };
-        var oldQueryCommandState = me.queryCommandState;
-
-        me.queryCommandState = function (cmdName){
-            cmdName = cmdName.toLowerCase();
-            if (sourceMode) {
-                //源码模式下可以开启的命令
-                return cmdName in {
-                    'source' : 1,
-                    'fullscreen' : 1
-                } ? 1 : -1
-            }
-            return oldQueryCommandState.apply(this, arguments);
-        };
-
-        if(opt.sourceEditor == "codemirror"){
-
-            me.addListener("ready",function(){
-                utils.loadFile(document,{
-                    src : opt.codeMirrorJsUrl || opt.UEDITOR_HOME_URL + "third-party/codemirror/codemirror.js",
-                    tag : "script",
-                    type : "text/javascript",
-                    defer : "defer"
-                },function(){
-                    if(opt.sourceEditorFirst){
-                        setTimeout(function(){
-                            me.execCommand("source");
-                        },0);
-                    }
-                });
-                utils.loadFile(document,{
-                    tag : "link",
-                    rel : "stylesheet",
-                    type : "text/css",
-                    href : opt.codeMirrorCssUrl || opt.UEDITOR_HOME_URL + "third-party/codemirror/codemirror.css"
-                });
-
-            });
-        }
-
-    };
-
-})();
-///import core
-///import plugins/undo.js
-///commands 设置回车标签p或br
-///commandsName  EnterKey
-///commandsTitle  设置回车标签p或br
-/*
- * @description 处理回车
- * @author zhanyi
- */
-UE.plugins['enterkey'] = function() {
-    var hTag,
-        me = this,
-        tag = me.options.enterTag;
-    me.addListener('keyup', function(type, evt) {
-
-        var keyCode = evt.keyCode || evt.which;
-        if (keyCode == 13) {
-            var range = me.selection.getRange(),
-                start = range.startContainer,
-                doSave;
-
-            //修正在h1-h6里边回车后不能嵌套p的问题
-            if (!browser.ie) {
-
-                if (/h\d/i.test(hTag)) {
-                    if (browser.gecko) {
-                        var h = domUtils.findParentByTagName(start, [ 'h1', 'h2', 'h3', 'h4', 'h5', 'h6','blockquote','caption','table'], true);
-                        if (!h) {
-                            me.document.execCommand('formatBlock', false, '<p>');
-                            doSave = 1;
-                        }
-                    } else {
-                        //chrome remove div
-                        if (start.nodeType == 1) {
-                            var tmp = me.document.createTextNode(''),div;
-                            range.insertNode(tmp);
-                            div = domUtils.findParentByTagName(tmp, 'div', true);
-                            if (div) {
-                                var p = me.document.createElement('p');
-                                while (div.firstChild) {
-                                    p.appendChild(div.firstChild);
-                                }
-                                div.parentNode.insertBefore(p, div);
-                                domUtils.remove(div);
-                                range.setStartBefore(tmp).setCursor();
-                                doSave = 1;
-                            }
-                            domUtils.remove(tmp);
-
-                        }
-                    }
-
-                    if (me.undoManger && doSave) {
-                        me.undoManger.save();
-                    }
-                }
-                //没有站位符,会出现多行的问题
-                browser.opera &&  range.select();
-            }else{
-                me.fireEvent('saveScene',true,true)
-            }
-        }
-    });
-
-    me.addListener('keydown', function(type, evt) {
-        var keyCode = evt.keyCode || evt.which;
-        if (keyCode == 13) {//回车
-            if(me.fireEvent('beforeenterkeydown')){
-                domUtils.preventDefault(evt);
-                return;
-            }
-            me.fireEvent('saveScene',true,true);
-            hTag = '';
-
-
-            var range = me.selection.getRange();
-
-            if (!range.collapsed) {
-                //跨td不能删
-                var start = range.startContainer,
-                    end = range.endContainer,
-                    startTd = domUtils.findParentByTagName(start, 'td', true),
-                    endTd = domUtils.findParentByTagName(end, 'td', true);
-                if (startTd && endTd && startTd !== endTd || !startTd && endTd || startTd && !endTd) {
-                    evt.preventDefault ? evt.preventDefault() : ( evt.returnValue = false);
-                    return;
-                }
-            }
-            if (tag == 'p') {
-
-
-                if (!browser.ie) {
-
-                    start = domUtils.findParentByTagName(range.startContainer, ['ol','ul','p', 'h1', 'h2', 'h3', 'h4', 'h5', 'h6','blockquote','caption'], true);
-
-                    //opera下执行formatblock会在table的场景下有问题,回车在opera原生支持很好,所以暂时在opera去掉调用这个原生的command
-                    //trace:2431
-                    if (!start && !browser.opera) {
-
-                        me.document.execCommand('formatBlock', false, '<p>');
-
-                        if (browser.gecko) {
-                            range = me.selection.getRange();
-                            start = domUtils.findParentByTagName(range.startContainer, 'p', true);
-                            start && domUtils.removeDirtyAttr(start);
-                        }
-
-
-                    } else {
-                        hTag = start.tagName;
-                        start.tagName.toLowerCase() == 'p' && browser.gecko && domUtils.removeDirtyAttr(start);
-                    }
-
-                }
-
-            } else {
-                evt.preventDefault ? evt.preventDefault() : ( evt.returnValue = false);
-
-                if (!range.collapsed) {
-                    range.deleteContents();
-                    start = range.startContainer;
-                    if (start.nodeType == 1 && (start = start.childNodes[range.startOffset])) {
-                        while (start.nodeType == 1) {
-                            if (dtd.$empty[start.tagName]) {
-                                range.setStartBefore(start).setCursor();
-                                if (me.undoManger) {
-                                    me.undoManger.save();
-                                }
-                                return false;
-                            }
-                            if (!start.firstChild) {
-                                var br = range.document.createElement('br');
-                                start.appendChild(br);
-                                range.setStart(start, 0).setCursor();
-                                if (me.undoManger) {
-                                    me.undoManger.save();
-                                }
-                                return false;
-                            }
-                            start = start.firstChild;
-                        }
-                        if (start === range.startContainer.childNodes[range.startOffset]) {
-                            br = range.document.createElement('br');
-                            range.insertNode(br).setCursor();
-
-                        } else {
-                            range.setStart(start, 0).setCursor();
-                        }
-
-
-                    } else {
-                        br = range.document.createElement('br');
-                        range.insertNode(br).setStartAfter(br).setCursor();
-                    }
-
-
-                } else {
-                    br = range.document.createElement('br');
-                    range.insertNode(br);
-                    var parent = br.parentNode;
-                    if (parent.lastChild === br) {
-                        br.parentNode.insertBefore(br.cloneNode(true), br);
-                        range.setStartBefore(br);
-                    } else {
-                        range.setStartAfter(br);
-                    }
-                    range.setCursor();
-
-                }
-
-            }
-
-        }
-    });
-};
-
-/*
- *   处理特殊键的兼容性问题
- */
-UE.plugins['keystrokes'] = function() {
-    var me = this;
-    var collapsed = true;
-    me.addListener('keydown', function(type, evt) {
-        var keyCode = evt.keyCode || evt.which,
-            rng = me.selection.getRange();
-
-        //处理全选的情况
-        if(!rng.collapsed && !(evt.ctrlKey || evt.shiftKey || evt.altKey || evt.metaKey) && (keyCode >= 65 && keyCode <=90
-            || keyCode >= 48 && keyCode <= 57 ||
-            keyCode >= 96 && keyCode <= 111 || {
-                    13:1,
-                    8:1,
-                    46:1
-                }[keyCode])
-            ){
-
-            var tmpNode = rng.startContainer;
-            if(domUtils.isFillChar(tmpNode)){
-                rng.setStartBefore(tmpNode)
-            }
-            tmpNode = rng.endContainer;
-            if(domUtils.isFillChar(tmpNode)){
-                rng.setEndAfter(tmpNode)
-            }
-            rng.txtToElmBoundary();
-            //结束边界可能放到了br的前边,要把br包含进来
-            // x[xxx]<br/>
-            if(rng.endContainer && rng.endContainer.nodeType == 1){
-                tmpNode = rng.endContainer.childNodes[rng.endOffset];
-                if(tmpNode && domUtils.isBr(tmpNode)){
-                    rng.setEndAfter(tmpNode);
-                }
-            }
-            if(rng.startOffset == 0){
-                tmpNode = rng.startContainer;
-                if(domUtils.isBoundaryNode(tmpNode,'firstChild') ){
-                    tmpNode = rng.endContainer;
-                    if(rng.endOffset == (tmpNode.nodeType == 3 ? tmpNode.nodeValue.length : tmpNode.childNodes.length) && domUtils.isBoundaryNode(tmpNode,'lastChild')){
-                        me.fireEvent('saveScene');
-                        me.body.innerHTML = '<p>'+(browser.ie ? '' : '<br/>')+'</p>';
-                        rng.setStart(me.body.firstChild,0).setCursor(false,true);
-                        me._selectionChange();
-                        return;
-                    }
-                }
-            }
-        }
-
-        //处理backspace
-        if (keyCode == 8) {
-            rng = me.selection.getRange();
-            collapsed = rng.collapsed;
-            if(me.fireEvent('delkeydown',evt)){
-                return;
-            }
-            var start,end;
-            //避免按两次删除才能生效的问题
-            if(rng.collapsed && rng.inFillChar()){
-                start = rng.startContainer;
-
-                if(domUtils.isFillChar(start)){
-                    rng.setStartBefore(start).shrinkBoundary(true).collapse(true);
-                    domUtils.remove(start)
-                }else{
-                    start.nodeValue = start.nodeValue.replace(new RegExp('^' + domUtils.fillChar ),'');
-                    rng.startOffset--;
-                    rng.collapse(true).select(true)
-                }
-            }
-
-            //解决选中control元素不能删除的问题
-            if (start = rng.getClosedNode()) {
-                me.fireEvent('saveScene');
-                rng.setStartBefore(start);
-                domUtils.remove(start);
-                rng.setCursor();
-                me.fireEvent('saveScene');
-                domUtils.preventDefault(evt);
-                return;
-            }
-            //阻止在table上的删除
-            if (!browser.ie) {
-                start = domUtils.findParentByTagName(rng.startContainer, 'table', true);
-                end = domUtils.findParentByTagName(rng.endContainer, 'table', true);
-                if (start && !end || !start && end || start !== end) {
-                    evt.preventDefault();
-                    return;
-                }
-            }
-
-        }
-        //处理tab键的逻辑
-        if (keyCode == 9) {
-            //不处理以下标签
-            var excludeTagNameForTabKey = {
-                'ol' : 1,
-                'ul' : 1,
-                'table':1
-            };
-            //处理组件里的tab按下事件
-            if(me.fireEvent('tabkeydown',evt)){
-                domUtils.preventDefault(evt);
-                return;
-            }
-            var range = me.selection.getRange();
-            me.fireEvent('saveScene');
-            for (var i = 0,txt = '',tabSize = me.options.tabSize|| 4,tabNode =  me.options.tabNode || '&nbsp;'; i < tabSize; i++) {
-                txt += tabNode;
-            }
-            var span = me.document.createElement('span');
-            span.innerHTML = txt + domUtils.fillChar;
-            if (range.collapsed) {
-                range.insertNode(span.cloneNode(true).firstChild).setCursor(true);
-            } else {
-                var filterFn = function(node) {
-                    return domUtils.isBlockElm(node) && !excludeTagNameForTabKey[node.tagName.toLowerCase()]
-
-                };
-                //普通的情况
-                start = domUtils.findParent(range.startContainer, filterFn,true);
-                end = domUtils.findParent(range.endContainer, filterFn,true);
-                if (start && end && start === end) {
-                    range.deleteContents();
-                    range.insertNode(span.cloneNode(true).firstChild).setCursor(true);
-                } else {
-                    var bookmark = range.createBookmark();
-                    range.enlarge(true);
-                    var bookmark2 = range.createBookmark(),
-                        current = domUtils.getNextDomNode(bookmark2.start, false, filterFn);
-                    while (current && !(domUtils.getPosition(current, bookmark2.end) & domUtils.POSITION_FOLLOWING)) {
-                        current.insertBefore(span.cloneNode(true).firstChild, current.firstChild);
-                        current = domUtils.getNextDomNode(current, false, filterFn);
-                    }
-                    range.moveToBookmark(bookmark2).moveToBookmark(bookmark).select();
-                }
-            }
-            domUtils.preventDefault(evt)
-        }
-        //trace:1634
-        //ff的del键在容器空的时候,也会删除
-        if(browser.gecko && keyCode == 46){
-            range = me.selection.getRange();
-            if(range.collapsed){
-                start = range.startContainer;
-                if(domUtils.isEmptyBlock(start)){
-                    var parent = start.parentNode;
-                    while(domUtils.getChildCount(parent) == 1 && !domUtils.isBody(parent)){
-                        start = parent;
-                        parent = parent.parentNode;
-                    }
-                    if(start === parent.lastChild)
-                        evt.preventDefault();
-                    return;
-                }
-            }
-        }
-    });
-    me.addListener('keyup', function(type, evt) {
-        var keyCode = evt.keyCode || evt.which,
-            rng,me = this;
-        if(keyCode == 8){
-            if(me.fireEvent('delkeyup')){
-                return;
-            }
-            rng = me.selection.getRange();
-            if(rng.collapsed){
-                var tmpNode,
-                    autoClearTagName = ['h1','h2','h3','h4','h5','h6'];
-                if(tmpNode = domUtils.findParentByTagName(rng.startContainer,autoClearTagName,true)){
-                    if(domUtils.isEmptyBlock(tmpNode)){
-                        var pre = tmpNode.previousSibling;
-                        if(pre && pre.nodeName != 'TABLE'){
-                            domUtils.remove(tmpNode);
-                            rng.setStartAtLast(pre).setCursor(false,true);
-                            return;
-                        }else{
-                            var next = tmpNode.nextSibling;
-                            if(next && next.nodeName != 'TABLE'){
-                                domUtils.remove(tmpNode);
-                                rng.setStartAtFirst(next).setCursor(false,true);
-                                return;
-                            }
-                        }
-                    }
-                }
-                //处理当删除到body时,要重新给p标签展位
-                if(domUtils.isBody(rng.startContainer)){
-                    var tmpNode = domUtils.createElement(me.document,'p',{
-                        'innerHTML' : browser.ie ? domUtils.fillChar : '<br/>'
-                    });
-                    rng.insertNode(tmpNode).setStart(tmpNode,0).setCursor(false,true);
-                }
-            }
-
-
-            //chrome下如果删除了inline标签,浏览器会有记忆,在输入文字还是会套上刚才删除的标签,所以这里再选一次就不会了
-            if( !collapsed && (rng.startContainer.nodeType == 3 || rng.startContainer.nodeType == 1 && domUtils.isEmptyBlock(rng.startContainer))){
-                if(browser.ie){
-                    var span = rng.document.createElement('span');
-                    rng.insertNode(span).setStartBefore(span).collapse(true);
-                    rng.select();
-                    domUtils.remove(span)
-                }else{
-                    rng.select()
-                }
-
-            }
-        }
-
-    })
-};
-///import core
-///commands 修复chrome下图片不能点击的问题,出现八个角可改变大小
-///commandsName  FixImgClick
-///commandsTitle  修复chrome下图片不能点击的问题,出现八个角可改变大小
-//修复chrome下图片不能点击的问题,出现八个角可改变大小
-
-UE.plugins['fiximgclick'] = (function () {
-
-    function Scale() {
-        this.editor = null;
-        this.resizer = null;
-        this.cover = null;
-        this.doc = document;
-        this.prePos = {x: 0, y: 0};
-        this.startPos = {x: 0, y: 0};
-    }
-
-    (function () {
-        var rect = [
-            //[left, top, width, height]
-            [0, 0, -1, -1],
-            [0, 0, 0, -1],
-            [0, 0, 1, -1],
-            [0, 0, -1, 0],
-            [0, 0, 1, 0],
-            [0, 0, -1, 1],
-            [0, 0, 0, 1],
-            [0, 0, 1, 1]
-        ];
-
-        Scale.prototype = {
-            init: function (editor) {
-                var me = this;
-                me.editor = editor;
-                me.startPos = this.prePos = {x: 0, y: 0};
-                me.dragId = -1;
-
-                var hands = [],
-                    cover = me.cover = document.createElement('div'),
-                    resizer = me.resizer = document.createElement('div');
-
-                cover.id = me.editor.ui.id + '_imagescale_cover';
-                cover.style.cssText = 'position:absolute;display:none;z-index:' + (me.editor.options.zIndex) + ';filter:alpha(opacity=0); opacity:0;background:#CCC;';
-                domUtils.on(cover, 'mousedown click', function () {
-                    me.hide();
-                });
-
-                for (i = 0; i < 8; i++) {
-                    hands.push('<span class="edui-editor-scale-hand' + i + '"></span>');
-                }
-                resizer.id = me.editor.ui.id + '_imagescale';
-                resizer.className = 'edui-editor-scale';
-                resizer.innerHTML = hands.join('');
-                resizer.style.cssText += ';display:none;border:1px solid #3b77ff;z-index:' + (me.editor.options.zIndex) + ';';
-
-                me.editor.ui.getDom().appendChild(cover);
-                me.editor.ui.getDom().appendChild(resizer);
-
-                me.initStyle();
-                me.initEvents();
-            },
-            initStyle: function () {
-                utils.cssRule('imagescale', '.edui-editor-scale{position:absolute;border:1px solid #38B2CE;}' +
-                    '.edui-editor-scale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}'
-                    + '.edui-editor-scale .edui-editor-scale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}'
-                    + '.edui-editor-scale .edui-editor-scale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}'
-                    + '.edui-editor-scale .edui-editor-scale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}'
-                    + '.edui-editor-scale .edui-editor-scale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}'
-                    + '.edui-editor-scale .edui-editor-scale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}'
-                    + '.edui-editor-scale .edui-editor-scale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}'
-                    + '.edui-editor-scale .edui-editor-scale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}'
-                    + '.edui-editor-scale .edui-editor-scale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}');
-            },
-            initEvents: function () {
-                var me = this;
-
-                me.startPos.x = me.startPos.y = 0;
-                me.isDraging = false;
-            },
-            _eventHandler: function (e) {
-                var me = this;
-                switch (e.type) {
-                    case 'mousedown':
-                        var hand = e.target || e.srcElement, hand;
-                        if (hand.className.indexOf('edui-editor-scale-hand') != -1 && me.dragId == -1) {
-                            me.dragId = hand.className.slice(-1);
-                            me.startPos.x = me.prePos.x = e.clientX;
-                            me.startPos.y = me.prePos.y = e.clientY;
-                            domUtils.on(me.doc,'mousemove', me.proxy(me._eventHandler, me));
-                        }
-                        break;
-                    case 'mousemove':
-                        if (me.dragId != -1) {
-                            me.updateContainerStyle(me.dragId, {x: e.clientX - me.prePos.x, y: e.clientY - me.prePos.y});
-                            me.prePos.x = e.clientX;
-                            me.prePos.y = e.clientY;
-                            me.updateTargetElement();
-
-                        }
-                        break;
-                    case 'mouseup':
-                        if (me.dragId != -1) {
-                            me.updateContainerStyle(me.dragId, {x: e.clientX - me.prePos.x, y: e.clientY - me.prePos.y});
-                            me.updateTargetElement();
-                            if (me.target.parentNode) me.attachTo(me.target);
-                            me.dragId = -1;
-                        }
-                        domUtils.un(me.doc,'mousemove', me.proxy(me._eventHandler, me));
-                        me.editor.fireEvent('contentchange');
-                        break;
-                    default:
-                        break;
-                }
-            },
-            updateTargetElement: function () {
-                var me = this,
-                    targetPos;
-                domUtils.setStyles(me.target, {
-                    'width': me.resizer.style.width,
-                    'height': me.resizer.style.height
-                });
-                me.attachTo(me.target);
-            },
-            updateContainerStyle: function (dir, offset) {
-                var me = this,
-                    dom = me.resizer, tmp;
-
-                if (rect[dir][0] != 0) {
-                    tmp = parseInt(dom.style.left) + offset.x;
-                    dom.style.left = me._validScaledProp('left', tmp) + 'px';
-                }
-                if (rect[dir][1] != 0) {
-                    tmp = parseInt(dom.style.top) + offset.y;
-                    dom.style.top = me._validScaledProp('top', tmp) + 'px';
-                }
-                if (rect[dir][2] != 0) {
-                    tmp = dom.clientWidth + rect[dir][2] * offset.x;
-                    dom.style.width = me._validScaledProp('width', tmp) + 'px';
-                }
-                if (rect[dir][3] != 0) {
-                    tmp = dom.clientHeight + rect[dir][3] * offset.y;
-                    dom.style.height = me._validScaledProp('height', tmp) + 'px';
-                }
-            },
-            _validScaledProp: function (prop, value) {
-                var ele = this.resizer,
-                    wrap = document;
-
-                value = isNaN(value) ? 0 : value;
-                switch (prop) {
-                    case 'left':
-                        return value < 0 ? 0 : (value + ele.clientWidth) > wrap.clientWidth ? wrap.clientWidth - ele.clientWidth : value;
-                    case 'top':
-                        return value < 0 ? 0 : (value + ele.clientHeight) > wrap.clientHeight ? wrap.clientHeight - ele.clientHeight : value;
-                    case 'width':
-                        return value <= 0 ? 1 : (value + ele.offsetLeft) > wrap.clientWidth ? wrap.clientWidth - ele.offsetLeft : value;
-                    case 'height':
-                        return value <= 0 ? 1 : (value + ele.offsetTop) > wrap.clientHeight ? wrap.clientHeight - ele.offsetTop : value;
-                }
-            },
-            hideCover: function () {
-                this.cover.style.display = 'none';
-            },
-            showCover: function () {
-                var me = this,
-                    editorPos = domUtils.getXY(me.editor.ui.getDom()),
-                    iframePos = domUtils.getXY(me.editor.iframe);
-
-                domUtils.setStyles(me.cover, {
-                    'width': me.editor.iframe.offsetWidth + 'px',
-                    'height': me.editor.iframe.offsetHeight + 'px',
-                    'top': iframePos.y - editorPos.y + 'px',
-                    'left': iframePos.x - editorPos.x + 'px',
-                    'position': 'absolute',
-                    'display': ''
-                })
-            },
-            show: function (targetObj) {
-                var me = this;
-                me.resizer.style.display = 'block';
-                if(targetObj) me.attachTo(targetObj);
-
-                domUtils.on(this.resizer, 'mousedown', me.proxy(me._eventHandler, me));
-                domUtils.on(me.doc, 'mouseup', me.proxy(me._eventHandler, me));
-
-                me.showCover();
-                me.editor.fireEvent('afterscaleshow', me);
-                me.editor.fireEvent('saveScene');
-            },
-            hide: function () {
-                var me = this;
-                me.hideCover();
-                me.resizer.style.display = 'none';
-
-                domUtils.un(me.resizer, 'mousedown', me.proxy(me._eventHandler, me));
-                domUtils.un(me.doc, 'mouseup', me.proxy(me._eventHandler, me));
-                me.editor.fireEvent('afterscalehide', me);
-            },
-            proxy: function( fn, context ) {
-                return function(e) {
-                    return fn.apply( context || this, arguments);
-                };
-            },
-            attachTo: function (targetObj) {
-                var me = this,
-                    target = me.target = targetObj,
-                    resizer = this.resizer,
-                    imgPos = domUtils.getXY(target),
-                    iframePos = domUtils.getXY(me.editor.iframe),
-                    editorPos = domUtils.getXY(resizer.parentNode);
-
-                domUtils.setStyles(resizer, {
-                    'width': target.width + 'px',
-                    'height': target.height + 'px',
-                    'left': iframePos.x + imgPos.x - me.editor.document.body.scrollLeft - editorPos.x - parseInt(resizer.style.borderLeftWidth) + 'px',
-                    'top': iframePos.y + imgPos.y - me.editor.document.body.scrollTop - editorPos.y - parseInt(resizer.style.borderTopWidth) + 'px'
-                });
-            }
-        }
-    })();
-
-    return function () {
-        var me = this,
-            imageScale;
-
-        me.setOpt('imageScaleEnabled', true);
-
-        if ( !browser.ie && me.options.imageScaleEnabled) {
-            me.addListener('click', function (type, e) {
-
-                var range = me.selection.getRange(),
-                    img = range.getClosedNode();
-
-                if (img && img.tagName == 'IMG' && me.body.contentEditable!="false") {
-                    if (!imageScale) {
-                        imageScale = new Scale();
-                        imageScale.init(me);
-                        me.ui.getDom().appendChild(imageScale.resizer);
-
-                        var _keyDownHandler = function (e) {
-                            imageScale.hide();
-                            if(imageScale.target) me.selection.getRange().selectNode(imageScale.target).select();
-                        }, _mouseDownHandler = function (e) {
-                            var ele = e.target || e.srcElement;
-                            if (ele && (ele.className===undefined || ele.className.indexOf('edui-editor-scale') == -1)) {
-                                _keyDownHandler(e);
-                            }
-                        }, timer;
-
-                        me.addListener('afterscaleshow', function (e) {
-                            me.addListener('beforekeydown', _keyDownHandler);
-                            me.addListener('beforemousedown', _mouseDownHandler);
-                            domUtils.on(document, 'keydown', _keyDownHandler);
-                            domUtils.on(document,'mousedown', _mouseDownHandler);
-                            me.selection.getNative().removeAllRanges();
-                        });
-                        me.addListener('afterscalehide', function (e) {
-                            me.removeListener('beforekeydown', _keyDownHandler);
-                            me.removeListener('beforemousedown', _mouseDownHandler);
-                            domUtils.un(document, 'keydown', _keyDownHandler);
-                            domUtils.un(document,'mousedown', _mouseDownHandler);
-                            var target = imageScale.target;
-                            if (target.parentNode) {
-                                me.selection.getRange().selectNode(target).select();
-                            }
-                        });
-                        //TODO 有iframe的情况,mousedown不能往下传。。
-                        domUtils.on(imageScale.resizer, 'mousedown', function (e) {
-                            me.selection.getNative().removeAllRanges();
-                            var ele = e.target || e.srcElement;
-                            if (ele && ele.className.indexOf('edui-editor-scale-hand') == -1) {
-                                timer = setTimeout(function () {
-                                    imageScale.hide();
-                                    if(imageScale.target) me.selection.getRange().selectNode(ele).select();
-                                }, 200);
-                            }
-                        });
-                        domUtils.on(imageScale.resizer, 'mouseup', function (e) {
-                            var ele = e.target || e.srcElement;
-                            if (ele && ele.className.indexOf('edui-editor-scale-hand') == -1) {
-                                clearTimeout(timer);
-                            }
-                        });
-                    }
-                    imageScale.show(img);
-                } else {
-                    if (imageScale && imageScale.resizer.style.display != 'none') imageScale.hide();
-                }
-            });
-        }
-
-        if (browser.webkit) {
-            me.addListener('click', function (type, e) {
-                if (e.target.tagName == 'IMG' && me.body.contentEditable!="false") {
-                    var range = new dom.Range(me.document);
-                    range.selectNode(e.target).select();
-                }
-            });
-        }
-    }
-})();
-///import core
-///commands 为非ie浏览器自动添加a标签
-///commandsName  AutoLink
-///commandsTitle  自动增加链接
-/*
- * @description 为非ie浏览器自动添加a标签
- * @author zhanyi
- */
-
-UE.plugin.register('autolink',function(){
-    var cont = 0;
-
-    return !browser.ie ? {
-
-            bindEvents:{
-                'reset' : function(){
-                    cont = 0;
-                },
-                'keydown':function(type, evt) {
-                    var me = this;
-                    var keyCode = evt.keyCode || evt.which;
-
-                    if (keyCode == 32 || keyCode == 13) {
-
-                        var sel = me.selection.getNative(),
-                            range = sel.getRangeAt(0).cloneRange(),
-                            offset,
-                            charCode;
-
-                        var start = range.startContainer;
-                        while (start.nodeType == 1 && range.startOffset > 0) {
-                            start = range.startContainer.childNodes[range.startOffset - 1];
-                            if (!start){
-                                break;
-                            }
-                            range.setStart(start, start.nodeType == 1 ? start.childNodes.length : start.nodeValue.length);
-                            range.collapse(true);
-                            start = range.startContainer;
-                        }
-
-                        do{
-                            if (range.startOffset == 0) {
-                                start = range.startContainer.previousSibling;
-
-                                while (start && start.nodeType == 1) {
-                                    start = start.lastChild;
-                                }
-                                if (!start || domUtils.isFillChar(start)){
-                                    break;
-                                }
-                                offset = start.nodeValue.length;
-                            } else {
-                                start = range.startContainer;
-                                offset = range.startOffset;
-                            }
-                            range.setStart(start, offset - 1);
-                            charCode = range.toString().charCodeAt(0);
-                        } while (charCode != 160 && charCode != 32);
-
-                        if (range.toString().replace(new RegExp(domUtils.fillChar, 'g'), '').match(/(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i)) {
-                            while(range.toString().length){
-                                if(/^(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i.test(range.toString())){
-                                    break;
-                                }
-                                try{
-                                    range.setStart(range.startContainer,range.startOffset+1);
-                                }catch(e){
-                                    //trace:2121
-                                    var start = range.startContainer;
-                                    while(!(next = start.nextSibling)){
-                                        if(domUtils.isBody(start)){
-                                            return;
-                                        }
-                                        start = start.parentNode;
-
-                                    }
-                                    range.setStart(next,0);
-
-                                }
-
-                            }
-                            //range的开始边界已经在a标签里的不再处理
-                            if(domUtils.findParentByTagName(range.startContainer,'a',true)){
-                                return;
-                            }
-                            var a = me.document.createElement('a'),text = me.document.createTextNode(' '),href;
-
-                            me.undoManger && me.undoManger.save();
-                            a.appendChild(range.extractContents());
-                            a.href = a.innerHTML = a.innerHTML.replace(/<[^>]+>/g,'');
-                            href = a.getAttribute("href").replace(new RegExp(domUtils.fillChar,'g'),'');
-                            href = /^(?:https?:\/\/)/ig.test(href) ? href : "http://"+ href;
-                            a.setAttribute('_src',utils.html(href));
-                            a.href = utils.html(href);
-
-                            range.insertNode(a);
-                            a.parentNode.insertBefore(text, a.nextSibling);
-                            range.setStart(text, 0);
-                            range.collapse(true);
-                            sel.removeAllRanges();
-                            sel.addRange(range);
-                            me.undoManger && me.undoManger.save();
-                        }
-                    }
-                }
-            }
-        }:{}
-    },function(){
-        var keyCodes = {
-            37:1, 38:1, 39:1, 40:1,
-            13:1,32:1
-        };
-        function checkIsCludeLink(node){
-            if(node.nodeType == 3){
-                return null
-            }
-            if(node.nodeName == 'A'){
-                return node;
-            }
-            var lastChild = node.lastChild;
-
-            while(lastChild){
-                if(lastChild.nodeName == 'A'){
-                    return lastChild;
-                }
-                if(lastChild.nodeType == 3){
-                    if(domUtils.isWhitespace(lastChild)){
-                        lastChild = lastChild.previousSibling;
-                        continue;
-                    }
-                    return null
-                }
-                lastChild = lastChild.lastChild;
-            }
-        }
-        browser.ie && this.addListener('keyup',function(cmd,evt){
-            var me = this,keyCode = evt.keyCode;
-            if(keyCodes[keyCode]){
-                var rng = me.selection.getRange();
-                var start = rng.startContainer;
-
-                if(keyCode == 13){
-                    while(start && !domUtils.isBody(start) && !domUtils.isBlockElm(start)){
-                        start = start.parentNode;
-                    }
-                    if(start && !domUtils.isBody(start) && start.nodeName == 'P'){
-                        var pre = start.previousSibling;
-                        if(pre && pre.nodeType == 1){
-                            var pre = checkIsCludeLink(pre);
-                            if(pre && !pre.getAttribute('_href')){
-                                domUtils.remove(pre,true);
-                            }
-                        }
-                    }
-                }else if(keyCode == 32 ){
-                    if(start.nodeType == 3 && /^\s$/.test(start.nodeValue)){
-                        start = start.previousSibling;
-                        if(start && start.nodeName == 'A' && !start.getAttribute('_href')){
-                            domUtils.remove(start,true);
-                        }
-                    }
-                }else {
-                    start = domUtils.findParentByTagName(start,'a',true);
-                    if(start && !start.getAttribute('_href')){
-                        var bk = rng.createBookmark();
-
-                        domUtils.remove(start,true);
-                        rng.moveToBookmark(bk).select(true)
-                    }
-                }
-
-            }
-
-
-        });
-    }
-);
-///import core
-///commands 当输入内容超过编辑器高度时,编辑器自动增高
-///commandsName  AutoHeight,autoHeightEnabled
-///commandsTitle  自动增高
-/*
- * @description 自动伸展
- * @author zhanyi
- */
-UE.plugins['autoheight'] = function () {
-    var me = this;
-    //提供开关,就算加载也可以关闭
-    me.autoHeightEnabled = me.options.autoHeightEnabled !== false;
-    if (!me.autoHeightEnabled) {
-        return;
-    }
-
-    var bakOverflow,
-        lastHeight = 0,
-        options = me.options,
-        currentHeight,
-        timer;
-
-    function adjustHeight() {
-        var me = this;
-        clearTimeout(timer);
-        if(isFullscreen)return;
-        if (!me.queryCommandState || me.queryCommandState && me.queryCommandState('source') != 1) {
-            timer = setTimeout(function(){
-
-                var node = me.body.lastChild;
-                while(node && node.nodeType != 1){
-                    node = node.previousSibling;
-                }
-                if(node && node.nodeType == 1){
-                    node.style.clear = 'both';
-                    currentHeight = Math.max(domUtils.getXY(node).y + node.offsetHeight + 25 ,Math.max(options.minFrameHeight, options.initialFrameHeight)) ;
-                    if (currentHeight != lastHeight) {
-                        me.setHeight(currentHeight,true);
-                        lastHeight = currentHeight;
-                    }
-                    domUtils.removeStyle(node,'clear');
-                }
-
-
-            },50)
-        }
-    }
-    var isFullscreen;
-    me.addListener('fullscreenchanged',function(cmd,f){
-        isFullscreen = f
-    });
-    me.addListener('destroy', function () {
-        me.removeListener('contentchange afterinserthtml keyup mouseup',adjustHeight)
-    });
-    me.enableAutoHeight = function () {
-        var me = this;
-        if (!me.autoHeightEnabled) {
-            return;
-        }
-        var doc = me.document;
-        me.autoHeightEnabled = true;
-        bakOverflow = doc.body.style.overflowY;
-        doc.body.style.overflowY = 'hidden';
-        me.addListener('contentchange afterinserthtml keyup mouseup',adjustHeight);
-        //ff不给事件算得不对
-
-        setTimeout(function () {
-            adjustHeight.call(me);
-        }, browser.gecko ? 100 : 0);
-        me.fireEvent('autoheightchanged', me.autoHeightEnabled);
-    };
-    me.disableAutoHeight = function () {
-
-        me.body.style.overflowY = bakOverflow || '';
-
-        me.removeListener('contentchange', adjustHeight);
-        me.removeListener('keyup', adjustHeight);
-        me.removeListener('mouseup', adjustHeight);
-        me.autoHeightEnabled = false;
-        me.fireEvent('autoheightchanged', me.autoHeightEnabled);
-    };
-    me.addListener('ready', function () {
-        me.enableAutoHeight();
-        //trace:1764
-        var timer;
-        domUtils.on(browser.ie ? me.body : me.document, browser.webkit ? 'dragover' : 'drop', function () {
-            clearTimeout(timer);
-            timer = setTimeout(function () {
-                //trace:3681
-                adjustHeight.call(me);
-            }, 100);
-
-        });
-    });
-
-
-};
-
-
-///import core
-///commands 悬浮工具栏
-///commandsName  AutoFloat,autoFloatEnabled
-///commandsTitle  悬浮工具栏
-/*
- *  modified by chengchao01
- *
- *  注意: 引入此功能后,在IE6下会将body的背景图片覆盖掉!
- */
-UE.plugins['autofloat'] = function() {
-    var me = this,
-        lang = me.getLang();
-    me.setOpt({
-        topOffset:0
-    });
-    var optsAutoFloatEnabled = me.options.autoFloatEnabled !== false,
-        topOffset = me.options.topOffset;
-
-
-    //如果不固定toolbar的位置,则直接退出
-    if(!optsAutoFloatEnabled){
-        return;
-    }
-    var uiUtils = UE.ui.uiUtils,
-        LteIE6 = browser.ie && browser.version <= 6,
-        quirks = browser.quirks;
-
-    function checkHasUI(){
-        if(!UE.ui){
-            alert(lang.autofloatMsg);
-            return 0;
-        }
-        return 1;
-    }
-    function fixIE6FixedPos(){
-        var docStyle = document.body.style;
-        docStyle.backgroundImage = 'url("about:blank")';
-        docStyle.backgroundAttachment = 'fixed';
-    }
-    var	bakCssText,
-        placeHolder = document.createElement('div'),
-        toolbarBox,orgTop,
-        getPosition,
-        flag =true;   //ie7模式下需要偏移
-    function setFloating(){
-        var toobarBoxPos = domUtils.getXY(toolbarBox),
-            origalFloat = domUtils.getComputedStyle(toolbarBox,'position'),
-            origalLeft = domUtils.getComputedStyle(toolbarBox,'left');
-        toolbarBox.style.width = toolbarBox.offsetWidth + 'px';
-        toolbarBox.style.zIndex = me.options.zIndex * 1 + 1;
-        toolbarBox.parentNode.insertBefore(placeHolder, toolbarBox);
-        if (LteIE6 || (quirks && browser.ie)) {
-            if(toolbarBox.style.position != 'absolute'){
-                toolbarBox.style.position = 'absolute';
-            }
-            toolbarBox.style.top = (document.body.scrollTop||document.documentElement.scrollTop) - orgTop + topOffset  + 'px';
-        } else {
-            if (browser.ie7Compat && flag) {
-                flag = false;
-                toolbarBox.style.left =  domUtils.getXY(toolbarBox).x - document.documentElement.getBoundingClientRect().left+2  + 'px';
-            }
-            if(toolbarBox.style.position != 'fixed'){
-                toolbarBox.style.position = 'fixed';
-                toolbarBox.style.top = topOffset +"px";
-                ((origalFloat == 'absolute' || origalFloat == 'relative') && parseFloat(origalLeft)) && (toolbarBox.style.left = toobarBoxPos.x + 'px');
-            }
-        }
-    }
-    function unsetFloating(){
-        flag = true;
-        if(placeHolder.parentNode){
-            placeHolder.parentNode.removeChild(placeHolder);
-        }
-
-        toolbarBox.style.cssText = bakCssText;
-    }
-
-    function updateFloating(){
-        var rect3 = getPosition(me.container);
-        var offset=me.options.toolbarTopOffset||0;
-        if (rect3.top < 0 && rect3.bottom - toolbarBox.offsetHeight > offset) {
-            setFloating();
-        }else{
-            unsetFloating();
-        }
-    }
-    var defer_updateFloating = utils.defer(function(){
-        updateFloating();
-    },browser.ie ? 200 : 100,true);
-
-    me.addListener('destroy',function(){
-        domUtils.un(window, ['scroll','resize'], updateFloating);
-        me.removeListener('keydown', defer_updateFloating);
-    });
-
-    me.addListener('ready', function(){
-        if(checkHasUI(me)){
-            //加载了ui组件,但在new时,没有加载ui,导致编辑器实例上没有ui类,所以这里做判断
-            if(!me.ui){
-                return;
-            }
-            getPosition = uiUtils.getClientRect;
-            toolbarBox = me.ui.getDom('toolbarbox');
-            orgTop = getPosition(toolbarBox).top;
-            bakCssText = toolbarBox.style.cssText;
-            placeHolder.style.height = toolbarBox.offsetHeight + 'px';
-            if(LteIE6){
-                fixIE6FixedPos();
-            }
-            domUtils.on(window, ['scroll','resize'], updateFloating);
-            me.addListener('keydown', defer_updateFloating);
-
-            me.addListener('beforefullscreenchange', function (t, enabled){
-                if (enabled) {
-                    unsetFloating();
-                }
-            });
-            me.addListener('fullscreenchanged', function (t, enabled){
-                if (!enabled) {
-                    updateFloating();
-                }
-            });
-            me.addListener('sourcemodechanged', function (t, enabled){
-                setTimeout(function (){
-                    updateFloating();
-                },0);
-            });
-            me.addListener("clearDoc",function(){
-                setTimeout(function(){
-                    updateFloating();
-                },0);
-
-            })
-        }
-    });
-};
-
-/**
- * 纯文本粘贴插件
- * @file
- * @since 1.2.6.1
- */
-
-UE.plugins['pasteplain'] = function(){
-    var me = this;
-    me.setOpt({
-        'pasteplain':false,
-        'filterTxtRules' : function(){
-            function transP(node){
-                node.tagName = 'p';
-                node.setStyle();
-            }
-            function removeNode(node){
-                node.parentNode.removeChild(node,true)
-            }
-            return {
-                //直接删除及其字节点内容
-                '-' : 'script style object iframe embed input select',
-                'p': {$:{}},
-                'br':{$:{}},
-                div: function (node) {
-                    var tmpNode, p = UE.uNode.createElement('p');
-                    while (tmpNode = node.firstChild()) {
-                        if (tmpNode.type == 'text' || !UE.dom.dtd.$block[tmpNode.tagName]) {
-                            p.appendChild(tmpNode);
-                        } else {
-                            if (p.firstChild()) {
-                                node.parentNode.insertBefore(p, node);
-                                p = UE.uNode.createElement('p');
-                            } else {
-                                node.parentNode.insertBefore(tmpNode, node);
-                            }
-                        }
-                    }
-                    if (p.firstChild()) {
-                        node.parentNode.insertBefore(p, node);
-                    }
-                    node.parentNode.removeChild(node);
-                },
-                ol: removeNode,
-                ul: removeNode,
-                dl:removeNode,
-                dt:removeNode,
-                dd:removeNode,
-                'li':removeNode,
-                'caption':transP,
-                'th':transP,
-                'tr':transP,
-                'h1':transP,'h2':transP,'h3':transP,'h4':transP,'h5':transP,'h6':transP,
-                'td':function(node){
-                        //没有内容的td直接删掉
-                        var txt = !!node.innerText();
-                        if(txt){
-                         node.parentNode.insertAfter(UE.uNode.createText(' &nbsp; &nbsp;'),node);
-                    }
-                    node.parentNode.removeChild(node,node.innerText())
-                }
-            }
-        }()
-    });
-    //暂时这里支持一下老版本的属性
-    var pasteplain = me.options.pasteplain;
-
-    /**
-     * 启用或取消纯文本粘贴模式
-     * @command pasteplain
-     * @method execCommand
-     * @param { String } cmd 命令字符串
-     * @example
-     * ```javascript
-     * editor.queryCommandState( 'pasteplain' );
-     * ```
-     */
-
-    /**
-     * 查询当前是否处于纯文本粘贴模式
-     * @command pasteplain
-     * @method queryCommandState
-     * @param { String } cmd 命令字符串
-     * @return { int } 如果处于纯文本模式,返回1,否则,返回0
-     * @example
-     * ```javascript
-     * editor.queryCommandState( 'pasteplain' );
-     * ```
-     */
-    me.commands['pasteplain'] = {
-        queryCommandState: function (){
-            return pasteplain ? 1 : 0;
-        },
-        execCommand: function (){
-            pasteplain = !pasteplain|0;
-        },
-        notNeedUndo : 1
-    };
-};
-/**
- * video插件, 为UEditor提供视频插入支持
- * @file
- * @since 1.2.6.1
- */
-
-UE.plugins['video'] = function (){
-    var me =this;
-
-    /*
-     * 创建插入视频字符窜
-     * @param url 视频地址
-     * @param width 视频宽度
-     * @param height 视频高度
-     * @param align 视频对齐
-     * @param toEmbed 是否以flash代替显示
-     * @param addParagraph  是否需要添加P 标签
-     */
-    function creatInsertStr(url,width,height,id,align,classname,type){
-        var str;
-        switch (type){
-            case 'image':
-                str = '<img ' + (id ? 'id="' + id+'"' : '') + ' width="'+ width +'" height="' + height + '" _url="'+url+'" class="' + classname + '"'  +
-                    ' src="' + me.options.UEDITOR_HOME_URL+'themes/default/images/spacer.gif" style="background:url('+me.options.UEDITOR_HOME_URL+'themes/default/images/videologo.gif) no-repeat center center; border:1px solid gray;'+(align ? 'float:' + align + ';': '')+'" />'
-                break;
-            case 'embed':
-                str = '<embed type="application/x-shockwave-flash" class="' + classname + '" pluginspage="http://www.macromedia.com/go/getflashplayer"' +
-                    ' src="' +  utils.html(url) + '" width="' + width  + '" height="' + height  + '"'  + (align ? ' style="float:' + align + '"': '') +
-                    ' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" >';
-                break;
-            case 'video':
-                var ext = url.substr(url.lastIndexOf('.') + 1);
-                if(ext == 'ogv') ext = 'ogg';
-                str = '<video' + (id ? ' id="' + id + '"' : '') + ' class="' + classname + '" ' + (align ? ' style="float:' + align + '"': '') +
-                    ' controls preload="none" width="' + width + '" height="' + height + '" src="' + url + '" data-setup="{}">' +
-                    '<source src="' + url + '" type="video/' + ext + '" /></video>';
-                break;
-        }
-        return str;
-    }
-
-    function switchImgAndVideo(root,img2video){
-        utils.each(root.getNodesByTagName(img2video ? 'img' : 'embed video'),function(node){
-            var className = node.getAttr('class');
-            if(className && className.indexOf('edui-faked-video') != -1){
-                var html = creatInsertStr( img2video ? node.getAttr('_url') : node.getAttr('src'),node.getAttr('width'),node.getAttr('height'),null,node.getStyle('float') || '',className,img2video ? 'embed':'image');
-                node.parentNode.replaceChild(UE.uNode.createElement(html),node);
-            }
-            if(className && className.indexOf('edui-upload-video') != -1){
-                var html = creatInsertStr( img2video ? node.getAttr('_url') : node.getAttr('src'),node.getAttr('width'),node.getAttr('height'),null,node.getStyle('float') || '',className,img2video ? 'video':'image');
-                node.parentNode.replaceChild(UE.uNode.createElement(html),node);
-            }
-        })
-    }
-
-    me.addOutputRule(function(root){
-        switchImgAndVideo(root,true)
-    });
-    me.addInputRule(function(root){
-        switchImgAndVideo(root)
-    });
-
-    /**
-     * 插入视频
-     * @command insertvideo
-     * @method execCommand
-     * @param { String } cmd 命令字符串
-     * @param { Object } videoAttr 键值对对象, 描述一个视频的所有属性
-     * @example
-     * ```javascript
-     *
-     * var videoAttr = {
-     *      //视频地址
-     *      url: 'http://www.youku.com/xxx',
-     *      //视频宽高值, 单位px
-     *      width: 200,
-     *      height: 100
-     * };
-     *
-     * //editor 是编辑器实例
-     * //向编辑器插入单个视频
-     * editor.execCommand( 'insertvideo', videoAttr );
-     * ```
-     */
-
-    /**
-     * 插入视频
-     * @command insertvideo
-     * @method execCommand
-     * @param { String } cmd 命令字符串
-     * @param { Array } videoArr 需要插入的视频的数组, 其中的每一个元素都是一个键值对对象, 描述了一个视频的所有属性
-     * @example
-     * ```javascript
-     *
-     * var videoAttr1 = {
-     *      //视频地址
-     *      url: 'http://www.youku.com/xxx',
-     *      //视频宽高值, 单位px
-     *      width: 200,
-     *      height: 100
-     * },
-     * videoAttr2 = {
-     *      //视频地址
-     *      url: 'http://www.youku.com/xxx',
-     *      //视频宽高值, 单位px
-     *      width: 200,
-     *      height: 100
-     * }
-     *
-     * //editor 是编辑器实例
-     * //该方法将会向编辑器内插入两个视频
-     * editor.execCommand( 'insertvideo', [ videoAttr1, videoAttr2 ] );
-     * ```
-     */
-
-    /**
-     * 查询当前光标所在处是否是一个视频
-     * @command insertvideo
-     * @method queryCommandState
-     * @param { String } cmd 需要查询的命令字符串
-     * @return { int } 如果当前光标所在处的元素是一个视频对象, 则返回1,否则返回0
-     * @example
-     * ```javascript
-     *
-     * //editor 是编辑器实例
-     * editor.queryCommandState( 'insertvideo' );
-     * ```
-     */
-    me.commands["insertvideo"] = {
-        execCommand: function (cmd, videoObjs, type){
-            videoObjs = utils.isArray(videoObjs)?videoObjs:[videoObjs];
-            var html = [],id = 'tmpVedio', cl;
-            for(var i=0,vi,len = videoObjs.length;i<len;i++){
-                vi = videoObjs[i];
-                cl = (type == 'upload' ? 'edui-upload-video video-js vjs-default-skin':'edui-faked-video');
-                html.push(creatInsertStr( vi.url, vi.width || 420,  vi.height || 280, id + i, null, cl, 'image'));
-            }
-            me.execCommand("inserthtml",html.join(""),true);
-            var rng = this.selection.getRange();
-            for(var i= 0,len=videoObjs.length;i<len;i++){
-                var img = this.document.getElementById('tmpVedio'+i);
-                domUtils.removeAttributes(img,'id');
-                rng.selectNode(img).select();
-                me.execCommand('imagefloat',videoObjs[i].align)
-            }
-        },
-        queryCommandState : function(){
-            var img = me.selection.getRange().getClosedNode(),
-                flag = img && (img.className == "edui-faked-video" || img.className.indexOf("edui-upload-video")!=-1);
-            return flag ? 1 : 0;
-        }
-    };
-};
-/**
- * Created with JetBrains WebStorm.
- * User: taoqili
- * Date: 13-1-18
- * Time: 上午11:09
- * To change this template use File | Settings | File Templates.
- */
-/**
- * UE表格操作类
- * @param table
- * @constructor
- */
-(function () {
-    var UETable = UE.UETable = function (table) {
-        this.table = table;
-        this.indexTable = [];
-        this.selectedTds = [];
-        this.cellsRange = {};
-        this.update(table);
-    };
-
-    //===以下为静态工具方法===
-    UETable.removeSelectedClass = function (cells) {
-        utils.each(cells, function (cell) {
-            domUtils.removeClasses(cell, "selectTdClass");
-        })
-    };
-    UETable.addSelectedClass = function (cells) {
-        utils.each(cells, function (cell) {
-            domUtils.addClass(cell, "selectTdClass");
-        })
-    };
-    UETable.isEmptyBlock = function (node) {
-        var reg = new RegExp(domUtils.fillChar, 'g');
-        if (node[browser.ie ? 'innerText' : 'textContent'].replace(/^\s*$/, '').replace(reg, '').length > 0) {
-            return 0;
-        }
-        for (var i in dtd.$isNotEmpty) if (dtd.$isNotEmpty.hasOwnProperty(i)) {
-            if (node.getElementsByTagName(i).length) {
-                return 0;
-            }
-        }
-        return 1;
-    };
-    UETable.getWidth = function (cell) {
-        if (!cell)return 0;
-        return parseInt(domUtils.getComputedStyle(cell, "width"), 10);
-    };
-
-    /**
-     * 获取单元格或者单元格组的“对齐”状态。 如果当前的检测对象是一个单元格组, 只有在满足所有单元格的 水平和竖直 对齐属性都相同的
-     * 条件时才会返回其状态值,否则将返回null; 如果当前只检测了一个单元格, 则直接返回当前单元格的对齐状态;
-     * @param table cell or table cells , 支持单个单元格dom对象 或者 单元格dom对象数组
-     * @return { align: 'left' || 'right' || 'center', valign: 'top' || 'middle' || 'bottom' } 或者 null
-     */
-    UETable.getTableCellAlignState = function ( cells ) {
-
-        !utils.isArray( cells ) && ( cells = [cells] );
-
-        var result = {},
-            status = ['align', 'valign'],
-            tempStatus = null,
-            isSame = true;//状态是否相同
-
-        utils.each( cells, function( cellNode ){
-
-            utils.each( status, function( currentState ){
-
-                tempStatus = cellNode.getAttribute( currentState );
-
-                if( !result[ currentState ] && tempStatus ) {
-                    result[ currentState ] = tempStatus;
-                } else if( !result[ currentState ] || ( tempStatus !== result[ currentState ] ) ) {
-                    isSame = false;
-                    return false;
-                }
-
-            } );
-
-            return isSame;
-
-        });
-
-        return isSame ? result : null;
-
-    };
-
-    /**
-     * 根据当前选区获取相关的table信息
-     * @return {Object}
-     */
-    UETable.getTableItemsByRange = function (editor) {
-        var start = editor.selection.getStart();
-
-        //ff下会选中bookmark
-        if( start && start.id && start.id.indexOf('_baidu_bookmark_start_') === 0 ) {
-            start = start.nextSibling;
-        }
-
-        //在table或者td边缘有可能存在选中tr的情况
-        var cell = start && domUtils.findParentByTagName(start, ["td", "th"], true),
-            tr = cell && cell.parentNode,
-            caption = start && domUtils.findParentByTagName(start, 'caption', true),
-            table = caption ? caption.parentNode : tr && tr.parentNode.parentNode;
-
-        return {
-            cell:cell,
-            tr:tr,
-            table:table,
-            caption:caption
-        }
-    };
-    UETable.getUETableBySelected = function (editor) {
-        var table = UETable.getTableItemsByRange(editor).table;
-        if (table && table.ueTable && table.ueTable.selectedTds.length) {
-            return table.ueTable;
-        }
-        return null;
-    };
-
-    UETable.getDefaultValue = function (editor, table) {
-        var borderMap = {
-                thin:'0px',
-                medium:'1px',
-                thick:'2px'
-            },
-            tableBorder, tdPadding, tdBorder, tmpValue;
-        if (!table) {
-            table = editor.document.createElement('table');
-            table.insertRow(0).insertCell(0).innerHTML = 'xxx';
-            editor.body.appendChild(table);
-            var td = table.getElementsByTagName('td')[0];
-            tmpValue = domUtils.getComputedStyle(table, 'border-left-width');
-            tableBorder = parseInt(borderMap[tmpValue] || tmpValue, 10);
-            tmpValue = domUtils.getComputedStyle(td, 'padding-left');
-            tdPadding = parseInt(borderMap[tmpValue] || tmpValue, 10);
-            tmpValue = domUtils.getComputedStyle(td, 'border-left-width');
-            tdBorder = parseInt(borderMap[tmpValue] || tmpValue, 10);
-            domUtils.remove(table);
-            return {
-                tableBorder:tableBorder,
-                tdPadding:tdPadding,
-                tdBorder:tdBorder
-            };
-        } else {
-            td = table.getElementsByTagName('td')[0];
-            tmpValue = domUtils.getComputedStyle(table, 'border-left-width');
-            tableBorder = parseInt(borderMap[tmpValue] || tmpValue, 10);
-            tmpValue = domUtils.getComputedStyle(td, 'padding-left');
-            tdPadding = parseInt(borderMap[tmpValue] || tmpValue, 10);
-            tmpValue = domUtils.getComputedStyle(td, 'border-left-width');
-            tdBorder = parseInt(borderMap[tmpValue] || tmpValue, 10);
-            return {
-                tableBorder:tableBorder,
-                tdPadding:tdPadding,
-                tdBorder:tdBorder
-            };
-        }
-    };
-    /**
-     * 根据当前点击的td或者table获取索引对象
-     * @param tdOrTable
-     */
-    UETable.getUETable = function (tdOrTable) {
-        var tag = tdOrTable.tagName.toLowerCase();
-        tdOrTable = (tag == "td" || tag == "th" || tag == 'caption') ? domUtils.findParentByTagName(tdOrTable, "table", true) : tdOrTable;
-        if (!tdOrTable.ueTable) {
-            tdOrTable.ueTable = new UETable(tdOrTable);
-        }
-        return tdOrTable.ueTable;
-    };
-
-    UETable.cloneCell = function(cell,ignoreMerge,keepPro){
-        if (!cell || utils.isString(cell)) {
-            return this.table.ownerDocument.createElement(cell || 'td');
-        }
-        var flag = domUtils.hasClass(cell, "selectTdClass");
-        flag && domUtils.removeClasses(cell, "selectTdClass");
-        var tmpCell = cell.cloneNode(true);
-        if (ignoreMerge) {
-            tmpCell.rowSpan = tmpCell.colSpan = 1;
-        }
-        //去掉宽高
-        !keepPro && domUtils.removeAttributes(tmpCell,'width height');
-        !keepPro && domUtils.removeAttributes(tmpCell,'style');
-
-        tmpCell.style.borderLeftStyle = "";
-        tmpCell.style.borderTopStyle = "";
-        tmpCell.style.borderLeftColor = cell.style.borderRightColor;
-        tmpCell.style.borderLeftWidth = cell.style.borderRightWidth;
-        tmpCell.style.borderTopColor = cell.style.borderBottomColor;
-        tmpCell.style.borderTopWidth = cell.style.borderBottomWidth;
-        flag && domUtils.addClass(cell, "selectTdClass");
-        return tmpCell;
-    }
-
-    UETable.prototype = {
-        getMaxRows:function () {
-            var rows = this.table.rows, maxLen = 1;
-            for (var i = 0, row; row = rows[i]; i++) {
-                var currentMax = 1;
-                for (var j = 0, cj; cj = row.cells[j++];) {
-                    currentMax = Math.max(cj.rowSpan || 1, currentMax);
-                }
-                maxLen = Math.max(currentMax + i, maxLen);
-            }
-            return maxLen;
-        },
-        /**
-         * 获取当前表格的最大列数
-         */
-        getMaxCols:function () {
-            var rows = this.table.rows, maxLen = 0, cellRows = {};
-            for (var i = 0, row; row = rows[i]; i++) {
-                var cellsNum = 0;
-                for (var j = 0, cj; cj = row.cells[j++];) {
-                    cellsNum += (cj.colSpan || 1);
-                    if (cj.rowSpan && cj.rowSpan > 1) {
-                        for (var k = 1; k < cj.rowSpan; k++) {
-                            if (!cellRows['row_' + (i + k)]) {
-                                cellRows['row_' + (i + k)] = (cj.colSpan || 1);
-                            } else {
-                                cellRows['row_' + (i + k)]++
-                            }
-                        }
-
-                    }
-                }
-                cellsNum += cellRows['row_' + i] || 0;
-                maxLen = Math.max(cellsNum, maxLen);
-            }
-            return maxLen;
-        },
-        getCellColIndex:function (cell) {
-
-        },
-        /**
-         * 获取当前cell旁边的单元格,
-         * @param cell
-         * @param right
-         */
-        getHSideCell:function (cell, right) {
-            try {
-                var cellInfo = this.getCellInfo(cell),
-                    previewRowIndex, previewColIndex;
-                var len = this.selectedTds.length,
-                    range = this.cellsRange;
-                //首行或者首列没有前置单元格
-                if ((!right && (!len ? !cellInfo.colIndex : !range.beginColIndex)) || (right && (!len ? (cellInfo.colIndex == (this.colsNum - 1)) : (range.endColIndex == this.colsNum - 1)))) return null;
-
-                previewRowIndex = !len ? cellInfo.rowIndex : range.beginRowIndex;
-                previewColIndex = !right ? ( !len ? (cellInfo.colIndex < 1 ? 0 : (cellInfo.colIndex - 1)) : range.beginColIndex - 1)
-                    : ( !len ? cellInfo.colIndex + 1 : range.endColIndex + 1);
-                return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex, this.indexTable[previewRowIndex][previewColIndex].cellIndex);
-            } catch (e) {
-                showError(e);
-            }
-        },
-        getTabNextCell:function (cell, preRowIndex) {
-            var cellInfo = this.getCellInfo(cell),
-                rowIndex = preRowIndex || cellInfo.rowIndex,
-                colIndex = cellInfo.colIndex + 1 + (cellInfo.colSpan - 1),
-                nextCell;
-            try {
-                nextCell = this.getCell(this.indexTable[rowIndex][colIndex].rowIndex, this.indexTable[rowIndex][colIndex].cellIndex);
-            } catch (e) {
-                try {
-                    rowIndex = rowIndex * 1 + 1;
-                    colIndex = 0;
-                    nextCell = this.getCell(this.indexTable[rowIndex][colIndex].rowIndex, this.indexTable[rowIndex][colIndex].cellIndex);
-                } catch (e) {
-                }
-            }
-            return nextCell;
-
-        },
-        /**
-         * 获取视觉上的后置单元格
-         * @param cell
-         * @param bottom
-         */
-        getVSideCell:function (cell, bottom, ignoreRange) {
-            try {
-                var cellInfo = this.getCellInfo(cell),
-                    nextRowIndex, nextColIndex;
-                var len = this.selectedTds.length && !ignoreRange,
-                    range = this.cellsRange;
-                //末行或者末列没有后置单元格
-                if ((!bottom && (cellInfo.rowIndex == 0)) || (bottom && (!len ? (cellInfo.rowIndex + cellInfo.rowSpan > this.rowsNum - 1) : (range.endRowIndex == this.rowsNum - 1)))) return null;
-
-                nextRowIndex = !bottom ? ( !len ? cellInfo.rowIndex - 1 : range.beginRowIndex - 1)
-                    : ( !len ? (cellInfo.rowIndex + cellInfo.rowSpan) : range.endRowIndex + 1);
-                nextColIndex = !len ? cellInfo.colIndex : range.beginColIndex;
-                return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex, this.indexTable[nextRowIndex][nextColIndex].cellIndex);
-            } catch (e) {
-                showError(e);
-            }
-        },
-        /**
-         * 获取相同结束位置的单元格,xOrY指代了是获取x轴相同还是y轴相同
-         */
-        getSameEndPosCells:function (cell, xOrY) {
-            try {
-                var flag = (xOrY.toLowerCase() === "x"),
-                    end = domUtils.getXY(cell)[flag ? 'x' : 'y'] + cell["offset" + (flag ? 'Width' : 'Height')],
-                    rows = this.table.rows,
-                    cells = null, returns = [];
-                for (var i = 0; i < this.rowsNum; i++) {
-                    cells = rows[i].cells;
-                    for (var j = 0, tmpCell; tmpCell = cells[j++];) {
-                        var tmpEnd = domUtils.getXY(tmpCell)[flag ? 'x' : 'y'] + tmpCell["offset" + (flag ? 'Width' : 'Height')];
-                        //对应行的td已经被上面行rowSpan了
-                        if (tmpEnd > end && flag) break;
-                        if (cell == tmpCell || end == tmpEnd) {
-                            //只获取单一的单元格
-                            //todo 仅获取单一单元格在特定情况下会造成returns为空,从而影响后续的拖拽实现,修正这个。需考虑性能
-                            if (tmpCell[flag ? "colSpan" : "rowSpan"] == 1) {
-                                returns.push(tmpCell);
-                            }
-                            if (flag) break;
-                        }
-                    }
-                }
-                return returns;
-            } catch (e) {
-                showError(e);
-            }
-        },
-        setCellContent:function (cell, content) {
-            cell.innerHTML = content || (browser.ie ? domUtils.fillChar : "<br />");
-        },
-        cloneCell:UETable.cloneCell,
-        /**
-         * 获取跟当前单元格的右边竖线为左边的所有未合并单元格
-         */
-        getSameStartPosXCells:function (cell) {
-            try {
-                var start = domUtils.getXY(cell).x + cell.offsetWidth,
-                    rows = this.table.rows, cells , returns = [];
-                for (var i = 0; i < this.rowsNum; i++) {
-                    cells = rows[i].cells;
-                    for (var j = 0, tmpCell; tmpCell = cells[j++];) {
-                        var tmpStart = domUtils.getXY(tmpCell).x;
-                        if (tmpStart > start) break;
-                        if (tmpStart == start && tmpCell.colSpan == 1) {
-                            returns.push(tmpCell);
-                            break;
-                        }
-                    }
-                }
-                return returns;
-            } catch (e) {
-                showError(e);
-            }
-        },
-        /**
-         * 更新table对应的索引表
-         */
-        update:function (table) {
-            this.table = table || this.table;
-            this.selectedTds = [];
-            this.cellsRange = {};
-            this.indexTable = [];
-            var rows = this.table.rows,
-                rowsNum = this.getMaxRows(),
-                dNum = rowsNum - rows.length,
-                colsNum = this.getMaxCols();
-            while (dNum--) {
-                this.table.insertRow(rows.length);
-            }
-            this.rowsNum = rowsNum;
-            this.colsNum = colsNum;
-            for (var i = 0, len = rows.length; i < len; i++) {
-                this.indexTable[i] = new Array(colsNum);
-            }
-            //填充索引表
-            for (var rowIndex = 0, row; row = rows[rowIndex]; rowIndex++) {
-                for (var cellIndex = 0, cell, cells = row.cells; cell = cells[cellIndex]; cellIndex++) {
-                    //修正整行被rowSpan时导致的行数计算错误
-                    if (cell.rowSpan > rowsNum) {
-                        cell.rowSpan = rowsNum;
-                    }
-                    var colIndex = cellIndex,
-                        rowSpan = cell.rowSpan || 1,
-                        colSpan = cell.colSpan || 1;
-                    //当已经被上一行rowSpan或者被前一列colSpan了,则跳到下一个单元格进行
-                    while (this.indexTable[rowIndex][colIndex]) colIndex++;
-                    for (var j = 0; j < rowSpan; j++) {
-                        for (var k = 0; k < colSpan; k++) {
-                            this.indexTable[rowIndex + j][colIndex + k] = {
-                                rowIndex:rowIndex,
-                                cellIndex:cellIndex,
-                                colIndex:colIndex,
-                                rowSpan:rowSpan,
-                                colSpan:colSpan
-                            }
-                        }
-                    }
-                }
-            }
-            //修复残缺td
-            for (j = 0; j < rowsNum; j++) {
-                for (k = 0; k < colsNum; k++) {
-                    if (this.indexTable[j][k] === undefined) {
-                        row = rows[j];
-                        cell = row.cells[row.cells.length - 1];
-                        cell = cell ? cell.cloneNode(true) : this.table.ownerDocument.createElement("td");
-                        this.setCellContent(cell);
-                        if (cell.colSpan !== 1)cell.colSpan = 1;
-                        if (cell.rowSpan !== 1)cell.rowSpan = 1;
-                        row.appendChild(cell);
-                        this.indexTable[j][k] = {
-                            rowIndex:j,
-                            cellIndex:cell.cellIndex,
-                            colIndex:k,
-                            rowSpan:1,
-                            colSpan:1
-                        }
-                    }
-                }
-            }
-            //当框选后删除行或者列后撤销,需要重建选区。
-            var tds = domUtils.getElementsByTagName(this.table, "td"),
-                selectTds = [];
-            utils.each(tds, function (td) {
-                if (domUtils.hasClass(td, "selectTdClass")) {
-                    selectTds.push(td);
-                }
-            });
-            if (selectTds.length) {
-                var start = selectTds[0],
-                    end = selectTds[selectTds.length - 1],
-                    startInfo = this.getCellInfo(start),
-                    endInfo = this.getCellInfo(end);
-                this.selectedTds = selectTds;
-                this.cellsRange = {
-                    beginRowIndex:startInfo.rowIndex,
-                    beginColIndex:startInfo.colIndex,
-                    endRowIndex:endInfo.rowIndex + endInfo.rowSpan - 1,
-                    endColIndex:endInfo.colIndex + endInfo.colSpan - 1
-                };
-            }
-            //给第一行设置firstRow的样式名称,在排序图标的样式上使用到
-            if(!domUtils.hasClass(this.table.rows[0], "firstRow")) {
-                domUtils.addClass(this.table.rows[0], "firstRow");
-                for(var i = 1; i< this.table.rows.length; i++) {
-                    domUtils.removeClasses(this.table.rows[i], "firstRow");
-                }
-            }
-        },
-        /**
-         * 获取单元格的索引信息
-         */
-        getCellInfo:function (cell) {
-            if (!cell) return;
-            var cellIndex = cell.cellIndex,
-                rowIndex = cell.parentNode.rowIndex,
-                rowInfo = this.indexTable[rowIndex],
-                numCols = this.colsNum;
-            for (var colIndex = cellIndex; colIndex < numCols; colIndex++) {
-                var cellInfo = rowInfo[colIndex];
-                if (cellInfo.rowIndex === rowIndex && cellInfo.cellIndex === cellIndex) {
-                    return cellInfo;
-                }
-            }
-        },
-        /**
-         * 根据行列号获取单元格
-         */
-        getCell:function (rowIndex, cellIndex) {
-            return rowIndex < this.rowsNum && this.table.rows[rowIndex].cells[cellIndex] || null;
-        },
-        /**
-         * 删除单元格
-         */
-        deleteCell:function (cell, rowIndex) {
-            rowIndex = typeof rowIndex == 'number' ? rowIndex : cell.parentNode.rowIndex;
-            var row = this.table.rows[rowIndex];
-            row.deleteCell(cell.cellIndex);
-        },
-        /**
-         * 根据始末两个单元格获取被框选的所有单元格范围
-         */
-        getCellsRange:function (cellA, cellB) {
-            function checkRange(beginRowIndex, beginColIndex, endRowIndex, endColIndex) {
-                var tmpBeginRowIndex = beginRowIndex,
-                    tmpBeginColIndex = beginColIndex,
-                    tmpEndRowIndex = endRowIndex,
-                    tmpEndColIndex = endColIndex,
-                    cellInfo, colIndex, rowIndex;
-                // 通过indexTable检查是否存在超出TableRange上边界的情况
-                if (beginRowIndex > 0) {
-                    for (colIndex = beginColIndex; colIndex < endColIndex; colIndex++) {
-                        cellInfo = me.indexTable[beginRowIndex][colIndex];
-                        rowIndex = cellInfo.rowIndex;
-                        if (rowIndex < beginRowIndex) {
-                            tmpBeginRowIndex = Math.min(rowIndex, tmpBeginRowIndex);
-                        }
-                    }
-                }
-                // 通过indexTable检查是否存在超出TableRange右边界的情况
-                if (endColIndex < me.colsNum) {
-                    for (rowIndex = beginRowIndex; rowIndex < endRowIndex; rowIndex++) {
-                        cellInfo = me.indexTable[rowIndex][endColIndex];
-                        colIndex = cellInfo.colIndex + cellInfo.colSpan - 1;
-                        if (colIndex > endColIndex) {
-                            tmpEndColIndex = Math.max(colIndex, tmpEndColIndex);
-                        }
-                    }
-                }
-                // 检查是否有超出TableRange下边界的情况
-                if (endRowIndex < me.rowsNum) {
-                    for (colIndex = beginColIndex; colIndex < endColIndex; colIndex++) {
-                        cellInfo = me.indexTable[endRowIndex][colIndex];
-                        rowIndex = cellInfo.rowIndex + cellInfo.rowSpan - 1;
-                        if (rowIndex > endRowIndex) {
-                            tmpEndRowIndex = Math.max(rowIndex, tmpEndRowIndex);
-                        }
-                    }
-                }
-                // 检查是否有超出TableRange左边界的情况
-                if (beginColIndex > 0) {
-                    for (rowIndex = beginRowIndex; rowIndex < endRowIndex; rowIndex++) {
-                        cellInfo = me.indexTable[rowIndex][beginColIndex];
-                        colIndex = cellInfo.colIndex;
-                        if (colIndex < beginColIndex) {
-                            tmpBeginColIndex = Math.min(cellInfo.colIndex, tmpBeginColIndex);
-                        }
-                    }
-                }
-                //递归调用直至所有完成所有框选单元格的扩展
-                if (tmpBeginRowIndex != beginRowIndex || tmpBeginColIndex != beginColIndex || tmpEndRowIndex != endRowIndex || tmpEndColIndex != endColIndex) {
-                    return checkRange(tmpBeginRowIndex, tmpBeginColIndex, tmpEndRowIndex, tmpEndColIndex);
-                } else {
-                    // 不需要扩展TableRange的情况
-                    return {
-                        beginRowIndex:beginRowIndex,
-                        beginColIndex:beginColIndex,
-                        endRowIndex:endRowIndex,
-                        endColIndex:endColIndex
-                    };
-                }
-            }
-
-            try {
-                var me = this,
-                    cellAInfo = me.getCellInfo(cellA);
-                if (cellA === cellB) {
-                    return {
-                        beginRowIndex:cellAInfo.rowIndex,
-                        beginColIndex:cellAInfo.colIndex,
-                        endRowIndex:cellAInfo.rowIndex + cellAInfo.rowSpan - 1,
-                        endColIndex:cellAInfo.colIndex + cellAInfo.colSpan - 1
-                    };
-                }
-                var cellBInfo = me.getCellInfo(cellB);
-                // 计算TableRange的四个边
-                var beginRowIndex = Math.min(cellAInfo.rowIndex, cellBInfo.rowIndex),
-                    beginColIndex = Math.min(cellAInfo.colIndex, cellBInfo.colIndex),
-                    endRowIndex = Math.max(cellAInfo.rowIndex + cellAInfo.rowSpan - 1, cellBInfo.rowIndex + cellBInfo.rowSpan - 1),
-                    endColIndex = Math.max(cellAInfo.colIndex + cellAInfo.colSpan - 1, cellBInfo.colIndex + cellBInfo.colSpan - 1);
-
-                return checkRange(beginRowIndex, beginColIndex, endRowIndex, endColIndex);
-            } catch (e) {
-                //throw e;
-            }
-        },
-        /**
-         * 依据cellsRange获取对应的单元格集合
-         */
-        getCells:function (range) {
-            //每次获取cells之前必须先清除上次的选择,否则会对后续获取操作造成影响
-            this.clearSelected();
-            var beginRowIndex = range.beginRowIndex,
-                beginColIndex = range.beginColIndex,
-                endRowIndex = range.endRowIndex,
-                endColIndex = range.endColIndex,
-                cellInfo, rowIndex, colIndex, tdHash = {}, returnTds = [];
-            for (var i = beginRowIndex; i <= endRowIndex; i++) {
-                for (var j = beginColIndex; j <= endColIndex; j++) {
-                    cellInfo = this.indexTable[i][j];
-                    rowIndex = cellInfo.rowIndex;
-                    colIndex = cellInfo.colIndex;
-                    // 如果Cells里已经包含了此Cell则跳过
-                    var key = rowIndex + '|' + colIndex;
-                    if (tdHash[key]) continue;
-                    tdHash[key] = 1;
-                    if (rowIndex < i || colIndex < j || rowIndex + cellInfo.rowSpan - 1 > endRowIndex || colIndex + cellInfo.colSpan - 1 > endColIndex) {
-                        return null;
-                    }
-                    returnTds.push(this.getCell(rowIndex, cellInfo.cellIndex));
-                }
-            }
-            return returnTds;
-        },
-        /**
-         * 清理已经选中的单元格
-         */
-        clearSelected:function () {
-            UETable.removeSelectedClass(this.selectedTds);
-            this.selectedTds = [];
-            this.cellsRange = {};
-        },
-        /**
-         * 根据range设置已经选中的单元格
-         */
-        setSelected:function (range) {
-            var cells = this.getCells(range);
-            UETable.addSelectedClass(cells);
-            this.selectedTds = cells;
-            this.cellsRange = range;
-        },
-        isFullRow:function () {
-            var range = this.cellsRange;
-            return (range.endColIndex - range.beginColIndex + 1) == this.colsNum;
-        },
-        isFullCol:function () {
-            var range = this.cellsRange,
-                table = this.table,
-                ths = table.getElementsByTagName("th"),
-                rows = range.endRowIndex - range.beginRowIndex + 1;
-            return  !ths.length ? rows == this.rowsNum : rows == this.rowsNum || (rows == this.rowsNum - 1);
-
-        },
-        /**
-         * 获取视觉上的前置单元格,默认是左边,top传入时
-         * @param cell
-         * @param top
-         */
-        getNextCell:function (cell, bottom, ignoreRange) {
-            try {
-                var cellInfo = this.getCellInfo(cell),
-                    nextRowIndex, nextColIndex;
-                var len = this.selectedTds.length && !ignoreRange,
-                    range = this.cellsRange;
-                //末行或者末列没有后置单元格
-                if ((!bottom && (cellInfo.rowIndex == 0)) || (bottom && (!len ? (cellInfo.rowIndex + cellInfo.rowSpan > this.rowsNum - 1) : (range.endRowIndex == this.rowsNum - 1)))) return null;
-
-                nextRowIndex = !bottom ? ( !len ? cellInfo.rowIndex - 1 : range.beginRowIndex - 1)
-                    : ( !len ? (cellInfo.rowIndex + cellInfo.rowSpan) : range.endRowIndex + 1);
-                nextColIndex = !len ? cellInfo.colIndex : range.beginColIndex;
-                return this.getCell(this.indexTable[nextRowIndex][nextColIndex].rowIndex, this.indexTable[nextRowIndex][nextColIndex].cellIndex);
-            } catch (e) {
-                showError(e);
-            }
-        },
-        getPreviewCell:function (cell, top) {
-            try {
-                var cellInfo = this.getCellInfo(cell),
-                    previewRowIndex, previewColIndex;
-                var len = this.selectedTds.length,
-                    range = this.cellsRange;
-                //首行或者首列没有前置单元格
-                if ((!top && (!len ? !cellInfo.colIndex : !range.beginColIndex)) || (top && (!len ? (cellInfo.rowIndex > (this.colsNum - 1)) : (range.endColIndex == this.colsNum - 1)))) return null;
-
-                previewRowIndex = !top ? ( !len ? cellInfo.rowIndex : range.beginRowIndex )
-                    : ( !len ? (cellInfo.rowIndex < 1 ? 0 : (cellInfo.rowIndex - 1)) : range.beginRowIndex);
-                previewColIndex = !top ? ( !len ? (cellInfo.colIndex < 1 ? 0 : (cellInfo.colIndex - 1)) : range.beginColIndex - 1)
-                    : ( !len ? cellInfo.colIndex : range.endColIndex + 1);
-                return this.getCell(this.indexTable[previewRowIndex][previewColIndex].rowIndex, this.indexTable[previewRowIndex][previewColIndex].cellIndex);
-            } catch (e) {
-                showError(e);
-            }
-        },
-        /**
-         * 移动单元格中的内容
-         */
-        moveContent:function (cellTo, cellFrom) {
-            if (UETable.isEmptyBlock(cellFrom)) return;
-            if (UETable.isEmptyBlock(cellTo)) {
-                cellTo.innerHTML = cellFrom.innerHTML;
-                return;
-            }
-            var child = cellTo.lastChild;
-            if (child.nodeType == 3 || !dtd.$block[child.tagName]) {
-                cellTo.appendChild(cellTo.ownerDocument.createElement('br'))
-            }
-            while (child = cellFrom.firstChild) {
-                cellTo.appendChild(child);
-            }
-        },
-        /**
-         * 向右合并单元格
-         */
-        mergeRight:function (cell) {
-            var cellInfo = this.getCellInfo(cell),
-                rightColIndex = cellInfo.colIndex + cellInfo.colSpan,
-                rightCellInfo = this.indexTable[cellInfo.rowIndex][rightColIndex],
-                rightCell = this.getCell(rightCellInfo.rowIndex, rightCellInfo.cellIndex);
-            //合并
-            cell.colSpan = cellInfo.colSpan + rightCellInfo.colSpan;
-            //被合并的单元格不应存在宽度属性
-            cell.removeAttribute("width");
-            //移动内容
-            this.moveContent(cell, rightCell);
-            //删掉被合并的Cell
-            this.deleteCell(rightCell, rightCellInfo.rowIndex);
-            this.update();
-        },
-        /**
-         * 向下合并单元格
-         */
-        mergeDown:function (cell) {
-            var cellInfo = this.getCellInfo(cell),
-                downRowIndex = cellInfo.rowIndex + cellInfo.rowSpan,
-                downCellInfo = this.indexTable[downRowIndex][cellInfo.colIndex],
-                downCell = this.getCell(downCellInfo.rowIndex, downCellInfo.cellIndex);
-            cell.rowSpan = cellInfo.rowSpan + downCellInfo.rowSpan;
-            cell.removeAttribute("height");
-            this.moveContent(cell, downCell);
-            this.deleteCell(downCell, downCellInfo.rowIndex);
-            this.update();
-        },
-        /**
-         * 合并整个range中的内容
-         */
-        mergeRange:function () {
-            //由于合并操作可以在任意时刻进行,所以无法通过鼠标位置等信息实时生成range,只能通过缓存实例中的cellsRange对象来访问
-            var range = this.cellsRange,
-                leftTopCell = this.getCell(range.beginRowIndex, this.indexTable[range.beginRowIndex][range.beginColIndex].cellIndex);
-
-            if (leftTopCell.tagName == "TH" && range.endRowIndex !== range.beginRowIndex) {
-                var index = this.indexTable,
-                    info = this.getCellInfo(leftTopCell);
-                leftTopCell = this.getCell(1, index[1][info.colIndex].cellIndex);
-                range = this.getCellsRange(leftTopCell, this.getCell(index[this.rowsNum - 1][info.colIndex].rowIndex, index[this.rowsNum - 1][info.colIndex].cellIndex));
-            }
-
-            // 删除剩余的Cells
-            var cells = this.getCells(range);
-            for(var i= 0,ci;ci=cells[i++];){
-                if (ci !== leftTopCell) {
-                    this.moveContent(leftTopCell, ci);
-                    this.deleteCell(ci);
-                }
-            }
-            // 修改左上角Cell的rowSpan和colSpan,并调整宽度属性设置
-            leftTopCell.rowSpan = range.endRowIndex - range.beginRowIndex + 1;
-            leftTopCell.rowSpan > 1 && leftTopCell.removeAttribute("height");
-            leftTopCell.colSpan = range.endColIndex - range.beginColIndex + 1;
-            leftTopCell.colSpan > 1 && leftTopCell.removeAttribute("width");
-            if (leftTopCell.rowSpan == this.rowsNum && leftTopCell.colSpan != 1) {
-                leftTopCell.colSpan = 1;
-            }
-
-            if (leftTopCell.colSpan == this.colsNum && leftTopCell.rowSpan != 1) {
-                var rowIndex = leftTopCell.parentNode.rowIndex;
-                //解决IE下的表格操作问题
-                if( this.table.deleteRow ) {
-                    for (var i = rowIndex+ 1, curIndex=rowIndex+ 1, len=leftTopCell.rowSpan; i < len; i++) {
-                        this.table.deleteRow(curIndex);
-                    }
-                } else {
-                    for (var i = 0, len=leftTopCell.rowSpan - 1; i < len; i++) {
-                        var row = this.table.rows[rowIndex + 1];
-                        row.parentNode.removeChild(row);
-                    }
-                }
-                leftTopCell.rowSpan = 1;
-            }
-            this.update();
-        },
-        /**
-         * 插入一行单元格
-         */
-        insertRow:function (rowIndex, sourceCell) {
-            var numCols = this.colsNum,
-                table = this.table,
-                row = table.insertRow(rowIndex), cell,
-                isInsertTitle = typeof sourceCell == 'string' && sourceCell.toUpperCase() == 'TH';
-
-            function replaceTdToTh(colIndex, cell, tableRow) {
-                if (colIndex == 0) {
-                    var tr = tableRow.nextSibling || tableRow.previousSibling,
-                        th = tr.cells[colIndex];
-                    if (th.tagName == 'TH') {
-                        th = cell.ownerDocument.createElement("th");
-                        th.appendChild(cell.firstChild);
-                        tableRow.insertBefore(th, cell);
-                        domUtils.remove(cell)
-                    }
-                }else{
-                    if (cell.tagName == 'TH') {
-                        var td = cell.ownerDocument.createElement("td");
-                        td.appendChild(cell.firstChild);
-                        tableRow.insertBefore(td, cell);
-                        domUtils.remove(cell)
-                    }
-                }
-            }
-
-            //首行直接插入,无需考虑部分单元格被rowspan的情况
-            if (rowIndex == 0 || rowIndex == this.rowsNum) {
-                for (var colIndex = 0; colIndex < numCols; colIndex++) {
-                    cell = this.cloneCell(sourceCell, true);
-                    this.setCellContent(cell);
-                    cell.getAttribute('vAlign') && cell.setAttribute('vAlign', cell.getAttribute('vAlign'));
-                    row.appendChild(cell);
-                    if(!isInsertTitle) replaceTdToTh(colIndex, cell, row);
-                }
-            } else {
-                var infoRow = this.indexTable[rowIndex],
-                    cellIndex = 0;
-                for (colIndex = 0; colIndex < numCols; colIndex++) {
-                    var cellInfo = infoRow[colIndex];
-                    //如果存在某个单元格的rowspan穿过待插入行的位置,则修改该单元格的rowspan即可,无需插入单元格
-                    if (cellInfo.rowIndex < rowIndex) {
-                        cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex);
-                        cell.rowSpan = cellInfo.rowSpan + 1;
-                    } else {
-                        cell = this.cloneCell(sourceCell, true);
-                        this.setCellContent(cell);
-                        row.appendChild(cell);
-                    }
-                    if(!isInsertTitle) replaceTdToTh(colIndex, cell, row);
-                }
-            }
-            //框选时插入不触发contentchange,需要手动更新索引。
-            this.update();
-            return row;
-        },
-        /**
-         * 删除一行单元格
-         * @param rowIndex
-         */
-        deleteRow:function (rowIndex) {
-            var row = this.table.rows[rowIndex],
-                infoRow = this.indexTable[rowIndex],
-                colsNum = this.colsNum,
-                count = 0;     //处理计数
-            for (var colIndex = 0; colIndex < colsNum;) {
-                var cellInfo = infoRow[colIndex],
-                    cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex);
-                if (cell.rowSpan > 1) {
-                    if (cellInfo.rowIndex == rowIndex) {
-                        var clone = cell.cloneNode(true);
-                        clone.rowSpan = cell.rowSpan - 1;
-                        clone.innerHTML = "";
-                        cell.rowSpan = 1;
-                        var nextRowIndex = rowIndex + 1,
-                            nextRow = this.table.rows[nextRowIndex],
-                            insertCellIndex,
-                            preMerged = this.getPreviewMergedCellsNum(nextRowIndex, colIndex) - count;
-                        if (preMerged < colIndex) {
-                            insertCellIndex = colIndex - preMerged - 1;
-                            //nextRow.insertCell(insertCellIndex);
-                            domUtils.insertAfter(nextRow.cells[insertCellIndex], clone);
-                        } else {
-                            if (nextRow.cells.length) nextRow.insertBefore(clone, nextRow.cells[0])
-                        }
-                        count += 1;
-                        //cell.parentNode.removeChild(cell);
-                    }
-                }
-                colIndex += cell.colSpan || 1;
-            }
-            var deleteTds = [], cacheMap = {};
-            for (colIndex = 0; colIndex < colsNum; colIndex++) {
-                var tmpRowIndex = infoRow[colIndex].rowIndex,
-                    tmpCellIndex = infoRow[colIndex].cellIndex,
-                    key = tmpRowIndex + "_" + tmpCellIndex;
-                if (cacheMap[key])continue;
-                cacheMap[key] = 1;
-                cell = this.getCell(tmpRowIndex, tmpCellIndex);
-                deleteTds.push(cell);
-            }
-            var mergeTds = [];
-            utils.each(deleteTds, function (td) {
-                if (td.rowSpan == 1) {
-                    td.parentNode.removeChild(td);
-                } else {
-                    mergeTds.push(td);
-                }
-            });
-            utils.each(mergeTds, function (td) {
-                td.rowSpan--;
-            });
-            row.parentNode.removeChild(row);
-            //浏览器方法本身存在bug,采用自定义方法删除
-            //this.table.deleteRow(rowIndex);
-            this.update();
-        },
-        insertCol:function (colIndex, sourceCell, defaultValue) {
-            var rowsNum = this.rowsNum,
-                rowIndex = 0,
-                tableRow, cell,
-                backWidth = parseInt((this.table.offsetWidth - (this.colsNum + 1) * 20 - (this.colsNum + 1)) / (this.colsNum + 1), 10),
-                isInsertTitleCol = typeof sourceCell == 'string' && sourceCell.toUpperCase() == 'TH';
-
-            function replaceTdToTh(rowIndex, cell, tableRow) {
-                if (rowIndex == 0) {
-                    var th = cell.nextSibling || cell.previousSibling;
-                    if (th.tagName == 'TH') {
-                        th = cell.ownerDocument.createElement("th");
-                        th.appendChild(cell.firstChild);
-                        tableRow.insertBefore(th, cell);
-                        domUtils.remove(cell)
-                    }
-                }else{
-                    if (cell.tagName == 'TH') {
-                        var td = cell.ownerDocument.createElement("td");
-                        td.appendChild(cell.firstChild);
-                        tableRow.insertBefore(td, cell);
-                        domUtils.remove(cell)
-                    }
-                }
-            }
-
-            var preCell;
-            if (colIndex == 0 || colIndex == this.colsNum) {
-                for (; rowIndex < rowsNum; rowIndex++) {
-                    tableRow = this.table.rows[rowIndex];
-                    preCell = tableRow.cells[colIndex == 0 ? colIndex : tableRow.cells.length];
-                    cell = this.cloneCell(sourceCell, true); //tableRow.insertCell(colIndex == 0 ? colIndex : tableRow.cells.length);
-                    this.setCellContent(cell);
-                    cell.setAttribute('vAlign', cell.getAttribute('vAlign'));
-                    preCell && cell.setAttribute('width', preCell.getAttribute('width'));
-                    if (!colIndex) {
-                        tableRow.insertBefore(cell, tableRow.cells[0]);
-                    } else {
-                        domUtils.insertAfter(tableRow.cells[tableRow.cells.length - 1], cell);
-                    }
-                    if(!isInsertTitleCol) replaceTdToTh(rowIndex, cell, tableRow)
-                }
-            } else {
-                for (; rowIndex < rowsNum; rowIndex++) {
-                    var cellInfo = this.indexTable[rowIndex][colIndex];
-                    if (cellInfo.colIndex < colIndex) {
-                        cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex);
-                        cell.colSpan = cellInfo.colSpan + 1;
-                    } else {
-                        tableRow = this.table.rows[rowIndex];
-                        preCell = tableRow.cells[cellInfo.cellIndex];
-
-                        cell = this.cloneCell(sourceCell, true);//tableRow.insertCell(cellInfo.cellIndex);
-                        this.setCellContent(cell);
-                        cell.setAttribute('vAlign', cell.getAttribute('vAlign'));
-                        preCell && cell.setAttribute('width', preCell.getAttribute('width'));
-                        //防止IE下报错
-                        preCell ? tableRow.insertBefore(cell, preCell) : tableRow.appendChild(cell);
-                    }
-                    if(!isInsertTitleCol) replaceTdToTh(rowIndex, cell, tableRow);
-                }
-            }
-            //框选时插入不触发contentchange,需要手动更新索引
-            this.update();
-            this.updateWidth(backWidth, defaultValue || {tdPadding:10, tdBorder:1});
-        },
-        updateWidth:function (width, defaultValue) {
-            var table = this.table,
-                tmpWidth = UETable.getWidth(table) - defaultValue.tdPadding * 2 - defaultValue.tdBorder + width;
-            if (tmpWidth < table.ownerDocument.body.offsetWidth) {
-                table.setAttribute("width", tmpWidth);
-                return;
-            }
-            var tds = domUtils.getElementsByTagName(this.table, "td th");
-            utils.each(tds, function (td) {
-                td.setAttribute("width", width);
-            })
-        },
-        deleteCol:function (colIndex) {
-            var indexTable = this.indexTable,
-                tableRows = this.table.rows,
-                backTableWidth = this.table.getAttribute("width"),
-                backTdWidth = 0,
-                rowsNum = this.rowsNum,
-                cacheMap = {};
-            for (var rowIndex = 0; rowIndex < rowsNum;) {
-                var infoRow = indexTable[rowIndex],
-                    cellInfo = infoRow[colIndex],
-                    key = cellInfo.rowIndex + '_' + cellInfo.colIndex;
-                // 跳过已经处理过的Cell
-                if (cacheMap[key])continue;
-                cacheMap[key] = 1;
-                var cell = this.getCell(cellInfo.rowIndex, cellInfo.cellIndex);
-                if (!backTdWidth) backTdWidth = cell && parseInt(cell.offsetWidth / cell.colSpan, 10).toFixed(0);
-                // 如果Cell的colSpan大于1, 就修改colSpan, 否则就删掉这个Cell
-                if (cell.colSpan > 1) {
-                    cell.colSpan--;
-                } else {
-                    tableRows[rowIndex].deleteCell(cellInfo.cellIndex);
-                }
-                rowIndex += cellInfo.rowSpan || 1;
-            }
-            this.table.setAttribute("width", backTableWidth - backTdWidth);
-            this.update();
-        },
-        splitToCells:function (cell) {
-            var me = this,
-                cells = this.splitToRows(cell);
-            utils.each(cells, function (cell) {
-                me.splitToCols(cell);
-            })
-        },
-        splitToRows:function (cell) {
-            var cellInfo = this.getCellInfo(cell),
-                rowIndex = cellInfo.rowIndex,
-                colIndex = cellInfo.colIndex,
-                results = [];
-            // 修改Cell的rowSpan
-            cell.rowSpan = 1;
-            results.push(cell);
-            // 补齐单元格
-            for (var i = rowIndex, endRow = rowIndex + cellInfo.rowSpan; i < endRow; i++) {
-                if (i == rowIndex)continue;
-                var tableRow = this.table.rows[i],
-                    tmpCell = tableRow.insertCell(colIndex - this.getPreviewMergedCellsNum(i, colIndex));
-                tmpCell.colSpan = cellInfo.colSpan;
-                this.setCellContent(tmpCell);
-                tmpCell.setAttribute('vAlign', cell.getAttribute('vAlign'));
-                tmpCell.setAttribute('align', cell.getAttribute('align'));
-                if (cell.style.cssText) {
-                    tmpCell.style.cssText = cell.style.cssText;
-                }
-                results.push(tmpCell);
-            }
-            this.update();
-            return results;
-        },
-        getPreviewMergedCellsNum:function (rowIndex, colIndex) {
-            var indexRow = this.indexTable[rowIndex],
-                num = 0;
-            for (var i = 0; i < colIndex;) {
-                var colSpan = indexRow[i].colSpan,
-                    tmpRowIndex = indexRow[i].rowIndex;
-                num += (colSpan - (tmpRowIndex == rowIndex ? 1 : 0));
-                i += colSpan;
-            }
-            return num;
-        },
-        splitToCols:function (cell) {
-            var backWidth = (cell.offsetWidth / cell.colSpan - 22).toFixed(0),
-
-                cellInfo = this.getCellInfo(cell),
-                rowIndex = cellInfo.rowIndex,
-                colIndex = cellInfo.colIndex,
-                results = [];
-            // 修改Cell的rowSpan
-            cell.colSpan = 1;
-            cell.setAttribute("width", backWidth);
-            results.push(cell);
-            // 补齐单元格
-            for (var j = colIndex, endCol = colIndex + cellInfo.colSpan; j < endCol; j++) {
-                if (j == colIndex)continue;
-                var tableRow = this.table.rows[rowIndex],
-                    tmpCell = tableRow.insertCell(this.indexTable[rowIndex][j].cellIndex + 1);
-                tmpCell.rowSpan = cellInfo.rowSpan;
-                this.setCellContent(tmpCell);
-                tmpCell.setAttribute('vAlign', cell.getAttribute('vAlign'));
-                tmpCell.setAttribute('align', cell.getAttribute('align'));
-                tmpCell.setAttribute('width', backWidth);
-                if (cell.style.cssText) {
-                    tmpCell.style.cssText = cell.style.cssText;
-                }
-                //处理th的情况
-                if (cell.tagName == 'TH') {
-                    var th = cell.ownerDocument.createElement('th');
-                    th.appendChild(tmpCell.firstChild);
-                    th.setAttribute('vAlign', cell.getAttribute('vAlign'));
-                    th.rowSpan = tmpCell.rowSpan;
-                    tableRow.insertBefore(th, tmpCell);
-                    domUtils.remove(tmpCell);
-                }
-                results.push(tmpCell);
-            }
-            this.update();
-            return results;
-        },
-        isLastCell:function (cell, rowsNum, colsNum) {
-            rowsNum = rowsNum || this.rowsNum;
-            colsNum = colsNum || this.colsNum;
-            var cellInfo = this.getCellInfo(cell);
-            return ((cellInfo.rowIndex + cellInfo.rowSpan) == rowsNum) &&
-                ((cellInfo.colIndex + cellInfo.colSpan) == colsNum);
-        },
-        getLastCell:function (cells) {
-            cells = cells || this.table.getElementsByTagName("td");
-            var firstInfo = this.getCellInfo(cells[0]);
-            var me = this, last = cells[0],
-                tr = last.parentNode,
-                cellsNum = 0, cols = 0, rows;
-            utils.each(cells, function (cell) {
-                if (cell.parentNode == tr)cols += cell.colSpan || 1;
-                cellsNum += cell.rowSpan * cell.colSpan || 1;
-            });
-            rows = cellsNum / cols;
-            utils.each(cells, function (cell) {
-                if (me.isLastCell(cell, rows, cols)) {
-                    last = cell;
-                    return false;
-                }
-            });
-            return last;
-
-        },
-        selectRow:function (rowIndex) {
-            var indexRow = this.indexTable[rowIndex],
-                start = this.getCell(indexRow[0].rowIndex, indexRow[0].cellIndex),
-                end = this.getCell(indexRow[this.colsNum - 1].rowIndex, indexRow[this.colsNum - 1].cellIndex),
-                range = this.getCellsRange(start, end);
-            this.setSelected(range);
-        },
-        selectTable:function () {
-            var tds = this.table.getElementsByTagName("td"),
-                range = this.getCellsRange(tds[0], tds[tds.length - 1]);
-            this.setSelected(range);
-        },
-        setBackground:function (cells, value) {
-            if (typeof value === "string") {
-                utils.each(cells, function (cell) {
-                    cell.style.backgroundColor = value;
-                })
-            } else if (typeof value === "object") {
-                value = utils.extend({
-                    repeat:true,
-                    colorList:["#ddd", "#fff"]
-                }, value);
-                var rowIndex = this.getCellInfo(cells[0]).rowIndex,
-                    count = 0,
-                    colors = value.colorList,
-                    getColor = function (list, index, repeat) {
-                        return list[index] ? list[index] : repeat ? list[index % list.length] : "";
-                    };
-                for (var i = 0, cell; cell = cells[i++];) {
-                    var cellInfo = this.getCellInfo(cell);
-                    cell.style.backgroundColor = getColor(colors, ((rowIndex + count) == cellInfo.rowIndex) ? count : ++count, value.repeat);
-                }
-            }
-        },
-        removeBackground:function (cells) {
-            utils.each(cells, function (cell) {
-                cell.style.backgroundColor = "";
-            })
-        }
-
-
-    };
-    function showError(e) {
-    }
-})();
-/**
- * Created with JetBrains PhpStorm.
- * User: taoqili
- * Date: 13-2-20
- * Time: 下午6:25
- * To change this template use File | Settings | File Templates.
- */
-;
-(function () {
-    var UT = UE.UETable,
-        getTableItemsByRange = function (editor) {
-            return UT.getTableItemsByRange(editor);
-        },
-        getUETableBySelected = function (editor) {
-            return UT.getUETableBySelected(editor)
-        },
-        getDefaultValue = function (editor, table) {
-            return UT.getDefaultValue(editor, table);
-        },
-        getUETable = function (tdOrTable) {
-            return UT.getUETable(tdOrTable);
-        };
-
-
-    UE.commands['inserttable'] = {
-        queryCommandState: function () {
-            return getTableItemsByRange(this).table ? -1 : 0;
-        },
-        execCommand: function (cmd, opt) {
-            function createTable(opt, tdWidth) {
-                var html = [],
-                    rowsNum = opt.numRows,
-                    colsNum = opt.numCols;
-                for (var r = 0; r < rowsNum; r++) {
-                    html.push('<tr>');
-                    for (var c = 0; c < colsNum; c++) {
-                        html.push('<td width="' + tdWidth + '"  vAlign="' + opt.tdvalign + '" >' + (browser.ie ? domUtils.fillChar : '<br/>') + '</td>')
-                    }
-                    html.push('</tr>')
-                }
-                //禁止指定table-width
-                return '<table><tbody>' + html.join('') + '</tbody></table>'
-            }
-
-            if (!opt) {
-                opt = utils.extend({}, {
-                    numCols: this.options.defaultCols,
-                    numRows: this.options.defaultRows,
-                    tdvalign: this.options.tdvalign
-                })
-            }
-            var me = this;
-            var range = this.selection.getRange(),
-                start = range.startContainer,
-                firstParentBlock = domUtils.findParent(start, function (node) {
-                    return domUtils.isBlockElm(node);
-                }, true) || me.body;
-
-            var defaultValue = getDefaultValue(me),
-                tableWidth = firstParentBlock.offsetWidth,
-                tdWidth = Math.floor(tableWidth / opt.numCols - defaultValue.tdPadding * 2 - defaultValue.tdBorder);
-
-            //todo其他属性
-            !opt.tdvalign && (opt.tdvalign = me.options.tdvalign);
-            me.execCommand("inserthtml", createTable(opt, tdWidth));
-        }
-    };
-
-    UE.commands['insertparagraphbeforetable'] = {
-        queryCommandState: function () {
-            return getTableItemsByRange(this).cell ? 0 : -1;
-        },
-        execCommand: function () {
-            var table = getTableItemsByRange(this).table;
-            if (table) {
-                var p = this.document.createElement("p");
-                p.innerHTML = browser.ie ? '&nbsp;' : '<br />';
-                table.parentNode.insertBefore(p, table);
-                this.selection.getRange().setStart(p, 0).setCursor();
-            }
-        }
-    };
-
-    UE.commands['deletetable'] = {
-        queryCommandState: function () {
-            var rng = this.selection.getRange();
-            return domUtils.findParentByTagName(rng.startContainer, 'table', true) ? 0 : -1;
-        },
-        execCommand: function (cmd, table) {
-            var rng = this.selection.getRange();
-            table = table || domUtils.findParentByTagName(rng.startContainer, 'table', true);
-            if (table) {
-                var next = table.nextSibling;
-                if (!next) {
-                    next = domUtils.createElement(this.document, 'p', {
-                        'innerHTML': browser.ie ? domUtils.fillChar : '<br/>'
-                    });
-                    table.parentNode.insertBefore(next, table);
-                }
-                domUtils.remove(table);
-                rng = this.selection.getRange();
-                if (next.nodeType == 3) {
-                    rng.setStartBefore(next)
-                } else {
-                    rng.setStart(next, 0)
-                }
-                rng.setCursor(false, true)
-                this.fireEvent("tablehasdeleted")
-
-            }
-
-        }
-    };
-    UE.commands['cellalign'] = {
-        queryCommandState: function () {
-            return getSelectedArr(this).length ? 0 : -1
-        },
-        execCommand: function (cmd, align) {
-            var selectedTds = getSelectedArr(this);
-            if (selectedTds.length) {
-                for (var i = 0, ci; ci = selectedTds[i++];) {
-                    ci.setAttribute('align', align);
-                }
-            }
-        }
-    };
-    UE.commands['cellvalign'] = {
-        queryCommandState: function () {
-            return getSelectedArr(this).length ? 0 : -1;
-        },
-        execCommand: function (cmd, valign) {
-            var selectedTds = getSelectedArr(this);
-            if (selectedTds.length) {
-                for (var i = 0, ci; ci = selectedTds[i++];) {
-                    ci.setAttribute('vAlign', valign);
-                }
-            }
-        }
-    };
-    UE.commands['insertcaption'] = {
-        queryCommandState: function () {
-            var table = getTableItemsByRange(this).table;
-            if (table) {
-                return table.getElementsByTagName('caption').length == 0 ? 1 : -1;
-            }
-            return -1;
-        },
-        execCommand: function () {
-            var table = getTableItemsByRange(this).table;
-            if (table) {
-                var caption = this.document.createElement('caption');
-                caption.innerHTML = browser.ie ? domUtils.fillChar : '<br/>';
-                table.insertBefore(caption, table.firstChild);
-                var range = this.selection.getRange();
-                range.setStart(caption, 0).setCursor();
-            }
-
-        }
-    };
-    UE.commands['deletecaption'] = {
-        queryCommandState: function () {
-            var rng = this.selection.getRange(),
-                table = domUtils.findParentByTagName(rng.startContainer, 'table');
-            if (table) {
-                return table.getElementsByTagName('caption').length == 0 ? -1 : 1;
-            }
-            return -1;
-        },
-        execCommand: function () {
-            var rng = this.selection.getRange(),
-                table = domUtils.findParentByTagName(rng.startContainer, 'table');
-            if (table) {
-                domUtils.remove(table.getElementsByTagName('caption')[0]);
-                var range = this.selection.getRange();
-                range.setStart(table.rows[0].cells[0], 0).setCursor();
-            }
-
-        }
-    };
-    UE.commands['inserttitle'] = {
-        queryCommandState: function () {
-            var table = getTableItemsByRange(this).table;
-            if (table) {
-                var firstRow = table.rows[0];
-                return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase() != 'th' ? 0 : -1
-            }
-            return -1;
-        },
-        execCommand: function () {
-            var table = getTableItemsByRange(this).table;
-            if (table) {
-                getUETable(table).insertRow(0, 'th');
-            }
-            var th = table.getElementsByTagName('th')[0];
-            this.selection.getRange().setStart(th, 0).setCursor(false, true);
-        }
-    };
-    UE.commands['deletetitle'] = {
-        queryCommandState: function () {
-            var table = getTableItemsByRange(this).table;
-            if (table) {
-                var firstRow = table.rows[0];
-                return firstRow.cells[firstRow.cells.length-1].tagName.toLowerCase() == 'th' ? 0 : -1
-            }
-            return -1;
-        },
-        execCommand: function () {
-            var table = getTableItemsByRange(this).table;
-            if (table) {
-                domUtils.remove(table.rows[0])
-            }
-            var td = table.getElementsByTagName('td')[0];
-            this.selection.getRange().setStart(td, 0).setCursor(false, true);
-        }
-    };
-    UE.commands['inserttitlecol'] = {
-        queryCommandState: function () {
-            var table = getTableItemsByRange(this).table;
-            if (table) {
-                var lastRow = table.rows[table.rows.length-1];
-                return lastRow.getElementsByTagName('th').length ? -1 : 0;
-            }
-            return -1;
-        },
-        execCommand: function (cmd) {
-            var table = getTableItemsByRange(this).table;
-            if (table) {
-                getUETable(table).insertCol(0, 'th');
-            }
-            resetTdWidth(table, this);
-            var th = table.getElementsByTagName('th')[0];
-            this.selection.getRange().setStart(th, 0).setCursor(false, true);
-        }
-    };
-    UE.commands['deletetitlecol'] = {
-        queryCommandState: function () {
-            var table = getTableItemsByRange(this).table;
-            if (table) {
-                var lastRow = table.rows[table.rows.length-1];
-                return lastRow.getElementsByTagName('th').length ? 0 : -1;
-            }
-            return -1;
-        },
-        execCommand: function () {
-            var table = getTableItemsByRange(this).table;
-            if (table) {
-                for(var i = 0; i< table.rows.length; i++ ){
-                    domUtils.remove(table.rows[i].children[0])
-                }
-            }
-            resetTdWidth(table, this);
-            var td = table.getElementsByTagName('td')[0];
-            this.selection.getRange().setStart(td, 0).setCursor(false, true);
-        }
-    };
-
-    UE.commands["mergeright"] = {
-        queryCommandState: function (cmd) {
-            var tableItems = getTableItemsByRange(this);
-            if (!tableItems.cell) return -1;
-            var ut = getUETable(tableItems.table);
-            if (ut.selectedTds.length) return -1;
-            var cellInfo = ut.getCellInfo(tableItems.cell),
-                rightColIndex = cellInfo.colIndex + cellInfo.colSpan;
-            if (rightColIndex >= ut.colsNum) return -1;
-            var rightCellInfo = ut.indexTable[cellInfo.rowIndex][rightColIndex];
-            return (rightCellInfo.rowIndex == cellInfo.rowIndex
-                && rightCellInfo.rowSpan == cellInfo.rowSpan) ? 0 : -1;
-        },
-        execCommand: function (cmd) {
-            var rng = this.selection.getRange(),
-                bk = rng.createBookmark(true);
-            var cell = getTableItemsByRange(this).cell,
-                ut = getUETable(cell);
-            ut.mergeRight(cell);
-            rng.moveToBookmark(bk).select();
-        }
-    };
-    UE.commands["mergedown"] = {
-        queryCommandState: function (cmd) {
-            var tableItems = getTableItemsByRange(this),
-                cell = tableItems.cell;
-            if (!cell || cell.tagName == "TH") return -1;
-            var ut = getUETable(tableItems.table);
-            if (ut.selectedTds.length)return -1;
-            var cellInfo = ut.getCellInfo(tableItems.cell),
-                downRowIndex = cellInfo.rowIndex + cellInfo.rowSpan;
-            // 如果处于最下边则不能f向右合并
-            if (downRowIndex >= ut.rowsNum) return -1;
-            var downCellInfo = ut.indexTable[downRowIndex][cellInfo.colIndex];
-            // 当且仅当两个Cell的开始列号和结束列号一致时能进行合并
-            return (downCellInfo.colIndex == cellInfo.colIndex
-                && downCellInfo.colSpan == cellInfo.colSpan) && tableItems.cell.tagName !== 'TH' ? 0 : -1;
-        },
-        execCommand: function () {
-            var rng = this.selection.getRange(),
-                bk = rng.createBookmark(true);
-            var cell = getTableItemsByRange(this).cell,
-                ut = getUETable(cell);
-            ut.mergeDown(cell);
-            rng.moveToBookmark(bk).select();
-        }
-    };
-    UE.commands["mergecells"] = {
-        queryCommandState: function () {
-            return getUETableBySelected(this) ? 0 : -1;
-        },
-        execCommand: function () {
-            var ut = getUETableBySelected(this);
-            if (ut && ut.selectedTds.length) {
-                var cell = ut.selectedTds[0];
-                ut.mergeRange();
-                var rng = this.selection.getRange();
-                if (domUtils.isEmptyBlock(cell)) {
-                    rng.setStart(cell, 0).collapse(true)
-                } else {
-                    rng.selectNodeContents(cell)
-                }
-                rng.select();
-            }
-
-
-        }
-    };
-    UE.commands["insertrow"] = {
-        queryCommandState: function () {
-            var tableItems = getTableItemsByRange(this),
-                cell = tableItems.cell;
-            return cell && (cell.tagName == "TD" || (cell.tagName == 'TH' && tableItems.tr !== tableItems.table.rows[0])) &&
-                getUETable(tableItems.table).rowsNum < this.options.maxRowNum ? 0 : -1;
-        },
-        execCommand: function () {
-            var rng = this.selection.getRange(),
-                bk = rng.createBookmark(true);
-            var tableItems = getTableItemsByRange(this),
-                cell = tableItems.cell,
-                table = tableItems.table,
-                ut = getUETable(table),
-                cellInfo = ut.getCellInfo(cell);
-            //ut.insertRow(!ut.selectedTds.length ? cellInfo.rowIndex:ut.cellsRange.beginRowIndex,'');
-            if (!ut.selectedTds.length) {
-                ut.insertRow(cellInfo.rowIndex, cell);
-            } else {
-                var range = ut.cellsRange;
-                for (var i = 0, len = range.endRowIndex - range.beginRowIndex + 1; i < len; i++) {
-                    ut.insertRow(range.beginRowIndex, cell);
-                }
-            }
-            rng.moveToBookmark(bk).select();
-            if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table);
-        }
-    };
-    //后插入行
-    UE.commands["insertrownext"] = {
-        queryCommandState: function () {
-            var tableItems = getTableItemsByRange(this),
-                cell = tableItems.cell;
-            return cell && (cell.tagName == "TD") && getUETable(tableItems.table).rowsNum < this.options.maxRowNum ? 0 : -1;
-        },
-        execCommand: function () {
-            var rng = this.selection.getRange(),
-                bk = rng.createBookmark(true);
-            var tableItems = getTableItemsByRange(this),
-                cell = tableItems.cell,
-                table = tableItems.table,
-                ut = getUETable(table),
-                cellInfo = ut.getCellInfo(cell);
-            //ut.insertRow(!ut.selectedTds.length? cellInfo.rowIndex + cellInfo.rowSpan : ut.cellsRange.endRowIndex + 1,'');
-            if (!ut.selectedTds.length) {
-                ut.insertRow(cellInfo.rowIndex + cellInfo.rowSpan, cell);
-            } else {
-                var range = ut.cellsRange;
-                for (var i = 0, len = range.endRowIndex - range.beginRowIndex + 1; i < len; i++) {
-                    ut.insertRow(range.endRowIndex + 1, cell);
-                }
-            }
-            rng.moveToBookmark(bk).select();
-            if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table);
-        }
-    };
-    UE.commands["deleterow"] = {
-        queryCommandState: function () {
-            var tableItems = getTableItemsByRange(this);
-            if (!tableItems.cell) {
-                return -1;
-            }
-        },
-        execCommand: function () {
-            var cell = getTableItemsByRange(this).cell,
-                ut = getUETable(cell),
-                cellsRange = ut.cellsRange,
-                cellInfo = ut.getCellInfo(cell),
-                preCell = ut.getVSideCell(cell),
-                nextCell = ut.getVSideCell(cell, true),
-                rng = this.selection.getRange();
-            if (utils.isEmptyObject(cellsRange)) {
-                ut.deleteRow(cellInfo.rowIndex);
-            } else {
-                for (var i = cellsRange.beginRowIndex; i < cellsRange.endRowIndex + 1; i++) {
-                    ut.deleteRow(cellsRange.beginRowIndex);
-                }
-            }
-            var table = ut.table;
-            if (!table.getElementsByTagName('td').length) {
-                var nextSibling = table.nextSibling;
-                domUtils.remove(table);
-                if (nextSibling) {
-                    rng.setStart(nextSibling, 0).setCursor(false, true);
-                }
-            } else {
-                if (cellInfo.rowSpan == 1 || cellInfo.rowSpan == cellsRange.endRowIndex - cellsRange.beginRowIndex + 1) {
-                    if (nextCell || preCell) rng.selectNodeContents(nextCell || preCell).setCursor(false, true);
-                } else {
-                    var newCell = ut.getCell(cellInfo.rowIndex, ut.indexTable[cellInfo.rowIndex][cellInfo.colIndex].cellIndex);
-                    if (newCell) rng.selectNodeContents(newCell).setCursor(false, true);
-                }
-            }
-            if (table.getAttribute("interlaced") === "enabled")this.fireEvent("interlacetable", table);
-        }
-    };
-    UE.commands["insertcol"] = {
-        queryCommandState: function (cmd) {
-            var tableItems = getTableItemsByRange(this),
-                cell = tableItems.cell;
-            return cell && (cell.tagName == "TD" || (cell.tagName == 'TH' && cell !== tableItems.tr.cells[0])) &&
-                getUETable(tableItems.table).colsNum < this.options.maxColNum ? 0 : -1;
-        },
-        execCommand: function (cmd) {
-            var rng = this.selection.getRange(),
-                bk = rng.createBookmark(true);
-            if (this.queryCommandState(cmd) == -1)return;
-            var cell = getTableItemsByRange(this).cell,
-                ut = getUETable(cell),
-                cellInfo = ut.getCellInfo(cell);
-
-            //ut.insertCol(!ut.selectedTds.length ? cellInfo.colIndex:ut.cellsRange.beginColIndex);
-            if (!ut.selectedTds.length) {
-                ut.insertCol(cellInfo.colIndex, cell);
-            } else {
-                var range = ut.cellsRange;
-                for (var i = 0, len = range.endColIndex - range.beginColIndex + 1; i < len; i++) {
-                    ut.insertCol(range.beginColIndex, cell);
-                }
-            }
-            rng.moveToBookmark(bk).select(true);
-        }
-    };
-    UE.commands["insertcolnext"] = {
-        queryCommandState: function () {
-            var tableItems = getTableItemsByRange(this),
-                cell = tableItems.cell;
-            return cell && getUETable(tableItems.table).colsNum < this.options.maxColNum ? 0 : -1;
-        },
-        execCommand: function () {
-            var rng = this.selection.getRange(),
-                bk = rng.createBookmark(true);
-            var cell = getTableItemsByRange(this).cell,
-                ut = getUETable(cell),
-                cellInfo = ut.getCellInfo(cell);
-            //ut.insertCol(!ut.selectedTds.length ? cellInfo.colIndex + cellInfo.colSpan:ut.cellsRange.endColIndex +1);
-            if (!ut.selectedTds.length) {
-                ut.insertCol(cellInfo.colIndex + cellInfo.colSpan, cell);
-            } else {
-                var range = ut.cellsRange;
-                for (var i = 0, len = range.endColIndex - range.beginColIndex + 1; i < len; i++) {
-                    ut.insertCol(range.endColIndex + 1, cell);
-                }
-            }
-            rng.moveToBookmark(bk).select();
-        }
-    };
-
-    UE.commands["deletecol"] = {
-        queryCommandState: function () {
-            var tableItems = getTableItemsByRange(this);
-            if (!tableItems.cell) return -1;
-        },
-        execCommand: function () {
-            var cell = getTableItemsByRange(this).cell,
-                ut = getUETable(cell),
-                range = ut.cellsRange,
-                cellInfo = ut.getCellInfo(cell),
-                preCell = ut.getHSideCell(cell),
-                nextCell = ut.getHSideCell(cell, true);
-            if (utils.isEmptyObject(range)) {
-                ut.deleteCol(cellInfo.colIndex);
-            } else {
-                for (var i = range.beginColIndex; i < range.endColIndex + 1; i++) {
-                    ut.deleteCol(range.beginColIndex);
-                }
-            }
-            var table = ut.table,
-                rng = this.selection.getRange();
-
-            if (!table.getElementsByTagName('td').length) {
-                var nextSibling = table.nextSibling;
-                domUtils.remove(table);
-                if (nextSibling) {
-                    rng.setStart(nextSibling, 0).setCursor(false, true);
-                }
-            } else {
-                if (domUtils.inDoc(cell, this.document)) {
-                    rng.setStart(cell, 0).setCursor(false, true);
-                } else {
-                    if (nextCell && domUtils.inDoc(nextCell, this.document)) {
-                        rng.selectNodeContents(nextCell).setCursor(false, true);
-                    } else {
-                        if (preCell && domUtils.inDoc(preCell, this.document)) {
-                            rng.selectNodeContents(preCell).setCursor(true, true);
-                        }
-                    }
-                }
-            }
-        }
-    };
-    UE.commands["splittocells"] = {
-        queryCommandState: function () {
-            var tableItems = getTableItemsByRange(this),
-                cell = tableItems.cell;
-            if (!cell) return -1;
-            var ut = getUETable(tableItems.table);
-            if (ut.selectedTds.length > 0) return -1;
-            return cell && (cell.colSpan > 1 || cell.rowSpan > 1) ? 0 : -1;
-        },
-        execCommand: function () {
-            var rng = this.selection.getRange(),
-                bk = rng.createBookmark(true);
-            var cell = getTableItemsByRange(this).cell,
-                ut = getUETable(cell);
-            ut.splitToCells(cell);
-            rng.moveToBookmark(bk).select();
-        }
-    };
-    UE.commands["splittorows"] = {
-        queryCommandState: function () {
-            var tableItems = getTableItemsByRange(this),
-                cell = tableItems.cell;
-            if (!cell) return -1;
-            var ut = getUETable(tableItems.table);
-            if (ut.selectedTds.length > 0) return -1;
-            return cell && cell.rowSpan > 1 ? 0 : -1;
-        },
-        execCommand: function () {
-            var rng = this.selection.getRange(),
-                bk = rng.createBookmark(true);
-            var cell = getTableItemsByRange(this).cell,
-                ut = getUETable(cell);
-            ut.splitToRows(cell);
-            rng.moveToBookmark(bk).select();
-        }
-    };
-    UE.commands["splittocols"] = {
-        queryCommandState: function () {
-            var tableItems = getTableItemsByRange(this),
-                cell = tableItems.cell;
-            if (!cell) return -1;
-            var ut = getUETable(tableItems.table);
-            if (ut.selectedTds.length > 0) return -1;
-            return cell && cell.colSpan > 1 ? 0 : -1;
-        },
-        execCommand: function () {
-            var rng = this.selection.getRange(),
-                bk = rng.createBookmark(true);
-            var cell = getTableItemsByRange(this).cell,
-                ut = getUETable(cell);
-            ut.splitToCols(cell);
-            rng.moveToBookmark(bk).select();
-
-        }
-    };
-
-    UE.commands["adaptbytext"] =
-        UE.commands["adaptbywindow"] = {
-            queryCommandState: function () {
-                return getTableItemsByRange(this).table ? 0 : -1
-            },
-            execCommand: function (cmd) {
-                var tableItems = getTableItemsByRange(this),
-                    table = tableItems.table;
-                if (table) {
-                    if (cmd == 'adaptbywindow') {
-                        resetTdWidth(table, this);
-                    } else {
-                        var cells = domUtils.getElementsByTagName(table, "td th");
-                        utils.each(cells, function (cell) {
-                            cell.removeAttribute("width");
-                        });
-                        table.removeAttribute("width");
-                    }
-                }
-            }
-        };
-
-    //平均分配各列
-    UE.commands['averagedistributecol'] = {
-        queryCommandState: function () {
-            var ut = getUETableBySelected(this);
-            if (!ut) return -1;
-            return ut.isFullRow() || ut.isFullCol() ? 0 : -1;
-        },
-        execCommand: function (cmd) {
-            var me = this,
-                ut = getUETableBySelected(me);
-
-            function getAverageWidth() {
-                var tb = ut.table,
-                    averageWidth, sumWidth = 0, colsNum = 0,
-                    tbAttr = getDefaultValue(me, tb);
-
-                if (ut.isFullRow()) {
-                    sumWidth = tb.offsetWidth;
-                    colsNum = ut.colsNum;
-                } else {
-                    var begin = ut.cellsRange.beginColIndex,
-                        end = ut.cellsRange.endColIndex,
-                        node;
-                    for (var i = begin; i <= end;) {
-                        node = ut.selectedTds[i];
-                        sumWidth += node.offsetWidth;
-                        i += node.colSpan;
-                        colsNum += 1;
-                    }
-                }
-                averageWidth = Math.ceil(sumWidth / colsNum) - tbAttr.tdBorder * 2 - tbAttr.tdPadding * 2;
-                return averageWidth;
-            }
-
-            function setAverageWidth(averageWidth) {
-                utils.each(domUtils.getElementsByTagName(ut.table, "th"), function (node) {
-                    node.setAttribute("width", "");
-                });
-                var cells = ut.isFullRow() ? domUtils.getElementsByTagName(ut.table, "td") : ut.selectedTds;
-
-                utils.each(cells, function (node) {
-                    if (node.colSpan == 1) {
-                        node.setAttribute("width", averageWidth);
-                    }
-                });
-            }
-
-            if (ut && ut.selectedTds.length) {
-                setAverageWidth(getAverageWidth());
-            }
-        }
-    };
-    //平均分配各行
-    UE.commands['averagedistributerow'] = {
-        queryCommandState: function () {
-            var ut = getUETableBySelected(this);
-            if (!ut) return -1;
-            if (ut.selectedTds && /th/ig.test(ut.selectedTds[0].tagName)) return -1;
-            return ut.isFullRow() || ut.isFullCol() ? 0 : -1;
-        },
-        execCommand: function (cmd) {
-            var me = this,
-                ut = getUETableBySelected(me);
-
-            function getAverageHeight() {
-                var averageHeight, rowNum, sumHeight = 0,
-                    tb = ut.table,
-                    tbAttr = getDefaultValue(me, tb),
-                    tdpadding = parseInt(domUtils.getComputedStyle(tb.getElementsByTagName('td')[0], "padding-top"));
-
-                if (ut.isFullCol()) {
-                    var captionArr = domUtils.getElementsByTagName(tb, "caption"),
-                        thArr = domUtils.getElementsByTagName(tb, "th"),
-                        captionHeight, thHeight;
-
-                    if (captionArr.length > 0) {
-                        captionHeight = captionArr[0].offsetHeight;
-                    }
-                    if (thArr.length > 0) {
-                        thHeight = thArr[0].offsetHeight;
-                    }
-
-                    sumHeight = tb.offsetHeight - (captionHeight || 0) - (thHeight || 0);
-                    rowNum = thArr.length == 0 ? ut.rowsNum : (ut.rowsNum - 1);
-                } else {
-                    var begin = ut.cellsRange.beginRowIndex,
-                        end = ut.cellsRange.endRowIndex,
-                        count = 0,
-                        trs = domUtils.getElementsByTagName(tb, "tr");
-                    for (var i = begin; i <= end; i++) {
-                        sumHeight += trs[i].offsetHeight;
-                        count += 1;
-                    }
-                    rowNum = count;
-                }
-                //ie8下是混杂模式
-                if (browser.ie && browser.version < 9) {
-                    averageHeight = Math.ceil(sumHeight / rowNum);
-                } else {
-                    averageHeight = Math.ceil(sumHeight / rowNum) - tbAttr.tdBorder * 2 - tdpadding * 2;
-                }
-                return averageHeight;
-            }
-
-            function setAverageHeight(averageHeight) {
-                var cells = ut.isFullCol() ? domUtils.getElementsByTagName(ut.table, "td") : ut.selectedTds;
-                utils.each(cells, function (node) {
-                    if (node.rowSpan == 1) {
-                        node.setAttribute("height", averageHeight);
-                    }
-                });
-            }
-
-            if (ut && ut.selectedTds.length) {
-                setAverageHeight(getAverageHeight());
-            }
-        }
-    };
-
-    //单元格对齐方式
-    UE.commands['cellalignment'] = {
-        queryCommandState: function () {
-            return getTableItemsByRange(this).table ? 0 : -1
-        },
-        execCommand: function (cmd, data) {
-            var me = this,
-                ut = getUETableBySelected(me);
-
-            if (!ut) {
-                var start = me.selection.getStart(),
-                    cell = start && domUtils.findParentByTagName(start, ["td", "th", "caption"], true);
-                if (!/caption/ig.test(cell.tagName)) {
-                    domUtils.setAttributes(cell, data);
-                } else {
-                    cell.style.textAlign = data.align;
-                    cell.style.verticalAlign = data.vAlign;
-                }
-                me.selection.getRange().setCursor(true);
-            } else {
-                utils.each(ut.selectedTds, function (cell) {
-                    domUtils.setAttributes(cell, data);
-                });
-            }
-        },
-        /**
-         * 查询当前点击的单元格的对齐状态, 如果当前已经选择了多个单元格, 则会返回所有单元格经过统一协调过后的状态
-         * @see UE.UETable.getTableCellAlignState
-         */
-        queryCommandValue: function (cmd) {
-
-            var activeMenuCell = getTableItemsByRange( this).cell;
-
-            if( !activeMenuCell ) {
-                activeMenuCell = getSelectedArr(this)[0];
-            }
-
-            if (!activeMenuCell) {
-
-                return null;
-
-            } else {
-
-                //获取同时选中的其他单元格
-                var cells = UE.UETable.getUETable(activeMenuCell).selectedTds;
-
-                !cells.length && ( cells = activeMenuCell );
-
-                return UE.UETable.getTableCellAlignState(cells);
-
-            }
-
-        }
-    };
-    //表格对齐方式
-    UE.commands['tablealignment'] = {
-        queryCommandState: function () {
-            if (browser.ie && browser.version < 8) {
-                return -1;
-            }
-            return getTableItemsByRange(this).table ? 0 : -1
-        },
-        execCommand: function (cmd, value) {
-            var me = this,
-                start = me.selection.getStart(),
-                table = start && domUtils.findParentByTagName(start, ["table"], true);
-
-            if (table) {
-                table.setAttribute("align",value);
-            }
-        }
-    };
-
-    //表格属性
-    UE.commands['edittable'] = {
-        queryCommandState: function () {
-            return getTableItemsByRange(this).table ? 0 : -1
-        },
-        execCommand: function (cmd, color) {
-            var rng = this.selection.getRange(),
-                table = domUtils.findParentByTagName(rng.startContainer, 'table');
-            if (table) {
-                var arr = domUtils.getElementsByTagName(table, "td").concat(
-                    domUtils.getElementsByTagName(table, "th"),
-                    domUtils.getElementsByTagName(table, "caption")
-                );
-                utils.each(arr, function (node) {
-                    node.style.borderColor = color;
-                });
-            }
-        }
-    };
-    //单元格属性
-    UE.commands['edittd'] = {
-        queryCommandState: function () {
-            return getTableItemsByRange(this).table ? 0 : -1
-        },
-        execCommand: function (cmd, bkColor) {
-            var me = this,
-                ut = getUETableBySelected(me);
-
-            if (!ut) {
-                var start = me.selection.getStart(),
-                    cell = start && domUtils.findParentByTagName(start, ["td", "th", "caption"], true);
-                if (cell) {
-                    cell.style.backgroundColor = bkColor;
-                }
-            } else {
-                utils.each(ut.selectedTds, function (cell) {
-                    cell.style.backgroundColor = bkColor;
-                });
-            }
-        }
-    };
-
-    UE.commands["settablebackground"] = {
-        queryCommandState: function () {
-            return getSelectedArr(this).length > 1 ? 0 : -1;
-        },
-        execCommand: function (cmd, value) {
-            var cells, ut;
-            cells = getSelectedArr(this);
-            ut = getUETable(cells[0]);
-            ut.setBackground(cells, value);
-        }
-    };
-
-    UE.commands["cleartablebackground"] = {
-        queryCommandState: function () {
-            var cells = getSelectedArr(this);
-            if (!cells.length)return -1;
-            for (var i = 0, cell; cell = cells[i++];) {
-                if (cell.style.backgroundColor !== "") return 0;
-            }
-            return -1;
-        },
-        execCommand: function () {
-            var cells = getSelectedArr(this),
-                ut = getUETable(cells[0]);
-            ut.removeBackground(cells);
-        }
-    };
-
-    UE.commands["interlacetable"] = UE.commands["uninterlacetable"] = {
-        queryCommandState: function (cmd) {
-            var table = getTableItemsByRange(this).table;
-            if (!table) return -1;
-            var interlaced = table.getAttribute("interlaced");
-            if (cmd == "interlacetable") {
-                //TODO 待定
-                //是否需要待定,如果设置,则命令只能单次执行成功,但反射具备toggle效果;否则可以覆盖前次命令,但反射将不存在toggle效果
-                return (interlaced === "enabled") ? -1 : 0;
-            } else {
-                return (!interlaced || interlaced === "disabled") ? -1 : 0;
-            }
-        },
-        execCommand: function (cmd, classList) {
-            var table = getTableItemsByRange(this).table;
-            if (cmd == "interlacetable") {
-                table.setAttribute("interlaced", "enabled");
-                this.fireEvent("interlacetable", table, classList);
-            } else {
-                table.setAttribute("interlaced", "disabled");
-                this.fireEvent("uninterlacetable", table);
-            }
-        }
-    };
-    UE.commands["setbordervisible"] = {
-        queryCommandState: function (cmd) {
-            var table = getTableItemsByRange(this).table;
-            if (!table) return -1;
-            return 0;
-        },
-        execCommand: function () {
-            var table = getTableItemsByRange(this).table;
-            utils.each(domUtils.getElementsByTagName(table,'td'),function(td){
-                td.style.borderWidth = '1px';
-                td.style.borderStyle = 'solid';
-            })
-        }
-    };
-    function resetTdWidth(table, editor) {
-        var tds = domUtils.getElementsByTagName(table,'td th');
-        utils.each(tds, function (td) {
-            td.removeAttribute("width");
-        });
-        table.setAttribute('width', getTableWidth(editor, true, getDefaultValue(editor, table)));
-        var tdsWidths = [];
-        setTimeout(function () {
-            utils.each(tds, function (td) {
-                (td.colSpan == 1) && tdsWidths.push(td.offsetWidth)
-            })
-            utils.each(tds, function (td,i) {
-                (td.colSpan == 1) && td.setAttribute("width", tdsWidths[i] + "");
-            })
-        }, 0);
-    }
-
-    function getTableWidth(editor, needIEHack, defaultValue) {
-        var body = editor.body;
-        return body.offsetWidth - (needIEHack ? parseInt(domUtils.getComputedStyle(body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (editor.options.offsetWidth || 0);
-    }
-
-    function getSelectedArr(editor) {
-        var cell = getTableItemsByRange(editor).cell;
-        if (cell) {
-            var ut = getUETable(cell);
-            return ut.selectedTds.length ? ut.selectedTds : [cell];
-        } else {
-            return [];
-        }
-    }
-})();
-/**
- * Created with JetBrains PhpStorm.
- * User: taoqili
- * Date: 12-10-12
- * Time: 上午10:05
- * To change this template use File | Settings | File Templates.
- */
-UE.plugins['table'] = function () {
-    var me = this,
-        tabTimer = null,
-        //拖动计时器
-        tableDragTimer = null,
-        //双击计时器
-        tableResizeTimer = null,
-        //单元格最小宽度
-        cellMinWidth = 5,
-        isInResizeBuffer = false,
-        //单元格边框大小
-        cellBorderWidth = 5,
-        //鼠标偏移距离
-        offsetOfTableCell = 10,
-        //记录在有限时间内的点击状态, 共有3个取值, 0, 1, 2。 0代表未初始化, 1代表单击了1次,2代表2次
-        singleClickState = 0,
-        userActionStatus = null,
-        //双击允许的时间范围
-        dblclickTime = 360,
-        UT = UE.UETable,
-        getUETable = function (tdOrTable) {
-            return UT.getUETable(tdOrTable);
-        },
-        getUETableBySelected = function (editor) {
-            return UT.getUETableBySelected(editor);
-        },
-        getDefaultValue = function (editor, table) {
-            return UT.getDefaultValue(editor, table);
-        },
-        removeSelectedClass = function (cells) {
-            return UT.removeSelectedClass(cells);
-        };
-
-    function showError(e) {
-//        throw e;
-    }
-    me.ready(function(){
-        var me = this;
-        var orgGetText = me.selection.getText;
-        me.selection.getText = function(){
-            var table = getUETableBySelected(me);
-            if(table){
-                var str = '';
-                utils.each(table.selectedTds,function(td){
-                    str += td[browser.ie?'innerText':'textContent'];
-                })
-                return str;
-            }else{
-                return orgGetText.call(me.selection)
-            }
-
-        }
-    })
-
-    //处理拖动及框选相关方法
-    var startTd = null, //鼠标按下时的锚点td
-        currentTd = null, //当前鼠标经过时的td
-        onDrag = "", //指示当前拖动状态,其值可为"","h","v" ,分别表示未拖动状态,横向拖动状态,纵向拖动状态,用于鼠标移动过程中的判断
-        onBorder = false, //检测鼠标按下时是否处在单元格边缘位置
-        dragButton = null,
-        dragOver = false,
-        dragLine = null, //模拟的拖动线
-        dragTd = null;    //发生拖动的目标td
-
-    var mousedown = false,
-    //todo 判断混乱模式
-        needIEHack = true;
-
-    me.setOpt({
-        'maxColNum':20,
-        'maxRowNum':100,
-        'defaultCols':5,
-        'defaultRows':5,
-        'tdvalign':'top',
-        'cursorpath':me.options.UEDITOR_HOME_URL + "themes/default/images/cursor_",
-        'tableDragable':false,
-        'classList':["ue-table-interlace-color-single","ue-table-interlace-color-double"]
-    });
-    me.getUETable = getUETable;
-    var commands = {
-        'deletetable':1,
-        'inserttable':1,
-        'cellvalign':1,
-        'insertcaption':1,
-        'deletecaption':1,
-        'inserttitle':1,
-        'deletetitle':1,
-        "mergeright":1,
-        "mergedown":1,
-        "mergecells":1,
-        "insertrow":1,
-        "insertrownext":1,
-        "deleterow":1,
-        "insertcol":1,
-        "insertcolnext":1,
-        "deletecol":1,
-        "splittocells":1,
-        "splittorows":1,
-        "splittocols":1,
-        "adaptbytext":1,
-        "adaptbywindow":1,
-        "adaptbycustomer":1,
-        "insertparagraph":1,
-        "insertparagraphbeforetable":1,
-        "averagedistributecol":1,
-        "averagedistributerow":1
-    };
-    me.ready(function () {
-        utils.cssRule('table',
-            //选中的td上的样式
-            '.selectTdClass{background-color:#edf5fa !important}' +
-                'table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}' +
-                //插入的表格的默认样式
-                'table{margin-bottom:10px;border-collapse:collapse;display:table;}' +
-                'td,th{padding: 5px 10px;border: 1px solid #DDD;}' +
-                'caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}' +
-                'th{border-top:1px solid #BBB;background-color:#F7F7F7;}' +
-                'table tr.firstRow th{border-top-width:2px;}' +
-                '.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }' +
-                'td p{margin:0;padding:0;}', me.document);
-
-        var tableCopyList, isFullCol, isFullRow;
-        //注册del/backspace事件
-        me.addListener('keydown', function (cmd, evt) {
-            var me = this;
-            var keyCode = evt.keyCode || evt.which;
-
-            if (keyCode == 8) {
-
-                var ut = getUETableBySelected(me);
-                if (ut && ut.selectedTds.length) {
-
-                    if (ut.isFullCol()) {
-                        me.execCommand('deletecol')
-                    } else if (ut.isFullRow()) {
-                        me.execCommand('deleterow')
-                    } else {
-                        me.fireEvent('delcells');
-                    }
-                    domUtils.preventDefault(evt);
-                }
-
-                var caption = domUtils.findParentByTagName(me.selection.getStart(), 'caption', true),
-                    range = me.selection.getRange();
-                if (range.collapsed && caption && isEmptyBlock(caption)) {
-                    me.fireEvent('saveScene');
-                    var table = caption.parentNode;
-                    domUtils.remove(caption);
-                    if (table) {
-                        range.setStart(table.rows[0].cells[0], 0).setCursor(false, true);
-                    }
-                    me.fireEvent('saveScene');
-                }
-
-            }
-
-            if (keyCode == 46) {
-
-                ut = getUETableBySelected(me);
-                if (ut) {
-                    me.fireEvent('saveScene');
-                    for (var i = 0, ci; ci = ut.selectedTds[i++];) {
-                        domUtils.fillNode(me.document, ci)
-                    }
-                    me.fireEvent('saveScene');
-                    domUtils.preventDefault(evt);
-
-                }
-
-            }
-            if (keyCode == 13) {
-
-                var rng = me.selection.getRange(),
-                    caption = domUtils.findParentByTagName(rng.startContainer, 'caption', true);
-                if (caption) {
-                    var table = domUtils.findParentByTagName(caption, 'table');
-                    if (!rng.collapsed) {
-
-                        rng.deleteContents();
-                        me.fireEvent('saveScene');
-                    } else {
-                        if (caption) {
-                            rng.setStart(table.rows[0].cells[0], 0).setCursor(false, true);
-                        }
-                    }
-                    domUtils.preventDefault(evt);
-                    return;
-                }
-                if (rng.collapsed) {
-                    var table = domUtils.findParentByTagName(rng.startContainer, 'table');
-                    if (table) {
-                        var cell = table.rows[0].cells[0],
-                            start = domUtils.findParentByTagName(me.selection.getStart(), ['td', 'th'], true),
-                            preNode = table.previousSibling;
-                        if (cell === start && (!preNode || preNode.nodeType == 1 && preNode.tagName == 'TABLE' ) && domUtils.isStartInblock(rng)) {
-                            var first = domUtils.findParent(me.selection.getStart(), function(n){return domUtils.isBlockElm(n)}, true);
-                            if(first && ( /t(h|d)/i.test(first.tagName) || first ===  start.firstChild )){
-                                me.execCommand('insertparagraphbeforetable');
-                                domUtils.preventDefault(evt);
-                            }
-
-                        }
-                    }
-                }
-            }
-
-            if ((evt.ctrlKey || evt.metaKey) && evt.keyCode == '67') {
-                tableCopyList = null;
-                var ut = getUETableBySelected(me);
-                if (ut) {
-                    var tds = ut.selectedTds;
-                    isFullCol = ut.isFullCol();
-                    isFullRow = ut.isFullRow();
-                    tableCopyList = [
-                        [ut.cloneCell(tds[0],null,true)]
-                    ];
-                    for (var i = 1, ci; ci = tds[i]; i++) {
-                        if (ci.parentNode !== tds[i - 1].parentNode) {
-                            tableCopyList.push([ut.cloneCell(ci,null,true)]);
-                        } else {
-                            tableCopyList[tableCopyList.length - 1].push(ut.cloneCell(ci,null,true));
-                        }
-
-                    }
-                }
-            }
-        });
-        me.addListener("tablehasdeleted",function(){
-            toggleDraggableState(this, false, "", null);
-            if (dragButton)domUtils.remove(dragButton);
-        });
-
-        me.addListener('beforepaste', function (cmd, html) {
-            var me = this;
-            var rng = me.selection.getRange();
-            if (domUtils.findParentByTagName(rng.startContainer, 'caption', true)) {
-                var div = me.document.createElement("div");
-                div.innerHTML = html.html;
-                //trace:3729
-                html.html = div[browser.ie9below ? 'innerText' : 'textContent'];
-                return;
-            }
-            var table = getUETableBySelected(me);
-            if (tableCopyList) {
-                me.fireEvent('saveScene');
-                var rng = me.selection.getRange();
-                var td = domUtils.findParentByTagName(rng.startContainer, ['td', 'th'], true), tmpNode, preNode;
-                if (td) {
-                    var ut = getUETable(td);
-                    if (isFullRow) {
-                        var rowIndex = ut.getCellInfo(td).rowIndex;
-                        if (td.tagName == 'TH') {
-                            rowIndex++;
-                        }
-                        for (var i = 0, ci; ci = tableCopyList[i++];) {
-                            var tr = ut.insertRow(rowIndex++, "td");
-                            for (var j = 0, cj; cj = ci[j]; j++) {
-                                var cell = tr.cells[j];
-                                if (!cell) {
-                                    cell = tr.insertCell(j)
-                                }
-                                cell.innerHTML = cj.innerHTML;
-                                cj.getAttribute('width') && cell.setAttribute('width', cj.getAttribute('width'));
-                                cj.getAttribute('vAlign') && cell.setAttribute('vAlign', cj.getAttribute('vAlign'));
-                                cj.getAttribute('align') && cell.setAttribute('align', cj.getAttribute('align'));
-                                cj.style.cssText && (cell.style.cssText = cj.style.cssText)
-                            }
-                            for (var j = 0, cj; cj = tr.cells[j]; j++) {
-                                if (!ci[j])
-                                    break;
-                                cj.innerHTML = ci[j].innerHTML;
-                                ci[j].getAttribute('width') && cj.setAttribute('width', ci[j].getAttribute('width'));
-                                ci[j].getAttribute('vAlign') && cj.setAttribute('vAlign', ci[j].getAttribute('vAlign'));
-                                ci[j].getAttribute('align') && cj.setAttribute('align', ci[j].getAttribute('align'));
-                                ci[j].style.cssText && (cj.style.cssText = ci[j].style.cssText)
-                            }
-                        }
-                    } else {
-                        if (isFullCol) {
-                            cellInfo = ut.getCellInfo(td);
-                            var maxColNum = 0;
-                            for (var j = 0, ci = tableCopyList[0], cj; cj = ci[j++];) {
-                                maxColNum += cj.colSpan || 1;
-                            }
-                            me.__hasEnterExecCommand = true;
-                            for (i = 0; i < maxColNum; i++) {
-                                me.execCommand('insertcol');
-                            }
-                            me.__hasEnterExecCommand = false;
-                            td = ut.table.rows[0].cells[cellInfo.cellIndex];
-                            if (td.tagName == 'TH') {
-                                td = ut.table.rows[1].cells[cellInfo.cellIndex];
-                            }
-                        }
-                        for (var i = 0, ci; ci = tableCopyList[i++];) {
-                            tmpNode = td;
-                            for (var j = 0, cj; cj = ci[j++];) {
-                                if (td) {
-                                    td.innerHTML = cj.innerHTML;
-                                    //todo 定制处理
-                                    cj.getAttribute('width') && td.setAttribute('width', cj.getAttribute('width'));
-                                    cj.getAttribute('vAlign') && td.setAttribute('vAlign', cj.getAttribute('vAlign'));
-                                    cj.getAttribute('align') && td.setAttribute('align', cj.getAttribute('align'));
-                                    cj.style.cssText && (td.style.cssText = cj.style.cssText);
-                                    preNode = td;
-                                    td = td.nextSibling;
-                                } else {
-                                    var cloneTd = cj.cloneNode(true);
-                                    domUtils.removeAttributes(cloneTd, ['class', 'rowSpan', 'colSpan']);
-
-                                    preNode.parentNode.appendChild(cloneTd)
-                                }
-                            }
-                            td = ut.getNextCell(tmpNode, true, true);
-                            if (!tableCopyList[i])
-                                break;
-                            if (!td) {
-                                var cellInfo = ut.getCellInfo(tmpNode);
-                                ut.table.insertRow(ut.table.rows.length);
-                                ut.update();
-                                td = ut.getVSideCell(tmpNode, true);
-                            }
-                        }
-                    }
-                    ut.update();
-                } else {
-                    table = me.document.createElement('table');
-                    for (var i = 0, ci; ci = tableCopyList[i++];) {
-                        var tr = table.insertRow(table.rows.length);
-                        for (var j = 0, cj; cj = ci[j++];) {
-                            cloneTd = UT.cloneCell(cj,null,true);
-                            domUtils.removeAttributes(cloneTd, ['class']);
-                            tr.appendChild(cloneTd)
-                        }
-                        if (j == 2 && cloneTd.rowSpan > 1) {
-                            cloneTd.rowSpan = 1;
-                        }
-                    }
-
-                    var defaultValue = getDefaultValue(me),
-                        width = me.body.offsetWidth -
-                            (needIEHack ? parseInt(domUtils.getComputedStyle(me.body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (me.options.offsetWidth || 0);
-                    me.execCommand('insertHTML', '<table  ' +
-                        ( isFullCol && isFullRow ? 'width="' + width + '"' : '') +
-                        '>' + table.innerHTML.replace(/>\s*</g, '><').replace(/\bth\b/gi, "td") + '</table>')
-                }
-                me.fireEvent('contentchange');
-                me.fireEvent('saveScene');
-                html.html = '';
-                return true;
-            } else {
-                var div = me.document.createElement("div"), tables;
-                div.innerHTML = html.html;
-                tables = div.getElementsByTagName("table");
-                if (domUtils.findParentByTagName(me.selection.getStart(), 'table')) {
-                    utils.each(tables, function (t) {
-                        domUtils.remove(t)
-                    });
-                    if (domUtils.findParentByTagName(me.selection.getStart(), 'caption', true)) {
-                        div.innerHTML = div[browser.ie ? 'innerText' : 'textContent'];
-                    }
-                } else {
-                    utils.each(tables, function (table) {
-                        removeStyleSize(table, true);
-                        domUtils.removeAttributes(table, ['style', 'border']);
-                        utils.each(domUtils.getElementsByTagName(table, "td"), function (td) {
-                            if (isEmptyBlock(td)) {
-                                domUtils.fillNode(me.document, td);
-                            }
-                            removeStyleSize(td, true);
-//                            domUtils.removeAttributes(td, ['style'])
-                        });
-                    });
-                }
-                html.html = div.innerHTML;
-            }
-        });
-
-        me.addListener('afterpaste', function () {
-            utils.each(domUtils.getElementsByTagName(me.body, "table"), function (table) {
-                if (table.offsetWidth > me.body.offsetWidth) {
-                    var defaultValue = getDefaultValue(me, table);
-                    table.style.width = me.body.offsetWidth - (needIEHack ? parseInt(domUtils.getComputedStyle(me.body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (me.options.offsetWidth || 0) + 'px'
-                }
-            })
-        });
-        me.addListener('blur', function () {
-            tableCopyList = null;
-        });
-        var timer;
-        me.addListener('keydown', function () {
-            clearTimeout(timer);
-            timer = setTimeout(function () {
-                var rng = me.selection.getRange(),
-                    cell = domUtils.findParentByTagName(rng.startContainer, ['th', 'td'], true);
-                if (cell) {
-                    var table = cell.parentNode.parentNode.parentNode;
-                    if (table.offsetWidth > table.getAttribute("width")) {
-                        cell.style.wordBreak = "break-all";
-                    }
-                }
-
-            }, 100);
-        });
-        me.addListener("selectionchange", function () {
-            toggleDraggableState(me, false, "", null);
-        });
-
-
-        //内容变化时触发索引更新
-        //todo 可否考虑标记检测,如果不涉及表格的变化就不进行索引重建和更新
-        me.addListener("contentchange", function () {
-            var me = this;
-            //尽可能排除一些不需要更新的状况
-            hideDragLine(me);
-            if (getUETableBySelected(me))return;
-            var rng = me.selection.getRange();
-            var start = rng.startContainer;
-            start = domUtils.findParentByTagName(start, ['td', 'th'], true);
-            utils.each(domUtils.getElementsByTagName(me.document, 'table'), function (table) {
-                if (me.fireEvent("excludetable", table) === true) return;
-                table.ueTable = new UT(table);
-                //trace:3742
-//                utils.each(domUtils.getElementsByTagName(me.document, 'td'), function (td) {
-//
-//                    if (domUtils.isEmptyBlock(td) && td !== start) {
-//                        domUtils.fillNode(me.document, td);
-//                        if (browser.ie && browser.version == 6) {
-//                            td.innerHTML = '&nbsp;'
-//                        }
-//                    }
-//                });
-//                utils.each(domUtils.getElementsByTagName(me.document, 'th'), function (th) {
-//                    if (domUtils.isEmptyBlock(th) && th !== start) {
-//                        domUtils.fillNode(me.document, th);
-//                        if (browser.ie && browser.version == 6) {
-//                            th.innerHTML = '&nbsp;'
-//                        }
-//                    }
-//                });
-                table.onmouseover = function () {
-                    me.fireEvent('tablemouseover', table);
-                };
-                table.onmousemove = function () {
-                    me.fireEvent('tablemousemove', table);
-                    me.options.tableDragable && toggleDragButton(true, this, me);
-                    utils.defer(function(){
-                        me.fireEvent('contentchange',50)
-                    },true)
-                };
-                table.onmouseout = function () {
-                    me.fireEvent('tablemouseout', table);
-                    toggleDraggableState(me, false, "", null);
-                    hideDragLine(me);
-                };
-                table.onclick = function (evt) {
-                    evt = me.window.event || evt;
-                    var target = getParentTdOrTh(evt.target || evt.srcElement);
-                    if (!target)return;
-                    var ut = getUETable(target),
-                        table = ut.table,
-                        cellInfo = ut.getCellInfo(target),
-                        cellsRange,
-                        rng = me.selection.getRange();
-//                    if ("topLeft" == inPosition(table, mouseCoords(evt))) {
-//                        cellsRange = ut.getCellsRange(ut.table.rows[0].cells[0], ut.getLastCell());
-//                        ut.setSelected(cellsRange);
-//                        return;
-//                    }
-//                    if ("bottomRight" == inPosition(table, mouseCoords(evt))) {
-//
-//                        return;
-//                    }
-                    if (inTableSide(table, target, evt, true)) {
-                        var endTdCol = ut.getCell(ut.indexTable[ut.rowsNum - 1][cellInfo.colIndex].rowIndex, ut.indexTable[ut.rowsNum - 1][cellInfo.colIndex].cellIndex);
-                        if (evt.shiftKey && ut.selectedTds.length) {
-                            if (ut.selectedTds[0] !== endTdCol) {
-                                cellsRange = ut.getCellsRange(ut.selectedTds[0], endTdCol);
-                                ut.setSelected(cellsRange);
-                            } else {
-                                rng && rng.selectNodeContents(endTdCol).select();
-                            }
-                        } else {
-                            if (target !== endTdCol) {
-                                cellsRange = ut.getCellsRange(target, endTdCol);
-                                ut.setSelected(cellsRange);
-                            } else {
-                                rng && rng.selectNodeContents(endTdCol).select();
-                            }
-                        }
-                        return;
-                    }
-                    if (inTableSide(table, target, evt)) {
-                        var endTdRow = ut.getCell(ut.indexTable[cellInfo.rowIndex][ut.colsNum - 1].rowIndex, ut.indexTable[cellInfo.rowIndex][ut.colsNum - 1].cellIndex);
-                        if (evt.shiftKey && ut.selectedTds.length) {
-                            if (ut.selectedTds[0] !== endTdRow) {
-                                cellsRange = ut.getCellsRange(ut.selectedTds[0], endTdRow);
-                                ut.setSelected(cellsRange);
-                            } else {
-                                rng && rng.selectNodeContents(endTdRow).select();
-                            }
-                        } else {
-                            if (target !== endTdRow) {
-                                cellsRange = ut.getCellsRange(target, endTdRow);
-                                ut.setSelected(cellsRange);
-                            } else {
-                                rng && rng.selectNodeContents(endTdRow).select();
-                            }
-                        }
-                    }
-                };
-            });
-
-            switchBorderColor(me, true);
-        });
-
-        domUtils.on(me.document, "mousemove", mouseMoveEvent);
-
-        domUtils.on(me.document, "mouseout", function (evt) {
-            var target = evt.target || evt.srcElement;
-            if (target.tagName == "TABLE") {
-                toggleDraggableState(me, false, "", null);
-            }
-        });
-        /**
-         * 表格隔行变色
-         */
-        me.addListener("interlacetable",function(type,table,classList){
-            if(!table) return;
-            var me = this,
-                rows = table.rows,
-                len = rows.length,
-                getClass = function(list,index,repeat){
-                    return list[index] ? list[index] : repeat ? list[index % list.length]: "";
-                };
-            for(var i = 0;i<len;i++){
-                rows[i].className = getClass( classList|| me.options.classList,i,true);
-            }
-        });
-        me.addListener("uninterlacetable",function(type,table){
-            if(!table) return;
-            var me = this,
-                rows = table.rows,
-                classList = me.options.classList,
-                len = rows.length;
-            for(var i = 0;i<len;i++){
-                domUtils.removeClasses( rows[i], classList );
-            }
-        });
-
-        me.addListener("mousedown", mouseDownEvent);
-        me.addListener("mouseup", mouseUpEvent);
-        //拖动的时候不出发mouseup
-        domUtils.on( me.body, 'dragstart', function( evt ){
-            mouseUpEvent.call( me, 'dragstart', evt );
-        });
-
-        var currentRowIndex = 0;
-        me.addListener("mousedown", function () {
-            currentRowIndex = 0;
-        });
-        me.addListener('tabkeydown', function () {
-            var range = this.selection.getRange(),
-                common = range.getCommonAncestor(true, true),
-                table = domUtils.findParentByTagName(common, 'table');
-            if (table) {
-                if (domUtils.findParentByTagName(common, 'caption', true)) {
-                    var cell = domUtils.getElementsByTagName(table, 'th td');
-                    if (cell && cell.length) {
-                        range.setStart(cell[0], 0).setCursor(false, true)
-                    }
-                } else {
-                    var cell = domUtils.findParentByTagName(common, ['td', 'th'], true),
-                        ua = getUETable(cell);
-                    currentRowIndex = cell.rowSpan > 1 ? currentRowIndex : ua.getCellInfo(cell).rowIndex;
-                    var nextCell = ua.getTabNextCell(cell, currentRowIndex);
-                    if (nextCell) {
-                        if (isEmptyBlock(nextCell)) {
-                            range.setStart(nextCell, 0).setCursor(false, true)
-                        } else {
-                            range.selectNodeContents(nextCell).select()
-                        }
-                    } else {
-                        me.fireEvent('saveScene');
-                        me.__hasEnterExecCommand = true;
-                        this.execCommand('insertrownext');
-                        me.__hasEnterExecCommand = false;
-                        range = this.selection.getRange();
-                        range.setStart(table.rows[table.rows.length - 1].cells[0], 0).setCursor();
-                        me.fireEvent('saveScene');
-                    }
-                }
-                return true;
-            }
-
-        });
-        browser.ie && me.addListener('selectionchange', function () {
-            toggleDraggableState(this, false, "", null);
-        });
-        me.addListener("keydown", function (type, evt) {
-            var me = this;
-            //处理在表格的最后一个输入tab产生新的表格
-            var keyCode = evt.keyCode || evt.which;
-            if (keyCode == 8 || keyCode == 46) {
-                return;
-            }
-            var notCtrlKey = !evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey;
-            notCtrlKey && removeSelectedClass(domUtils.getElementsByTagName(me.body, "td"));
-            var ut = getUETableBySelected(me);
-            if (!ut) return;
-            notCtrlKey && ut.clearSelected();
-        });
-
-        me.addListener("beforegetcontent", function () {
-            switchBorderColor(this, false);
-            browser.ie && utils.each(this.document.getElementsByTagName('caption'), function (ci) {
-                if (domUtils.isEmptyNode(ci)) {
-                    ci.innerHTML = '&nbsp;'
-                }
-            });
-        });
-        me.addListener("aftergetcontent", function () {
-            switchBorderColor(this, true);
-        });
-        me.addListener("getAllHtml", function () {
-            removeSelectedClass(me.document.getElementsByTagName("td"));
-        });
-        //修正全屏状态下插入的表格宽度在非全屏状态下撑开编辑器的情况
-        me.addListener("fullscreenchanged", function (type, fullscreen) {
-            if (!fullscreen) {
-                var ratio = this.body.offsetWidth / document.body.offsetWidth,
-                    tables = domUtils.getElementsByTagName(this.body, "table");
-                utils.each(tables, function (table) {
-                    if (table.offsetWidth < me.body.offsetWidth) return false;
-                    var tds = domUtils.getElementsByTagName(table, "td"),
-                        backWidths = [];
-                    utils.each(tds, function (td) {
-                        backWidths.push(td.offsetWidth);
-                    });
-                    for (var i = 0, td; td = tds[i]; i++) {
-                        td.setAttribute("width", Math.floor(backWidths[i] * ratio));
-                    }
-                    table.setAttribute("width", Math.floor(getTableWidth(me, needIEHack, getDefaultValue(me))))
-                });
-            }
-        });
-
-        //重写execCommand命令,用于处理框选时的处理
-        var oldExecCommand = me.execCommand;
-        me.execCommand = function (cmd, datatat) {
-
-            var me = this,
-                args = arguments;
-
-            cmd = cmd.toLowerCase();
-            var ut = getUETableBySelected(me), tds,
-                range = new dom.Range(me.document),
-                cmdFun = me.commands[cmd] || UE.commands[cmd],
-                result;
-            if (!cmdFun) return;
-            if (ut && !commands[cmd] && !cmdFun.notNeedUndo && !me.__hasEnterExecCommand) {
-                me.__hasEnterExecCommand = true;
-                me.fireEvent("beforeexeccommand", cmd);
-                tds = ut.selectedTds;
-                var lastState = -2, lastValue = -2, value, state;
-                for (var i = 0, td; td = tds[i]; i++) {
-                    if (isEmptyBlock(td)) {
-                        range.setStart(td, 0).setCursor(false, true)
-                    } else {
-                        range.selectNode(td).select(true);
-                    }
-                    state = me.queryCommandState(cmd);
-                    value = me.queryCommandValue(cmd);
-                    if (state != -1) {
-                        if (lastState !== state || lastValue !== value) {
-                            me._ignoreContentChange = true;
-                            result = oldExecCommand.apply(me, arguments);
-                            me._ignoreContentChange = false;
-
-                        }
-                        lastState = me.queryCommandState(cmd);
-                        lastValue = me.queryCommandValue(cmd);
-                        if (domUtils.isEmptyBlock(td)) {
-                            domUtils.fillNode(me.document, td)
-                        }
-                    }
-                }
-                range.setStart(tds[0], 0).shrinkBoundary(true).setCursor(false, true);
-                me.fireEvent('contentchange');
-                me.fireEvent("afterexeccommand", cmd);
-                me.__hasEnterExecCommand = false;
-                me._selectionChange();
-            } else {
-                result = oldExecCommand.apply(me, arguments);
-            }
-            return result;
-        };
-
-
-    });
-    /**
-     * 删除obj的宽高style,改成属性宽高
-     * @param obj
-     * @param replaceToProperty
-     */
-    function removeStyleSize(obj, replaceToProperty) {
-        removeStyle(obj, "width", true);
-        removeStyle(obj, "height", true);
-    }
-
-    function removeStyle(obj, styleName, replaceToProperty) {
-        if (obj.style[styleName]) {
-            replaceToProperty && obj.setAttribute(styleName, parseInt(obj.style[styleName], 10));
-            obj.style[styleName] = "";
-        }
-    }
-
-    function getParentTdOrTh(ele) {
-        if (ele.tagName == "TD" || ele.tagName == "TH") return ele;
-        var td;
-        if (td = domUtils.findParentByTagName(ele, "td", true) || domUtils.findParentByTagName(ele, "th", true)) return td;
-        return null;
-    }
-
-    function isEmptyBlock(node) {
-        var reg = new RegExp(domUtils.fillChar, 'g');
-        if (node[browser.ie ? 'innerText' : 'textContent'].replace(/^\s*$/, '').replace(reg, '').length > 0) {
-            return 0;
-        }
-        for (var n in dtd.$isNotEmpty) {
-            if (node.getElementsByTagName(n).length) {
-                return 0;
-            }
-        }
-        return 1;
-    }
-
-
-    function mouseCoords(evt) {
-        if (evt.pageX || evt.pageY) {
-            return { x:evt.pageX, y:evt.pageY };
-        }
-        return {
-            x:evt.clientX + me.document.body.scrollLeft - me.document.body.clientLeft,
-            y:evt.clientY + me.document.body.scrollTop - me.document.body.clientTop
-        };
-    }
-
-    function mouseMoveEvent(evt) {
-
-        if( isEditorDisabled() ) {
-            return;
-        }
-
-        try {
-
-            //普通状态下鼠标移动
-            var target = getParentTdOrTh(evt.target || evt.srcElement),
-                pos;
-
-            //区分用户的行为是拖动还是双击
-            if( isInResizeBuffer  ) {
-
-                me.body.style.webkitUserSelect = 'none';
-
-                if( Math.abs( userActionStatus.x - evt.clientX ) > offsetOfTableCell || Math.abs( userActionStatus.y - evt.clientY ) > offsetOfTableCell ) {
-                    clearTableDragTimer();
-                    isInResizeBuffer = false;
-                    singleClickState = 0;
-                    //drag action
-                    tableBorderDrag(evt);
-                }
-            }
-
-            //修改单元格大小时的鼠标移动
-            if (onDrag && dragTd) {
-                singleClickState = 0;
-                me.body.style.webkitUserSelect = 'none';
-                me.selection.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges']();
-                pos = mouseCoords(evt);
-                toggleDraggableState(me, true, onDrag, pos, target);
-                if (onDrag == "h") {
-                    dragLine.style.left = getPermissionX(dragTd, evt) + "px";
-                } else if (onDrag == "v") {
-                    dragLine.style.top = getPermissionY(dragTd, evt) + "px";
-                }
-                return;
-            }
-            //当鼠标处于table上时,修改移动过程中的光标状态
-            if (target) {
-                //针对使用table作为容器的组件不触发拖拽效果
-                if (me.fireEvent('excludetable', target) === true)
-                    return;
-                pos = mouseCoords(evt);
-                var state = getRelation(target, pos),
-                    table = domUtils.findParentByTagName(target, "table", true);
-
-                if (inTableSide(table, target, evt, true)) {
-                    if (me.fireEvent("excludetable", table) === true) return;
-                    me.body.style.cursor = "url(" + me.options.cursorpath + "h.png),pointer";
-                } else if (inTableSide(table, target, evt)) {
-                    if (me.fireEvent("excludetable", table) === true) return;
-                    me.body.style.cursor = "url(" + me.options.cursorpath + "v.png),pointer";
-                } else {
-                    me.body.style.cursor = "text";
-                    var curCell = target;
-                    if (/\d/.test(state)) {
-                        state = state.replace(/\d/, '');
-                        target = getUETable(target).getPreviewCell(target, state == "v");
-                    }
-                    //位于第一行的顶部或者第一列的左边时不可拖动
-                    toggleDraggableState(me, target ? !!state : false, target ? state : '', pos, target);
-
-                }
-            } else {
-                toggleDragButton(false, table, me);
-            }
-
-        } catch (e) {
-            showError(e);
-        }
-    }
-
-    var dragButtonTimer;
-
-    function toggleDragButton(show, table, editor) {
-        if (!show) {
-            if (dragOver)return;
-            dragButtonTimer = setTimeout(function () {
-                !dragOver && dragButton && dragButton.parentNode && dragButton.parentNode.removeChild(dragButton);
-            }, 2000);
-        } else {
-            createDragButton(table, editor);
-        }
-    }
-
-    function createDragButton(table, editor) {
-        var pos = domUtils.getXY(table),
-            doc = table.ownerDocument;
-        if (dragButton && dragButton.parentNode)return dragButton;
-        dragButton = doc.createElement("div");
-        dragButton.contentEditable = false;
-        dragButton.innerHTML = "";
-        dragButton.style.cssText = "width:15px;height:15px;background-image:url(" + editor.options.UEDITOR_HOME_URL + "dialogs/table/dragicon.png);position: absolute;cursor:move;top:" + (pos.y - 15) + "px;left:" + (pos.x) + "px;";
-        domUtils.unSelectable(dragButton);
-        dragButton.onmouseover = function (evt) {
-            dragOver = true;
-        };
-        dragButton.onmouseout = function (evt) {
-            dragOver = false;
-        };
-        domUtils.on(dragButton, 'click', function (type, evt) {
-            doClick(evt, this);
-        });
-        domUtils.on(dragButton, 'dblclick', function (type, evt) {
-            doDblClick(evt);
-        });
-        domUtils.on(dragButton, 'dragstart', function (type, evt) {
-            domUtils.preventDefault(evt);
-        });
-        var timer;
-
-        function doClick(evt, button) {
-            // 部分浏览器下需要清理
-            clearTimeout(timer);
-            timer = setTimeout(function () {
-                editor.fireEvent("tableClicked", table, button);
-            }, 300);
-        }
-
-        function doDblClick(evt) {
-            clearTimeout(timer);
-            var ut = getUETable(table),
-                start = table.rows[0].cells[0],
-                end = ut.getLastCell(),
-                range = ut.getCellsRange(start, end);
-            editor.selection.getRange().setStart(start, 0).setCursor(false, true);
-            ut.setSelected(range);
-        }
-
-        doc.body.appendChild(dragButton);
-    }
-
-
-//    function inPosition(table, pos) {
-//        var tablePos = domUtils.getXY(table),
-//            width = table.offsetWidth,
-//            height = table.offsetHeight;
-//        if (pos.x - tablePos.x < 5 && pos.y - tablePos.y < 5) {
-//            return "topLeft";
-//        } else if (tablePos.x + width - pos.x < 5 && tablePos.y + height - pos.y < 5) {
-//            return "bottomRight";
-//        }
-//    }
-
-    function inTableSide(table, cell, evt, top) {
-        var pos = mouseCoords(evt),
-            state = getRelation(cell, pos);
-
-        if (top) {
-            var caption = table.getElementsByTagName("caption")[0],
-                capHeight = caption ? caption.offsetHeight : 0;
-            return (state == "v1") && ((pos.y - domUtils.getXY(table).y - capHeight) < 8);
-        } else {
-            return (state == "h1") && ((pos.x - domUtils.getXY(table).x) < 8);
-        }
-    }
-
-    /**
-     * 获取拖动时允许的X轴坐标
-     * @param dragTd
-     * @param evt
-     */
-    function getPermissionX(dragTd, evt) {
-        var ut = getUETable(dragTd);
-        if (ut) {
-            var preTd = ut.getSameEndPosCells(dragTd, "x")[0],
-                nextTd = ut.getSameStartPosXCells(dragTd)[0],
-                mouseX = mouseCoords(evt).x,
-                left = (preTd ? domUtils.getXY(preTd).x : domUtils.getXY(ut.table).x) + 20 ,
-                right = nextTd ? domUtils.getXY(nextTd).x + nextTd.offsetWidth - 20 : (me.body.offsetWidth + 5 || parseInt(domUtils.getComputedStyle(me.body, "width"), 10));
-
-            left += cellMinWidth;
-            right -= cellMinWidth;
-
-            return mouseX < left ? left : mouseX > right ? right : mouseX;
-        }
-    }
-
-    /**
-     * 获取拖动时允许的Y轴坐标
-     */
-    function getPermissionY(dragTd, evt) {
-        try {
-            var top = domUtils.getXY(dragTd).y,
-                mousePosY = mouseCoords(evt).y;
-            return mousePosY < top ? top : mousePosY;
-        } catch (e) {
-            showError(e);
-        }
-    }
-
-    /**
-     * 移动状态切换
-     */
-    function toggleDraggableState(editor, draggable, dir, mousePos, cell) {
-        try {
-            editor.body.style.cursor = dir == "h" ? "col-resize" : dir == "v" ? "row-resize" : "text";
-            if (browser.ie) {
-                if (dir && !mousedown && !getUETableBySelected(editor)) {
-                    getDragLine(editor, editor.document);
-                    showDragLineAt(dir, cell);
-                } else {
-                    hideDragLine(editor)
-                }
-            }
-            onBorder = draggable;
-        } catch (e) {
-            showError(e);
-        }
-    }
-
-    /**
-     * 获取与UETable相关的resize line
-     * @param uetable UETable对象
-     */
-    function getResizeLineByUETable() {
-
-        var lineId = '_UETableResizeLine',
-            line = this.document.getElementById( lineId );
-
-        if( !line ) {
-            line = this.document.createElement("div");
-            line.id = lineId;
-            line.contnetEditable = false;
-            line.setAttribute("unselectable", "on");
-
-            var styles = {
-                width: 2*cellBorderWidth + 1 + 'px',
-                position: 'absolute',
-                'z-index': 100000,
-                cursor: 'col-resize',
-                background: 'red',
-                display: 'none'
-            };
-
-            //切换状态
-            line.onmouseout = function(){
-                this.style.display = 'none';
-            };
-
-            utils.extend( line.style, styles );
-
-            this.document.body.appendChild( line );
-
-        }
-
-        return line;
-
-    }
-
-    /**
-     * 更新resize-line
-     */
-    function updateResizeLine( cell, uetable ) {
-
-        var line = getResizeLineByUETable.call( this ),
-            table = uetable.table,
-            styles = {
-                top: domUtils.getXY( table ).y + 'px',
-                left: domUtils.getXY( cell).x + cell.offsetWidth - cellBorderWidth + 'px',
-                display: 'block',
-                height: table.offsetHeight + 'px'
-            };
-
-        utils.extend( line.style, styles );
-
-    }
-
-    /**
-     * 显示resize-line
-     */
-    function showResizeLine( cell ) {
-
-        var uetable = getUETable( cell );
-
-        updateResizeLine.call( this, cell, uetable );
-
-    }
-
-    /**
-     * 获取鼠标与当前单元格的相对位置
-     * @param ele
-     * @param mousePos
-     */
-    function getRelation(ele, mousePos) {
-        var elePos = domUtils.getXY(ele);
-
-        if( !elePos ) {
-            return '';
-        }
-
-        if (elePos.x + ele.offsetWidth - mousePos.x < cellBorderWidth) {
-            return "h";
-        }
-        if (mousePos.x - elePos.x < cellBorderWidth) {
-            return 'h1'
-        }
-        if (elePos.y + ele.offsetHeight - mousePos.y < cellBorderWidth) {
-            return "v";
-        }
-        if (mousePos.y - elePos.y < cellBorderWidth) {
-            return 'v1'
-        }
-        return '';
-    }
-
-    function mouseDownEvent(type, evt) {
-
-        if( isEditorDisabled() ) {
-            return ;
-        }
-
-        userActionStatus = {
-            x: evt.clientX,
-            y: evt.clientY
-        };
-
-        //右键菜单单独处理
-        if (evt.button == 2) {
-            var ut = getUETableBySelected(me),
-                flag = false;
-
-            if (ut) {
-                var td = getTargetTd(me, evt);
-                utils.each(ut.selectedTds, function (ti) {
-                    if (ti === td) {
-                        flag = true;
-                    }
-                });
-                if (!flag) {
-                    removeSelectedClass(domUtils.getElementsByTagName(me.body, "th td"));
-                    ut.clearSelected()
-                } else {
-                    td = ut.selectedTds[0];
-                    setTimeout(function () {
-                        me.selection.getRange().setStart(td, 0).setCursor(false, true);
-                    }, 0);
-
-                }
-            }
-        } else {
-            tableClickHander( evt );
-        }
-
-    }
-
-    //清除表格的计时器
-    function clearTableTimer() {
-        tabTimer && clearTimeout( tabTimer );
-        tabTimer = null;
-    }
-
-    //双击收缩
-    function tableDbclickHandler(evt) {
-        singleClickState = 0;
-        evt = evt || me.window.event;
-        var target = getParentTdOrTh(evt.target || evt.srcElement);
-        if (target) {
-            var h;
-            if (h = getRelation(target, mouseCoords(evt))) {
-
-                hideDragLine( me );
-
-                if (h == 'h1') {
-                    h = 'h';
-                    if (inTableSide(domUtils.findParentByTagName(target, "table"), target, evt)) {
-                        me.execCommand('adaptbywindow');
-                    } else {
-                        target = getUETable(target).getPreviewCell(target);
-                        if (target) {
-                            var rng = me.selection.getRange();
-                            rng.selectNodeContents(target).setCursor(true, true)
-                        }
-                    }
-                }
-                if (h == 'h') {
-                    var ut = getUETable(target),
-                        table = ut.table,
-                        cells = getCellsByMoveBorder( target, table, true );
-
-                    cells = extractArray( cells, 'left' );
-
-                    ut.width = ut.offsetWidth;
-
-                    var oldWidth = [],
-                        newWidth = [];
-
-                    utils.each( cells, function( cell ){
-
-                        oldWidth.push( cell.offsetWidth );
-
-                    } );
-
-                    utils.each( cells, function( cell ){
-
-                        cell.removeAttribute("width");
-
-                    } );
-
-                    window.setTimeout( function(){
-
-                        //是否允许改变
-                        var changeable = true;
-
-                        utils.each( cells, function( cell, index ){
-
-                            var width = cell.offsetWidth;
-
-                            if( width > oldWidth[index] ) {
-                                changeable = false;
-                                return false;
-                            }
-
-                            newWidth.push( width );
-
-                        } );
-
-                        var change = changeable ? newWidth : oldWidth;
-
-                        utils.each( cells, function( cell, index ){
-
-                            cell.width = change[index] - getTabcellSpace();
-
-                        } );
-
-
-                    }, 0 );
-
-//                    minWidth -= cellMinWidth;
-//
-//                    table.removeAttribute("width");
-//                    utils.each(cells, function (cell) {
-//                        cell.style.width = "";
-//                        cell.width -= minWidth;
-//                    });
-
-                }
-            }
-        }
-    }
-
-    function tableClickHander( evt ) {
-
-        removeSelectedClass(domUtils.getElementsByTagName(me.body, "td th"));
-        //trace:3113
-        //选中单元格,点击table外部,不会清掉table上挂的ueTable,会引起getUETableBySelected方法返回值
-        utils.each(me.document.getElementsByTagName('table'), function (t) {
-            t.ueTable = null;
-        });
-        startTd = getTargetTd(me, evt);
-        if( !startTd ) return;
-        var table = domUtils.findParentByTagName(startTd, "table", true);
-        ut = getUETable(table);
-        ut && ut.clearSelected();
-
-        //判断当前鼠标状态
-        if (!onBorder) {
-            me.document.body.style.webkitUserSelect = '';
-            mousedown = true;
-            me.addListener('mouseover', mouseOverEvent);
-        } else {
-            //边框上的动作处理
-            borderActionHandler( evt );
-        }
-
-
-    }
-
-    //处理表格边框上的动作, 这里做延时处理,避免两种动作互相影响
-    function borderActionHandler( evt ) {
-
-        if ( browser.ie ) {
-            evt = reconstruct(evt );
-        }
-
-        clearTableDragTimer();
-
-        //是否正在等待resize的缓冲中
-        isInResizeBuffer = true;
-
-        tableDragTimer = setTimeout(function(){
-            tableBorderDrag( evt );
-        }, dblclickTime);
-
-    }
-
-    function extractArray( originArr, key ) {
-
-        var result = [],
-            tmp = null;
-
-        for( var i = 0, len = originArr.length; i<len; i++ ) {
-
-            tmp = originArr[ i ][ key ];
-
-            if( tmp ) {
-                result.push( tmp );
-            }
-
-        }
-
-        return result;
-
-    }
-
-    function clearTableDragTimer() {
-        tableDragTimer && clearTimeout(tableDragTimer);
-        tableDragTimer = null;
-    }
-
-    function reconstruct( obj ) {
-
-        var attrs = ['pageX', 'pageY', 'clientX', 'clientY', 'srcElement', 'target'],
-            newObj = {};
-
-        if( obj ) {
-
-            for( var i = 0, key, val; key = attrs[i]; i++ ) {
-                val=obj[ key ];
-                val && (newObj[ key ] = val);
-            }
-
-        }
-
-        return newObj;
-
-    }
-
-    //边框拖动
-    function tableBorderDrag( evt ) {
-
-        isInResizeBuffer = false;
-
-        if( !startTd ) return;
-        var state = Math.abs( userActionStatus.x - evt.clientX ) >= Math.abs( userActionStatus.y - evt.clientY ) ? 'h' : 'v';
-//        var state = getRelation(startTd, mouseCoords(evt));
-        if (/\d/.test(state)) {
-            state = state.replace(/\d/, '');
-            startTd = getUETable(startTd).getPreviewCell(startTd, state == 'v');
-        }
-        hideDragLine(me);
-        getDragLine(me, me.document);
-        me.fireEvent('saveScene');
-        showDragLineAt(state, startTd);
-        mousedown = true;
-        //拖动开始
-        onDrag = state;
-        dragTd = startTd;
-    }
-
-    function mouseUpEvent(type, evt) {
-
-        if( isEditorDisabled() ) {
-            return ;
-        }
-
-        clearTableDragTimer();
-
-        isInResizeBuffer = false;
-
-        if( onBorder ) {
-            singleClickState = ++singleClickState % 3;
-
-            userActionStatus = {
-                x: evt.clientX,
-                y: evt.clientY
-            };
-
-            tableResizeTimer = setTimeout(function(){
-                singleClickState > 0 && singleClickState--;
-            }, dblclickTime );
-
-            if( singleClickState === 2 ) {
-
-                singleClickState = 0;
-                tableDbclickHandler(evt);
-                return;
-
-            }
-
-        }
-
-        if (evt.button == 2)return;
-        var me = this;
-        //清除表格上原生跨选问题
-        var range = me.selection.getRange(),
-            start = domUtils.findParentByTagName(range.startContainer, 'table', true),
-            end = domUtils.findParentByTagName(range.endContainer, 'table', true);
-
-        if (start || end) {
-            if (start === end) {
-                start = domUtils.findParentByTagName(range.startContainer, ['td', 'th', 'caption'], true);
-                end = domUtils.findParentByTagName(range.endContainer, ['td', 'th', 'caption'], true);
-                if (start !== end) {
-                    me.selection.clearRange()
-                }
-            } else {
-                me.selection.clearRange()
-            }
-        }
-        mousedown = false;
-        me.document.body.style.webkitUserSelect = '';
-        //拖拽状态下的mouseUP
-        if ( onDrag && dragTd ) {
-
-            me.selection.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges']();
-
-            singleClickState = 0;
-            dragLine = me.document.getElementById('ue_tableDragLine');
-
-            var dragTdPos = domUtils.getXY(dragTd),
-                dragLinePos = domUtils.getXY(dragLine);
-
-            switch (onDrag) {
-                case "h":
-                    changeColWidth(dragTd, dragLinePos.x - dragTdPos.x);
-                    break;
-                case "v":
-                    changeRowHeight(dragTd, dragLinePos.y - dragTdPos.y - dragTd.offsetHeight);
-                    break;
-                default:
-            }
-            onDrag = "";
-            dragTd = null;
-
-            hideDragLine(me);
-            me.fireEvent('saveScene');
-            return;
-        }
-        //正常状态下的mouseup
-        if (!startTd) {
-            var target = domUtils.findParentByTagName(evt.target || evt.srcElement, "td", true);
-            if (!target) target = domUtils.findParentByTagName(evt.target || evt.srcElement, "th", true);
-            if (target && (target.tagName == "TD" || target.tagName == "TH")) {
-                if (me.fireEvent("excludetable", target) === true) return;
-                range = new dom.Range(me.document);
-                range.setStart(target, 0).setCursor(false, true);
-            }
-        } else {
-            var ut = getUETable(startTd),
-                cell = ut ? ut.selectedTds[0] : null;
-            if (cell) {
-                range = new dom.Range(me.document);
-                if (domUtils.isEmptyBlock(cell)) {
-                    range.setStart(cell, 0).setCursor(false, true);
-                } else {
-                    range.selectNodeContents(cell).shrinkBoundary().setCursor(false, true);
-                }
-            } else {
-                range = me.selection.getRange().shrinkBoundary();
-                if (!range.collapsed) {
-                    var start = domUtils.findParentByTagName(range.startContainer, ['td', 'th'], true),
-                        end = domUtils.findParentByTagName(range.endContainer, ['td', 'th'], true);
-                    //在table里边的不能清除
-                    if (start && !end || !start && end || start && end && start !== end) {
-                        range.setCursor(false, true);
-                    }
-                }
-            }
-            startTd = null;
-            me.removeListener('mouseover', mouseOverEvent);
-        }
-        me._selectionChange(250, evt);
-    }
-
-    function mouseOverEvent(type, evt) {
-
-        if( isEditorDisabled() ) {
-            return;
-        }
-
-        var me = this,
-            tar = evt.target || evt.srcElement;
-        currentTd = domUtils.findParentByTagName(tar, "td", true) || domUtils.findParentByTagName(tar, "th", true);
-        //需要判断两个TD是否位于同一个表格内
-        if (startTd && currentTd &&
-            ((startTd.tagName == "TD" && currentTd.tagName == "TD") || (startTd.tagName == "TH" && currentTd.tagName == "TH")) &&
-            domUtils.findParentByTagName(startTd, 'table') == domUtils.findParentByTagName(currentTd, 'table')) {
-            var ut = getUETable(currentTd);
-            if (startTd != currentTd) {
-                me.document.body.style.webkitUserSelect = 'none';
-                me.selection.getNative()[browser.ie9below ? 'empty' : 'removeAllRanges']();
-                var range = ut.getCellsRange(startTd, currentTd);
-                ut.setSelected(range);
-            } else {
-                me.document.body.style.webkitUserSelect = '';
-                ut.clearSelected();
-            }
-
-        }
-        evt.preventDefault ? evt.preventDefault() : (evt.returnValue = false);
-    }
-
-    function setCellHeight(cell, height, backHeight) {
-        var lineHight = parseInt(domUtils.getComputedStyle(cell, "line-height"), 10),
-            tmpHeight = backHeight + height;
-        height = tmpHeight < lineHight ? lineHight : tmpHeight;
-        if (cell.style.height) cell.style.height = "";
-        cell.rowSpan == 1 ? cell.setAttribute("height", height) : (cell.removeAttribute && cell.removeAttribute("height"));
-    }
-
-    function getWidth(cell) {
-        if (!cell)return 0;
-        return parseInt(domUtils.getComputedStyle(cell, "width"), 10);
-    }
-
-    function changeColWidth(cell, changeValue) {
-
-        var ut = getUETable(cell);
-        if (ut) {
-
-            //根据当前移动的边框获取相关的单元格
-            var table = ut.table,
-                cells = getCellsByMoveBorder( cell, table );
-
-            table.style.width = "";
-            table.removeAttribute("width");
-
-            //修正改变量
-            changeValue = correctChangeValue( changeValue, cell, cells );
-
-            if (cell.nextSibling) {
-
-                var i=0;
-
-                utils.each( cells, function( cellGroup ){
-
-                    cellGroup.left.width = (+cellGroup.left.width)+changeValue;
-                    cellGroup.right && ( cellGroup.right.width = (+cellGroup.right.width)-changeValue );
-
-                } );
-
-            } else {
-
-                utils.each( cells, function( cellGroup ){
-                    cellGroup.left.width -= -changeValue;
-                } );
-
-            }
-        }
-
-    }
-
-    function isEditorDisabled() {
-        return me.body.contentEditable === "false";
-    }
-
-    function changeRowHeight(td, changeValue) {
-        if (Math.abs(changeValue) < 10) return;
-        var ut = getUETable(td);
-        if (ut) {
-            var cells = ut.getSameEndPosCells(td, "y"),
-            //备份需要连带变化的td的原始高度,否则后期无法获取正确的值
-                backHeight = cells[0] ? cells[0].offsetHeight : 0;
-            for (var i = 0, cell; cell = cells[i++];) {
-                setCellHeight(cell, changeValue, backHeight);
-            }
-        }
-
-    }
-
-    /**
-     * 获取调整单元格大小的相关单元格
-     * @isContainMergeCell 返回的结果中是否包含发生合并后的单元格
-     */
-    function getCellsByMoveBorder( cell, table, isContainMergeCell ) {
-
-        if( !table ) {
-            table = domUtils.findParentByTagName( cell, 'table' );
-        }
-
-        if( !table ) {
-            return null;
-        }
-
-        //获取到该单元格所在行的序列号
-        var index = domUtils.getNodeIndex( cell ),
-            temp = cell,
-            rows = table.rows,
-            colIndex = 0;
-
-        while( temp ) {
-            //获取到当前单元格在未发生单元格合并时的序列
-            if( temp.nodeType === 1 ) {
-                colIndex += (temp.colSpan || 1);
-            }
-            temp = temp.previousSibling;
-        }
-
-        temp = null;
-
-        //记录想关的单元格
-        var borderCells = [];
-
-        utils.each(rows, function( tabRow ){
-
-            var cells = tabRow.cells,
-                currIndex = 0;
-
-            utils.each( cells, function( tabCell ){
-
-                currIndex += (tabCell.colSpan || 1);
-
-                if( currIndex === colIndex ) {
-
-                    borderCells.push({
-                        left: tabCell,
-                        right: tabCell.nextSibling || null
-                    });
-
-                    return false;
-
-                } else if( currIndex > colIndex ) {
-
-                    if( isContainMergeCell ) {
-                        borderCells.push({
-                            left: tabCell
-                        });
-                    }
-
-                    return false;
-                }
-
-
-            } );
-
-        });
-
-        return borderCells;
-
-    }
-
-
-    /**
-     * 通过给定的单元格集合获取最小的单元格width
-     */
-    function getMinWidthByTableCells( cells ) {
-
-        var minWidth = Number.MAX_VALUE;
-
-        for( var i = 0, curCell; curCell = cells[ i ] ; i++ ) {
-
-            minWidth = Math.min( minWidth, curCell.width || getTableCellWidth( curCell ) );
-
-        }
-
-        return minWidth;
-
-    }
-
-    function correctChangeValue( changeValue, relatedCell, cells ) {
-
-        //为单元格的paading预留空间
-        changeValue -= getTabcellSpace();
-
-        if( changeValue < 0 ) {
-            return 0;
-        }
-
-        changeValue -= getTableCellWidth( relatedCell );
-
-        //确定方向
-        var direction = changeValue < 0 ? 'left':'right';
-
-        changeValue = Math.abs(changeValue);
-
-        //只关心非最后一个单元格就可以
-        utils.each( cells, function( cellGroup ){
-
-            var curCell = cellGroup[direction];
-
-            //为单元格保留最小空间
-            if( curCell ) {
-                changeValue = Math.min( changeValue, getTableCellWidth( curCell )-cellMinWidth );
-            }
-
-
-        } );
-
-
-        //修正越界
-        changeValue = changeValue < 0 ? 0 : changeValue;
-
-        return direction === 'left' ? -changeValue : changeValue;
-
-    }
-
-    function getTableCellWidth( cell ) {
-
-        var width = 0,
-            //偏移纠正量
-            offset = 0,
-            width = cell.offsetWidth - getTabcellSpace();
-
-        //最后一个节点纠正一下
-        if( !cell.nextSibling ) {
-
-            width -= getTableCellOffset( cell );
-
-        }
-
-        width = width < 0 ? 0 : width;
-
-        try {
-            cell.width = width;
-        } catch(e) {
-        }
-
-        return width;
-
-    }
-
-    /**
-     * 获取单元格所在表格的最末单元格的偏移量
-     */
-    function getTableCellOffset( cell ) {
-
-        tab = domUtils.findParentByTagName( cell, "table", false);
-
-        if( tab.offsetVal === undefined ) {
-
-            var prev = cell.previousSibling;
-
-            if( prev ) {
-
-                //最后一个单元格和前一个单元格的width diff结果 如果恰好为一个border width, 则条件成立
-                tab.offsetVal = cell.offsetWidth - prev.offsetWidth === UT.borderWidth ? UT.borderWidth : 0;
-
-            } else {
-                tab.offsetVal = 0;
-            }
-
-        }
-
-        return tab.offsetVal;
-
-    }
-
-    function getTabcellSpace() {
-
-        if( UT.tabcellSpace === undefined ) {
-
-            var cell = null,
-                tab = me.document.createElement("table"),
-                tbody = me.document.createElement("tbody"),
-                trow = me.document.createElement("tr"),
-                tabcell = me.document.createElement("td"),
-                mirror = null;
-
-            tabcell.style.cssText = 'border: 0;';
-            tabcell.width = 1;
-
-            trow.appendChild( tabcell );
-            trow.appendChild( mirror = tabcell.cloneNode( false ) );
-
-            tbody.appendChild( trow );
-
-            tab.appendChild( tbody );
-
-            tab.style.cssText = "visibility: hidden;";
-
-            me.body.appendChild( tab );
-
-            UT.paddingSpace = tabcell.offsetWidth - 1;
-
-            var tmpTabWidth = tab.offsetWidth;
-
-            tabcell.style.cssText = '';
-            mirror.style.cssText = '';
-
-            UT.borderWidth = ( tab.offsetWidth - tmpTabWidth ) / 3;
-
-            UT.tabcellSpace = UT.paddingSpace + UT.borderWidth;
-
-            me.body.removeChild( tab );
-
-        }
-
-        getTabcellSpace = function(){ return UT.tabcellSpace; };
-
-        return UT.tabcellSpace;
-
-    }
-
-    function getDragLine(editor, doc) {
-        if (mousedown)return;
-        dragLine = editor.document.createElement("div");
-        domUtils.setAttributes(dragLine, {
-            id:"ue_tableDragLine",
-            unselectable:'on',
-            contenteditable:false,
-            'onresizestart':'return false',
-            'ondragstart':'return false',
-            'onselectstart':'return false',
-            style:"background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)"
-        });
-        editor.body.appendChild(dragLine);
-    }
-
-    function hideDragLine(editor) {
-        if (mousedown)return;
-        var line;
-        while (line = editor.document.getElementById('ue_tableDragLine')) {
-            domUtils.remove(line)
-        }
-    }
-
-    /**
-     * 依据state(v|h)在cell位置显示横线
-     * @param state
-     * @param cell
-     */
-    function showDragLineAt(state, cell) {
-        if (!cell) return;
-        var table = domUtils.findParentByTagName(cell, "table"),
-            caption = table.getElementsByTagName('caption'),
-            width = table.offsetWidth,
-            height = table.offsetHeight - (caption.length > 0 ? caption[0].offsetHeight : 0),
-            tablePos = domUtils.getXY(table),
-            cellPos = domUtils.getXY(cell), css;
-        switch (state) {
-            case "h":
-                css = 'height:' + height + 'px;top:' + (tablePos.y + (caption.length > 0 ? caption[0].offsetHeight : 0)) + 'px;left:' + (cellPos.x + cell.offsetWidth);
-                dragLine.style.cssText = css + 'px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)';
-                break;
-            case "v":
-                css = 'width:' + width + 'px;left:' + tablePos.x + 'px;top:' + (cellPos.y + cell.offsetHeight );
-                //必须加上border:0和color:blue,否则低版ie不支持背景色显示
-                dragLine.style.cssText = css + 'px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)';
-                break;
-            default:
-        }
-    }
-
-    /**
-     * 当表格边框颜色为白色时设置为虚线,true为添加虚线
-     * @param editor
-     * @param flag
-     */
-    function switchBorderColor(editor, flag) {
-        var tableArr = domUtils.getElementsByTagName(editor.body, "table"), color;
-        for (var i = 0, node; node = tableArr[i++];) {
-            var td = domUtils.getElementsByTagName(node, "td");
-            if (td[0]) {
-                if (flag) {
-                    color = (td[0].style.borderColor).replace(/\s/g, "");
-                    if (/(#ffffff)|(rgb\(255,255,255\))/ig.test(color))
-                        domUtils.addClass(node, "noBorderTable")
-                } else {
-                    domUtils.removeClasses(node, "noBorderTable")
-                }
-            }
-
-        }
-    }
-
-    function getTableWidth(editor, needIEHack, defaultValue) {
-        var body = editor.body;
-        return body.offsetWidth - (needIEHack ? parseInt(domUtils.getComputedStyle(body, 'margin-left'), 10) * 2 : 0) - defaultValue.tableBorder * 2 - (editor.options.offsetWidth || 0);
-    }
-
-    /**
-     * 获取当前拖动的单元格
-     */
-    function getTargetTd(editor, evt) {
-
-        var target = domUtils.findParentByTagName(evt.target || evt.srcElement, ["td", "th"], true),
-            dir = null;
-
-        if( !target ) {
-            return null;
-        }
-
-        dir = getRelation( target, mouseCoords( evt ) );
-
-        //如果有前一个节点, 需要做一个修正, 否则可能会得到一个错误的td
-
-        if( !target ) {
-            return null;
-        }
-
-        if( dir === 'h1' && target.previousSibling ) {
-
-            var position = domUtils.getXY( target),
-                cellWidth = target.offsetWidth;
-
-            if( Math.abs( position.x + cellWidth - evt.clientX ) > cellWidth / 3 ) {
-                target = target.previousSibling;
-            }
-
-        } else if( dir === 'v1' && target.parentNode.previousSibling ) {
-
-            var position = domUtils.getXY( target),
-                cellHeight = target.offsetHeight;
-
-            if( Math.abs( position.y + cellHeight - evt.clientY ) > cellHeight / 3 ) {
-                target = target.parentNode.previousSibling.firstChild;
-            }
-
-        }
-
-
-        //排除了非td内部以及用于代码高亮部分的td
-        return target && !(editor.fireEvent("excludetable", target) === true) ? target : null;
-    }
-
-};
-
-/**
- * Created with JetBrains PhpStorm.
- * User: Jinqn
- * Date: 13-10-12
- * Time: 上午10:20
- * To change this template use File | Settings | File Templates.
- */
-
-UE.UETable.prototype.sortTable = function (sortByCellIndex, compareFn) {
-    var table = this.table,
-        rows = table.rows,
-        trArray = [],
-        flag = rows[0].cells[0].tagName === "TH",
-        lastRowIndex = 0;
-    if(this.selectedTds.length){
-        var range = this.cellsRange,
-            len = range.endRowIndex + 1;
-        for (var i = range.beginRowIndex; i < len; i++) {
-            trArray[i] = rows[i];
-        }
-        trArray.splice(0,range.beginRowIndex);
-        lastRowIndex = (range.endRowIndex +1) === this.rowsNum ? 0 : range.endRowIndex +1;
-    }else{
-        for (var i = 0,len = rows.length; i < len; i++) {
-            trArray[i] = rows[i];
-        }
-    }
-
-    var Fn = {
-        'reversecurrent': function(td1,td2){
-            return 1;
-        },
-        'orderbyasc': function(td1,td2){
-            var value1 = td1.innerText||td1.textContent,
-                value2 = td2.innerText||td2.textContent;
-            return value1.localeCompare(value2);
-        },
-        'reversebyasc': function(td1,td2){
-            var value1 = td1.innerHTML,
-                value2 = td2.innerHTML;
-            return value2.localeCompare(value1);
-        },
-        'orderbynum': function(td1,td2){
-            var value1 = td1[browser.ie ? 'innerText':'textContent'].match(/\d+/),
-                value2 = td2[browser.ie ? 'innerText':'textContent'].match(/\d+/);
-            if(value1) value1 = +value1[0];
-            if(value2) value2 = +value2[0];
-            return (value1||0) - (value2||0);
-        },
-        'reversebynum': function(td1,td2){
-            var value1 = td1[browser.ie ? 'innerText':'textContent'].match(/\d+/),
-                value2 = td2[browser.ie ? 'innerText':'textContent'].match(/\d+/);
-            if(value1) value1 = +value1[0];
-            if(value2) value2 = +value2[0];
-            return (value2||0) - (value1||0);
-        }
-    };
-
-    //对表格设置排序的标记data-sort-type
-    table.setAttribute('data-sort-type', compareFn && typeof compareFn === "string" && Fn[compareFn] ? compareFn:'');
-
-    //th不参与排序
-    flag && trArray.splice(0, 1);
-    trArray = utils.sort(trArray,function (tr1, tr2) {
-        var result;
-        if (compareFn && typeof compareFn === "function") {
-            result = compareFn.call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]);
-        } else if (compareFn && typeof compareFn === "number") {
-            result = 1;
-        } else if (compareFn && typeof compareFn === "string" && Fn[compareFn]) {
-            result = Fn[compareFn].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]);
-        } else {
-            result = Fn['orderbyasc'].call(this, tr1.cells[sortByCellIndex], tr2.cells[sortByCellIndex]);
-        }
-        return result;
-    });
-    var fragment = table.ownerDocument.createDocumentFragment();
-    for (var j = 0, len = trArray.length; j < len; j++) {
-        fragment.appendChild(trArray[j]);
-    }
-    var tbody = table.getElementsByTagName("tbody")[0];
-    if(!lastRowIndex){
-        tbody.appendChild(fragment);
-    }else{
-        tbody.insertBefore(fragment,rows[lastRowIndex- range.endRowIndex + range.beginRowIndex - 1])
-    }
-};
-
-UE.plugins['tablesort'] = function () {
-    var me = this,
-        UT = UE.UETable,
-        getUETable = function (tdOrTable) {
-            return UT.getUETable(tdOrTable);
-        },
-        getTableItemsByRange = function (editor) {
-            return UT.getTableItemsByRange(editor);
-        };
-
-
-    me.ready(function () {
-        //添加表格可排序的样式
-        utils.cssRule('tablesort',
-            'table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;' +
-                '   background-image:url(' + me.options.themePath + me.options.theme + '/images/sortable.png);}',
-            me.document);
-
-        //做单元格合并操作时,清除可排序标识
-        me.addListener("afterexeccommand", function (type, cmd) {
-            if( cmd == 'mergeright' || cmd == 'mergedown' || cmd == 'mergecells') {
-                this.execCommand('disablesort');
-            }
-        });
-    });
-
-
-
-    //表格排序
-    UE.commands['sorttable'] = {
-        queryCommandState: function () {
-            var me = this,
-                tableItems = getTableItemsByRange(me);
-            if (!tableItems.cell) return -1;
-            var table = tableItems.table,
-                cells = table.getElementsByTagName("td");
-            for (var i = 0, cell; cell = cells[i++];) {
-                if (cell.rowSpan != 1 || cell.colSpan != 1) return -1;
-            }
-            return 0;
-        },
-        execCommand: function (cmd, fn) {
-            var me = this,
-                range = me.selection.getRange(),
-                bk = range.createBookmark(true),
-                tableItems = getTableItemsByRange(me),
-                cell = tableItems.cell,
-                ut = getUETable(tableItems.table),
-                cellInfo = ut.getCellInfo(cell);
-            ut.sortTable(cellInfo.cellIndex, fn);
-            range.moveToBookmark(bk);
-            try{
-                range.select();
-            }catch(e){}
-        }
-    };
-
-    //设置表格可排序,清除表格可排序
-    UE.commands["enablesort"] = UE.commands["disablesort"] = {
-        queryCommandState: function (cmd) {
-            var table = getTableItemsByRange(this).table;
-            if(table && cmd=='enablesort') {
-                var cells = domUtils.getElementsByTagName(table, 'th td');
-                for(var i = 0; i<cells.length; i++) {
-                    if(cells[i].getAttribute('colspan')>1 || cells[i].getAttribute('rowspan')>1) return -1;
-                }
-            }
-
-            return !table ? -1: cmd=='enablesort' ^ table.getAttribute('data-sort')!='sortEnabled' ? -1:0;
-        },
-        execCommand: function (cmd) {
-            var table = getTableItemsByRange(this).table;
-            table.setAttribute("data-sort", cmd == "enablesort" ? "sortEnabled" : "sortDisabled");
-            cmd == "enablesort" ? domUtils.addClass(table,"sortEnabled"):domUtils.removeClasses(table,"sortEnabled");
-        }
-    };
-};
-
-///import core
-///commands 右键菜单
-///commandsName  ContextMenu
-///commandsTitle  右键菜单
-/*
- * 右键菜单
- * @function
- * @name baidu.editor.plugins.contextmenu
- * @author zhanyi
- */
-
-UE.plugins['contextmenu'] = function () {
-    var me = this,
-            lang = me.getLang( "contextMenu" ),
-            menu,
-            items = me.options.contextMenu || [
-                {label:lang['selectall'], cmdName:'selectall'},
-                {
-                    label:lang.cleardoc,
-                    cmdName:'cleardoc',
-                    exec:function () {
-                        if ( confirm( lang.confirmclear ) ) {
-                            this.execCommand( 'cleardoc' );
-                        }
-                    }
-                },
-                '-',
-                {
-                    label:lang.unlink,
-                    cmdName:'unlink'
-                },
-                '-',
-                {
-                    group:lang.paragraph,
-                    icon:'justifyjustify',
-                    subMenu:[
-                        {
-                            label:lang.justifyleft,
-                            cmdName:'justify',
-                            value:'left'
-                        },
-                        {
-                            label:lang.justifyright,
-                            cmdName:'justify',
-                            value:'right'
-                        },
-                        {
-                            label:lang.justifycenter,
-                            cmdName:'justify',
-                            value:'center'
-                        },
-                        {
-                            label:lang.justifyjustify,
-                            cmdName:'justify',
-                            value:'justify'
-                        }
-                    ]
-                },
-                '-',
-                {
-                    group:lang.table,
-                    icon:'table',
-                    subMenu:[
-                        {
-                            label:lang.inserttable,
-                            cmdName:'inserttable'
-                        },
-                        {
-                            label:lang.deletetable,
-                            cmdName:'deletetable'
-                        },
-                        '-',
-                        {
-                            label:lang.deleterow,
-                            cmdName:'deleterow'
-                        },
-                        {
-                            label:lang.deletecol,
-                            cmdName:'deletecol'
-                        },
-                        {
-                            label:lang.insertcol,
-                            cmdName:'insertcol'
-                        },
-                        {
-                            label:lang.insertcolnext,
-                            cmdName:'insertcolnext'
-                        },
-                        {
-                            label:lang.insertrow,
-                            cmdName:'insertrow'
-                        },
-                        {
-                            label:lang.insertrownext,
-                            cmdName:'insertrownext'
-                        },
-                        '-',
-                        {
-                            label:lang.insertcaption,
-                            cmdName:'insertcaption'
-                        },
-                        {
-                            label:lang.deletecaption,
-                            cmdName:'deletecaption'
-                        },
-                        {
-                            label:lang.inserttitle,
-                            cmdName:'inserttitle'
-                        },
-                        {
-                            label:lang.deletetitle,
-                            cmdName:'deletetitle'
-                        },
-                        {
-                            label:lang.inserttitlecol,
-                            cmdName:'inserttitlecol'
-                        },
-                        {
-                            label:lang.deletetitlecol,
-                            cmdName:'deletetitlecol'
-                        },
-                        '-',
-                        {
-                            label:lang.mergecells,
-                            cmdName:'mergecells'
-                        },
-                        {
-                            label:lang.mergeright,
-                            cmdName:'mergeright'
-                        },
-                        {
-                            label:lang.mergedown,
-                            cmdName:'mergedown'
-                        },
-                        '-',
-                        {
-                            label:lang.splittorows,
-                            cmdName:'splittorows'
-                        },
-                        {
-                            label:lang.splittocols,
-                            cmdName:'splittocols'
-                        },
-                        {
-                            label:lang.splittocells,
-                            cmdName:'splittocells'
-                        },
-                        '-',
-                        {
-                            label:lang.averageDiseRow,
-                            cmdName:'averagedistributerow'
-                        },
-                        {
-                            label:lang.averageDisCol,
-                            cmdName:'averagedistributecol'
-                        },
-                        '-',
-                        {
-                            label:lang.edittd,
-                            cmdName:'edittd',
-                            exec:function () {
-                                if ( UE.ui['edittd'] ) {
-                                    new UE.ui['edittd']( this );
-                                }
-                                this.getDialog('edittd').open();
-                            }
-                        },
-                        {
-                            label:lang.edittable,
-                            cmdName:'edittable',
-                            exec:function () {
-                                if ( UE.ui['edittable'] ) {
-                                    new UE.ui['edittable']( this );
-                                }
-                                this.getDialog('edittable').open();
-                            }
-                        },
-                        {
-                            label:lang.setbordervisible,
-                            cmdName:'setbordervisible'
-                        }
-                    ]
-                },
-                {
-                    group:lang.tablesort,
-                    icon:'tablesort',
-                    subMenu:[
-                        {
-                            label:lang.enablesort,
-                            cmdName:'enablesort'
-                        },
-                        {
-                            label:lang.disablesort,
-                            cmdName:'disablesort'
-                        },
-                        '-',
-                        {
-                            label:lang.reversecurrent,
-                            cmdName:'sorttable',
-                            value:'reversecurrent'
-                        },
-                        {
-                            label:lang.orderbyasc,
-                            cmdName:'sorttable',
-                            value:'orderbyasc'
-                        },
-                        {
-                            label:lang.reversebyasc,
-                            cmdName:'sorttable',
-                            value:'reversebyasc'
-                        },
-                        {
-                            label:lang.orderbynum,
-                            cmdName:'sorttable',
-                            value:'orderbynum'
-                        },
-                        {
-                            label:lang.reversebynum,
-                            cmdName:'sorttable',
-                            value:'reversebynum'
-                        }
-                    ]
-                },
-                {
-                    group:lang.borderbk,
-                    icon:'borderBack',
-                    subMenu:[
-                        {
-                            label:lang.setcolor,
-                            cmdName:"interlacetable",
-                            exec:function(){
-                                this.execCommand("interlacetable");
-                            }
-                        },
-                        {
-                            label:lang.unsetcolor,
-                            cmdName:"uninterlacetable",
-                            exec:function(){
-                                this.execCommand("uninterlacetable");
-                            }
-                        },
-                        {
-                            label:lang.setbackground,
-                            cmdName:"settablebackground",
-                            exec:function(){
-                                this.execCommand("settablebackground",{repeat:true,colorList:["#bbb","#ccc"]});
-                            }
-                        },
-                        {
-                            label:lang.unsetbackground,
-                            cmdName:"cleartablebackground",
-                            exec:function(){
-                                this.execCommand("cleartablebackground");
-                            }
-                        },
-                        {
-                            label:lang.redandblue,
-                            cmdName:"settablebackground",
-                            exec:function(){
-                                this.execCommand("settablebackground",{repeat:true,colorList:["red","blue"]});
-                            }
-                        },
-                        {
-                            label:lang.threecolorgradient,
-                            cmdName:"settablebackground",
-                            exec:function(){
-                                this.execCommand("settablebackground",{repeat:true,colorList:["#aaa","#bbb","#ccc"]});
-                            }
-                        }
-                    ]
-                },
-                {
-                    group:lang.aligntd,
-                    icon:'aligntd',
-                    subMenu:[
-                        {
-                            cmdName:'cellalignment',
-                            value:{align:'left',vAlign:'top'}
-                        },
-                        {
-                            cmdName:'cellalignment',
-                            value:{align:'center',vAlign:'top'}
-                        },
-                        {
-                            cmdName:'cellalignment',
-                            value:{align:'right',vAlign:'top'}
-                        },
-                        {
-                            cmdName:'cellalignment',
-                            value:{align:'left',vAlign:'middle'}
-                        },
-                        {
-                            cmdName:'cellalignment',
-                            value:{align:'center',vAlign:'middle'}
-                        },
-                        {
-                            cmdName:'cellalignment',
-                            value:{align:'right',vAlign:'middle'}
-                        },
-                        {
-                            cmdName:'cellalignment',
-                            value:{align:'left',vAlign:'bottom'}
-                        },
-                        {
-                            cmdName:'cellalignment',
-                            value:{align:'center',vAlign:'bottom'}
-                        },
-                        {
-                            cmdName:'cellalignment',
-                            value:{align:'right',vAlign:'bottom'}
-                        }
-                    ]
-                },
-                {
-                    group:lang.aligntable,
-                    icon:'aligntable',
-                    subMenu:[
-                        {
-                            cmdName:'tablealignment',
-                            className: 'left',
-                            label:lang.tableleft,
-                            value:"left"
-                        },
-                        {
-                            cmdName:'tablealignment',
-                            className: 'center',
-                            label:lang.tablecenter,
-                            value:"center"
-                        },
-                        {
-                            cmdName:'tablealignment',
-                            className: 'right',
-                            label:lang.tableright,
-                            value:"right"
-                        }
-                    ]
-                },
-                '-',
-                {
-                    label:lang.insertparagraphbefore,
-                    cmdName:'insertparagraph',
-                    value:true
-                },
-                {
-                    label:lang.insertparagraphafter,
-                    cmdName:'insertparagraph'
-                },
-                {
-                    label:lang['copy'],
-                    cmdName:'copy',
-                    exec:function () {
-                        alert( lang.copymsg );
-                    },
-                    query:function () {
-                        return 0;
-                    }
-                },
-                {
-                    label:lang['paste'],
-                    cmdName:'paste',
-                    exec:function () {
-                        alert( lang.pastemsg );
-                    },
-                    query:function () {
-                        return 0;
-                    }
-                }
-            ];
-    if ( !items.length ) {
-        return;
-    }
-    var uiUtils = UE.ui.uiUtils;
-
-    me.addListener( 'contextmenu', function ( type, evt ) {
-
-        var offset = uiUtils.getViewportOffsetByEvent( evt );
-        me.fireEvent( 'beforeselectionchange' );
-        if ( menu ) {
-            menu.destroy();
-        }
-        for ( var i = 0, ti, contextItems = []; ti = items[i]; i++ ) {
-            var last;
-            (function ( item ) {
-                if ( item == '-' ) {
-                    if ( (last = contextItems[contextItems.length - 1 ] ) && last !== '-' ) {
-                        contextItems.push( '-' );
-                    }
-                } else if ( item.hasOwnProperty( "group" ) ) {
-                    for ( var j = 0, cj, subMenu = []; cj = item.subMenu[j]; j++ ) {
-                        (function ( subItem ) {
-                            if ( subItem == '-' ) {
-                                if ( (last = subMenu[subMenu.length - 1 ] ) && last !== '-' ) {
-                                    subMenu.push( '-' );
-                                }else{
-                                    subMenu.splice(subMenu.length-1);
-                                }
-                            } else {
-                                if ( (me.commands[subItem.cmdName] || UE.commands[subItem.cmdName] || subItem.query) &&
-                                        (subItem.query ? subItem.query() : me.queryCommandState( subItem.cmdName )) > -1 ) {
-                                    subMenu.push( {
-                                        'label':subItem.label || me.getLang( "contextMenu." + subItem.cmdName + (subItem.value || '') )||"",
-                                        'className':'edui-for-' +subItem.cmdName + ( subItem.className ? ( ' edui-for-' + subItem.cmdName + '-' + subItem.className ) : '' ),
-                                        onclick:subItem.exec ? function () {
-                                                subItem.exec.call( me );
-                                        } : function () {
-                                            me.execCommand( subItem.cmdName, subItem.value );
-                                        }
-                                    } );
-                                }
-                            }
-                        })( cj );
-                    }
-                    if ( subMenu.length ) {
-                        function getLabel(){
-                            switch (item.icon){
-                                case "table":
-                                    return me.getLang( "contextMenu.table" );
-                                case "justifyjustify":
-                                    return me.getLang( "contextMenu.paragraph" );
-                                case "aligntd":
-                                    return me.getLang("contextMenu.aligntd");
-                                case "aligntable":
-                                    return me.getLang("contextMenu.aligntable");
-                                case "tablesort":
-                                    return lang.tablesort;
-                                case "borderBack":
-                                    return lang.borderbk;
-                                default :
-                                    return '';
-                            }
-                        }
-                        contextItems.push( {
-                            //todo 修正成自动获取方式
-                            'label':getLabel(),
-                            className:'edui-for-' + item.icon,
-                            'subMenu':{
-                                items:subMenu,
-                                editor:me
-                            }
-                        } );
-                    }
-
-                } else {
-                    //有可能commmand没有加载右键不能出来,或者没有command也想能展示出来添加query方法
-                    if ( (me.commands[item.cmdName] || UE.commands[item.cmdName] || item.query) &&
-                            (item.query ? item.query.call(me) : me.queryCommandState( item.cmdName )) > -1 ) {
-
-                        contextItems.push( {
-                            'label':item.label || me.getLang( "contextMenu." + item.cmdName ),
-                            className:'edui-for-' + (item.icon ? item.icon : item.cmdName + (item.value || '')),
-                            onclick:item.exec ? function () {
-                                item.exec.call( me );
-                            } : function () {
-                                me.execCommand( item.cmdName, item.value );
-                            }
-                        } );
-                    }
-
-                }
-
-            })( ti );
-        }
-        if ( contextItems[contextItems.length - 1] == '-' ) {
-            contextItems.pop();
-        }
-
-        menu = new UE.ui.Menu( {
-            items:contextItems,
-            className:"edui-contextmenu",
-            editor:me
-        } );
-        menu.render();
-        menu.showAt( offset );
-
-        me.fireEvent("aftershowcontextmenu",menu);
-
-        domUtils.preventDefault( evt );
-        if ( browser.ie ) {
-            var ieRange;
-            try {
-                ieRange = me.selection.getNative().createRange();
-            } catch ( e ) {
-                return;
-            }
-            if ( ieRange.item ) {
-                var range = new dom.Range( me.document );
-                range.selectNode( ieRange.item( 0 ) ).select( true, true );
-
-            }
-        }
-    } );
-};
-
-
-
-///import core
-///commands       弹出菜单
-// commandsName  popupmenu
-///commandsTitle  弹出菜单
-/*
- * 弹出菜单
- * @function
- * @name baidu.editor.plugins.popupmenu
- * @author xuheng
- */
-
-UE.plugins['shortcutmenu'] = function () {
-    var me = this,
-        menu,
-        items = me.options.shortcutMenu || [];
-
-    if (!items.length) {
-        return;
-    }
-
-    me.addListener ('contextmenu mouseup' , function (type , e) {
-        var me = this,
-            customEvt = {
-                type : type ,
-                target : e.target || e.srcElement ,
-                screenX : e.screenX ,
-                screenY : e.screenY ,
-                clientX : e.clientX ,
-                clientY : e.clientY
-            };
-
-        setTimeout (function () {
-            var rng = me.selection.getRange ();
-            if (rng.collapsed === false || type == "contextmenu") {
-
-                if (!menu) {
-                    menu = new baidu.editor.ui.ShortCutMenu ({
-                        editor : me ,
-                        items : items ,
-                        theme : me.options.theme ,
-                        className : 'edui-shortcutmenu'
-                    });
-
-                    menu.render ();
-                    me.fireEvent ("afterrendershortcutmenu" , menu);
-                }
-
-                menu.show (customEvt , !!UE.plugins['contextmenu']);
-            }
-        });
-
-        if (type == 'contextmenu') {
-            domUtils.preventDefault (e);
-            if (browser.ie9below) {
-                var ieRange;
-                try {
-                    ieRange = me.selection.getNative().createRange();
-                } catch (e) {
-                    return;
-                }
-                if (ieRange.item) {
-                    var range = new dom.Range (me.document);
-                    range.selectNode (ieRange.item (0)).select (true , true);
-
-                }
-            }
-        }
-    });
-
-    me.addListener ('keydown' , function (type) {
-        if (type == "keydown") {
-            menu && !menu.isHidden && menu.hide ();
-        }
-
-    });
-
-};
-
-
-
-/**
- * B、I、sub、super命令支持
- * @file
- * @since 1.2.6.1
- */
-
-UE.plugins['basestyle'] = function(){
-
-    /**
-     * 字体加粗
-     * @command bold
-     * @param { String } cmd 命令字符串
-     * @remind 对已加粗的文本内容执行该命令, 将取消加粗
-     * @method execCommand
-     * @example
-     * ```javascript
-     * //editor是编辑器实例
-     * //对当前选中的文本内容执行加粗操作
-     * //第一次执行, 文本内容加粗
-     * editor.execCommand( 'bold' );
-     *
-     * //第二次执行, 文本内容取消加粗
-     * editor.execCommand( 'bold' );
-     * ```
-     */
-
-
-    /**
-     * 字体倾斜
-     * @command italic
-     * @method execCommand
-     * @param { String } cmd 命令字符串
-     * @remind 对已倾斜的文本内容执行该命令, 将取消倾斜
-     * @example
-     * ```javascript
-     * //editor是编辑器实例
-     * //对当前选中的文本内容执行斜体操作
-     * //第一次操作, 文本内容将变成斜体
-     * editor.execCommand( 'italic' );
-     *
-     * //再次对同一文本内容执行, 则文本内容将恢复正常
-     * editor.execCommand( 'italic' );
-     * ```
-     */
-
-    /**
-     * 下标文本,与“superscript”命令互斥
-     * @command subscript
-     * @method execCommand
-     * @remind  把选中的文本内容切换成下标文本, 如果当前选中的文本已经是下标, 则该操作会把文本内容还原成正常文本
-     * @param { String } cmd 命令字符串
-     * @example
-     * ```javascript
-     * //editor是编辑器实例
-     * //对当前选中的文本内容执行下标操作
-     * //第一次操作, 文本内容将变成下标文本
-     * editor.execCommand( 'subscript' );
-     *
-     * //再次对同一文本内容执行, 则文本内容将恢复正常
-     * editor.execCommand( 'subscript' );
-     * ```
-     */
-
-    /**
-     * 上标文本,与“subscript”命令互斥
-     * @command superscript
-     * @method execCommand
-     * @remind 把选中的文本内容切换成上标文本, 如果当前选中的文本已经是上标, 则该操作会把文本内容还原成正常文本
-     * @param { String } cmd 命令字符串
-     * @example
-     * ```javascript
-     * //editor是编辑器实例
-     * //对当前选中的文本内容执行上标操作
-     * //第一次操作, 文本内容将变成上标文本
-     * editor.execCommand( 'superscript' );
-     *
-     * //再次对同一文本内容执行, 则文本内容将恢复正常
-     * editor.execCommand( 'superscript' );
-     * ```
-     */
-    var basestyles = {
-            'bold':['strong','b'],
-            'italic':['em','i'],
-            'subscript':['sub'],
-            'superscript':['sup']
-        },
-        getObj = function(editor,tagNames){
-            return domUtils.filterNodeList(editor.selection.getStartElementPath(),tagNames);
-        },
-        me = this;
-    //添加快捷键
-    me.addshortcutkey({
-        "Bold" : "ctrl+66",//^B
-        "Italic" : "ctrl+73", //^I
-        "Underline" : "ctrl+85"//^U
-    });
-    me.addInputRule(function(root){
-        utils.each(root.getNodesByTagName('b i'),function(node){
-            switch (node.tagName){
-                case 'b':
-                    node.tagName = 'strong';
-                    break;
-                case 'i':
-                    node.tagName = 'em';
-            }
-        });
-    });
-    for ( var style in basestyles ) {
-        (function( cmd, tagNames ) {
-            me.commands[cmd] = {
-                execCommand : function( cmdName ) {
-                    var range = me.selection.getRange(),obj = getObj(this,tagNames);
-                    if ( range.collapsed ) {
-                        if ( obj ) {
-                            var tmpText =  me.document.createTextNode('');
-                            range.insertNode( tmpText ).removeInlineStyle( tagNames );
-                            range.setStartBefore(tmpText);
-                            domUtils.remove(tmpText);
-                        } else {
-                            var tmpNode = range.document.createElement( tagNames[0] );
-                            if(cmdName == 'superscript' || cmdName == 'subscript'){
-                                tmpText = me.document.createTextNode('');
-                                range.insertNode(tmpText)
-                                    .removeInlineStyle(['sub','sup'])
-                                    .setStartBefore(tmpText)
-                                    .collapse(true);
-                            }
-                            range.insertNode( tmpNode ).setStart( tmpNode, 0 );
-                        }
-                        range.collapse( true );
-                    } else {
-                        if(cmdName == 'superscript' || cmdName == 'subscript'){
-                            if(!obj || obj.tagName.toLowerCase() != cmdName){
-                                range.removeInlineStyle(['sub','sup']);
-                            }
-                        }
-                        obj ? range.removeInlineStyle( tagNames ) : range.applyInlineStyle( tagNames[0] );
-                    }
-                    range.select();
-                },
-                queryCommandState : function() {
-                   return getObj(this,tagNames) ? 1 : 0;
-                }
-            };
-        })( style, basestyles[style] );
-    }
-};
-
-
-/**
- * 选取路径命令
- * @file
- */
-UE.plugins['elementpath'] = function(){
-    var currentLevel,
-        tagNames,
-        me = this;
-    me.setOpt('elementPathEnabled',true);
-    if(!me.options.elementPathEnabled){
-        return;
-    }
-    me.commands['elementpath'] = {
-        execCommand : function( cmdName, level ) {
-            var start = tagNames[level],
-                range = me.selection.getRange();
-            currentLevel = level*1;
-            range.selectNode(start).select();
-        },
-        queryCommandValue : function() {
-            //产生一个副本,不能修改原来的startElementPath;
-            var parents = [].concat(this.selection.getStartElementPath()).reverse(),
-                names = [];
-            tagNames = parents;
-            for(var i=0,ci;ci=parents[i];i++){
-                if(ci.nodeType == 3) {
-                    continue;
-                }
-                var name = ci.tagName.toLowerCase();
-                if(name == 'img' && ci.getAttribute('anchorname')){
-                    name = 'anchor';
-                }
-                names[i] = name;
-                if(currentLevel == i){
-                   currentLevel = -1;
-                    break;
-                }
-            }
-            return names;
-        }
-    };
-};
-
-
-/**
- * 格式刷,只格式inline的
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 格式刷
- * @command formatmatch
- * @method execCommand
- * @remind 该操作不能复制段落格式
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * //editor是编辑器实例
- * //获取格式刷
- * editor.execCommand( 'formatmatch' );
- * ```
- */
-UE.plugins['formatmatch'] = function(){
-
-    var me = this,
-        list = [],img,
-        flag = 0;
-
-     me.addListener('reset',function(){
-         list = [];
-         flag = 0;
-     });
-
-    function addList(type,evt){
-        
-        if(browser.webkit){
-            var target = evt.target.tagName == 'IMG' ? evt.target : null;
-        }
-
-        function addFormat(range){
-
-            if(text){
-                range.selectNode(text);
-            }
-            return range.applyInlineStyle(list[list.length-1].tagName,null,list);
-
-        }
-
-        me.undoManger && me.undoManger.save();
-
-        var range = me.selection.getRange(),
-            imgT = target || range.getClosedNode();
-        if(img && imgT && imgT.tagName == 'IMG'){
-            //trace:964
-
-            imgT.style.cssText += ';float:' + (img.style.cssFloat || img.style.styleFloat ||'none') + ';display:' + (img.style.display||'inline');
-
-            img = null;
-        }else{
-            if(!img){
-                var collapsed = range.collapsed;
-                if(collapsed){
-                    var text = me.document.createTextNode('match');
-                    range.insertNode(text).select();
-
-
-                }
-                me.__hasEnterExecCommand = true;
-                //不能把block上的属性干掉
-                //trace:1553
-                var removeFormatAttributes = me.options.removeFormatAttributes;
-                me.options.removeFormatAttributes = '';
-                me.execCommand('removeformat');
-                me.options.removeFormatAttributes = removeFormatAttributes;
-                me.__hasEnterExecCommand = false;
-                //trace:969
-                range = me.selection.getRange();
-                if(list.length){
-                    addFormat(range);
-                }
-                if(text){
-                    range.setStartBefore(text).collapse(true);
-
-                }
-                range.select();
-                text && domUtils.remove(text);
-            }
-
-        }
-
-
-
-
-        me.undoManger && me.undoManger.save();
-        me.removeListener('mouseup',addList);
-        flag = 0;
-    }
-
-    me.commands['formatmatch'] = {
-        execCommand : function( cmdName ) {
-          
-            if(flag){
-                flag = 0;
-                list = [];
-                 me.removeListener('mouseup',addList);
-                return;
-            }
-
-
-              
-            var range = me.selection.getRange();
-            img = range.getClosedNode();
-            if(!img || img.tagName != 'IMG'){
-               range.collapse(true).shrinkBoundary();
-               var start = range.startContainer;
-               list = domUtils.findParents(start,true,function(node){
-                   return !domUtils.isBlockElm(node) && node.nodeType == 1;
-               });
-               //a不能加入格式刷, 并且克隆节点
-               for(var i=0,ci;ci=list[i];i++){
-                   if(ci.tagName == 'A'){
-                       list.splice(i,1);
-                       break;
-                   }
-               }
-
-            }
-
-            me.addListener('mouseup',addList);
-            flag = 1;
-
-
-        },
-        queryCommandState : function() {
-            return flag;
-        },
-        notNeedUndo : 1
-    };
-};
-
-
-///import core
-///commands 查找替换
-///commandsName  SearchReplace
-///commandsTitle  查询替换
-///commandsDialog  dialogs\searchreplace
-/*
- * @description 查找替换
- * @author zhanyi
- */
-
-UE.plugin.register('searchreplace',function(){
-    var me = this;
-    function findTextInString(textContent,opt,currentIndex){
-        var str = opt.searchStr;
-        if(opt.dir == -1){
-            textContent = textContent.split('').reverse().join('');
-            str = str.split('').reverse().join('');
-            currentIndex = textContent.length - currentIndex;
-
-        }
-        var reg = new RegExp(str,'g' + (opt.casesensitive ? '' : 'i')),match;
-
-        while(match = reg.exec(textContent)){
-            if(match.index >= currentIndex){
-                return opt.dir == -1 ? textContent.length - match.index - opt.searchStr.length : match.index;
-            }
-        }
-        return  -1
-    }
-    function findTextBlockElm(node,currentIndex,opt){
-        var textContent,index,methodName = opt.all || opt.dir == 1 ? 'getNextDomNode' : 'getPreDomNode';
-        if(domUtils.isBody(node)){
-            node = node.firstChild;
-        }
-        var first = 1;
-        while(node){
-            textContent = node.nodeType == 3 ? node.nodeValue : node[browser.ie ? 'innerText' : 'textContent'];
-            index = findTextInString(textContent,opt,currentIndex );
-            first = 0;
-            if(index!=-1){
-                return {
-                    'node':node,
-                    'index':index
-                }
-            }
-            node = domUtils[methodName](node);
-            if(node){
-                currentIndex = opt.dir == -1 ? (node.nodeType == 3 ? node.nodeValue : node[browser.ie ? 'innerText' : 'textContent']).length : 0;
-            }
-
-        }
-    }
-    function findNTextInBlockElm(node,index,str){
-        var currentIndex = 0,
-            currentNode = node.firstChild,
-            currentNodeLength = 0,
-            result;
-        while(currentNode){
-            if(currentNode.nodeType == 3){
-                currentNodeLength = currentNode.nodeValue.replace(/(^[\t\r\n]+)|([\t\r\n]+$)/,'').length;
-                currentIndex += currentNodeLength;
-                if(currentIndex >= index){
-                    return {
-                        'node':currentNode,
-                        'index': currentNodeLength - (currentIndex - index)
-                    }
-                }
-            }else if(!dtd.$empty[currentNode.tagName]){
-                currentNodeLength = currentNode[browser.ie ? 'innerText' : 'textContent'].replace(/(^[\t\r\n]+)|([\t\r\n]+$)/,'').length
-                currentIndex += currentNodeLength;
-                if(currentIndex >= index){
-                    result = findNTextInBlockElm(currentNode,currentNodeLength - (currentIndex - index),str);
-                    if(result){
-                        return result;
-                    }
-                }
-            }
-            currentNode = domUtils.getNextDomNode(currentNode);
-        }
-    }
-
-    function searchReplace(me,opt){
-        var rng = me.selection.getRange(),
-            startBlockNode,
-            searchStr = opt.searchStr,
-            span = me.document.createElement('span');
-        span.innerHTML = '$$ueditor_searchreplace_key$$';
-
-        //判断是不是第一次选中
-        if(!rng.collapsed){
-            rng.select();
-            var rngText = me.selection.getText();
-            if(new RegExp('^' + opt.searchStr + '$',(opt.casesensitive ? '' : 'i')).test(rngText)){
-                if(opt.replaceStr != undefined){
-                    replaceText(rng,opt.replaceStr);
-                    rng.select();
-                    return true;
-                }else{
-                    rng.collapse(opt.dir == -1)
-                }
-
-            }
-        }
-
-
-        rng.insertNode(span);
-        rng.enlargeToBlockElm(true);
-        startBlockNode = rng.startContainer;
-        var currentIndex = startBlockNode[browser.ie ? 'innerText' : 'textContent'].indexOf('$$ueditor_searchreplace_key$$');
-        rng.setStartBefore(span);
-        domUtils.remove(span);
-        var result = findTextBlockElm(startBlockNode,currentIndex,opt);
-        if(result){
-            var rngStart = findNTextInBlockElm(result.node,result.index,searchStr);
-            var rngEnd = findNTextInBlockElm(result.node,result.index + searchStr.length,searchStr);
-            rng.setStart(rngStart.node,rngStart.index).setEnd(rngEnd.node,rngEnd.index);
-
-            if(opt.replaceStr !== undefined){
-                replaceText(rng,opt.replaceStr)
-            }
-            rng.select();
-            return true;
-        }else{
-            rng.setCursor()
-        }
-
-    }
-    function replaceText(rng,str){
-        me.fireEvent('saveScene');
-        str = me.document.createTextNode(str);
-        rng.deleteContents().insertNode(str);
-        me.fireEvent('saveScene');
-    }
-    return {
-        commands:{
-            'searchreplace':{
-                execCommand:function(cmdName,opt){
-                    utils.extend(opt,{
-                        all : false,
-                        casesensitive : false,
-                        dir : 1
-                    },true);
-                    var num = 0;
-                    if(opt.all){
-                        var rng = me.selection.getRange(),
-                            first = me.body.firstChild;
-                        if(first && first.nodeType == 1){
-                            rng.setStart(first,0)
-                        }else if(first.nodeType == 3){
-                            rng.setStartBefore(first)
-                        }
-                        rng.collapse(true).select(true);
-                        while(searchReplace(this,opt)){
-                            num++;
-                        }
-                    }else{
-                        if(searchReplace(this,opt)){
-                            num++
-                        }
-                    }
-
-                    return num;
-                },
-                notNeedUndo:1
-            }
-        }
-    }
-});
-/**
- * 自定义样式
- * @file
- * @since 1.2.6.1
- */
-
-/**
- * 根据config配置文件里“customstyle”选项的值对匹配的标签执行样式替换。
- * @command customstyle
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * editor.execCommand( 'customstyle' );
- * ```
- */
-UE.plugins['customstyle'] = function() {
-    var me = this;
-    me.setOpt({ 'customstyle':[
-        {tag:'h1',name:'tc', style:'font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;'},
-        {tag:'h1',name:'tl', style:'font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;margin:0 0 10px 0;'},
-        {tag:'span',name:'im', style:'font-size:16px;font-style:italic;font-weight:bold;line-height:18px;'},
-        {tag:'span',name:'hi', style:'font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;'}
-    ]});
-    me.commands['customstyle'] = {
-        execCommand : function(cmdName, obj) {
-            var me = this,
-                    tagName = obj.tag,
-                    node = domUtils.findParent(me.selection.getStart(), function(node) {
-                        return node.getAttribute('label');
-                    }, true),
-                    range,bk,tmpObj = {};
-            for (var p in obj) {
-               if(obj[p]!==undefined)
-                    tmpObj[p] = obj[p];
-            }
-            delete tmpObj.tag;
-            if (node && node.getAttribute('label') == obj.label) {
-                range = this.selection.getRange();
-                bk = range.createBookmark();
-                if (range.collapsed) {
-                    //trace:1732 删掉自定义标签,要有p来回填站位
-                    if(dtd.$block[node.tagName]){
-                        var fillNode = me.document.createElement('p');
-                        domUtils.moveChild(node, fillNode);
-                        node.parentNode.insertBefore(fillNode, node);
-                        domUtils.remove(node);
-                    }else{
-                        domUtils.remove(node,true);
-                    }
-
-                } else {
-
-                    var common = domUtils.getCommonAncestor(bk.start, bk.end),
-                            nodes = domUtils.getElementsByTagName(common, tagName);
-                    if(new RegExp(tagName,'i').test(common.tagName)){
-                        nodes.push(common);
-                    }
-                    for (var i = 0,ni; ni = nodes[i++];) {
-                        if (ni.getAttribute('label') == obj.label) {
-                            var ps = domUtils.getPosition(ni, bk.start),pe = domUtils.getPosition(ni, bk.end);
-                            if ((ps & domUtils.POSITION_FOLLOWING || ps & domUtils.POSITION_CONTAINS)
-                                    &&
-                                    (pe & domUtils.POSITION_PRECEDING || pe & domUtils.POSITION_CONTAINS)
-                                    )
-                                if (dtd.$block[tagName]) {
-                                    var fillNode = me.document.createElement('p');
-                                    domUtils.moveChild(ni, fillNode);
-                                    ni.parentNode.insertBefore(fillNode, ni);
-                                }
-                            domUtils.remove(ni, true);
-                        }
-                    }
-                    node = domUtils.findParent(common, function(node) {
-                        return node.getAttribute('label') == obj.label;
-                    }, true);
-                    if (node) {
-
-                        domUtils.remove(node, true);
-
-                    }
-
-                }
-                range.moveToBookmark(bk).select();
-            } else {
-                if (dtd.$block[tagName]) {
-                    this.execCommand('paragraph', tagName, tmpObj,'customstyle');
-                    range = me.selection.getRange();
-                    if (!range.collapsed) {
-                        range.collapse();
-                        node = domUtils.findParent(me.selection.getStart(), function(node) {
-                            return node.getAttribute('label') == obj.label;
-                        }, true);
-                        var pNode = me.document.createElement('p');
-                        domUtils.insertAfter(node, pNode);
-                        domUtils.fillNode(me.document, pNode);
-                        range.setStart(pNode, 0).setCursor();
-                    }
-                } else {
-
-                    range = me.selection.getRange();
-                    if (range.collapsed) {
-                        node = me.document.createElement(tagName);
-                        domUtils.setAttributes(node, tmpObj);
-                        range.insertNode(node).setStart(node, 0).setCursor();
-
-                        return;
-                    }
-
-                    bk = range.createBookmark();
-                    range.applyInlineStyle(tagName, tmpObj).moveToBookmark(bk).select();
-                }
-            }
-
-        },
-        queryCommandValue : function() {
-            var parent = domUtils.filterNodeList(
-                this.selection.getStartElementPath(),
-                function(node){return node.getAttribute('label')}
-            );
-            return  parent ? parent.getAttribute('label') : '';
-        }
-    };
-    //当去掉customstyle是,如果是块元素,用p代替
-    me.addListener('keyup', function(type, evt) {
-        var keyCode = evt.keyCode || evt.which;
-
-        if (keyCode == 32 || keyCode == 13) {
-            var range = me.selection.getRange();
-            if (range.collapsed) {
-                var node = domUtils.findParent(me.selection.getStart(), function(node) {
-                    return node.getAttribute('label');
-                }, true);
-                if (node && dtd.$block[node.tagName] && domUtils.isEmptyNode(node)) {
-                        var p = me.document.createElement('p');
-                        domUtils.insertAfter(node, p);
-                        domUtils.fillNode(me.document, p);
-                        domUtils.remove(node);
-                        range.setStart(p, 0).setCursor();
-
-
-                }
-            }
-        }
-    });
-};
-///import core
-///commands 远程图片抓取
-///commandsName  catchRemoteImage,catchremoteimageenable
-///commandsTitle  远程图片抓取
-/*
- * 远程图片抓取,当开启本插件时所有不符合本地域名的图片都将被抓取成为本地服务器上的图片
- *
- */
-UE.plugins['catchremoteimage'] = function () {
-    if (this.options.catchRemoteImageEnable===false){
-        return;
-    }
-    var me = this;
-    this.setOpt({
-        localDomain:["127.0.0.1","localhost","img.baidu.com"],
-        separater:'ue_separate_ue',
-        catchFieldName:"upfile",
-        catchRemoteImageEnable:true
-    });
-    var ajax = UE.ajax,
-        localDomain = me.options.localDomain ,
-        catcherUrl = me.options.catcherUrl,
-        separater = me.options.separater;
-    function catchremoteimage(imgs, callbacks) {
-        var submitStr = imgs.join(separater);
-        var tmpOption = {
-            timeout:60000, //单位:毫秒,回调请求超时设置。目标用户如果网速不是很快的话此处建议设置一个较大的数值
-            onsuccess:callbacks["success"],
-            onerror:callbacks["error"]
-        };
-        tmpOption[me.options.catchFieldName] = submitStr;
-        ajax.request(catcherUrl, tmpOption);
-    }
-
-    me.addListener("afterpaste", function () {
-        me.fireEvent("catchRemoteImage");
-    });
-
-    me.addListener("catchRemoteImage", function () {
-        var remoteImages = [];
-        var imgs = domUtils.getElementsByTagName(me.document, "img");
-        var test = function (src,urls) {
-            for (var j = 0, url; url = urls[j++];) {
-                if (src.indexOf(url) !== -1) {
-                    return true;
-                }
-            }
-            return false;
-        };
-        for (var i = 0, ci; ci = imgs[i++];) {
-            if (ci.getAttribute("word_img")){
-                continue;
-            }
-            var src = ci.getAttribute("_src") || ci.src || "";
-            if (/^(https?|ftp):/i.test(src) && !test(src,localDomain)) {
-                remoteImages.push(src);
-            }
-        }
-        if (remoteImages.length) {
-            catchremoteimage(remoteImages, {
-                //成功抓取
-                success:function (xhr) {
-                    try {
-                        var info = eval("(" + xhr.responseText + ")");
-                    } catch (e) {
-                        return;
-                    }
-                    var srcUrls = info.srcUrl.split(separater),
-                        urls = info.url.split(separater);
-                    for (var i = 0, ci; ci = imgs[i++];) {
-                        var src = ci.getAttribute("_src") || ci.src || "";
-                        for (var j = 0, cj; cj = srcUrls[j++];) {
-                            var url = urls[j - 1];
-                            if (src == cj && url != "error") {  //抓取失败时不做替换处理
-                                //地址修正
-                                var newSrc = me.options.catcherPath + url;
-                                domUtils.setAttributes(ci, {
-                                    "src":newSrc,
-                                    "_src":newSrc
-                                });
-                                break;
-                            }
-                        }
-                    }
-                    me.fireEvent('catchremotesuccess')
-                },
-                //回调失败,本次请求超时
-                error:function () {
-                    me.fireEvent("catchremoteerror");
-                }
-            });
-        }
-
-    });
-};
-///import core
-///import plugins\inserthtml.js
-///import plugins\image.js
-///commandsName  snapscreen
-///commandsTitle  截屏
-/*
- * 截屏插件
- */
-UE.plugins['snapscreen'] = function(){
-    var me = this,
-        doc,
-        snapplugin;
-
-    me.setOpt({
-        snapscreenServerPort: location.port                                    //屏幕截图的server端端口
-        ,snapscreenImgAlign: ''                                //截图的图片默认的排版方式
-        ,snapscreenHost: location.hostname                                 //屏幕截图的server端文件所在的网站地址或者ip,请不要加http://
-
-    });
-    me.commands['snapscreen'] = {
-        execCommand: function(){
-            var me = this,lang = me.getLang("snapScreen_plugin");
-            if(!snapplugin){
-                var container = me.container;
-                doc = container.ownerDocument || container.document;
-                snapplugin = doc.createElement("object");
-                try{snapplugin.type = "application/x-pluginbaidusnap";}catch(e){
-                    return;
-                }
-                snapplugin.style.cssText = "position:absolute;left:-9999px;";
-                snapplugin.setAttribute("width","0");
-                snapplugin.setAttribute("height","0");
-                container.appendChild(snapplugin);
-            }
-
-
-           var editorOptions = me.options;
-
-            var onSuccess = function(rs){
-                try{
-                    rs = eval("("+ rs +")");
-                }catch(e){
-                    alert(lang.callBackErrorMsg);
-                    return;
-                }
-
-                if(rs.state != 'SUCCESS'){
-                    alert(rs.state);
-                    return;
-                }
-                me.execCommand('insertimage', {
-                    src: editorOptions.snapscreenPath + rs.url,
-                    floatStyle: editorOptions.snapscreenImgAlign,
-                    _src:editorOptions.snapscreenPath + rs.url
-                });
-            };
-            var onStartUpload = function(){
-                //开始截图上传
-            };
-            var onError = function(){
-                alert(lang.uploadErrorMsg);
-            };
-            try{
-                var port = editorOptions.snapscreenServerPort + '';
-                editorOptions.snapscreenServerUrl = editorOptions.snapscreenServerUrl.split( editorOptions.snapscreenHost );
-                editorOptions.snapscreenServerUrl = editorOptions.snapscreenServerUrl[1] || editorOptions.snapscreenServerUrl[0];
-                if( editorOptions.snapscreenServerUrl.indexOf(":"+port) === 0 ) {
-                    editorOptions.snapscreenServerUrl = editorOptions.snapscreenServerUrl.substring( port.length+1 );
-                }
-                var ret =snapplugin.saveSnapshot(editorOptions.snapscreenHost, editorOptions.snapscreenServerUrl, port);
-                onSuccess(ret);
-            }catch(e){
-                me.ui._dialogs['snapscreenDialog'].open();
-            }
-        }
-    };
-}
-
-
-/**
- * 插入段落
- * @file
- * @since 1.2.6.1
- */
-
-
-/**
- * 插入段落
- * @command insertparagraph
- * @method execCommand
- * @param { String } cmd 命令字符串
- * @example
- * ```javascript
- * //editor是编辑器实例
- * editor.execCommand( 'insertparagraph' );
- * ```
- */
-
-UE.commands['insertparagraph'] = {
-    execCommand : function( cmdName,front) {
-        var me = this,
-            range = me.selection.getRange(),
-            start = range.startContainer,tmpNode;
-        while(start ){
-            if(domUtils.isBody(start)){
-                break;
-            }
-            tmpNode = start;
-            start = start.parentNode;
-        }
-        if(tmpNode){
-            var p = me.document.createElement('p');
-            if(front){
-                tmpNode.parentNode.insertBefore(p,tmpNode)
-            }else{
-                tmpNode.parentNode.insertBefore(p,tmpNode.nextSibling)
-            }
-            domUtils.fillNode(me.document,p);
-            range.setStart(p,0).setCursor(false,true);
-        }
-    }
-};
-
-
-/**
- * 百度应用
- * @file
- * @since 1.2.6.1
- */
-
-
-/**
- * 插入百度应用
- * @command webapp
- * @method execCommand
- * @remind 需要百度APPKey
- * @remind 百度应用主页: <a href="http://app.baidu.com/" target="_blank">http://app.baidu.com/</a>
- * @param { Object } appOptions 应用所需的参数项, 支持的key有: title=>应用标题, width=>应用容器宽度,
- * height=>应用容器高度,logo=>应用logo,url=>应用地址
- * @example
- * ```javascript
- * //editor是编辑器实例
- * //在编辑器里插入一个“植物大战僵尸”的APP
- * editor.execCommand( 'webapp' , {
- *     title: '植物大战僵尸',
- *     width: 560,
- *     height: 465,
- *     logo: '应用展示的图片',
- *     url: '百度应用的地址'
- * } );
- * ```
- */
-
-//UE.plugins['webapp'] = function () {
-//    var me = this;
-//    function createInsertStr( obj, toIframe, addParagraph ) {
-//        return !toIframe ?
-//                (addParagraph ? '<p>' : '') + '<img title="'+obj.title+'" width="' + obj.width + '" height="' + obj.height + '"' +
-//                        ' src="' + me.options.UEDITOR_HOME_URL + 'themes/default/images/spacer.gif" style="background:url(' + obj.logo+') no-repeat center center; border:1px solid gray;" class="edui-faked-webapp" _url="' + obj.url + '" />' +
-//                        (addParagraph ? '</p>' : '')
-//                :
-//                '<iframe class="edui-faked-webapp" title="'+obj.title+'" width="' + obj.width + '" height="' + obj.height + '"  scrolling="no" frameborder="0" src="' + obj.url + '" logo_url = '+obj.logo+'></iframe>';
-//    }
-//
-//    function switchImgAndIframe( img2frame ) {
-//        var tmpdiv,
-//                nodes = domUtils.getElementsByTagName( me.document, !img2frame ? "iframe" : "img" );
-//        for ( var i = 0, node; node = nodes[i++]; ) {
-//            if ( node.className != "edui-faked-webapp" ){
-//                continue;
-//            }
-//            tmpdiv = me.document.createElement( "div" );
-//            tmpdiv.innerHTML = createInsertStr( img2frame ? {url:node.getAttribute( "_url" ), width:node.width, height:node.height,title:node.title,logo:node.style.backgroundImage.replace("url(","").replace(")","")} : {url:node.getAttribute( "src", 2 ),title:node.title, width:node.width, height:node.height,logo:node.getAttribute("logo_url")}, img2frame ? true : false,false );
-//            node.parentNode.replaceChild( tmpdiv.firstChild, node );
-//        }
-//    }
-//
-//    me.addListener( "beforegetcontent", function () {
-//        switchImgAndIframe( true );
-//    } );
-//    me.addListener( 'aftersetcontent', function () {
-//        switchImgAndIframe( false );
-//    } );
-//    me.addListener( 'aftergetcontent', function ( cmdName ) {
-//        if ( cmdName == 'aftergetcontent' && me.queryCommandState( 'source' ) ){
-//            return;
-//        }
-//        switchImgAndIframe( false );
-//    } );
-//
-//    me.commands['webapp'] = {
-//        execCommand:function ( cmd, obj ) {
-//            me.execCommand( "inserthtml", createInsertStr( obj, false,true ) );
-//        }
-//    };
-//};
-
-UE.plugin.register('webapp', function (){
-    var me = this;
-    function createInsertStr(obj,toEmbed){
-        return  !toEmbed ?
-            '<img title="'+obj.title+'" width="' + obj.width + '" height="' + obj.height + '"' +
-                ' src="' + me.options.UEDITOR_HOME_URL + 'themes/default/images/spacer.gif" _logo_url="'+obj.logo+'" style="background:url(' + obj.logo
-                +') no-repeat center center; border:1px solid gray;" class="edui-faked-webapp" _url="' + obj.url + '" ' +
-                (obj.align && !obj.cssfloat? 'align="' + obj.align + '"' : '') +
-                (obj.cssfloat ? 'style="float:' + obj.cssfloat + '"' : '') +
-                '/>'
-            :
-            '<iframe class="edui-faked-webapp" title="'+obj.title+'" ' +
-                (obj.align && !obj.cssfloat? 'align="' + obj.align + '"' : '') +
-                (obj.cssfloat ? 'style="float:' + obj.cssfloat + '"' : '') +
-                'width="' + obj.width + '" height="' + obj.height + '"  scrolling="no" frameborder="0" src="' + obj.url + '" logo_url = "'+obj.logo+'"></iframe>'
-
-    }
-    return {
-        outputRule: function(root){
-            utils.each(root.getNodesByTagName('img'),function(node){
-                var html;
-                if(node.getAttr('class') == 'edui-faked-webapp'){
-                    html =  createInsertStr({
-                        title:node.getAttr('title'),
-                        'width':node.getAttr('width'),
-                        'height':node.getAttr('height'),
-                        'align':node.getAttr('align'),
-                        'cssfloat':node.getStyle('float'),
-                        'url':node.getAttr("_url"),
-                        'logo':node.getAttr('_logo_url')
-                    },true);
-                    var embed = UE.uNode.createElement(html);
-                    node.parentNode.replaceChild(embed,node);
-                }
-            })
-        },
-        inputRule:function(root){
-            utils.each(root.getNodesByTagName('iframe'),function(node){
-                if(node.getAttr('class') == 'edui-faked-webapp'){
-                    var img = UE.uNode.createElement(createInsertStr({
-                        title:node.getAttr('title'),
-                        'width':node.getAttr('width'),
-                        'height':node.getAttr('height'),
-                        'align':node.getAttr('align'),
-                        'cssfloat':node.getStyle('float'),
-                        'url':node.getAttr("src"),
-                        'logo':node.getAttr('logo_url')
-                    }));
-                    node.parentNode.replaceChild(img,node);
-                }
-            })
-
-        },
-        commands:{
-            /**
-             * 插入百度应用
-             * @command webapp
-             * @method execCommand
-             * @remind 需要百度APPKey
-             * @remind 百度应用主页: <a href="http://app.baidu.com/" target="_blank">http://app.baidu.com/</a>
-             * @param { Object } appOptions 应用所需的参数项, 支持的key有: title=>应用标题, width=>应用容器宽度,
-             * height=>应用容器高度,logo=>应用logo,url=>应用地址
-             * @example
-             * ```javascript
-             * //editor是编辑器实例
-             * //在编辑器里插入一个“植物大战僵尸”的APP
-             * editor.execCommand( 'webapp' , {
-             *     title: '植物大战僵尸',
-             *     width: 560,
-             *     height: 465,
-             *     logo: '应用展示的图片',
-             *     url: '百度应用的地址'
-             * } );
-             * ```
-             */
-            'webapp':{
-                execCommand:function (cmd, obj) {
-
-                    var me = this,
-                        str = createInsertStr(utils.extend(obj,{
-                            align:'none'
-                        }), false);
-                    me.execCommand("inserthtml",str);
-                },
-                queryCommandState:function () {
-                    var me = this,
-                        img = me.selection.getRange().getClosedNode(),
-                        flag = img && (img.className == "edui-faked-webapp");
-                    return flag ? 1 : 0;
-                }
-            }
-        }
-    }
-});
-///import core
-///import plugins\inserthtml.js
-///import plugins\cleardoc.js
-///commands 模板
-///commandsName  template
-///commandsTitle  模板
-///commandsDialog  dialogs\template
-UE.plugins['template'] = function () {
-    UE.commands['template'] = {
-        execCommand:function (cmd, obj) {
-            obj.html && this.execCommand("inserthtml", obj.html);
-        }
-    };
-    this.addListener("click", function (type, evt) {
-        var el = evt.target || evt.srcElement,
-            range = this.selection.getRange();
-        var tnode = domUtils.findParent(el, function (node) {
-            if (node.className && domUtils.hasClass(node, "ue_t")) {
-                return node;
-            }
-        }, true);
-        tnode && range.selectNode(tnode).shrinkBoundary().select();
-    });
-    this.addListener("keydown", function (type, evt) {
-        var range = this.selection.getRange();
-        if (!range.collapsed) {
-            if (!evt.ctrlKey && !evt.metaKey && !evt.shiftKey && !evt.altKey) {
-                var tnode = domUtils.findParent(range.startContainer, function (node) {
-                    if (node.className && domUtils.hasClass(node, "ue_t")) {
-                        return node;
-                    }
-                }, true);
-                if (tnode) {
-                    domUtils.removeClasses(tnode, ["ue_t"]);
-                }
-            }
-        }
-    });
-};
-
-/**
- * 插入音乐命令
- * @file
- */
-UE.plugin.register('music', function (){
-    var me = this;
-    function creatInsertStr(url,width,height,align,cssfloat,toEmbed){
-        return  !toEmbed ?
-                '<img ' +
-                    (align && !cssfloat? 'align="' + align + '"' : '') +
-                    (cssfloat ? 'style="float:' + cssfloat + '"' : '') +
-                    ' width="'+ width +'" height="' + height + '" _url="'+url+'" class="edui-faked-music"' +
-                    ' src="'+me.options.langPath+me.options.lang+'/images/music.png" />'
-            :
-            '<embed type="application/x-shockwave-flash" class="edui-faked-music" pluginspage="http://www.macromedia.com/go/getflashplayer"' +
-                ' src="' + url + '" width="' + width  + '" height="' + height  + '" '+ (align && !cssfloat? 'align="' + align + '"' : '') +
-                (cssfloat ? 'style="float:' + cssfloat + '"' : '') +
-                ' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" >';
-    }
-    return {
-        outputRule: function(root){
-            utils.each(root.getNodesByTagName('img'),function(node){
-                var html;
-                if(node.getAttr('class') == 'edui-faked-music'){
-                    var cssfloat = node.getStyle('float');
-                    var align = node.getAttr('align');
-                    html =  creatInsertStr(node.getAttr("_url"), node.getAttr('width'), node.getAttr('height'), align, cssfloat, true);
-                    var embed = UE.uNode.createElement(html);
-                    node.parentNode.replaceChild(embed,node);
-                }
-            })
-        },
-        inputRule:function(root){
-            utils.each(root.getNodesByTagName('embed'),function(node){
-                if(node.getAttr('class') == 'edui-faked-music'){
-                    var cssfloat = node.getStyle('float');
-                    var align = node.getAttr('align');
-                    html =  creatInsertStr(node.getAttr("src"), node.getAttr('width'), node.getAttr('height'), align, cssfloat,false);
-                    var img = UE.uNode.createElement(html);
-                    node.parentNode.replaceChild(img,node);
-                }
-            })
-
-        },
-        commands:{
-            /**
-             * 插入音乐
-             * @command music
-             * @method execCommand
-             * @param { Object } musicOptions 插入音乐的参数项, 支持的key有: url=>音乐地址;
-             * width=>音乐容器宽度;height=>音乐容器高度;align=>音乐文件的对齐方式, 可选值有: left, center, right, none
-             * @example
-             * ```javascript
-             * //editor是编辑器实例
-             * //在编辑器里插入一个“植物大战僵尸”的APP
-             * editor.execCommand( 'music' , {
-             *     width: 400,
-             *     height: 95,
-             *     align: "center",
-             *     url: "音乐地址"
-             * } );
-             * ```
-             */
-            'music':{
-                execCommand:function (cmd, musicObj) {
-                    var me = this,
-                        str = creatInsertStr(musicObj.url, musicObj.width || 400, musicObj.height || 95, "none", false);
-                    me.execCommand("inserthtml",str);
-                },
-                queryCommandState:function () {
-                    var me = this,
-                        img = me.selection.getRange().getClosedNode(),
-                        flag = img && (img.className == "edui-faked-music");
-                    return flag ? 1 : 0;
-                }
-            }
-        }
-    }
-});
-/**
- * @description
- * 1.拖放文件到编辑区域,自动上传并插入到选区
- * 2.插入粘贴板的图片,自动上传并插入到选区
- * @author Jinqn
- * @date 2013-10-14
- */
-UE.plugin.register('autoupload', function (){
-    var me = this;
-    var sendAndInsertImage = function (file, editor) {
-        //模拟数据
-        var fd = new FormData();
-        fd.append(editor.options.imageFieldName || 'upfile', file, file.name || ('blob.' + file.type.substr('image/'.length)));
-        fd.append('type', 'ajax');
-        var xhr = new XMLHttpRequest();
-        xhr.open("post", me.options.imageUrl, true);
-        xhr.setRequestHeader("X-Requested-With", "XMLHttpRequest");
-        xhr.addEventListener('load', function (e) {
-            try{
-                var json = (new Function("return " + e.target.response))(),
-                    picLink = me.options.imagePath + json.url;
-                editor.execCommand('insertimage', {
-                    src: picLink,
-                    _src: picLink
-                });
-            }catch(er){ }
-        });
-        xhr.send(fd);
-    };
-
-    function getPasteImage(e){
-        return e.clipboardData && e.clipboardData.items && e.clipboardData.items.length == 1 && /^image\//.test(e.clipboardData.items[0].type) ? e.clipboardData.items:null;
-    }
-    function getDropImage(e){
-        return  e.dataTransfer && e.dataTransfer.files ? e.dataTransfer.files:null;
-    }
-
-    return {
-        bindEvents:{
-            //插入粘贴板的图片,拖放插入图片
-            'ready':function(e){
-                if(window.FormData && window.FileReader) {
-                    domUtils.on(me.body, 'paste drop', function(e){
-                        var hasImg = false,
-                            items;
-                        //获取粘贴板文件列表或者拖放文件列表
-                        items = e.type == 'paste' ? getPasteImage(e):getDropImage(e);
-                        if(items){
-                            var len = items.length,
-                                file;
-                            while (len--){
-                                file = items[len];
-                                if(file.getAsFile) file = file.getAsFile();
-                                if(file && file.size > 0 && /image\/\w+/i.test(file.type) ) {
-                                    sendAndInsertImage(file, me);
-                                    hasImg = true;
-                                }
-                            }
-                            hasImg && e.preventDefault();
-                        }
-
-                    });
-                    //取消拖放图片时出现的文字光标位置提示
-                    domUtils.on(me.body, 'dragover', function (e) {
-                        if(e.dataTransfer.types[0] == 'Files') {
-                            e.preventDefault();
-                        }
-                    });
-                }
-            }
-        }
-    }
-});
-UE.plugin.register('autosave', function (){
-
-    var me = this,
-        //无限循环保护
-        lastSaveTime = new Date(),
-        //最小保存间隔时间
-        MIN_TIME = 20,
-        //auto save key
-        saveKey = null;
-
-    //存储媒介封装
-    var LocalStorage = UE.LocalStorage = ( function () {
-
-        var storage = window.localStorage || getUserData() || null,
-            LOCAL_FILE = "localStorage";
-
-        return {
-
-            saveLocalData: function ( key, data ) {
-
-                if ( storage && data) {
-                    storage.setItem( key, data  );
-                    return true;
-                }
-
-                return false;
-
-            },
-
-            getLocalData: function ( key ) {
-
-                if ( storage ) {
-                    return storage.getItem( key );
-                }
-
-                return null;
-
-            },
-
-            removeItem: function ( key ) {
-
-                storage && storage.removeItem( key );
-
-            }
-
-        };
-
-        function getUserData () {
-
-            var container = document.createElement( "div" );
-            container.style.display = "none";
-
-            if( !container.addBehavior ) {
-                return null;
-            }
-
-            container.addBehavior("#default#userdata");
-
-            return {
-
-                getItem: function ( key ) {
-
-                    var result = null;
-
-                    try {
-                        document.body.appendChild( container );
-                        container.load( LOCAL_FILE );
-                        result = container.getAttribute( key );
-                        document.body.removeChild( container );
-                    } catch ( e ) {
-                    }
-
-                    return result;
-
-                },
-
-                setItem: function ( key, value ) {
-
-                    document.body.appendChild( container );
-                    container.setAttribute( key, value );
-                    container.save( LOCAL_FILE );
-                    document.body.removeChild( container );
-
-                },
-//               暂时没有用到
-//                clear: function () {
-//
-//                    var expiresTime = new Date();
-//                    expiresTime.setFullYear( expiresTime.getFullYear() - 1 );
-//                    document.body.appendChild( container );
-//                    container.expires = expiresTime.toUTCString();
-//                    container.save( LOCAL_FILE );
-//                    document.body.removeChild( container );
-//
-//                },
-
-                removeItem: function ( key ) {
-
-                    document.body.appendChild( container );
-                    container.removeAttribute( key );
-                    container.save( LOCAL_FILE );
-                    document.body.removeChild( container );
-
-                }
-
-            };
-
-        }
-
-    } )();
-
-    function save ( editor ) {
-
-        var saveData = null;
-
-        if ( new Date() - lastSaveTime < MIN_TIME ) {
-            return;
-        }
-
-        if ( !editor.hasContents() ) {
-            //这里不能调用命令来删除, 会造成事件死循环
-            saveKey && LocalStorage.removeItem( saveKey );
-            return;
-        }
-
-        lastSaveTime = new Date();
-
-        editor._saveFlag = null;
-
-        saveData = me.body.innerHTML;
-
-        if ( editor.fireEvent( "beforeautosave", {
-            content: saveData
-        } ) === false ) {
-            return;
-        }
-
-        LocalStorage.saveLocalData( saveKey, saveData );
-
-        editor.fireEvent( "afterautosave", {
-            content: saveData
-        } );
-
-    }
-
-    return {
-        defaultOptions: {
-            //默认间隔时间
-            saveInterval: 500
-        },
-        bindEvents:{
-            'ready':function(){
-
-                var _suffix = "-drafts-data",
-                    key = null;
-
-                if ( me.key ) {
-                    key = me.key + _suffix;
-                } else {
-                    key = ( me.container.parentNode.id || 'ue-common' ) + _suffix;
-                }
-
-                //页面地址+编辑器ID 保持唯一
-                saveKey = ( location.protocol + location.host + location.pathname ).replace( /[.:\/]/g, '_' ) + key;
-
-            },
-
-            'contentchange': function () {
-
-                if ( !saveKey ) {
-                    return;
-                }
-
-                if ( me._saveFlag ) {
-                    window.clearTimeout( me._saveFlag );
-                }
-
-                if ( me.options.saveInterval > 0 ) {
-
-                    me._saveFlag = window.setTimeout( function () {
-
-                        save( me );
-
-                    }, me.options.saveInterval );
-
-                } else {
-
-                    save(me);
-
-                }
-
-
-            }
-        },
-        commands:{
-            'clearlocaldata':{
-                execCommand:function (cmd, name) {
-                    if ( saveKey && LocalStorage.getLocalData( saveKey ) ) {
-                        LocalStorage.removeItem( saveKey )
-                    }
-                },
-                notNeedUndo: true,
-                ignoreContentChange:true
-            },
-
-            'getlocaldata':{
-                execCommand:function (cmd, name) {
-                    return saveKey ? LocalStorage.getLocalData( saveKey ) || '' : '';
-                },
-                notNeedUndo: true,
-                ignoreContentChange:true
-            },
-
-            'drafts':{
-                execCommand:function (cmd, name) {
-                    if ( saveKey ) {
-                        me.body.innerHTML = LocalStorage.getLocalData( saveKey ) || '<p>'+(browser.ie ? '&nbsp;' : '<br/>')+'</p>';
-                        me.focus(true);
-                    }
-                },
-                queryCommandState: function () {
-                    return saveKey ? ( LocalStorage.getLocalData( saveKey ) === null ? -1 : 0 ) : -1;
-                },
-                notNeedUndo: true,
-                ignoreContentChange:true
-            }
-        }
-    }
-
-});
-UE.plugin.register('charts', function (){
-
-    var me = this;
-
-    return {
-        bindEvents: {
-            'chartserror': function () {
-            }
-        },
-        commands:{
-            'charts': {
-                execCommand: function ( cmd, data ) {
-
-                    var tableNode = domUtils.findParentByTagName(this.selection.getRange().startContainer, 'table', true),
-                        flagText = [],
-                        config = {};
-
-                    if ( !tableNode ) {
-                        return false;
-                    }
-
-                    if ( !validData( tableNode ) ) {
-                        me.fireEvent( "chartserror" );
-                        return false;
-                    }
-
-                    config.title = data.title || '';
-                    config.subTitle = data.subTitle || '';
-                    config.xTitle = data.xTitle || '';
-                    config.yTitle = data.yTitle || '';
-                    config.suffix = data.suffix || '';
-                    config.tip = data.tip || '';
-                    //数据对齐方式
-                    config.dataFormat = data.tableDataFormat || '';
-                    //图表类型
-                    config.chartType = data.chartType || 0;
-
-                    for ( var key in config ) {
-
-                        if ( !config.hasOwnProperty( key ) ) {
-                            continue;
-                        }
-
-                        flagText.push( key+":"+config[ key ] );
-
-                    }
-
-                    tableNode.setAttribute( "data-chart", flagText.join( ";" ) );
-                    domUtils.addClass( tableNode, "edui-charts-table" );
-
-
-
-                },
-                queryCommandState: function ( cmd, name ) {
-
-                    var tableNode = domUtils.findParentByTagName(this.selection.getRange().startContainer, 'table', true);
-                    return tableNode && validData( tableNode ) ? 0 : -1;
-
-                }
-            }
-        },
-        inputRule:function(root){
-            utils.each(root.getNodesByTagName('table'),function( tableNode ){
-
-                if ( tableNode.getAttr("data-chart") !== undefined ) {
-                    tableNode.setAttr("style");
-                }
-
-            })
-
-        },
-        outputRule:function(root){
-            utils.each(root.getNodesByTagName('table'),function( tableNode ){
-
-                if ( tableNode.getAttr("data-chart") !== undefined ) {
-                    tableNode.setAttr("style", "display: none;");
-                }
-
-            })
-
-        }
-    }
-
-    function validData ( table ) {
-
-        var firstRows = null,
-            cellCount = 0;
-
-        //行数不够
-        if ( table.rows.length < 2 ) {
-            return false;
-        }
-
-        //列数不够
-        if ( table.rows[0].cells.length < 2 ) {
-            return false;
-        }
-
-        //第一行所有cell必须是th
-        firstRows = table.rows[ 0 ].cells;
-        cellCount = firstRows.length;
-
-        for ( var i = 0, cell; cell = firstRows[ i ]; i++ ) {
-
-            if ( cell.tagName.toLowerCase() !== 'th' ) {
-                return false;
-            }
-
-        }
-
-        for ( var i = 1, row; row = table.rows[ i ]; i++ ) {
-
-            //每行单元格数不匹配, 返回false
-            if ( row.cells.length != cellCount ) {
-                return false;
-            }
-
-            //第一列不是th也返回false
-            if ( row.cells[0].tagName.toLowerCase() !== 'th' ) {
-                return false;
-            }
-
-            for ( var j = 1, cell; cell = row.cells[ j ]; j++ ) {
-
-                var value = utils.trim( ( cell.innerText || cell.textContent || '' ) );
-
-                value = value.replace( new RegExp( UE.dom.domUtils.fillChar, 'g' ), '' ).replace( /^\s+|\s+$/g, '' );
-
-                //必须是数字
-                if ( !/^\d*\.?\d+$/.test( value ) ) {
-                    return false;
-                }
-
-            }
-
-        }
-
-        return true;
-
-    }
-
-});
-/**
- * 目录大纲支持插件
- * @file
- * @since 1.3.0
- */
-UE.plugin.register('section', function (){
-    /* 目录节点对象 */
-    function Section(option){
-        this.tag = '';
-        this.level = -1,
-            this.dom = null;
-        this.nextSection = null;
-        this.previousSection = null;
-        this.parentSection = null;
-        this.startAddress = [];
-        this.endAddress = [];
-        this.children = [];
-    }
-    function getSection(option) {
-        var section = new Section();
-        return utils.extend(section, option);
-    }
-    function getNodeFromAddress(startAddress, root) {
-        var current = root;
-        for(var i = 0;i < startAddress.length; i++) {
-            if(!current.childNodes) return null;
-            current = current.childNodes[startAddress[i]];
-        }
-        return current;
-    }
-
-    var me = this;
-
-    return {
-        bindMultiEvents:{
-            type: 'aftersetcontent afterscencerestore',
-            handler: function(){
-                me.fireEvent('updateSections');
-            }
-        },
-        bindEvents:{
-            /* 初始化、拖拽、粘贴、执行setcontent之后 */
-            'ready': function (){
-                me.fireEvent('updateSections');
-                domUtils.on(me.body, 'drop paste', function(){
-                    me.fireEvent('updateSections');
-                });
-            },
-            /* 执行paragraph命令之后 */
-            'afterexeccommand': function (type, cmd) {
-                if(cmd == 'paragraph') {
-                    me.fireEvent('updateSections');
-                }
-            },
-            /* 部分键盘操作,触发updateSections事件 */
-            'keyup': function (type, e) {
-                var me = this,
-                    range = me.selection.getRange();
-                if(range.collapsed != true) {
-                    me.fireEvent('updateSections');
-                } else {
-                    var keyCode = e.keyCode || e.which;
-                    if(keyCode == 13 || keyCode == 8 || keyCode == 46) {
-                        me.fireEvent('updateSections');
-                    }
-                }
-            }
-        },
-        commands:{
-            'getsections': {
-                execCommand: function (cmd, levels) {
-                    var levelFn = levels || ['h1', 'h2', 'h3', 'h4', 'h5', 'h6'];
-
-                    for (var i = 0; i < levelFn.length; i++) {
-                        if (typeof levelFn[i] == 'string') {
-                            levelFn[i] = function(fn){
-                                return function(node){
-                                    return node.tagName == fn.toUpperCase()
-                                };
-                            }(levelFn[i]);
-                        } else if (typeof levelFn[i] != 'function') {
-                            levelFn[i] = function (node) {
-                                return null;
-                            }
-                        }
-                    }
-                    function getSectionLevel(node) {
-                        for (var i = 0; i < levelFn.length; i++) {
-                            if (levelFn[i](node)) return i;
-                        }
-                        return -1;
-                    }
-
-                    var me = this,
-                        Directory = getSection({'level':-1, 'title':'root'}),
-                        previous = Directory;
-
-                    function traversal(node, Directory) {
-                        var level,
-                            tmpSection = null,
-                            parent,
-                            child,
-                            children = node.childNodes;
-                        for (var i = 0, len = children.length; i < len; i++) {
-                            child = children[i];
-                            level = getSectionLevel(child);
-                            if (level >= 0) {
-                                var address = me.selection.getRange().selectNode(child).createAddress(true).startAddress,
-                                    current = getSection({
-                                        'tag': child.tagName,
-                                        'title': child.innerText || child.textContent || '',
-                                        'level': level,
-                                        'dom': child,
-                                        'startAddress': utils.clone(address, []),
-                                        'endAddress': utils.clone(address, []),
-                                        'children': []
-                                    });
-                                previous.nextSection = current;
-                                current.previousSection = previous;
-                                parent = previous;
-                                while(level <= parent.level){
-                                    parent = parent.parentSection;
-                                }
-                                current.parentSection = parent;
-                                parent.children.push(current);
-                                tmpSection = previous = current;
-                            } else {
-                                child.nodeType === 1 && traversal(child, Directory);
-                                tmpSection && tmpSection.endAddress[tmpSection.endAddress.length - 1] ++;
-                            }
-                        }
-                    }
-                    traversal(me.body, Directory);
-                    return Directory;
-                },
-                notNeedUndo: true
-            },
-            'movesection': {
-                execCommand: function (cmd, sourceSection, targetSection, isAfter) {
-
-                    var me = this,
-                        targetAddress,
-                        target;
-
-                    if(!sourceSection || !targetSection || targetSection.level == -1) return;
-
-                    targetAddress = isAfter ? targetSection.endAddress:targetSection.startAddress;
-                    target = getNodeFromAddress(targetAddress, me.body);
-
-                    /* 判断目标地址是否被源章节包含 */
-                    if(!targetAddress || !target || isContainsAddress(sourceSection.startAddress, sourceSection.endAddress, targetAddress)) return;
-
-                    var startNode = getNodeFromAddress(sourceSection.startAddress, me.body),
-                        endNode = getNodeFromAddress(sourceSection.endAddress, me.body),
-                        current,
-                        nextNode;
-
-                    if(isAfter) {
-                        current = endNode;
-                        while ( current && !(domUtils.getPosition( startNode, current ) & domUtils.POSITION_FOLLOWING) ) {
-                            nextNode = current.previousSibling;
-                            domUtils.insertAfter(target, current);
-                            if(current == startNode) break;
-                            current = nextNode;
-                        }
-                    } else {
-                        current = startNode;
-                        while ( current && !(domUtils.getPosition( current, endNode ) & domUtils.POSITION_FOLLOWING) ) {
-                            nextNode = current.nextSibling;
-                            target.parentNode.insertBefore(current, target);
-                            if(current == endNode) break;
-                            current = nextNode;
-                        }
-                    }
-
-                    me.fireEvent('updateSections');
-
-                    /* 获取地址的包含关系 */
-                    function isContainsAddress(startAddress, endAddress, addressTarget){
-                        var isAfterStartAddress = false,
-                            isBeforeEndAddress = false;
-                        for(var i = 0; i< startAddress.length; i++){
-                            if(i >= addressTarget.length) break;
-                            if(addressTarget[i] > startAddress[i]) {
-                                isAfterStartAddress = true;
-                                break;
-                            } else if(addressTarget[i] < startAddress[i]) {
-                                break;
-                            }
-                        }
-                        for(var i = 0; i< endAddress.length; i++){
-                            if(i >= addressTarget.length) break;
-                            if(addressTarget[i] < startAddress[i]) {
-                                isBeforeEndAddress = true;
-                                break;
-                            } else if(addressTarget[i] > startAddress[i]) {
-                                break;
-                            }
-                        }
-                        return isAfterStartAddress && isBeforeEndAddress;
-                    }
-                }
-            },
-            'deletesection': {
-                execCommand: function (cmd, section, keepChildren) {
-                    var me = this;
-
-                    if(!section) return;
-
-                    function getNodeFromAddress(startAddress) {
-                        var current = me.body;
-                        for(var i = 0;i < startAddress.length; i++) {
-                            if(!current.childNodes) return null;
-                            current = current.childNodes[startAddress[i]];
-                        }
-                        return current;
-                    }
-
-                    var startNode = getNodeFromAddress(section.startAddress),
-                        endNode = getNodeFromAddress(section.endAddress),
-                        current = startNode,
-                        nextNode;
-
-                    if(!keepChildren) {
-                        while ( current && domUtils.inDoc(endNode, me.document) && !(domUtils.getPosition( current, endNode ) & domUtils.POSITION_FOLLOWING) ) {
-                            nextNode = current.nextSibling;
-                            domUtils.remove(current);
-                            current = nextNode;
-                        }
-                    } else {
-                        domUtils.remove(current);
-                    }
-
-                    me.fireEvent('updateSections');
-                }
-            },
-            'selectsection': {
-                execCommand: function (cmd, section) {
-                    if(!section && !section.dom) return false;
-                    var me = this,
-                        range = me.selection.getRange(),
-                        address = {
-                            'startAddress':utils.clone(section.startAddress, []),
-                            'endAddress':utils.clone(section.endAddress, [])
-                        };
-                    address.endAddress[address.endAddress.length - 1]++;
-                    range.moveToAddress(address).select().scrollToView();
-                    return true;
-                },
-                notNeedUndo: true
-            },
-            'scrolltosection': {
-                execCommand: function (cmd, section) {
-                    if(!section && !section.dom) return false;
-                    var me = this,
-                        range = me.selection.getRange(),
-                        address = {
-                            'startAddress':section.startAddress,
-                            'endAddress':section.endAddress
-                        };
-                    address.endAddress[address.endAddress.length - 1]++;
-                    range.moveToAddress(address).scrollToView();
-                    return true;
-                },
-                notNeedUndo: true
-            }
-        }
-    }
-});
-var baidu = baidu || {};
-baidu.editor = baidu.editor || {};
-baidu.editor.ui = {};
-(function (){
-    var browser = baidu.editor.browser,
-        domUtils = baidu.editor.dom.domUtils;
-
-    var magic = '$EDITORUI';
-    var root = window[magic] = {};
-    var uidMagic = 'ID' + magic;
-    var uidCount = 0;
-
-    var uiUtils = baidu.editor.ui.uiUtils = {
-        uid: function (obj){
-            return (obj ? obj[uidMagic] || (obj[uidMagic] = ++ uidCount) : ++ uidCount);
-        },
-        hook: function ( fn, callback ) {
-            var dg;
-            if (fn && fn._callbacks) {
-                dg = fn;
-            } else {
-                dg = function (){
-                    var q;
-                    if (fn) {
-                        q = fn.apply(this, arguments);
-                    }
-                    var callbacks = dg._callbacks;
-                    var k = callbacks.length;
-                    while (k --) {
-                        var r = callbacks[k].apply(this, arguments);
-                        if (q === undefined) {
-                            q = r;
-                        }
-                    }
-                    return q;
-                };
-                dg._callbacks = [];
-            }
-            dg._callbacks.push(callback);
-            return dg;
-        },
-        createElementByHtml: function (html){
-            var el = document.createElement('div');
-            el.innerHTML = html;
-            el = el.firstChild;
-            el.parentNode.removeChild(el);
-            return el;
-        },
-        getViewportElement: function (){
-            return (browser.ie && browser.quirks) ?
-                document.body : document.documentElement;
-        },
-        getClientRect: function (element){
-            var bcr;
-            //trace  IE6下在控制编辑器显隐时可能会报错,catch一下
-            try{
-                bcr = element.getBoundingClientRect();
-            }catch(e){
-                bcr={left:0,top:0,height:0,width:0}
-            }
-            var rect = {
-                left: Math.round(bcr.left),
-                top: Math.round(bcr.top),
-                height: Math.round(bcr.bottom - bcr.top),
-                width: Math.round(bcr.right - bcr.left)
-            };
-            var doc;
-            while ((doc = element.ownerDocument) !== document &&
-                (element = domUtils.getWindow(doc).frameElement)) {
-                bcr = element.getBoundingClientRect();
-                rect.left += bcr.left;
-                rect.top += bcr.top;
-            }
-            rect.bottom = rect.top + rect.height;
-            rect.right = rect.left + rect.width;
-            return rect;
-        },
-        getViewportRect: function (){
-            var viewportEl = uiUtils.getViewportElement();
-            var width = (window.innerWidth || viewportEl.clientWidth) | 0;
-            var height = (window.innerHeight ||viewportEl.clientHeight) | 0;
-            return {
-                left: 0,
-                top: 0,
-                height: height,
-                width: width,
-                bottom: height,
-                right: width
-            };
-        },
-        setViewportOffset: function (element, offset){
-            var rect;
-            var fixedLayer = uiUtils.getFixedLayer();
-            if (element.parentNode === fixedLayer) {
-                element.style.left = offset.left + 'px';
-                element.style.top = offset.top + 'px';
-            } else {
-                domUtils.setViewportOffset(element, offset);
-            }
-        },
-        getEventOffset: function (evt){
-            var el = evt.target || evt.srcElement;
-            var rect = uiUtils.getClientRect(el);
-            var offset = uiUtils.getViewportOffsetByEvent(evt);
-            return {
-                left: offset.left - rect.left,
-                top: offset.top - rect.top
-            };
-        },
-        getViewportOffsetByEvent: function (evt){
-            var el = evt.target || evt.srcElement;
-            var frameEl = domUtils.getWindow(el).frameElement;
-            var offset = {
-                left: evt.clientX,
-                top: evt.clientY
-            };
-            if (frameEl && el.ownerDocument !== document) {
-                var rect = uiUtils.getClientRect(frameEl);
-                offset.left += rect.left;
-                offset.top += rect.top;
-            }
-            return offset;
-        },
-        setGlobal: function (id, obj){
-            root[id] = obj;
-            return magic + '["' + id  + '"]';
-        },
-        unsetGlobal: function (id){
-            delete root[id];
-        },
-        copyAttributes: function (tgt, src){
-            var attributes = src.attributes;
-            var k = attributes.length;
-            while (k --) {
-                var attrNode = attributes[k];
-                if ( attrNode.nodeName != 'style' && attrNode.nodeName != 'class' && (!browser.ie || attrNode.specified) ) {
-                    tgt.setAttribute(attrNode.nodeName, attrNode.nodeValue);
-                }
-            }
-            if (src.className) {
-                domUtils.addClass(tgt,src.className);
-            }
-            if (src.style.cssText) {
-                tgt.style.cssText += ';' + src.style.cssText;
-            }
-        },
-        removeStyle: function (el, styleName){
-            if (el.style.removeProperty) {
-                el.style.removeProperty(styleName);
-            } else if (el.style.removeAttribute) {
-                el.style.removeAttribute(styleName);
-            } else throw '';
-        },
-        contains: function (elA, elB){
-            return elA && elB && (elA === elB ? false : (
-                elA.contains ? elA.contains(elB) :
-                    elA.compareDocumentPosition(elB) & 16
-                ));
-        },
-        startDrag: function (evt, callbacks,doc){
-            var doc = doc || document;
-            var startX = evt.clientX;
-            var startY = evt.clientY;
-            function handleMouseMove(evt){
-                var x = evt.clientX - startX;
-                var y = evt.clientY - startY;
-                callbacks.ondragmove(x, y,evt);
-                if (evt.stopPropagation) {
-                    evt.stopPropagation();
-                } else {
-                    evt.cancelBubble = true;
-                }
-            }
-            if (doc.addEventListener) {
-                function handleMouseUp(evt){
-                    doc.removeEventListener('mousemove', handleMouseMove, true);
-                    doc.removeEventListener('mouseup', handleMouseUp, true);
-                    window.removeEventListener('mouseup', handleMouseUp, true);
-                    callbacks.ondragstop();
-                }
-                doc.addEventListener('mousemove', handleMouseMove, true);
-                doc.addEventListener('mouseup', handleMouseUp, true);
-                window.addEventListener('mouseup', handleMouseUp, true);
-
-                evt.preventDefault();
-            } else {
-                var elm = evt.srcElement;
-                elm.setCapture();
-                function releaseCaptrue(){
-                    elm.releaseCapture();
-                    elm.detachEvent('onmousemove', handleMouseMove);
-                    elm.detachEvent('onmouseup', releaseCaptrue);
-                    elm.detachEvent('onlosecaptrue', releaseCaptrue);
-                    callbacks.ondragstop();
-                }
-                elm.attachEvent('onmousemove', handleMouseMove);
-                elm.attachEvent('onmouseup', releaseCaptrue);
-                elm.attachEvent('onlosecaptrue', releaseCaptrue);
-                evt.returnValue = false;
-            }
-            callbacks.ondragstart();
-        },
-        getFixedLayer: function (){
-            var layer = document.getElementById('edui_fixedlayer');
-            if (layer == null) {
-                layer = document.createElement('div');
-                layer.id = 'edui_fixedlayer';
-                document.body.appendChild(layer);
-                if (browser.ie && browser.version <= 8) {
-                    layer.style.position = 'absolute';
-                    bindFixedLayer();
-                    setTimeout(updateFixedOffset);
-                } else {
-                    layer.style.position = 'fixed';
-                }
-                layer.style.left = '0';
-                layer.style.top = '0';
-                layer.style.width = '0';
-                layer.style.height = '0';
-            }
-            return layer;
-        },
-        makeUnselectable: function (element){
-            if (browser.opera || (browser.ie && browser.version < 9)) {
-                element.unselectable = 'on';
-                if (element.hasChildNodes()) {
-                    for (var i=0; i<element.childNodes.length; i++) {
-                        if (element.childNodes[i].nodeType == 1) {
-                            uiUtils.makeUnselectable(element.childNodes[i]);
-                        }
-                    }
-                }
-            } else {
-                if (element.style.MozUserSelect !== undefined) {
-                    element.style.MozUserSelect = 'none';
-                } else if (element.style.WebkitUserSelect !== undefined) {
-                    element.style.WebkitUserSelect = 'none';
-                } else if (element.style.KhtmlUserSelect !== undefined) {
-                    element.style.KhtmlUserSelect = 'none';
-                }
-            }
-        }
-    };
-    function updateFixedOffset(){
-        var layer = document.getElementById('edui_fixedlayer');
-        uiUtils.setViewportOffset(layer, {
-            left: 0,
-            top: 0
-        });
-//        layer.style.display = 'none';
-//        layer.style.display = 'block';
-
-        //#trace: 1354
-//        setTimeout(updateFixedOffset);
-    }
-    function bindFixedLayer(adjOffset){
-        domUtils.on(window, 'scroll', updateFixedOffset);
-        domUtils.on(window, 'resize', baidu.editor.utils.defer(updateFixedOffset, 0, true));
-    }
-})();
-
-(function () {
-    var utils = baidu.editor.utils,
-        uiUtils = baidu.editor.ui.uiUtils,
-        EventBase = baidu.editor.EventBase,
-        UIBase = baidu.editor.ui.UIBase = function () {
-        };
-
-    UIBase.prototype = {
-        className:'',
-        uiName:'',
-        initOptions:function (options) {
-            var me = this;
-            for (var k in options) {
-                me[k] = options[k];
-            }
-            this.id = this.id || 'edui' + uiUtils.uid();
-        },
-        initUIBase:function () {
-            this._globalKey = utils.unhtml(uiUtils.setGlobal(this.id, this));
-        },
-        render:function (holder) {
-            var html = this.renderHtml();
-            var el = uiUtils.createElementByHtml(html);
-
-            //by xuheng 给每个node添加class
-            var list = domUtils.getElementsByTagName(el, "*");
-            var theme = "edui-" + (this.theme || this.editor.options.theme);
-            var layer = document.getElementById('edui_fixedlayer');
-            for (var i = 0, node; node = list[i++];) {
-                domUtils.addClass(node, theme);
-            }
-            domUtils.addClass(el, theme);
-            if(layer){
-                layer.className="";
-                domUtils.addClass(layer,theme);
-            }
-
-            var seatEl = this.getDom();
-            if (seatEl != null) {
-                seatEl.parentNode.replaceChild(el, seatEl);
-                uiUtils.copyAttributes(el, seatEl);
-            } else {
-                if (typeof holder == 'string') {
-                    holder = document.getElementById(holder);
-                }
-                holder = holder || uiUtils.getFixedLayer();
-                domUtils.addClass(holder, theme);
-                holder.appendChild(el);
-            }
-            this.postRender();
-        },
-        getDom:function (name) {
-            if (!name) {
-                return document.getElementById(this.id);
-            } else {
-                return document.getElementById(this.id + '_' + name);
-            }
-        },
-        postRender:function () {
-            this.fireEvent('postrender');
-        },
-        getHtmlTpl:function () {
-            return '';
-        },
-        formatHtml:function (tpl) {
-            var prefix = 'edui-' + this.uiName;
-            return (tpl
-                .replace(/##/g, this.id)
-                .replace(/%%-/g, this.uiName ? prefix + '-' : '')
-                .replace(/%%/g, (this.uiName ? prefix : '') + ' ' + this.className)
-                .replace(/\$\$/g, this._globalKey));
-        },
-        renderHtml:function () {
-            return this.formatHtml(this.getHtmlTpl());
-        },
-        dispose:function () {
-            var box = this.getDom();
-            if (box) baidu.editor.dom.domUtils.remove(box);
-            uiUtils.unsetGlobal(this.id);
-        }
-    };
-    utils.inherits(UIBase, EventBase);
-})();
-
-(function (){
-    var utils = baidu.editor.utils,
-        UIBase = baidu.editor.ui.UIBase,
-        Separator = baidu.editor.ui.Separator = function (options){
-            this.initOptions(options);
-            this.initSeparator();
-        };
-    Separator.prototype = {
-        uiName: 'separator',
-        initSeparator: function (){
-            this.initUIBase();
-        },
-        getHtmlTpl: function (){
-            return '<div id="##" class="edui-box %%"></div>';
-        }
-    };
-    utils.inherits(Separator, UIBase);
-
-})();
-
-///import core
-///import uicore
-(function (){
-    var utils = baidu.editor.utils,
-        domUtils = baidu.editor.dom.domUtils,
-        UIBase = baidu.editor.ui.UIBase,
-        uiUtils = baidu.editor.ui.uiUtils;
-    
-    var Mask = baidu.editor.ui.Mask = function (options){
-        this.initOptions(options);
-        this.initUIBase();
-    };
-    Mask.prototype = {
-        getHtmlTpl: function (){
-            return '<div id="##" class="edui-mask %%" onmousedown="return $$._onMouseDown(event, this);"></div>';
-        },
-        postRender: function (){
-            var me = this;
-            domUtils.on(window, 'resize', function (){
-                setTimeout(function (){
-                    if (!me.isHidden()) {
-                        me._fill();
-                    }
-                });
-            });
-        },
-        show: function (zIndex){
-            this._fill();
-            this.getDom().style.display = '';
-            this.getDom().style.zIndex = zIndex;
-        },
-        hide: function (){
-            this.getDom().style.display = 'none';
-            this.getDom().style.zIndex = '';
-        },
-        isHidden: function (){
-            return this.getDom().style.display == 'none';
-        },
-        _onMouseDown: function (){
-            return false;
-        },
-        _fill: function (){
-            var el = this.getDom();
-            var vpRect = uiUtils.getViewportRect();
-            el.style.width = vpRect.width + 'px';
-            el.style.height = vpRect.height + 'px';
-        }
-    };
-    utils.inherits(Mask, UIBase);
-})();
-
-///import core
-///import uicore
-(function () {
-    var utils = baidu.editor.utils,
-        uiUtils = baidu.editor.ui.uiUtils,
-        domUtils = baidu.editor.dom.domUtils,
-        UIBase = baidu.editor.ui.UIBase,
-        Popup = baidu.editor.ui.Popup = function (options){
-            this.initOptions(options);
-            this.initPopup();
-        };
-
-    var allPopups = [];
-    function closeAllPopup( evt,el ){
-        for ( var i = 0; i < allPopups.length; i++ ) {
-            var pop = allPopups[i];
-            if (!pop.isHidden()) {
-                if (pop.queryAutoHide(el) !== false) {
-                    if(evt&&/scroll/ig.test(evt.type)&&pop.className=="edui-wordpastepop")   return;
-                    pop.hide();
-                }
-            }
-        }
-
-        if(allPopups.length)
-            pop.editor.fireEvent("afterhidepop");
-    }
-
-    Popup.postHide = closeAllPopup;
-
-    var ANCHOR_CLASSES = ['edui-anchor-topleft','edui-anchor-topright',
-        'edui-anchor-bottomleft','edui-anchor-bottomright'];
-    Popup.prototype = {
-        SHADOW_RADIUS: 5,
-        content: null,
-        _hidden: false,
-        autoRender: true,
-        canSideLeft: true,
-        canSideUp: true,
-        initPopup: function (){
-            this.initUIBase();
-            allPopups.push( this );
-        },
-        getHtmlTpl: function (){
-            return '<div id="##" class="edui-popup %%" onmousedown="return false;">' +
-                ' <div id="##_body" class="edui-popup-body">' +
-                ' <iframe style="position:absolute;z-index:-1;left:0;top:0;background-color: transparent;" frameborder="0" width="100%" height="100%" src="about:blank"></iframe>' +
-                ' <div class="edui-shadow"></div>' +
-                ' <div id="##_content" class="edui-popup-content">' +
-                this.getContentHtmlTpl() +
-                '  </div>' +
-                ' </div>' +
-                '</div>';
-        },
-        getContentHtmlTpl: function (){
-            if(this.content){
-                if (typeof this.content == 'string') {
-                    return this.content;
-                }
-                return this.content.renderHtml();
-            }else{
-                return ''
-            }
-
-        },
-        _UIBase_postRender: UIBase.prototype.postRender,
-        postRender: function (){
-
-
-            if (this.content instanceof UIBase) {
-                this.content.postRender();
-            }
-
-            //捕获鼠标滚轮
-            if( this.captureWheel && !this.captured ) {
-
-                this.captured = true;
-
-                var winHeight = ( document.documentElement.clientHeight || document.body.clientHeight )  - 80,
-                    _height = this.getDom().offsetHeight,
-                    _top = uiUtils.getClientRect( this.combox.getDom() ).top,
-                    content = this.getDom('content'),
-                    ifr = this.getDom('body').getElementsByTagName('iframe'),
-                    me = this;
-
-                ifr.length && ( ifr = ifr[0] );
-
-                while( _top + _height > winHeight ) {
-                    _height -= 30;
-                    content.style.height = _height + 'px';
-                    //同步更改iframe高度
-                    ifr && ( ifr.style.height = _height + 'px' );
-                }
-
-                //阻止在combox上的鼠标滚轮事件, 防止用户的正常操作被误解
-                if( window.XMLHttpRequest ) {
-
-                    domUtils.on( content, ( 'onmousewheel' in document.body ) ? 'mousewheel' :'DOMMouseScroll' , function(e){
-
-                        if(e.preventDefault) {
-                            e.preventDefault();
-                        } else {
-                            e.returnValue = false;
-                        }
-
-                        if( e.wheelDelta ) {
-
-                            content.scrollTop -= ( e.wheelDelta / 120 )*60;
-
-                        } else {
-
-                            content.scrollTop -= ( e.detail / -3 )*60;
-
-                        }
-
-                    });
-
-                } else {
-
-                    //ie6
-                    domUtils.on( this.getDom(), 'mousewheel' , function(e){
-
-                        e.returnValue = false;
-
-                        me.getDom('content').scrollTop -= ( e.wheelDelta / 120 )*60;
-
-                    });
-
-                }
-
-            }
-            this.fireEvent('postRenderAfter');
-            this.hide(true);
-            this._UIBase_postRender();
-        },
-        _doAutoRender: function (){
-            if (!this.getDom() && this.autoRender) {
-                this.render();
-            }
-        },
-        mesureSize: function (){
-            var box = this.getDom('content');
-            return uiUtils.getClientRect(box);
-        },
-        fitSize: function (){
-            if( this.captureWheel && this.sized ) {
-                return this.__size;
-            }
-            this.sized = true;
-            var popBodyEl = this.getDom('body');
-            popBodyEl.style.width = '';
-            popBodyEl.style.height = '';
-            var size = this.mesureSize();
-            if( this.captureWheel ) {
-                popBodyEl.style.width =  -(-20 -size.width) + 'px';
-                var height = parseInt( this.getDom('content').style.height, 10 );
-                !window.isNaN( height ) && ( size.height = height );
-            } else {
-                popBodyEl.style.width =  size.width + 'px';
-            }
-            popBodyEl.style.height = size.height + 'px';
-            this.__size = size;
-            this.captureWheel && (this.getDom('content').style.overflow = 'auto');
-            return size;
-        },
-        showAnchor: function ( element, hoz ){
-            this.showAnchorRect( uiUtils.getClientRect( element ), hoz );
-        },
-        showAnchorRect: function ( rect, hoz, adj ){
-            this._doAutoRender();
-            var vpRect = uiUtils.getViewportRect();
-            this._show();
-            var popSize = this.fitSize();
-
-            var sideLeft, sideUp, left, top;
-            if (hoz) {
-                sideLeft = this.canSideLeft && (rect.right + popSize.width > vpRect.right && rect.left > popSize.width);
-                sideUp = this.canSideUp && (rect.top + popSize.height > vpRect.bottom && rect.bottom > popSize.height);
-                left = (sideLeft ? rect.left - popSize.width : rect.right);
-                top = (sideUp ? rect.bottom - popSize.height : rect.top);
-            } else {
-                sideLeft = this.canSideLeft && (rect.right + popSize.width > vpRect.right && rect.left > popSize.width);
-                sideUp = this.canSideUp && (rect.top + popSize.height > vpRect.bottom && rect.bottom > popSize.height);
-                left = (sideLeft ? rect.right - popSize.width : rect.left);
-                top = (sideUp ? rect.top - popSize.height : rect.bottom);
-            }
-
-            var popEl = this.getDom();
-            uiUtils.setViewportOffset(popEl, {
-                left: left,
-                top: top
-            });
-            domUtils.removeClasses(popEl, ANCHOR_CLASSES);
-            popEl.className += ' ' + ANCHOR_CLASSES[(sideUp ? 1 : 0) * 2 + (sideLeft ? 1 : 0)];
-            if(this.editor){
-                popEl.style.zIndex = this.editor.container.style.zIndex * 1 + 10;
-                baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex = popEl.style.zIndex - 1;
-            }
-
-        },
-        showAt: function (offset) {
-            var left = offset.left;
-            var top = offset.top;
-            var rect = {
-                left: left,
-                top: top,
-                right: left,
-                bottom: top,
-                height: 0,
-                width: 0
-            };
-            this.showAnchorRect(rect, false, true);
-        },
-        _show: function (){
-            if (this._hidden) {
-                var box = this.getDom();
-                box.style.display = '';
-                this._hidden = false;
-//                if (box.setActive) {
-//                    box.setActive();
-//                }
-                this.fireEvent('show');
-            }
-        },
-        isHidden: function (){
-            return this._hidden;
-        },
-        show: function (){
-            this._doAutoRender();
-            this._show();
-        },
-        hide: function (notNofity){
-            if (!this._hidden && this.getDom()) {
-                this.getDom().style.display = 'none';
-                this._hidden = true;
-                if (!notNofity) {
-                    this.fireEvent('hide');
-                }
-            }
-        },
-        queryAutoHide: function (el){
-            return !el || !uiUtils.contains(this.getDom(), el);
-        }
-    };
-    utils.inherits(Popup, UIBase);
-    
-    domUtils.on( document, 'mousedown', function ( evt ) {
-        var el = evt.target || evt.srcElement;
-        closeAllPopup( evt,el );
-    } );
-    domUtils.on( window, 'scroll', function (evt,el) {
-        closeAllPopup( evt,el );
-    } );
-
-})();
-
-///import core
-///import uicore
-(function (){
-    var utils = baidu.editor.utils,
-        UIBase = baidu.editor.ui.UIBase,
-        ColorPicker = baidu.editor.ui.ColorPicker = function (options){
-            this.initOptions(options);
-            this.noColorText = this.noColorText || this.editor.getLang("clearColor");
-            this.initUIBase();
-        };
-
-    ColorPicker.prototype = {
-        getHtmlTpl: function (){
-            return genColorPicker(this.noColorText,this.editor);
-        },
-        _onTableClick: function (evt){
-            var tgt = evt.target || evt.srcElement;
-            var color = tgt.getAttribute('data-color');
-            if (color) {
-                this.fireEvent('pickcolor', color);
-            }
-        },
-        _onTableOver: function (evt){
-            var tgt = evt.target || evt.srcElement;
-            var color = tgt.getAttribute('data-color');
-            if (color) {
-                this.getDom('preview').style.backgroundColor = color;
-            }
-        },
-        _onTableOut: function (){
-            this.getDom('preview').style.backgroundColor = '';
-        },
-        _onPickNoColor: function (){
-            this.fireEvent('picknocolor');
-        }
-    };
-    utils.inherits(ColorPicker, UIBase);
-
-    var COLORS = (
-        'ffffff,000000,eeece1,1f497d,4f81bd,c0504d,9bbb59,8064a2,4bacc6,f79646,' +
-            'f2f2f2,7f7f7f,ddd9c3,c6d9f0,dbe5f1,f2dcdb,ebf1dd,e5e0ec,dbeef3,fdeada,' +
-            'd8d8d8,595959,c4bd97,8db3e2,b8cce4,e5b9b7,d7e3bc,ccc1d9,b7dde8,fbd5b5,' +
-            'bfbfbf,3f3f3f,938953,548dd4,95b3d7,d99694,c3d69b,b2a2c7,92cddc,fac08f,' +
-            'a5a5a5,262626,494429,17365d,366092,953734,76923c,5f497a,31859b,e36c09,' +
-            '7f7f7f,0c0c0c,1d1b10,0f243e,244061,632423,4f6128,3f3151,205867,974806,' +
-            'c00000,ff0000,ffc000,ffff00,92d050,00b050,00b0f0,0070c0,002060,7030a0,').split(',');
-
-    function genColorPicker(noColorText,editor){
-        var html = '<div id="##" class="edui-colorpicker %%">' +
-            '<div class="edui-colorpicker-topbar edui-clearfix">' +
-            '<div unselectable="on" id="##_preview" class="edui-colorpicker-preview"></div>' +
-            '<div unselectable="on" class="edui-colorpicker-nocolor" onclick="$$._onPickNoColor(event, this);">'+ noColorText +'</div>' +
-            '</div>' +
-            '<table  class="edui-box" style="border-collapse: collapse;" onmouseover="$$._onTableOver(event, this);" onmouseout="$$._onTableOut(event, this);" onclick="return $$._onTableClick(event, this);" cellspacing="0" cellpadding="0">' +
-            '<tr style="border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;padding-top: 2px"><td colspan="10">'+editor.getLang("themeColor")+'</td> </tr>'+
-            '<tr class="edui-colorpicker-tablefirstrow" >';
-        for (var i=0; i<COLORS.length; i++) {
-            if (i && i%10 === 0) {
-                html += '</tr>'+(i==60?'<tr style="border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;"><td colspan="10">'+editor.getLang("standardColor")+'</td></tr>':'')+'<tr'+(i==60?' class="edui-colorpicker-tablefirstrow"':'')+'>';
-            }
-            html += i<70 ? '<td style="padding: 0 2px;"><a hidefocus title="'+COLORS[i]+'" onclick="return false;" href="javascript:" unselectable="on" class="edui-box edui-colorpicker-colorcell"' +
-                ' data-color="#'+ COLORS[i] +'"'+
-                ' style="background-color:#'+ COLORS[i] +';border:solid #ccc;'+
-                (i<10 || i>=60?'border-width:1px;':
-                    i>=10&&i<20?'border-width:1px 1px 0 1px;':
-
-                        'border-width:0 1px 0 1px;')+
-                '"' +
-                '></a></td>':'';
-        }
-        html += '</tr></table></div>';
-        return html;
-    }
-})();
-
-///import core
-///import uicore
-(function (){
-    var utils = baidu.editor.utils,
-        uiUtils = baidu.editor.ui.uiUtils,
-        UIBase = baidu.editor.ui.UIBase;
-    
-    var TablePicker = baidu.editor.ui.TablePicker = function (options){
-        this.initOptions(options);
-        this.initTablePicker();
-    };
-    TablePicker.prototype = {
-        defaultNumRows: 10,
-        defaultNumCols: 10,
-        maxNumRows: 20,
-        maxNumCols: 20,
-        numRows: 10,
-        numCols: 10,
-        lengthOfCellSide: 22,
-        initTablePicker: function (){
-            this.initUIBase();
-        },
-        getHtmlTpl: function (){
-            var me = this;
-            return '<div id="##" class="edui-tablepicker %%">' +
-                 '<div class="edui-tablepicker-body">' +
-                  '<div class="edui-infoarea">' +
-                   '<span id="##_label" class="edui-label"></span>' +
-                  '</div>' +
-                  '<div class="edui-pickarea"' +
-                   ' onmousemove="$$._onMouseMove(event, this);"' +
-                   ' onmouseover="$$._onMouseOver(event, this);"' +
-                   ' onmouseout="$$._onMouseOut(event, this);"' +
-                   ' onclick="$$._onClick(event, this);"' +
-                  '>' +
-                    '<div id="##_overlay" class="edui-overlay"></div>' +
-                  '</div>' +
-                 '</div>' +
-                '</div>';
-        },
-        _UIBase_render: UIBase.prototype.render,
-        render: function (holder){
-            this._UIBase_render(holder);
-            this.getDom('label').innerHTML = '0'+this.editor.getLang("t_row")+' x 0'+this.editor.getLang("t_col");
-        },
-        _track: function (numCols, numRows){
-            var style = this.getDom('overlay').style;
-            var sideLen = this.lengthOfCellSide;
-            style.width = numCols * sideLen + 'px';
-            style.height = numRows * sideLen + 'px';
-            var label = this.getDom('label');
-            label.innerHTML = numCols +this.editor.getLang("t_col")+' x ' + numRows + this.editor.getLang("t_row");
-            this.numCols = numCols;
-            this.numRows = numRows;
-        },
-        _onMouseOver: function (evt, el){
-            var rel = evt.relatedTarget || evt.fromElement;
-            if (!uiUtils.contains(el, rel) && el !== rel) {
-                this.getDom('label').innerHTML = '0'+this.editor.getLang("t_col")+' x 0'+this.editor.getLang("t_row");
-                this.getDom('overlay').style.visibility = '';
-            }
-        },
-        _onMouseOut: function (evt, el){
-            var rel = evt.relatedTarget || evt.toElement;
-            if (!uiUtils.contains(el, rel) && el !== rel) {
-                this.getDom('label').innerHTML = '0'+this.editor.getLang("t_col")+' x 0'+this.editor.getLang("t_row");
-                this.getDom('overlay').style.visibility = 'hidden';
-            }
-        },
-        _onMouseMove: function (evt, el){
-            var style = this.getDom('overlay').style;
-            var offset = uiUtils.getEventOffset(evt);
-            var sideLen = this.lengthOfCellSide;
-            var numCols = Math.ceil(offset.left / sideLen);
-            var numRows = Math.ceil(offset.top / sideLen);
-            this._track(numCols, numRows);
-        },
-        _onClick: function (){
-            this.fireEvent('picktable', this.numCols, this.numRows);
-        }
-    };
-    utils.inherits(TablePicker, UIBase);
-})();
-
-(function (){
-    var browser = baidu.editor.browser,
-        domUtils = baidu.editor.dom.domUtils,
-        uiUtils = baidu.editor.ui.uiUtils;
-    
-    var TPL_STATEFUL = 'onmousedown="$$.Stateful_onMouseDown(event, this);"' +
-        ' onmouseup="$$.Stateful_onMouseUp(event, this);"' +
-        ( browser.ie ? (
-        ' onmouseenter="$$.Stateful_onMouseEnter(event, this);"' +
-        ' onmouseleave="$$.Stateful_onMouseLeave(event, this);"' )
-        : (
-        ' onmouseover="$$.Stateful_onMouseOver(event, this);"' +
-        ' onmouseout="$$.Stateful_onMouseOut(event, this);"' ));
-    
-    baidu.editor.ui.Stateful = {
-        alwalysHoverable: false,
-        target:null,//目标元素和this指向dom不一样
-        Stateful_init: function (){
-            this._Stateful_dGetHtmlTpl = this.getHtmlTpl;
-            this.getHtmlTpl = this.Stateful_getHtmlTpl;
-        },
-        Stateful_getHtmlTpl: function (){
-            var tpl = this._Stateful_dGetHtmlTpl();
-            // 使用function避免$转义
-            return tpl.replace(/stateful/g, function (){ return TPL_STATEFUL; });
-        },
-        Stateful_onMouseEnter: function (evt, el){
-            this.target=el;
-            if (!this.isDisabled() || this.alwalysHoverable) {
-                this.addState('hover');
-                this.fireEvent('over');
-            }
-        },
-        Stateful_onMouseLeave: function (evt, el){
-            if (!this.isDisabled() || this.alwalysHoverable) {
-                this.removeState('hover');
-                this.removeState('active');
-                this.fireEvent('out');
-            }
-        },
-        Stateful_onMouseOver: function (evt, el){
-            var rel = evt.relatedTarget;
-            if (!uiUtils.contains(el, rel) && el !== rel) {
-                this.Stateful_onMouseEnter(evt, el);
-            }
-        },
-        Stateful_onMouseOut: function (evt, el){
-            var rel = evt.relatedTarget;
-            if (!uiUtils.contains(el, rel) && el !== rel) {
-                this.Stateful_onMouseLeave(evt, el);
-            }
-        },
-        Stateful_onMouseDown: function (evt, el){
-            if (!this.isDisabled()) {
-                this.addState('active');
-            }
-        },
-        Stateful_onMouseUp: function (evt, el){
-            if (!this.isDisabled()) {
-                this.removeState('active');
-            }
-        },
-        Stateful_postRender: function (){
-            if (this.disabled && !this.hasState('disabled')) {
-                this.addState('disabled');
-            }
-        },
-        hasState: function (state){
-            return domUtils.hasClass(this.getStateDom(), 'edui-state-' + state);
-        },
-        addState: function (state){
-            if (!this.hasState(state)) {
-                this.getStateDom().className += ' edui-state-' + state;
-            }
-        },
-        removeState: function (state){
-            if (this.hasState(state)) {
-                domUtils.removeClasses(this.getStateDom(), ['edui-state-' + state]);
-            }
-        },
-        getStateDom: function (){
-            return this.getDom('state');
-        },
-        isChecked: function (){
-            return this.hasState('checked');
-        },
-        setChecked: function (checked){
-            if (!this.isDisabled() && checked) {
-                this.addState('checked');
-            } else {
-                this.removeState('checked');
-            }
-        },
-        isDisabled: function (){
-            return this.hasState('disabled');
-        },
-        setDisabled: function (disabled){
-            if (disabled) {
-                this.removeState('hover');
-                this.removeState('checked');
-                this.removeState('active');
-                this.addState('disabled');
-            } else {
-                this.removeState('disabled');
-            }
-        }
-    };
-})();
-
-///import core
-///import uicore
-///import ui/stateful.js
-(function (){
-    var utils = baidu.editor.utils,
-        UIBase = baidu.editor.ui.UIBase,
-        Stateful = baidu.editor.ui.Stateful,
-        Button = baidu.editor.ui.Button = function (options){
-            this.initOptions(options);
-            this.initButton();
-        };
-    Button.prototype = {
-        uiName: 'button',
-        label: '',
-        title: '',
-        showIcon: true,
-        showText: true,
-        initButton: function (){
-            this.initUIBase();
-            this.Stateful_init();
-        },
-        getHtmlTpl: function (){
-            return '<div id="##" class="edui-box %%">' +
-                '<div id="##_state" stateful>' +
-                 '<div class="%%-wrap"><div id="##_body" unselectable="on" ' + (this.title ? 'title="' + this.title + '"' : '') +
-                 ' class="%%-body" onmousedown="return false;" onclick="return $$._onClick();">' +
-                  (this.showIcon ? '<div class="edui-box edui-icon"></div>' : '') +
-                  (this.showText ? '<div class="edui-box edui-label">' + this.label + '</div>' : '') +
-                 '</div>' +
-                '</div>' +
-                '</div></div>';
-        },
-        postRender: function (){
-            this.Stateful_postRender();
-            this.setDisabled(this.disabled)
-        },
-        _onClick: function (){
-            if (!this.isDisabled()) {
-                this.fireEvent('click');
-            }
-        }
-    };
-    utils.inherits(Button, UIBase);
-    utils.extend(Button.prototype, Stateful);
-
-})();
-
-///import core
-///import uicore
-///import ui/stateful.js
-(function (){
-    var utils = baidu.editor.utils,
-        uiUtils = baidu.editor.ui.uiUtils,
-        domUtils = baidu.editor.dom.domUtils,
-        UIBase = baidu.editor.ui.UIBase,
-        Stateful = baidu.editor.ui.Stateful,
-        SplitButton = baidu.editor.ui.SplitButton = function (options){
-            this.initOptions(options);
-            this.initSplitButton();
-        };
-    SplitButton.prototype = {
-        popup: null,
-        uiName: 'splitbutton',
-        title: '',
-        initSplitButton: function (){
-            this.initUIBase();
-            this.Stateful_init();
-            var me = this;
-            if (this.popup != null) {
-                var popup = this.popup;
-                this.popup = null;
-                this.setPopup(popup);
-            }
-        },
-        _UIBase_postRender: UIBase.prototype.postRender,
-        postRender: function (){
-            this.Stateful_postRender();
-            this._UIBase_postRender();
-        },
-        setPopup: function (popup){
-            if (this.popup === popup) return;
-            if (this.popup != null) {
-                this.popup.dispose();
-            }
-            popup.addListener('show', utils.bind(this._onPopupShow, this));
-            popup.addListener('hide', utils.bind(this._onPopupHide, this));
-            popup.addListener('postrender', utils.bind(function (){
-                popup.getDom('body').appendChild(
-                    uiUtils.createElementByHtml('<div id="' +
-                        this.popup.id + '_bordereraser" class="edui-bordereraser edui-background" style="width:' +
-                        (uiUtils.getClientRect(this.getDom()).width + 20) + 'px"></div>')
-                    );
-                popup.getDom().className += ' ' + this.className;
-            }, this));
-            this.popup = popup;
-        },
-        _onPopupShow: function (){
-            this.addState('opened');
-        },
-        _onPopupHide: function (){
-            this.removeState('opened');
-        },
-        getHtmlTpl: function (){
-            return '<div id="##" class="edui-box %%">' +
-                '<div '+ (this.title ? 'title="' + this.title + '"' : '') +' id="##_state" stateful><div class="%%-body">' +
-                '<div id="##_button_body" class="edui-box edui-button-body" onclick="$$._onButtonClick(event, this);">' +
-                '<div class="edui-box edui-icon"></div>' +
-                '</div>' +
-                '<div class="edui-box edui-splitborder"></div>' +
-                '<div class="edui-box edui-arrow" onclick="$$._onArrowClick();"></div>' +
-                '</div></div></div>';
-        },
-        showPopup: function (){
-            // 当popup往上弹出的时候,做特殊处理
-            var rect = uiUtils.getClientRect(this.getDom());
-            rect.top -= this.popup.SHADOW_RADIUS;
-            rect.height += this.popup.SHADOW_RADIUS;
-            this.popup.showAnchorRect(rect);
-        },
-        _onArrowClick: function (event, el){
-            if (!this.isDisabled()) {
-                this.showPopup();
-            }
-        },
-        _onButtonClick: function (){
-            if (!this.isDisabled()) {
-                this.fireEvent('buttonclick');
-            }
-        }
-    };
-    utils.inherits(SplitButton, UIBase);
-    utils.extend(SplitButton.prototype, Stateful, true);
-
-})();
-
-///import core
-///import uicore
-///import ui/colorpicker.js
-///import ui/popup.js
-///import ui/splitbutton.js
-(function (){
-    var utils = baidu.editor.utils,
-        uiUtils = baidu.editor.ui.uiUtils,
-        ColorPicker = baidu.editor.ui.ColorPicker,
-        Popup = baidu.editor.ui.Popup,
-        SplitButton = baidu.editor.ui.SplitButton,
-        ColorButton = baidu.editor.ui.ColorButton = function (options){
-            this.initOptions(options);
-            this.initColorButton();
-        };
-    ColorButton.prototype = {
-        initColorButton: function (){
-            var me = this;
-            this.popup = new Popup({
-                content: new ColorPicker({
-                    noColorText: me.editor.getLang("clearColor"),
-                    editor:me.editor,
-                    onpickcolor: function (t, color){
-                        me._onPickColor(color);
-                    },
-                    onpicknocolor: function (t, color){
-                        me._onPickNoColor(color);
-                    }
-                }),
-                editor:me.editor
-            });
-            this.initSplitButton();
-        },
-        _SplitButton_postRender: SplitButton.prototype.postRender,
-        postRender: function (){
-            this._SplitButton_postRender();
-            this.getDom('button_body').appendChild(
-                uiUtils.createElementByHtml('<div id="' + this.id + '_colorlump" class="edui-colorlump"></div>')
-            );
-            this.getDom().className += ' edui-colorbutton';
-        },
-        setColor: function (color){
-            this.getDom('colorlump').style.backgroundColor = color;
-            this.color = color;
-        },
-        _onPickColor: function (color){
-            if (this.fireEvent('pickcolor', color) !== false) {
-                this.setColor(color);
-                this.popup.hide();
-            }
-        },
-        _onPickNoColor: function (color){
-            if (this.fireEvent('picknocolor') !== false) {
-                this.popup.hide();
-            }
-        }
-    };
-    utils.inherits(ColorButton, SplitButton);
-
-})();
-
-///import core
-///import uicore
-///import ui/popup.js
-///import ui/tablepicker.js
-///import ui/splitbutton.js
-(function (){
-    var utils = baidu.editor.utils,
-        Popup = baidu.editor.ui.Popup,
-        TablePicker = baidu.editor.ui.TablePicker,
-        SplitButton = baidu.editor.ui.SplitButton,
-        TableButton = baidu.editor.ui.TableButton = function (options){
-            this.initOptions(options);
-            this.initTableButton();
-        };
-    TableButton.prototype = {
-        initTableButton: function (){
-            var me = this;
-            this.popup = new Popup({
-                content: new TablePicker({
-                    editor:me.editor,
-                    onpicktable: function (t, numCols, numRows){
-                        me._onPickTable(numCols, numRows);
-                    }
-                }),
-                'editor':me.editor
-            });
-            this.initSplitButton();
-        },
-        _onPickTable: function (numCols, numRows){
-            if (this.fireEvent('picktable', numCols, numRows) !== false) {
-                this.popup.hide();
-            }
-        }
-    };
-    utils.inherits(TableButton, SplitButton);
-
-})();
-
-///import core
-///import uicore
-(function () {
-    var utils = baidu.editor.utils,
-        UIBase = baidu.editor.ui.UIBase;
-
-    var AutoTypeSetPicker = baidu.editor.ui.AutoTypeSetPicker = function (options) {
-        this.initOptions(options);
-        this.initAutoTypeSetPicker();
-    };
-    AutoTypeSetPicker.prototype = {
-        initAutoTypeSetPicker:function () {
-            this.initUIBase();
-        },
-        getHtmlTpl:function () {
-            var me = this.editor,
-                opt = me.options.autotypeset,
-                lang = me.getLang("autoTypeSet");
-
-            var textAlignInputName = 'textAlignValue' + me.uid,
-                imageBlockInputName = 'imageBlockLineValue' + me.uid;
-
-            return '<div id="##" class="edui-autotypesetpicker %%">' +
-                '<div class="edui-autotypesetpicker-body">' +
-                '<table >' +
-                '<tr><td nowrap colspan="2"><input type="checkbox" name="mergeEmptyline" ' + (opt["mergeEmptyline"] ? "checked" : "" ) + '>' + lang.mergeLine + '</td><td colspan="2"><input type="checkbox" name="removeEmptyline" ' + (opt["removeEmptyline"] ? "checked" : "" ) + '>' + lang.delLine + '</td></tr>' +
-                '<tr><td nowrap colspan="2"><input type="checkbox" name="removeClass" ' + (opt["removeClass"] ? "checked" : "" ) + '>' + lang.removeFormat + '</td><td colspan="2"><input type="checkbox" name="indent" ' + (opt["indent"] ? "checked" : "" ) + '>' + lang.indent + '</td></tr>' +
-                '<tr><td nowrap colspan="2"><input type="checkbox" name="textAlign" ' + (opt["textAlign"] ? "checked" : "" ) + '>' + lang.alignment + '</td><td colspan="2" id="' + textAlignInputName + '"><input type="radio" name="'+ textAlignInputName +'" value="left" ' + ((opt["textAlign"] && opt["textAlign"] == "left") ? "checked" : "") + '>' + me.getLang("justifyleft") + '<input type="radio" name="'+ textAlignInputName +'" value="center" ' + ((opt["textAlign"] && opt["textAlign"] == "center") ? "checked" : "") + '>' + me.getLang("justifycenter") + '<input type="radio" name="'+ textAlignInputName +'" value="right" ' + ((opt["textAlign"] && opt["textAlign"] == "right") ? "checked" : "") + '>' + me.getLang("justifyright") + ' </tr>' +
-                '<tr><td nowrap colspan="2"><input type="checkbox" name="imageBlockLine" ' + (opt["imageBlockLine"] ? "checked" : "" ) + '>' + lang.imageFloat + '</td>' +
-                '<td nowrap colspan="2" id="'+ imageBlockInputName +'">' +
-                '<input type="radio" name="'+ imageBlockInputName +'" value="none" ' + ((opt["imageBlockLine"] && opt["imageBlockLine"] == "none") ? "checked" : "") + '>' + me.getLang("default") +
-                '<input type="radio" name="'+ imageBlockInputName +'" value="left" ' + ((opt["imageBlockLine"] && opt["imageBlockLine"] == "left") ? "checked" : "") + '>' + me.getLang("justifyleft") +
-                '<input type="radio" name="'+ imageBlockInputName +'" value="center" ' + ((opt["imageBlockLine"] && opt["imageBlockLine"] == "center") ? "checked" : "") + '>' + me.getLang("justifycenter") +
-                '<input type="radio" name="'+ imageBlockInputName +'" value="right" ' + ((opt["imageBlockLine"] && opt["imageBlockLine"] == "right") ? "checked" : "") + '>' + me.getLang("justifyright") + '</tr>' +
-
-                '<tr><td nowrap colspan="2"><input type="checkbox" name="clearFontSize" ' + (opt["clearFontSize"] ? "checked" : "" ) + '>' + lang.removeFontsize + '</td><td colspan="2"><input type="checkbox" name="clearFontFamily" ' + (opt["clearFontFamily"] ? "checked" : "" ) + '>' + lang.removeFontFamily + '</td></tr>' +
-                '<tr><td nowrap colspan="4"><input type="checkbox" name="removeEmptyNode" ' + (opt["removeEmptyNode"] ? "checked" : "" ) + '>' + lang.removeHtml + '</td></tr>' +
-                '<tr><td nowrap colspan="4"><input type="checkbox" name="pasteFilter" ' + (opt["pasteFilter"] ? "checked" : "" ) + '>' + lang.pasteFilter + '</td></tr>' +
-                '<tr><td nowrap colspan="4" align="right"><button >' + lang.run + '</button></td></tr>' +
-                '</table>' +
-                '</div>' +
-                '</div>';
-
-
-        },
-        _UIBase_render:UIBase.prototype.render
-    };
-    utils.inherits(AutoTypeSetPicker, UIBase);
-})();
-
-///import core
-///import uicore
-///import ui/popup.js
-///import ui/autotypesetpicker.js
-///import ui/splitbutton.js
-(function (){
-    var utils = baidu.editor.utils,
-        Popup = baidu.editor.ui.Popup,
-        AutoTypeSetPicker = baidu.editor.ui.AutoTypeSetPicker,
-        SplitButton = baidu.editor.ui.SplitButton,
-        AutoTypeSetButton = baidu.editor.ui.AutoTypeSetButton = function (options){
-            this.initOptions(options);
-            this.initAutoTypeSetButton();
-        };
-    function getPara(me){
-        var opt = me.editor.options.autotypeset,
-            cont = me.getDom(),
-            editorId = me.editor.uid,
-            inputType = null,
-            attrName = null,
-            ipts = domUtils.getElementsByTagName(cont,"input");
-        for(var i=ipts.length-1,ipt;ipt=ipts[i--];){
-
-            inputType = ipt.getAttribute("type");
-
-            if(inputType=="checkbox"){
-                attrName = ipt.getAttribute("name");
-                opt[attrName] && delete opt[attrName];
-                if(ipt.checked){
-                    var attrValue = document.getElementById( attrName+"Value" + editorId );
-                    if(attrValue){
-                        if(/input/ig.test(attrValue.tagName)){
-                            opt[attrName] = attrValue.value;
-                        }else{
-                            var iptChilds = attrValue.getElementsByTagName("input");
-                            for(var j=iptChilds.length-1,iptchild;iptchild=iptChilds[j--];){
-                                if(iptchild.checked){
-                                    opt[attrName] = iptchild.value;
-                                    break;
-                                }
-                            }
-                        }
-                    }else{
-                        opt[attrName] = true;
-                    }
-                }
-            }
-        }
-        var selects = domUtils.getElementsByTagName(cont,"select");
-        for(var i=0,si;si=selects[i++];){
-            var attr = si.getAttribute('name');
-            opt[attr] = opt[attr] ? si.value : '';
-        }
-
-        me.editor.options.autotypeset = opt;
-    }
-    AutoTypeSetButton.prototype = {
-        initAutoTypeSetButton: function (){
-            var me = this;
-            this.popup = new Popup({
-                //传入配置参数
-                content: new AutoTypeSetPicker({editor:me.editor}),
-                'editor':me.editor,
-                hide : function(){
-
-                    if (!this._hidden && this.getDom()) {
-                        getPara(this);
-                        this.getDom().style.display = 'none';
-                        this._hidden = true;
-                        this.fireEvent('hide');
-                    }
-                }
-            });
-            var flag = 0;
-            this.popup.addListener('postRenderAfter',function(){
-                var popupUI = this;
-                if(flag)return;
-                var cont = this.getDom(),
-                    btn = cont.getElementsByTagName('button')[0];
-
-                btn.onclick = function(){
-                    getPara(popupUI);
-                    me.editor.execCommand('autotypeset');
-                    popupUI.hide()
-                };
-                flag = 1;
-            });
-            this.initSplitButton();
-        }
-    };
-    utils.inherits(AutoTypeSetButton, SplitButton);
-
-})();
-
-///import core
-///import uicore
-(function () {
-    var utils = baidu.editor.utils,
-        Popup = baidu.editor.ui.Popup,
-        Stateful = baidu.editor.ui.Stateful,
-        UIBase = baidu.editor.ui.UIBase;
-
-    /**
-     * 该参数将新增一个参数: selected, 参数类型为一个Object, 形如{ 'align': 'center', 'valign': 'top' }, 表示单元格的初始
-     * 对齐状态为: 竖直居上,水平居中; 其中 align的取值为:'center', 'left', 'right'; valign的取值为: 'top', 'middle', 'bottom'
-     * @update 2013/4/2 hancong03@baidu.com
-     */
-    var CellAlignPicker = baidu.editor.ui.CellAlignPicker = function (options) {
-        this.initOptions(options);
-        this.initSelected();
-        this.initCellAlignPicker();
-    };
-    CellAlignPicker.prototype = {
-        //初始化选中状态, 该方法将根据传递进来的参数获取到应该选中的对齐方式图标的索引
-        initSelected: function(){
-
-            var status = {
-
-                valign: {
-                    top: 0,
-                    middle: 1,
-                    bottom: 2
-                },
-                align: {
-                    left: 0,
-                    center: 1,
-                    right: 2
-                },
-                count: 3
-
-                },
-                result = -1;
-
-            if( this.selected ) {
-                this.selectedIndex = status.valign[ this.selected.valign ] * status.count + status.align[ this.selected.align ];
-            }
-
-        },
-        initCellAlignPicker:function () {
-            this.initUIBase();
-            this.Stateful_init();
-        },
-        getHtmlTpl:function () {
-
-            var alignType = [ 'left', 'center', 'right' ],
-                COUNT = 9,
-                tempClassName = null,
-                tempIndex = -1,
-                tmpl = [];
-
-
-            for( var i= 0; i<COUNT; i++ ) {
-
-                tempClassName = this.selectedIndex === i ? ' class="edui-cellalign-selected" ' : '';
-                tempIndex = i % 3;
-
-                tempIndex === 0 && tmpl.push('<tr>');
-
-                tmpl.push( '<td index="'+ i +'" ' + tempClassName + ' stateful><div class="edui-icon edui-'+ alignType[ tempIndex ] +'"></div></td>' );
-
-                tempIndex === 2 && tmpl.push('</tr>');
-
-            }
-
-            return '<div id="##" class="edui-cellalignpicker %%">' +
-                '<div class="edui-cellalignpicker-body">' +
-                '<table onclick="$$._onClick(event);">' +
-                tmpl.join('') +
-                '</table>' +
-                '</div>' +
-                '</div>';
-        },
-        getStateDom: function (){
-            return this.target;
-        },
-        _onClick: function (evt){
-            var target= evt.target || evt.srcElement;
-            if(/icon/.test(target.className)){
-                this.items[target.parentNode.getAttribute("index")].onclick();
-                Popup.postHide(evt);
-            }
-        },
-        _UIBase_render:UIBase.prototype.render
-    };
-    utils.inherits(CellAlignPicker, UIBase);
-    utils.extend(CellAlignPicker.prototype, Stateful,true);
-})();
-
-
-
-
-///import core
-///import uicore
-(function () {
-    var utils = baidu.editor.utils,
-        Stateful = baidu.editor.ui.Stateful,
-        uiUtils = baidu.editor.ui.uiUtils,
-        UIBase = baidu.editor.ui.UIBase;
-
-    var PastePicker = baidu.editor.ui.PastePicker = function (options) {
-        this.initOptions(options);
-        this.initPastePicker();
-    };
-    PastePicker.prototype = {
-        initPastePicker:function () {
-            this.initUIBase();
-            this.Stateful_init();
-        },
-        getHtmlTpl:function () {
-            return '<div class="edui-pasteicon" onclick="$$._onClick(this)"></div>' +
-                '<div class="edui-pastecontainer">' +
-                '<div class="edui-title">' + this.editor.getLang("pasteOpt") + '</div>' +
-                '<div class="edui-button">' +
-                '<div title="' + this.editor.getLang("pasteSourceFormat") + '" onclick="$$.format(false)" stateful>' +
-                '<div class="edui-richtxticon"></div></div>' +
-                '<div title="' + this.editor.getLang("tagFormat") + '" onclick="$$.format(2)" stateful>' +
-                '<div class="edui-tagicon"></div></div>' +
-                '<div title="' + this.editor.getLang("pasteTextFormat") + '" onclick="$$.format(true)" stateful>' +
-                '<div class="edui-plaintxticon"></div></div>' +
-                '</div>' +
-                '</div>' +
-                '</div>'
-        },
-        getStateDom:function () {
-            return this.target;
-        },
-        format:function (param) {
-            this.editor.ui._isTransfer = true;
-            this.editor.fireEvent('pasteTransfer', param);
-        },
-        _onClick:function (cur) {
-            var node = domUtils.getNextDomNode(cur),
-                screenHt = uiUtils.getViewportRect().height,
-                subPop = uiUtils.getClientRect(node);
-
-            if ((subPop.top + subPop.height) > screenHt)
-                node.style.top = (-subPop.height - cur.offsetHeight) + "px";
-            else
-                node.style.top = "";
-
-            if (/hidden/ig.test(domUtils.getComputedStyle(node, "visibility"))) {
-                node.style.visibility = "visible";
-                domUtils.addClass(cur, "edui-state-opened");
-            } else {
-                node.style.visibility = "hidden";
-                domUtils.removeClasses(cur, "edui-state-opened")
-            }
-        },
-        _UIBase_render:UIBase.prototype.render
-    };
-    utils.inherits(PastePicker, UIBase);
-    utils.extend(PastePicker.prototype, Stateful, true);
-})();
-
-
-
-
-
-(function (){
-    var utils = baidu.editor.utils,
-        uiUtils = baidu.editor.ui.uiUtils,
-        UIBase = baidu.editor.ui.UIBase,
-        Toolbar = baidu.editor.ui.Toolbar = function (options){
-            this.initOptions(options);
-            this.initToolbar();
-        };
-    Toolbar.prototype = {
-        items: null,
-        initToolbar: function (){
-            this.items = this.items || [];
-            this.initUIBase();
-        },
-        add: function (item){
-            this.items.push(item);
-        },
-        getHtmlTpl: function (){
-            var buff = [];
-            for (var i=0; i<this.items.length; i++) {
-                buff[i] = this.items[i].renderHtml();
-            }
-            return '<div id="##" class="edui-toolbar %%" onselectstart="return false;" onmousedown="return $$._onMouseDown(event, this);">' +
-                buff.join('') +
-                '</div>'
-        },
-        postRender: function (){
-            var box = this.getDom();
-            for (var i=0; i<this.items.length; i++) {
-                this.items[i].postRender();
-            }
-            uiUtils.makeUnselectable(box);
-        },
-        _onMouseDown: function (){
-            return false;
-        }
-    };
-    utils.inherits(Toolbar, UIBase);
-
-})();
-
-///import core
-///import uicore
-///import ui\popup.js
-///import ui\stateful.js
-(function () {
-    var utils = baidu.editor.utils,
-        domUtils = baidu.editor.dom.domUtils,
-        uiUtils = baidu.editor.ui.uiUtils,
-        UIBase = baidu.editor.ui.UIBase,
-        Popup = baidu.editor.ui.Popup,
-        Stateful = baidu.editor.ui.Stateful,
-        CellAlignPicker = baidu.editor.ui.CellAlignPicker,
-
-        Menu = baidu.editor.ui.Menu = function (options) {
-            this.initOptions(options);
-            this.initMenu();
-        };
-
-    var menuSeparator = {
-        renderHtml:function () {
-            return '<div class="edui-menuitem edui-menuseparator"><div class="edui-menuseparator-inner"></div></div>';
-        },
-        postRender:function () {
-        },
-        queryAutoHide:function () {
-            return true;
-        }
-    };
-    Menu.prototype = {
-        items:null,
-        uiName:'menu',
-        initMenu:function () {
-            this.items = this.items || [];
-            this.initPopup();
-            this.initItems();
-        },
-        initItems:function () {
-            for (var i = 0; i < this.items.length; i++) {
-                var item = this.items[i];
-                if (item == '-') {
-                    this.items[i] = this.getSeparator();
-                } else if (!(item instanceof MenuItem)) {
-                    item.editor = this.editor;
-                    item.theme = this.editor.options.theme;
-                    this.items[i] = this.createItem(item);
-                }
-            }
-        },
-        getSeparator:function () {
-            return menuSeparator;
-        },
-        createItem:function (item) {
-            //新增一个参数menu, 该参数存储了menuItem所对应的menu引用
-            item.menu = this;
-            return new MenuItem(item);
-        },
-        _Popup_getContentHtmlTpl:Popup.prototype.getContentHtmlTpl,
-        getContentHtmlTpl:function () {
-            if (this.items.length == 0) {
-                return this._Popup_getContentHtmlTpl();
-            }
-            var buff = [];
-            for (var i = 0; i < this.items.length; i++) {
-                var item = this.items[i];
-                buff[i] = item.renderHtml();
-            }
-            return ('<div class="%%-body">' + buff.join('') + '</div>');
-        },
-        _Popup_postRender:Popup.prototype.postRender,
-        postRender:function () {
-            var me = this;
-            for (var i = 0; i < this.items.length; i++) {
-                var item = this.items[i];
-                item.ownerMenu = this;
-                item.postRender();
-            }
-            domUtils.on(this.getDom(), 'mouseover', function (evt) {
-                evt = evt || event;
-                var rel = evt.relatedTarget || evt.fromElement;
-                var el = me.getDom();
-                if (!uiUtils.contains(el, rel) && el !== rel) {
-                    me.fireEvent('over');
-                }
-            });
-            this._Popup_postRender();
-        },
-        queryAutoHide:function (el) {
-            if (el) {
-                if (uiUtils.contains(this.getDom(), el)) {
-                    return false;
-                }
-                for (var i = 0; i < this.items.length; i++) {
-                    var item = this.items[i];
-                    if (item.queryAutoHide(el) === false) {
-                        return false;
-                    }
-                }
-            }
-        },
-        clearItems:function () {
-            for (var i = 0; i < this.items.length; i++) {
-                var item = this.items[i];
-                clearTimeout(item._showingTimer);
-                clearTimeout(item._closingTimer);
-                if (item.subMenu) {
-                    item.subMenu.destroy();
-                }
-            }
-            this.items = [];
-        },
-        destroy:function () {
-            if (this.getDom()) {
-                domUtils.remove(this.getDom());
-            }
-            this.clearItems();
-        },
-        dispose:function () {
-            this.destroy();
-        }
-    };
-    utils.inherits(Menu, Popup);
-
-    /**
-     * @update 2013/04/03 hancong03 新增一个参数menu, 该参数存储了menuItem所对应的menu引用
-     * @type {Function}
-     */
-    var MenuItem = baidu.editor.ui.MenuItem = function (options) {
-        this.initOptions(options);
-        this.initUIBase();
-        this.Stateful_init();
-        if (this.subMenu && !(this.subMenu instanceof Menu)) {
-            if (options.className && options.className.indexOf("aligntd") != -1) {
-                var me = this;
-
-                //获取单元格对齐初始状态
-                this.subMenu.selected = this.editor.queryCommandValue( 'cellalignment' );
-
-                this.subMenu = new Popup({
-                    content:new CellAlignPicker(this.subMenu),
-                    parentMenu:me,
-                    editor:me.editor,
-                    destroy:function () {
-                        if (this.getDom()) {
-                            domUtils.remove(this.getDom());
-                        }
-                    }
-                });
-                this.subMenu.addListener("postRenderAfter", function () {
-                    domUtils.on(this.getDom(), "mouseover", function () {
-                        me.addState('opened');
-                    });
-                });
-            } else {
-                this.subMenu = new Menu(this.subMenu);
-            }
-        }
-    };
-    MenuItem.prototype = {
-        label:'',
-        subMenu:null,
-        ownerMenu:null,
-        uiName:'menuitem',
-        alwalysHoverable:true,
-        getHtmlTpl:function () {
-            return '<div id="##" class="%%" stateful onclick="$$._onClick(event, this);">' +
-                '<div class="%%-body">' +
-                this.renderLabelHtml() +
-                '</div>' +
-                '</div>';
-        },
-        postRender:function () {
-            var me = this;
-            this.addListener('over', function () {
-                me.ownerMenu.fireEvent('submenuover', me);
-                if (me.subMenu) {
-                    me.delayShowSubMenu();
-                }
-            });
-            if (this.subMenu) {
-                this.getDom().className += ' edui-hassubmenu';
-                this.subMenu.render();
-                this.addListener('out', function () {
-                    me.delayHideSubMenu();
-                });
-                this.subMenu.addListener('over', function () {
-                    clearTimeout(me._closingTimer);
-                    me._closingTimer = null;
-                    me.addState('opened');
-                });
-                this.ownerMenu.addListener('hide', function () {
-                    me.hideSubMenu();
-                });
-                this.ownerMenu.addListener('submenuover', function (t, subMenu) {
-                    if (subMenu !== me) {
-                        me.delayHideSubMenu();
-                    }
-                });
-                this.subMenu._bakQueryAutoHide = this.subMenu.queryAutoHide;
-                this.subMenu.queryAutoHide = function (el) {
-                    if (el && uiUtils.contains(me.getDom(), el)) {
-                        return false;
-                    }
-                    return this._bakQueryAutoHide(el);
-                };
-            }
-            this.getDom().style.tabIndex = '-1';
-            uiUtils.makeUnselectable(this.getDom());
-            this.Stateful_postRender();
-        },
-        delayShowSubMenu:function () {
-            var me = this;
-            if (!me.isDisabled()) {
-                me.addState('opened');
-                clearTimeout(me._showingTimer);
-                clearTimeout(me._closingTimer);
-                me._closingTimer = null;
-                me._showingTimer = setTimeout(function () {
-                    me.showSubMenu();
-                }, 250);
-            }
-        },
-        delayHideSubMenu:function () {
-            var me = this;
-            if (!me.isDisabled()) {
-                me.removeState('opened');
-                clearTimeout(me._showingTimer);
-                if (!me._closingTimer) {
-                    me._closingTimer = setTimeout(function () {
-                        if (!me.hasState('opened')) {
-                            me.hideSubMenu();
-                        }
-                        me._closingTimer = null;
-                    }, 400);
-                }
-            }
-        },
-        renderLabelHtml:function () {
-            return '<div class="edui-arrow"></div>' +
-                '<div class="edui-box edui-icon"></div>' +
-                '<div class="edui-box edui-label %%-label">' + (this.label || '') + '</div>';
-        },
-        getStateDom:function () {
-            return this.getDom();
-        },
-        queryAutoHide:function (el) {
-            if (this.subMenu && this.hasState('opened')) {
-                return this.subMenu.queryAutoHide(el);
-            }
-        },
-        _onClick:function (event, this_) {
-            if (this.hasState('disabled')) return;
-            if (this.fireEvent('click', event, this_) !== false) {
-                if (this.subMenu) {
-                    this.showSubMenu();
-                } else {
-                    Popup.postHide(event);
-                }
-            }
-        },
-        showSubMenu:function () {
-            var rect = uiUtils.getClientRect(this.getDom());
-            rect.right -= 5;
-            rect.left += 2;
-            rect.width -= 7;
-            rect.top -= 4;
-            rect.bottom += 4;
-            rect.height += 8;
-            this.subMenu.showAnchorRect(rect, true, true);
-        },
-        hideSubMenu:function () {
-            this.subMenu.hide();
-        }
-    };
-    utils.inherits(MenuItem, UIBase);
-    utils.extend(MenuItem.prototype, Stateful, true);
-})();
-
-///import core
-///import uicore
-///import ui/menu.js
-///import ui/splitbutton.js
-(function (){
-    // todo: menu和item提成通用list
-    var utils = baidu.editor.utils,
-        uiUtils = baidu.editor.ui.uiUtils,
-        Menu = baidu.editor.ui.Menu,
-        SplitButton = baidu.editor.ui.SplitButton,
-        Combox = baidu.editor.ui.Combox = function (options){
-            this.initOptions(options);
-            this.initCombox();
-        };
-    Combox.prototype = {
-        uiName: 'combox',
-        initCombox: function (){
-            var me = this;
-            this.items = this.items || [];
-            for (var i=0; i<this.items.length; i++) {
-                var item = this.items[i];
-                item.uiName = 'listitem';
-                item.index = i;
-                item.onclick = function (){
-                    me.selectByIndex(this.index);
-                };
-            }
-            this.popup = new Menu({
-                items: this.items,
-                uiName: 'list',
-                editor:this.editor,
-                captureWheel: true,
-                combox: this
-            });
-
-            this.initSplitButton();
-        },
-        _SplitButton_postRender: SplitButton.prototype.postRender,
-        postRender: function (){
-            this._SplitButton_postRender();
-            this.setLabel(this.label || '');
-            this.setValue(this.initValue || '');
-        },
-        showPopup: function (){
-            var rect = uiUtils.getClientRect(this.getDom());
-            rect.top += 1;
-            rect.bottom -= 1;
-            rect.height -= 2;
-            this.popup.showAnchorRect(rect);
-        },
-        getValue: function (){
-            return this.value;
-        },
-        setValue: function (value){
-            var index = this.indexByValue(value);
-            if (index != -1) {
-                this.selectedIndex = index;
-                this.setLabel(this.items[index].label);
-                this.value = this.items[index].value;
-            } else {
-                this.selectedIndex = -1;
-                this.setLabel(this.getLabelForUnknowValue(value));
-                this.value = value;
-            }
-        },
-        setLabel: function (label){
-            this.getDom('button_body').innerHTML = label;
-            this.label = label;
-        },
-        getLabelForUnknowValue: function (value){
-            return value;
-        },
-        indexByValue: function (value){
-            for (var i=0; i<this.items.length; i++) {
-                if (value == this.items[i].value) {
-                    return i;
-                }
-            }
-            return -1;
-        },
-        getItem: function (index){
-            return this.items[index];
-        },
-        selectByIndex: function (index){
-            if (index < this.items.length && this.fireEvent('select', index) !== false) {
-                this.selectedIndex = index;
-                this.value = this.items[index].value;
-                this.setLabel(this.items[index].label);
-            }
-        }
-    };
-    utils.inherits(Combox, SplitButton);
-})();
-
-///import core
-///import uicore
-///import ui/mask.js
-///import ui/button.js
-(function (){
-    var utils = baidu.editor.utils,
-        domUtils = baidu.editor.dom.domUtils,
-        uiUtils = baidu.editor.ui.uiUtils,
-        Mask = baidu.editor.ui.Mask,
-        UIBase = baidu.editor.ui.UIBase,
-        Button = baidu.editor.ui.Button,
-        Dialog = baidu.editor.ui.Dialog = function (options){
-            this.initOptions(utils.extend({
-                autoReset: true,
-                draggable: true,
-                onok: function (){},
-                oncancel: function (){},
-                onclose: function (t, ok){
-                    return ok ? this.onok() : this.oncancel();
-                },
-                //是否控制dialog中的scroll事件, 默认为不阻止
-                holdScroll: false
-            },options));
-            this.initDialog();
-        };
-    var modalMask;
-    var dragMask;
-    Dialog.prototype = {
-        draggable: false,
-        uiName: 'dialog',
-        initDialog: function (){
-            var me = this,
-                theme=this.editor.options.theme;
-            this.initUIBase();
-            this.modalMask = (modalMask || (modalMask = new Mask({
-                className: 'edui-dialog-modalmask',
-                theme:theme
-            })));
-            this.dragMask = (dragMask || (dragMask = new Mask({
-                className: 'edui-dialog-dragmask',
-                theme:theme
-            })));
-            this.closeButton = new Button({
-                className: 'edui-dialog-closebutton',
-                title: me.closeDialog,
-                theme:theme,
-                onclick: function (){
-                    me.close(false);
-                }
-            });
-
-            this.fullscreen && this.initResizeEvent();
-
-            if (this.buttons) {
-                for (var i=0; i<this.buttons.length; i++) {
-                    if (!(this.buttons[i] instanceof Button)) {
-                        this.buttons[i] = new Button(this.buttons[i]);
-                    }
-                }
-            }
-        },
-        initResizeEvent: function () {
-
-            var me = this;
-
-            domUtils.on( window, "resize", function () {
-
-                if ( me._hidden || me._hidden === undefined ) {
-                    return;
-                }
-
-                if ( me.__resizeTimer ) {
-                    window.clearTimeout( me.__resizeTimer );
-                }
-
-                me.__resizeTimer = window.setTimeout( function () {
-
-                    me.__resizeTimer = null;
-
-                    var dialogWrapNode = me.getDom(),
-                        contentNode = me.getDom('content'),
-                        wrapRect = UE.ui.uiUtils.getClientRect( dialogWrapNode ),
-                        contentRect = UE.ui.uiUtils.getClientRect( contentNode ),
-                        vpRect = uiUtils.getViewportRect();
-
-                    contentNode.style.width = ( vpRect.width - wrapRect.width + contentRect.width ) + "px";
-                    contentNode.style.height = ( vpRect.height - wrapRect.height + contentRect.height ) + "px";
-
-                    dialogWrapNode.style.width = vpRect.width + "px";
-                    dialogWrapNode.style.height = vpRect.height + "px";
-
-                    me.fireEvent( "resize" );
-
-                }, 100 );
-
-            } );
-
-        },
-        fitSize: function (){
-            var popBodyEl = this.getDom('body');
-//            if (!(baidu.editor.browser.ie && baidu.editor.browser.version == 7)) {
-//                uiUtils.removeStyle(popBodyEl, 'width');
-//                uiUtils.removeStyle(popBodyEl, 'height');
-//            }
-            var size = this.mesureSize();
-            popBodyEl.style.width = size.width + 'px';
-            popBodyEl.style.height = size.height + 'px';
-            return size;
-        },
-        safeSetOffset: function (offset){
-            var me = this;
-            var el = me.getDom();
-            var vpRect = uiUtils.getViewportRect();
-            var rect = uiUtils.getClientRect(el);
-            var left = offset.left;
-            if (left + rect.width > vpRect.right) {
-                left = vpRect.right - rect.width;
-            }
-            var top = offset.top;
-            if (top + rect.height > vpRect.bottom) {
-                top = vpRect.bottom - rect.height;
-            }
-            el.style.left = Math.max(left, 0) + 'px';
-            el.style.top = Math.max(top, 0) + 'px';
-        },
-        showAtCenter: function (){
-
-            var vpRect = uiUtils.getViewportRect();
-
-            if ( !this.fullscreen ) {
-                this.getDom().style.display = '';
-                var popSize = this.fitSize();
-                var titleHeight = this.getDom('titlebar').offsetHeight | 0;
-                var left = vpRect.width / 2 - popSize.width / 2;
-                var top = vpRect.height / 2 - (popSize.height - titleHeight) / 2 - titleHeight;
-                var popEl = this.getDom();
-                this.safeSetOffset({
-                    left: Math.max(left | 0, 0),
-                    top: Math.max(top | 0, 0)
-                });
-                if (!domUtils.hasClass(popEl, 'edui-state-centered')) {
-                    popEl.className += ' edui-state-centered';
-                }
-            } else {
-                var dialogWrapNode = this.getDom(),
-                    contentNode = this.getDom('content');
-
-                dialogWrapNode.style.display = "block";
-
-                var wrapRect = UE.ui.uiUtils.getClientRect( dialogWrapNode ),
-                    contentRect = UE.ui.uiUtils.getClientRect( contentNode );
-                dialogWrapNode.style.left = "-100000px";
-
-                contentNode.style.width = ( vpRect.width - wrapRect.width + contentRect.width ) + "px";
-                contentNode.style.height = ( vpRect.height - wrapRect.height + contentRect.height ) + "px";
-
-                dialogWrapNode.style.width = vpRect.width + "px";
-                dialogWrapNode.style.height = vpRect.height + "px";
-                dialogWrapNode.style.left = 0;
-
-                //保存环境的overflow值
-                this._originalContext = {
-                    html: {
-                        overflowX: document.documentElement.style.overflowX,
-                        overflowY: document.documentElement.style.overflowY
-                    },
-                    body: {
-                        overflowX: document.body.style.overflowX,
-                        overflowY: document.body.style.overflowY
-                    }
-                };
-
-                document.documentElement.style.overflowX = 'hidden';
-                document.documentElement.style.overflowY = 'hidden';
-                document.body.style.overflowX = 'hidden';
-                document.body.style.overflowY = 'hidden';
-
-            }
-
-            this._show();
-        },
-        getContentHtml: function (){
-            var contentHtml = '';
-            if (typeof this.content == 'string') {
-                contentHtml = this.content;
-            } else if (this.iframeUrl) {
-                contentHtml = '<span id="'+ this.id +'_contmask" class="dialogcontmask"></span><iframe id="'+ this.id +
-                    '_iframe" class="%%-iframe" height="100%" width="100%" frameborder="0" src="'+ this.iframeUrl +'"></iframe>';
-            }
-            return contentHtml;
-        },
-        getHtmlTpl: function (){
-            var footHtml = '';
-
-            if (this.buttons) {
-                var buff = [];
-                for (var i=0; i<this.buttons.length; i++) {
-                    buff[i] = this.buttons[i].renderHtml();
-                }
-                footHtml = '<div class="%%-foot">' +
-                     '<div id="##_buttons" class="%%-buttons">' + buff.join('') + '</div>' +
-                    '</div>';
-            }
-
-            return '<div id="##" class="%%"><div '+ ( !this.fullscreen ? 'class="%%"' : 'class="%%-wrap edui-dialog-fullscreen-flag"' ) +'><div id="##_body" class="%%-body">' +
-                '<div class="%%-shadow"></div>' +
-                '<div id="##_titlebar" class="%%-titlebar">' +
-                '<div class="%%-draghandle" onmousedown="$$._onTitlebarMouseDown(event, this);">' +
-                 '<span class="%%-caption">' + (this.title || '') + '</span>' +
-                '</div>' +
-                this.closeButton.renderHtml() +
-                '</div>' +
-                '<div id="##_content" class="%%-content">'+ ( this.autoReset ? '' : this.getContentHtml()) +'</div>' +
-                footHtml +
-                '</div></div></div>';
-        },
-        postRender: function (){
-            // todo: 保持居中/记住上次关闭位置选项
-            if (!this.modalMask.getDom()) {
-                this.modalMask.render();
-                this.modalMask.hide();
-            }
-            if (!this.dragMask.getDom()) {
-                this.dragMask.render();
-                this.dragMask.hide();
-            }
-            var me = this;
-            this.addListener('show', function (){
-                me.modalMask.show(this.getDom().style.zIndex - 2);
-            });
-            this.addListener('hide', function (){
-                me.modalMask.hide();
-            });
-            if (this.buttons) {
-                for (var i=0; i<this.buttons.length; i++) {
-                    this.buttons[i].postRender();
-                }
-            }
-            domUtils.on(window, 'resize', function (){
-                setTimeout(function (){
-                    if (!me.isHidden()) {
-                        me.safeSetOffset(uiUtils.getClientRect(me.getDom()));
-                    }
-                });
-            });
-
-            //hold住scroll事件,防止dialog的滚动影响页面
-            if( this.holdScroll ) {
-
-                if( !me.iframeUrl ) {
-                    domUtils.on( document.getElementById( me.id + "_iframe"), !browser.gecko ? "mousewheel" : "DOMMouseScroll", function(e){
-                        domUtils.preventDefault(e);
-                    } );
-                } else {
-                    me.addListener('dialogafterreset', function(){
-                        window.setTimeout(function(){
-                            var iframeWindow = document.getElementById( me.id + "_iframe").contentWindow;
-
-                            if( browser.ie ) {
-
-                                var timer = window.setInterval(function(){
-
-                                    if( iframeWindow.document && iframeWindow.document.body ) {
-                                        window.clearInterval( timer );
-                                        timer = null;
-                                        domUtils.on( iframeWindow.document.body, !browser.gecko ? "mousewheel" : "DOMMouseScroll", function(e){
-                                            domUtils.preventDefault(e);
-                                        } );
-                                    }
-
-                                }, 100);
-
-                            } else {
-                                domUtils.on( iframeWindow, !browser.gecko ? "mousewheel" : "DOMMouseScroll", function(e){
-                                    domUtils.preventDefault(e);
-                                } );
-                            }
-
-                        }, 1);
-                    });
-                }
-
-            }
-            this._hide();
-        },
-        mesureSize: function (){
-            var body = this.getDom('body');
-            var width = uiUtils.getClientRect(this.getDom('content')).width;
-            var dialogBodyStyle = body.style;
-            dialogBodyStyle.width = width;
-            return uiUtils.getClientRect(body);
-        },
-        _onTitlebarMouseDown: function (evt, el){
-            if (this.draggable) {
-                var rect;
-                var vpRect = uiUtils.getViewportRect();
-                var me = this;
-                uiUtils.startDrag(evt, {
-                    ondragstart: function (){
-                        rect = uiUtils.getClientRect(me.getDom());
-                        me.getDom('contmask').style.visibility = 'visible';
-                        me.dragMask.show(me.getDom().style.zIndex - 1);
-                    },
-                    ondragmove: function (x, y){
-                        var left = rect.left + x;
-                        var top = rect.top + y;
-                        me.safeSetOffset({
-                            left: left,
-                            top: top
-                        });
-                    },
-                    ondragstop: function (){
-                        me.getDom('contmask').style.visibility = 'hidden';
-                        domUtils.removeClasses(me.getDom(), ['edui-state-centered']);
-                        me.dragMask.hide();
-                    }
-                });
-            }
-        },
-        reset: function (){
-            this.getDom('content').innerHTML = this.getContentHtml();
-            this.fireEvent('dialogafterreset');
-        },
-        _show: function (){
-            if (this._hidden) {
-                this.getDom().style.display = '';
-
-                //要高过编辑器的zindxe
-                this.editor.container.style.zIndex && (this.getDom().style.zIndex = this.editor.container.style.zIndex * 1 + 10);
-                this._hidden = false;
-                this.fireEvent('show');
-                baidu.editor.ui.uiUtils.getFixedLayer().style.zIndex = this.getDom().style.zIndex - 4;
-            }
-        },
-        isHidden: function (){
-            return this._hidden;
-        },
-        _hide: function (){
-            if (!this._hidden) {
-                var wrapNode = this.getDom();
-                wrapNode.style.display = 'none';
-                wrapNode.style.zIndex = '';
-                wrapNode.style.width = '';
-                wrapNode.style.height = '';
-                this._hidden = true;
-                this.fireEvent('hide');
-            }
-        },
-        open: function (){
-            if (this.autoReset) {
-                //有可能还没有渲染
-                try{
-                    this.reset();
-                }catch(e){
-                    this.render();
-                    this.open()
-                }
-            }
-            this.showAtCenter();
-            if (this.iframeUrl) {
-                try {
-                    this.getDom('iframe').focus();
-                } catch(ex){}
-            }
-        },
-        _onCloseButtonClick: function (evt, el){
-            this.close(false);
-        },
-        close: function (ok){
-            if (this.fireEvent('close', ok) !== false) {
-                //还原环境
-                if ( this.fullscreen ) {
-
-                    document.documentElement.style.overflowX = this._originalContext.html.overflowX;
-                    document.documentElement.style.overflowY = this._originalContext.html.overflowY;
-                    document.body.style.overflowX = this._originalContext.body.overflowX;
-                    document.body.style.overflowY = this._originalContext.body.overflowY;
-                    delete this._originalContext;
-
-                }
-                this._hide();
-            }
-        }
-    };
-    utils.inherits(Dialog, UIBase);
-})();
-
-///import core
-///import uicore
-///import ui/menu.js
-///import ui/splitbutton.js
-(function (){
-    var utils = baidu.editor.utils,
-        Menu = baidu.editor.ui.Menu,
-        SplitButton = baidu.editor.ui.SplitButton,
-        MenuButton = baidu.editor.ui.MenuButton = function (options){
-            this.initOptions(options);
-            this.initMenuButton();
-        };
-    MenuButton.prototype = {
-        initMenuButton: function (){
-            var me = this;
-            this.uiName = "menubutton";
-            this.popup = new Menu({
-                items: me.items,
-                className: me.className,
-                editor:me.editor
-            });
-            this.popup.addListener('show', function (){
-                var list = this;
-                for (var i=0; i<list.items.length; i++) {
-                    list.items[i].removeState('checked');
-                    if (list.items[i].value == me._value) {
-                        list.items[i].addState('checked');
-                        this.value = me._value;
-                    }
-                }
-            });
-            this.initSplitButton();
-        },
-        setValue : function(value){
-            this._value = value;
-        }
-        
-    };
-    utils.inherits(MenuButton, SplitButton);
-})();
-//ui跟编辑器的适配層
-//那个按钮弹出是dialog,是下拉筐等都是在这个js中配置
-//自己写的ui也要在这里配置,放到baidu.editor.ui下边,当编辑器实例化的时候会根据ueditor.config中的toolbars找到相应的进行实例化
-(function () {
-    var utils = baidu.editor.utils;
-    var editorui = baidu.editor.ui;
-    var _Dialog = editorui.Dialog;
-    editorui.buttons = {};
-
-    editorui.Dialog = function (options) {
-        var dialog = new _Dialog(options);
-        dialog.addListener('hide', function () {
-
-            if (dialog.editor) {
-                var editor = dialog.editor;
-                try {
-                    if (browser.gecko) {
-                        var y = editor.window.scrollY,
-                            x = editor.window.scrollX;
-                        editor.body.focus();
-                        editor.window.scrollTo(x, y);
-                    } else {
-                        editor.focus();
-                    }
-
-
-                } catch (ex) {
-                }
-            }
-        });
-        return dialog;
-    };
-
-    var iframeUrlMap = {
-        'anchor':'~/dialogs/anchor/anchor.html',
-        'insertimage':'~/dialogs/image/image.html',
-        'link':'~/dialogs/link/link.html',
-        'spechars':'~/dialogs/spechars/spechars.html',
-        'searchreplace':'~/dialogs/searchreplace/searchreplace.html',
-        'map':'~/dialogs/map/map.html',
-        'gmap':'~/dialogs/gmap/gmap.html',
-        'insertvideo':'~/dialogs/video/video.html',
-        'help':'~/dialogs/help/help.html',
-        'preview':'~/dialogs/preview/preview.html',
-        'emotion':'~/dialogs/emotion/emotion.html',
-        'wordimage':'~/dialogs/wordimage/wordimage.html',
-        'attachment':'~/dialogs/attachment/attachment.html',
-        'insertframe':'~/dialogs/insertframe/insertframe.html',
-        'edittip':'~/dialogs/table/edittip.html',
-        'edittable':'~/dialogs/table/edittable.html',
-        'edittd':'~/dialogs/table/edittd.html',
-        'webapp':'~/dialogs/webapp/webapp.html',
-        'snapscreen':'~/dialogs/snapscreen/snapscreen.html',
-        'scrawl':'~/dialogs/scrawl/scrawl.html',
-        'music':'~/dialogs/music/music.html',
-        'template':'~/dialogs/template/template.html',
-        'background':'~/dialogs/background/background.html',
-        'charts': '~/dialogs/charts/charts.html'
-    };
-    //为工具栏添加按钮,以下都是统一的按钮触发命令,所以写在一起
-    var btnCmds = ['undo', 'redo', 'formatmatch',
-        'bold', 'italic', 'underline', 'fontborder', 'touppercase', 'tolowercase',
-        'strikethrough', 'subscript', 'superscript', 'source', 'indent', 'outdent',
-        'blockquote', 'pasteplain', 'pagebreak',
-        'selectall', 'print','horizontal', 'removeformat', 'time', 'date', 'unlink',
-        'insertparagraphbeforetable', 'insertrow', 'insertcol', 'mergeright', 'mergedown', 'deleterow',
-        'deletecol', 'splittorows', 'splittocols', 'splittocells', 'mergecells', 'deletetable', 'drafts'];
-
-    for (var i = 0, ci; ci = btnCmds[i++];) {
-        ci = ci.toLowerCase();
-        editorui[ci] = function (cmd) {
-            return function (editor) {
-                var ui = new editorui.Button({
-                    className:'edui-for-' + cmd,
-                    title:editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd) || '',
-                    onclick:function () {
-                        editor.execCommand(cmd);
-                    },
-                    theme:editor.options.theme,
-                    showText:false
-                });
-                editorui.buttons[cmd] = ui;
-                editor.addListener('selectionchange', function (type, causeByUi, uiReady) {
-                    var state = editor.queryCommandState(cmd);
-                    if (state == -1) {
-                        ui.setDisabled(true);
-                        ui.setChecked(false);
-                    } else {
-                        if (!uiReady) {
-                            ui.setDisabled(false);
-                            ui.setChecked(state);
-                        }
-                    }
-                });
-                return ui;
-            };
-        }(ci);
-    }
-
-    //清除文档
-    editorui.cleardoc = function (editor) {
-        var ui = new editorui.Button({
-            className:'edui-for-cleardoc',
-            title:editor.options.labelMap.cleardoc || editor.getLang("labelMap.cleardoc") || '',
-            theme:editor.options.theme,
-            onclick:function () {
-                if (confirm(editor.getLang("confirmClear"))) {
-                    editor.execCommand('cleardoc');
-                }
-            }
-        });
-        editorui.buttons["cleardoc"] = ui;
-        editor.addListener('selectionchange', function () {
-            ui.setDisabled(editor.queryCommandState('cleardoc') == -1);
-        });
-        return ui;
-    };
-
-    //排版,图片排版,文字方向
-    var typeset = {
-        'justify':['left', 'right', 'center', 'justify'],
-        'imagefloat':['none', 'left', 'center', 'right'],
-        'directionality':['ltr', 'rtl']
-    };
-
-    for (var p in typeset) {
-
-        (function (cmd, val) {
-            for (var i = 0, ci; ci = val[i++];) {
-                (function (cmd2) {
-                    editorui[cmd.replace('float', '') + cmd2] = function (editor) {
-                        var ui = new editorui.Button({
-                            className:'edui-for-' + cmd.replace('float', '') + cmd2,
-                            title:editor.options.labelMap[cmd.replace('float', '') + cmd2] || editor.getLang("labelMap." + cmd.replace('float', '') + cmd2) || '',
-                            theme:editor.options.theme,
-                            onclick:function () {
-                                editor.execCommand(cmd, cmd2);
-                            }
-                        });
-                        editorui.buttons[cmd] = ui;
-                        editor.addListener('selectionchange', function (type, causeByUi, uiReady) {
-                            ui.setDisabled(editor.queryCommandState(cmd) == -1);
-                            ui.setChecked(editor.queryCommandValue(cmd) == cmd2 && !uiReady);
-                        });
-                        return ui;
-                    };
-                })(ci)
-            }
-        })(p, typeset[p])
-    }
-
-    //字体颜色和背景颜色
-    for (var i = 0, ci; ci = ['backcolor', 'forecolor'][i++];) {
-        editorui[ci] = function (cmd) {
-            return function (editor) {
-                var ui = new editorui.ColorButton({
-                    className:'edui-for-' + cmd,
-                    color:'default',
-                    title:editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd) || '',
-                    editor:editor,
-                    onpickcolor:function (t, color) {
-                        editor.execCommand(cmd, color);
-                    },
-                    onpicknocolor:function () {
-                        editor.execCommand(cmd, 'default');
-                        this.setColor('transparent');
-                        this.color = 'default';
-                    },
-                    onbuttonclick:function () {
-                        editor.execCommand(cmd, this.color);
-                    }
-                });
-                editorui.buttons[cmd] = ui;
-                editor.addListener('selectionchange', function () {
-                    ui.setDisabled(editor.queryCommandState(cmd) == -1);
-                });
-                return ui;
-            };
-        }(ci);
-    }
-
-
-    var dialogBtns = {
-        noOk:['searchreplace', 'help', 'spechars', 'webapp','preview'],
-        ok:['attachment', 'anchor', 'link', 'insertimage', 'map', 'gmap', 'insertframe', 'wordimage',
-            'insertvideo', 'insertframe', 'edittip', 'edittable', 'edittd', 'scrawl', 'template', 'music', 'background', 'charts']
-
-    };
-
-    for (var p in dialogBtns) {
-        (function (type, vals) {
-            for (var i = 0, ci; ci = vals[i++];) {
-                //todo opera下存在问题
-                if (browser.opera && ci === "searchreplace") {
-                    continue;
-                }
-                (function (cmd) {
-                    editorui[cmd] = function (editor, iframeUrl, title) {
-                        iframeUrl = iframeUrl || (editor.options.iframeUrlMap || {})[cmd] || iframeUrlMap[cmd];
-                        title = editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd) || '';
-
-                        var dialog;
-                        //没有iframeUrl不创建dialog
-                        if (iframeUrl) {
-                            dialog = new editorui.Dialog(utils.extend({
-                                iframeUrl:editor.ui.mapUrl(iframeUrl),
-                                editor:editor,
-                                className:'edui-for-' + cmd,
-                                title:title,
-                                holdScroll: cmd === 'insertimage',
-                                fullscreen: /charts|preview/.test(cmd),
-                                closeDialog:editor.getLang("closeDialog")
-                            }, type == 'ok' ? {
-                                buttons:[
-                                    {
-                                        className:'edui-okbutton',
-                                        label:editor.getLang("ok"),
-                                        editor:editor,
-                                        onclick:function () {
-                                            dialog.close(true);
-                                        }
-                                    },
-                                    {
-                                        className:'edui-cancelbutton',
-                                        label:editor.getLang("cancel"),
-                                        editor:editor,
-                                        onclick:function () {
-                                            dialog.close(false);
-                                        }
-                                    }
-                                ]
-                            } : {}));
-
-                            editor.ui._dialogs[cmd + "Dialog"] = dialog;
-                        }
-
-                        var ui = new editorui.Button({
-                            className:'edui-for-' + cmd,
-                            title:title,
-                            onclick:function () {
-                                if (dialog) {
-                                    switch (cmd) {
-                                        case "wordimage":
-                                            var images = editor.execCommand("wordimage");
-                                            if (images && images.length) {
-                                                dialog.render();
-                                                dialog.open();
-                                            }
-                                            break;
-                                        case "scrawl":
-                                            if (editor.queryCommandState("scrawl") != -1) {
-                                                dialog.render();
-                                                dialog.open();
-                                            }
-
-                                            break;
-                                        default:
-                                            dialog.render();
-                                            dialog.open();
-                                    }
-                                }
-                            },
-                            theme:editor.options.theme,
-                            disabled:(cmd == 'scrawl' && editor.queryCommandState("scrawl") == -1) || ( cmd == 'charts' )
-                        });
-                        editorui.buttons[cmd] = ui;
-                        editor.addListener('selectionchange', function () {
-                            //只存在于右键菜单而无工具栏按钮的ui不需要检测状态
-                            var unNeedCheckState = {'edittable':1};
-                            if (cmd in unNeedCheckState)return;
-
-                            var state = editor.queryCommandState(cmd);
-                            if (ui.getDom()) {
-                                ui.setDisabled(state == -1);
-                                ui.setChecked(state);
-                            }
-
-                        });
-
-                        return ui;
-                    };
-                })(ci.toLowerCase())
-            }
-        })(p, dialogBtns[p])
-    }
-
-    editorui.snapscreen = function (editor, iframeUrl, title) {
-        title = editor.options.labelMap['snapscreen'] || editor.getLang("labelMap.snapscreen") || '';
-        var ui = new editorui.Button({
-            className:'edui-for-snapscreen',
-            title:title,
-            onclick:function () {
-                editor.execCommand("snapscreen");
-            },
-            theme:editor.options.theme
-
-        });
-        editorui.buttons['snapscreen'] = ui;
-        iframeUrl = iframeUrl || (editor.options.iframeUrlMap || {})["snapscreen"] || iframeUrlMap["snapscreen"];
-        if (iframeUrl) {
-            var dialog = new editorui.Dialog({
-                iframeUrl:editor.ui.mapUrl(iframeUrl),
-                editor:editor,
-                className:'edui-for-snapscreen',
-                title:title,
-                buttons:[
-                    {
-                        className:'edui-okbutton',
-                        label:editor.getLang("ok"),
-                        editor:editor,
-                        onclick:function () {
-                            dialog.close(true);
-                        }
-                    },
-                    {
-                        className:'edui-cancelbutton',
-                        label:editor.getLang("cancel"),
-                        editor:editor,
-                        onclick:function () {
-                            dialog.close(false);
-                        }
-                    }
-                ]
-
-            });
-            dialog.render();
-            editor.ui._dialogs["snapscreenDialog"] = dialog;
-        }
-        editor.addListener('selectionchange', function () {
-            ui.setDisabled(editor.queryCommandState('snapscreen') == -1);
-        });
-        return ui;
-    };
-
-    editorui.insertcode = function (editor, list, title) {
-        list = editor.options['insertcode'] || [];
-        title = editor.options.labelMap['insertcode'] || editor.getLang("labelMap.insertcode") || '';
-       // if (!list.length) return;
-        var items = [];
-        utils.each(list,function(key,val){
-            items.push({
-                label:key,
-                value:val,
-                theme:editor.options.theme,
-                renderLabelHtml:function () {
-                    return '<div class="edui-label %%-label" >' + (this.label || '') + '</div>';
-                }
-            });
-        });
-
-        var ui = new editorui.Combox({
-            editor:editor,
-            items:items,
-            onselect:function (t, index) {
-                editor.execCommand('insertcode', this.items[index].value);
-            },
-            onbuttonclick:function () {
-                this.showPopup();
-            },
-            title:title,
-            initValue:title,
-            className:'edui-for-insertcode',
-            indexByValue:function (value) {
-                if (value) {
-                    for (var i = 0, ci; ci = this.items[i]; i++) {
-                        if (ci.value.indexOf(value) != -1)
-                            return i;
-                    }
-                }
-
-                return -1;
-            }
-        });
-        editorui.buttons['insertcode'] = ui;
-        editor.addListener('selectionchange', function (type, causeByUi, uiReady) {
-            if (!uiReady) {
-                var state = editor.queryCommandState('insertcode');
-                if (state == -1) {
-                    ui.setDisabled(true);
-                } else {
-                    ui.setDisabled(false);
-                    var value = editor.queryCommandValue('insertcode');
-                    if(!value){
-                        ui.setValue(title);
-                        return;
-                    }
-                    //trace:1871 ie下从源码模式切换回来时,字体会带单引号,而且会有逗号
-                    value && (value = value.replace(/['"]/g, '').split(',')[0]);
-                    ui.setValue(value);
-
-                }
-            }
-
-        });
-        return ui;
-    };
-    editorui.fontfamily = function (editor, list, title) {
-
-        list = editor.options['fontfamily'] || [];
-        title = editor.options.labelMap['fontfamily'] || editor.getLang("labelMap.fontfamily") || '';
-        if (!list.length) return;
-        for (var i = 0, ci, items = []; ci = list[i]; i++) {
-            var langLabel = editor.getLang('fontfamily')[ci.name] || "";
-            (function (key, val) {
-                items.push({
-                    label:key,
-                    value:val,
-                    theme:editor.options.theme,
-                    renderLabelHtml:function () {
-                        return '<div class="edui-label %%-label" style="font-family:' +
-                            utils.unhtml(this.value) + '">' + (this.label || '') + '</div>';
-                    }
-                });
-            })(ci.label || langLabel, ci.val)
-        }
-        var ui = new editorui.Combox({
-            editor:editor,
-            items:items,
-            onselect:function (t, index) {
-                editor.execCommand('FontFamily', this.items[index].value);
-            },
-            onbuttonclick:function () {
-                this.showPopup();
-            },
-            title:title,
-            initValue:title,
-            className:'edui-for-fontfamily',
-            indexByValue:function (value) {
-                if (value) {
-                    for (var i = 0, ci; ci = this.items[i]; i++) {
-                        if (ci.value.indexOf(value) != -1)
-                            return i;
-                    }
-                }
-
-                return -1;
-            }
-        });
-        editorui.buttons['fontfamily'] = ui;
-        editor.addListener('selectionchange', function (type, causeByUi, uiReady) {
-            if (!uiReady) {
-                var state = editor.queryCommandState('FontFamily');
-                if (state == -1) {
-                    ui.setDisabled(true);
-                } else {
-                    ui.setDisabled(false);
-                    var value = editor.queryCommandValue('FontFamily');
-                    //trace:1871 ie下从源码模式切换回来时,字体会带单引号,而且会有逗号
-                    value && (value = value.replace(/['"]/g, '').split(',')[0]);
-                    ui.setValue(value);
-
-                }
-            }
-
-        });
-        return ui;
-    };
-
-    editorui.fontsize = function (editor, list, title) {
-        title = editor.options.labelMap['fontsize'] || editor.getLang("labelMap.fontsize") || '';
-        list = list || editor.options['fontsize'] || [];
-        if (!list.length) return;
-        var items = [];
-        for (var i = 0; i < list.length; i++) {
-            var size = list[i] + 'px';
-            items.push({
-                label:size,
-                value:size,
-                theme:editor.options.theme,
-                renderLabelHtml:function () {
-                    return '<div class="edui-label %%-label" style="line-height:1;font-size:' +
-                        this.value + '">' + (this.label || '') + '</div>';
-                }
-            });
-        }
-        var ui = new editorui.Combox({
-            editor:editor,
-            items:items,
-            title:title,
-            initValue:title,
-            onselect:function (t, index) {
-                editor.execCommand('FontSize', this.items[index].value);
-            },
-            onbuttonclick:function () {
-                this.showPopup();
-            },
-            className:'edui-for-fontsize'
-        });
-        editorui.buttons['fontsize'] = ui;
-        editor.addListener('selectionchange', function (type, causeByUi, uiReady) {
-            if (!uiReady) {
-                var state = editor.queryCommandState('FontSize');
-                if (state == -1) {
-                    ui.setDisabled(true);
-                } else {
-                    ui.setDisabled(false);
-                    ui.setValue(editor.queryCommandValue('FontSize'));
-                }
-            }
-
-        });
-        return ui;
-    };
-
-    editorui.paragraph = function (editor, list, title) {
-        title = editor.options.labelMap['paragraph'] || editor.getLang("labelMap.paragraph") || '';
-        list = editor.options['paragraph'] || [];
-        if (utils.isEmptyObject(list)) return;
-        var items = [];
-        for (var i in list) {
-            items.push({
-                value:i,
-                label:list[i] || editor.getLang("paragraph")[i],
-                theme:editor.options.theme,
-                renderLabelHtml:function () {
-                    return '<div class="edui-label %%-label"><span class="edui-for-' + this.value + '">' + (this.label || '') + '</span></div>';
-                }
-            })
-        }
-        var ui = new editorui.Combox({
-            editor:editor,
-            items:items,
-            title:title,
-            initValue:title,
-            className:'edui-for-paragraph',
-            onselect:function (t, index) {
-                editor.execCommand('Paragraph', this.items[index].value);
-            },
-            onbuttonclick:function () {
-                this.showPopup();
-            }
-        });
-        editorui.buttons['paragraph'] = ui;
-        editor.addListener('selectionchange', function (type, causeByUi, uiReady) {
-            if (!uiReady) {
-                var state = editor.queryCommandState('Paragraph');
-                if (state == -1) {
-                    ui.setDisabled(true);
-                } else {
-                    ui.setDisabled(false);
-                    var value = editor.queryCommandValue('Paragraph');
-                    var index = ui.indexByValue(value);
-                    if (index != -1) {
-                        ui.setValue(value);
-                    } else {
-                        ui.setValue(ui.initValue);
-                    }
-                }
-            }
-
-        });
-        return ui;
-    };
-
-
-    //自定义标题
-    editorui.customstyle = function (editor) {
-        var list = editor.options['customstyle'] || [],
-            title = editor.options.labelMap['customstyle'] || editor.getLang("labelMap.customstyle") || '';
-        if (!list.length)return;
-        var langCs = editor.getLang('customstyle');
-        for (var i = 0, items = [], t; t = list[i++];) {
-            (function (t) {
-                var ck = {};
-                ck.label = t.label ? t.label : langCs[t.name];
-                ck.style = t.style;
-                ck.className = t.className;
-                ck.tag = t.tag;
-                items.push({
-                    label:ck.label,
-                    value:ck,
-                    theme:editor.options.theme,
-                    renderLabelHtml:function () {
-                        return '<div class="edui-label %%-label">' + '<' + ck.tag + ' ' + (ck.className ? ' class="' + ck.className + '"' : "")
-                            + (ck.style ? ' style="' + ck.style + '"' : "") + '>' + ck.label + "<\/" + ck.tag + ">"
-                            + '</div>';
-                    }
-                });
-            })(t);
-        }
-
-        var ui = new editorui.Combox({
-            editor:editor,
-            items:items,
-            title:title,
-            initValue:title,
-            className:'edui-for-customstyle',
-            onselect:function (t, index) {
-                editor.execCommand('customstyle', this.items[index].value);
-            },
-            onbuttonclick:function () {
-                this.showPopup();
-            },
-            indexByValue:function (value) {
-                for (var i = 0, ti; ti = this.items[i++];) {
-                    if (ti.label == value) {
-                        return i - 1
-                    }
-                }
-                return -1;
-            }
-        });
-        editorui.buttons['customstyle'] = ui;
-        editor.addListener('selectionchange', function (type, causeByUi, uiReady) {
-            if (!uiReady) {
-                var state = editor.queryCommandState('customstyle');
-                if (state == -1) {
-                    ui.setDisabled(true);
-                } else {
-                    ui.setDisabled(false);
-                    var value = editor.queryCommandValue('customstyle');
-                    var index = ui.indexByValue(value);
-                    if (index != -1) {
-                        ui.setValue(value);
-                    } else {
-                        ui.setValue(ui.initValue);
-                    }
-                }
-            }
-
-        });
-        return ui;
-    };
-    editorui.inserttable = function (editor, iframeUrl, title) {
-        title = editor.options.labelMap['inserttable'] || editor.getLang("labelMap.inserttable") || '';
-        var ui = new editorui.TableButton({
-            editor:editor,
-            title:title,
-            className:'edui-for-inserttable',
-            onpicktable:function (t, numCols, numRows) {
-                editor.execCommand('InsertTable', {numRows:numRows, numCols:numCols, border:1});
-            },
-            onbuttonclick:function () {
-                this.showPopup();
-            }
-        });
-        editorui.buttons['inserttable'] = ui;
-        editor.addListener('selectionchange', function () {
-            ui.setDisabled(editor.queryCommandState('inserttable') == -1);
-        });
-        return ui;
-    };
-
-    editorui.lineheight = function (editor) {
-        var val = editor.options.lineheight || [];
-        if (!val.length)return;
-        for (var i = 0, ci, items = []; ci = val[i++];) {
-            items.push({
-                //todo:写死了
-                label:ci,
-                value:ci,
-                theme:editor.options.theme,
-                onclick:function () {
-                    editor.execCommand("lineheight", this.value);
-                }
-            })
-        }
-        var ui = new editorui.MenuButton({
-            editor:editor,
-            className:'edui-for-lineheight',
-            title:editor.options.labelMap['lineheight'] || editor.getLang("labelMap.lineheight") || '',
-            items:items,
-            onbuttonclick:function () {
-                var value = editor.queryCommandValue('LineHeight') || this.value;
-                editor.execCommand("LineHeight", value);
-            }
-        });
-        editorui.buttons['lineheight'] = ui;
-        editor.addListener('selectionchange', function () {
-            var state = editor.queryCommandState('LineHeight');
-            if (state == -1) {
-                ui.setDisabled(true);
-            } else {
-                ui.setDisabled(false);
-                var value = editor.queryCommandValue('LineHeight');
-                value && ui.setValue((value + '').replace(/cm/, ''));
-                ui.setChecked(state)
-            }
-        });
-        return ui;
-    };
-
-    var rowspacings = ['top', 'bottom'];
-    for (var r = 0, ri; ri = rowspacings[r++];) {
-        (function (cmd) {
-            editorui['rowspacing' + cmd] = function (editor) {
-                var val = editor.options['rowspacing' + cmd] || [];
-                if (!val.length) return null;
-                for (var i = 0, ci, items = []; ci = val[i++];) {
-                    items.push({
-                        label:ci,
-                        value:ci,
-                        theme:editor.options.theme,
-                        onclick:function () {
-                            editor.execCommand("rowspacing", this.value, cmd);
-                        }
-                    })
-                }
-                var ui = new editorui.MenuButton({
-                    editor:editor,
-                    className:'edui-for-rowspacing' + cmd,
-                    title:editor.options.labelMap['rowspacing' + cmd] || editor.getLang("labelMap.rowspacing" + cmd) || '',
-                    items:items,
-                    onbuttonclick:function () {
-                        var value = editor.queryCommandValue('rowspacing', cmd) || this.value;
-                        editor.execCommand("rowspacing", value, cmd);
-                    }
-                });
-                editorui.buttons[cmd] = ui;
-                editor.addListener('selectionchange', function () {
-                    var state = editor.queryCommandState('rowspacing', cmd);
-                    if (state == -1) {
-                        ui.setDisabled(true);
-                    } else {
-                        ui.setDisabled(false);
-                        var value = editor.queryCommandValue('rowspacing', cmd);
-                        value && ui.setValue((value + '').replace(/%/, ''));
-                        ui.setChecked(state)
-                    }
-                });
-                return ui;
-            }
-        })(ri)
-    }
-    //有序,无序列表
-    var lists = ['insertorderedlist', 'insertunorderedlist'];
-    for (var l = 0, cl; cl = lists[l++];) {
-        (function (cmd) {
-            editorui[cmd] = function (editor) {
-                var vals = editor.options[cmd],
-                    _onMenuClick = function () {
-                        editor.execCommand(cmd, this.value);
-                    }, items = [];
-                for (var i in vals) {
-                    items.push({
-                        label:vals[i] || editor.getLang()[cmd][i] || "",
-                        value:i,
-                        theme:editor.options.theme,
-                        onclick:_onMenuClick
-                    })
-                }
-                var ui = new editorui.MenuButton({
-                    editor:editor,
-                    className:'edui-for-' + cmd,
-                    title:editor.getLang("labelMap." + cmd) || '',
-                    'items':items,
-                    onbuttonclick:function () {
-                        var value = editor.queryCommandValue(cmd) || this.value;
-                        editor.execCommand(cmd, value);
-                    }
-                });
-                editorui.buttons[cmd] = ui;
-                editor.addListener('selectionchange', function () {
-                    var state = editor.queryCommandState(cmd);
-                    if (state == -1) {
-                        ui.setDisabled(true);
-                    } else {
-                        ui.setDisabled(false);
-                        var value = editor.queryCommandValue(cmd);
-                        ui.setValue(value);
-                        ui.setChecked(state)
-                    }
-                });
-                return ui;
-            };
-        })(cl)
-    }
-
-    editorui.fullscreen = function (editor, title) {
-        title = editor.options.labelMap['fullscreen'] || editor.getLang("labelMap.fullscreen") || '';
-        var ui = new editorui.Button({
-            className:'edui-for-fullscreen',
-            title:title,
-            theme:editor.options.theme,
-            onclick:function () {
-                if (editor.ui) {
-                    editor.ui.setFullScreen(!editor.ui.isFullScreen());
-                }
-                this.setChecked(editor.ui.isFullScreen());
-            }
-        });
-        editorui.buttons['fullscreen'] = ui;
-        editor.addListener('selectionchange', function () {
-            var state = editor.queryCommandState('fullscreen');
-            ui.setDisabled(state == -1);
-            ui.setChecked(editor.ui.isFullScreen());
-        });
-        return ui;
-    };
-
-    // 表情
-    editorui["emotion"] = function (editor, iframeUrl) {
-        var cmd = "emotion";
-        var ui = new editorui.MultiMenuPop({
-            title:editor.options.labelMap[cmd] || editor.getLang("labelMap." + cmd + "") || '',
-            editor:editor,
-            className:'edui-for-' + cmd,
-            iframeUrl:editor.ui.mapUrl(iframeUrl || (editor.options.iframeUrlMap || {})[cmd] || iframeUrlMap[cmd])
-        });
-        editorui.buttons[cmd] = ui;
-
-        editor.addListener('selectionchange', function () {
-            ui.setDisabled(editor.queryCommandState(cmd) == -1)
-        });
-        return ui;
-    };
-
-    editorui.autotypeset = function (editor) {
-        var ui = new editorui.AutoTypeSetButton({
-            editor:editor,
-            title:editor.options.labelMap['autotypeset'] || editor.getLang("labelMap.autotypeset") || '',
-            className:'edui-for-autotypeset',
-            onbuttonclick:function () {
-                editor.execCommand('autotypeset')
-            }
-        });
-        editorui.buttons['autotypeset'] = ui;
-        editor.addListener('selectionchange', function () {
-            ui.setDisabled(editor.queryCommandState('autotypeset') == -1);
-        });
-        return ui;
-    };
-
-})();
-
-///import core
-///commands 全屏
-///commandsName FullScreen
-///commandsTitle  全屏
-(function () {
-    var utils = baidu.editor.utils,
-        uiUtils = baidu.editor.ui.uiUtils,
-        UIBase = baidu.editor.ui.UIBase,
-        domUtils = baidu.editor.dom.domUtils;
-    var nodeStack = [];
-
-    function EditorUI(options) {
-        this.initOptions(options);
-        this.initEditorUI();
-    }
-
-    EditorUI.prototype = {
-        uiName:'editor',
-        initEditorUI:function () {
-            this.editor.ui = this;
-            this._dialogs = {};
-            this.initUIBase();
-            this._initToolbars();
-            var editor = this.editor,
-                me = this;
-
-            editor.addListener('ready', function () {
-                //提供getDialog方法
-                editor.getDialog = function (name) {
-                    return editor.ui._dialogs[name + "Dialog"];
-                };
-                domUtils.on(editor.window, 'scroll', function (evt) {
-                    baidu.editor.ui.Popup.postHide(evt);
-                });
-                //提供编辑器实时宽高(全屏时宽高不变化)
-                editor.ui._actualFrameWidth = editor.options.initialFrameWidth;
-
-                UE.browser.ie && UE.browser.version === 6 && editor.container.ownerDocument.execCommand("BackgroundImageCache", false, true);
-
-                //display bottom-bar label based on config
-                if (editor.options.elementPathEnabled) {
-                    editor.ui.getDom('elementpath').innerHTML = '<div class="edui-editor-breadcrumb">' + editor.getLang("elementPathTip") + ':</div>';
-                }
-                if (editor.options.wordCount) {
-                    function countFn() {
-                        setCount(editor,me);
-                        domUtils.un(editor.document, "click", arguments.callee);
-                    }
-                    domUtils.on(editor.document, "click", countFn);
-                    editor.ui.getDom('wordcount').innerHTML = editor.getLang("wordCountTip");
-                }
-                editor.ui._scale();
-                if (editor.options.scaleEnabled) {
-                    if (editor.autoHeightEnabled) {
-                        editor.disableAutoHeight();
-                    }
-                    me.enableScale();
-                } else {
-                    me.disableScale();
-                }
-                if (!editor.options.elementPathEnabled && !editor.options.wordCount && !editor.options.scaleEnabled) {
-                    editor.ui.getDom('elementpath').style.display = "none";
-                    editor.ui.getDom('wordcount').style.display = "none";
-                    editor.ui.getDom('scale').style.display = "none";
-                }
-
-                if (!editor.selection.isFocus())return;
-                editor.fireEvent('selectionchange', false, true);
-
-
-            });
-
-            editor.addListener('mousedown', function (t, evt) {
-                var el = evt.target || evt.srcElement;
-                baidu.editor.ui.Popup.postHide(evt, el);
-                baidu.editor.ui.ShortCutMenu.postHide(evt);
-
-            });
-            editor.addListener("delcells", function () {
-                if (UE.ui['edittip']) {
-                    new UE.ui['edittip'](editor);
-                }
-                editor.getDialog('edittip').open();
-            });
-
-            var pastePop, isPaste = false, timer;
-            editor.addListener("afterpaste", function () {
-                if(editor.queryCommandState('pasteplain'))
-                    return;
-                if(baidu.editor.ui.PastePicker){
-                    pastePop = new baidu.editor.ui.Popup({
-                        content:new baidu.editor.ui.PastePicker({editor:editor}),
-                        editor:editor,
-                        className:'edui-wordpastepop'
-                    });
-                    pastePop.render();
-                }
-                isPaste = true;
-            });
-
-            editor.addListener("afterinserthtml", function () {
-                clearTimeout(timer);
-                timer = setTimeout(function () {
-                    if (pastePop && (isPaste || editor.ui._isTransfer)) {
-                        if(pastePop.isHidden()){
-                            var span = domUtils.createElement(editor.document, 'span', {
-                                    'style':"line-height:0px;",
-                                    'innerHTML':'\ufeff'
-                                }),
-                                range = editor.selection.getRange();
-                            range.insertNode(span);
-                            var tmp= getDomNode(span, 'firstChild', 'previousSibling');
-                            pastePop.showAnchor(tmp.nodeType == 3 ? tmp.parentNode : tmp);
-                            domUtils.remove(span);
-
-                        }else{
-                            pastePop.show();
-                        }
-                        delete editor.ui._isTransfer;
-                        isPaste = false;
-                    }
-                }, 200)
-            });
-            editor.addListener('contextmenu', function (t, evt) {
-                baidu.editor.ui.Popup.postHide(evt);
-            });
-            editor.addListener('keydown', function (t, evt) {
-                if (pastePop)    pastePop.dispose(evt);
-                var keyCode = evt.keyCode || evt.which;
-                if(evt.altKey&&keyCode==90){
-                    UE.ui.buttons['fullscreen'].onclick();
-                }
-            });
-            editor.addListener('wordcount', function (type) {
-                setCount(this,me);
-            });
-            function setCount(editor,ui) {
-                editor.setOpt({
-                    wordCount:true,
-                    maximumWords:10000,
-                    wordCountMsg:editor.options.wordCountMsg || editor.getLang("wordCountMsg"),
-                    wordOverFlowMsg:editor.options.wordOverFlowMsg || editor.getLang("wordOverFlowMsg")
-                });
-                var opt = editor.options,
-                    max = opt.maximumWords,
-                    msg = opt.wordCountMsg ,
-                    errMsg = opt.wordOverFlowMsg,
-                    countDom = ui.getDom('wordcount');
-                if (!opt.wordCount) {
-                    return;
-                }
-                var count = editor.getContentLength(true);
-                if (count > max) {
-                    countDom.innerHTML = errMsg;
-                    editor.fireEvent("wordcountoverflow");
-                } else {
-                    countDom.innerHTML = msg.replace("{#leave}", max - count).replace("{#count}", count);
-                }
-            }
-
-            editor.addListener('selectionchange', function () {
-                if (editor.options.elementPathEnabled) {
-                    me[(editor.queryCommandState('elementpath') == -1 ? 'dis' : 'en') + 'ableElementPath']()
-                }
-                if (editor.options.scaleEnabled) {
-                    me[(editor.queryCommandState('scale') == -1 ? 'dis' : 'en') + 'ableScale']();
-
-                }
-            });
-            var popup = new baidu.editor.ui.Popup({
-                editor:editor,
-                content:'',
-                className:'edui-bubble',
-                _onEditButtonClick:function () {
-                    this.hide();
-                    editor.ui._dialogs.linkDialog.open();
-                },
-                _onImgEditButtonClick:function (name) {
-                    this.hide();
-                    editor.ui._dialogs[name] && editor.ui._dialogs[name].open();
-
-                },
-                _onImgSetFloat:function (value) {
-                    this.hide();
-                    editor.execCommand("imagefloat", value);
-
-                },
-                _setIframeAlign:function (value) {
-                    var frame = popup.anchorEl;
-                    var newFrame = frame.cloneNode(true);
-                    switch (value) {
-                        case -2:
-                            newFrame.setAttribute("align", "");
-                            break;
-                        case -1:
-                            newFrame.setAttribute("align", "left");
-                            break;
-                        case 1:
-                            newFrame.setAttribute("align", "right");
-                            break;
-                    }
-                    frame.parentNode.insertBefore(newFrame, frame);
-                    domUtils.remove(frame);
-                    popup.anchorEl = newFrame;
-                    popup.showAnchor(popup.anchorEl);
-                },
-                _updateIframe:function () {
-                    var frame = editor._iframe = popup.anchorEl;
-                    if(domUtils.hasClass(frame, 'ueditor_baidumap')) {
-                        editor.selection.getRange().selectNode(frame).select();
-                        editor.ui._dialogs.mapDialog.open();
-                        popup.hide();
-                    } else {
-                        editor.ui._dialogs.insertframeDialog.open();
-                        popup.hide();
-                    }
-                },
-                _onRemoveButtonClick:function (cmdName) {
-                    editor.execCommand(cmdName);
-                    this.hide();
-                },
-                queryAutoHide:function (el) {
-                    if (el && el.ownerDocument == editor.document) {
-                        if (el.tagName.toLowerCase() == 'img' || domUtils.findParentByTagName(el, 'a', true)) {
-                            return el !== popup.anchorEl;
-                        }
-                    }
-                    return baidu.editor.ui.Popup.prototype.queryAutoHide.call(this, el);
-                }
-            });
-            popup.render();
-            if (editor.options.imagePopup) {
-                editor.addListener('mouseover', function (t, evt) {
-                    evt = evt || window.event;
-                    var el = evt.target || evt.srcElement;
-                    if (editor.ui._dialogs.insertframeDialog && /iframe/ig.test(el.tagName)) {
-                        var html = popup.formatHtml(
-                            '<nobr>' + editor.getLang("property") + ': <span onclick=$$._setIframeAlign(-2) class="edui-clickable">' + editor.getLang("default") + '</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(-1) class="edui-clickable">' + editor.getLang("justifyleft") + '</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(1) class="edui-clickable">' + editor.getLang("justifyright") + '</span>&nbsp;&nbsp;' +
-                                ' <span onclick="$$._updateIframe( this);" class="edui-clickable">' + editor.getLang("modify") + '</span></nobr>');
-                        if (html) {
-                            popup.getDom('content').innerHTML = html;
-                            popup.anchorEl = el;
-                            popup.showAnchor(popup.anchorEl);
-                        } else {
-                            popup.hide();
-                        }
-                    }
-                });
-                editor.addListener('selectionchange', function (t, causeByUi) {
-                    if (!causeByUi) return;
-                    var html = '', str = "",
-                        img = editor.selection.getRange().getClosedNode(),
-                        dialogs = editor.ui._dialogs;
-                    if (img && img.tagName == 'IMG') {
-                        var dialogName = 'insertimageDialog';
-                        if (img.className.indexOf("edui-faked-video") != -1 || img.className.indexOf("edui-upload-video") != -1) {
-                            dialogName = "insertvideoDialog"
-                        }
-                        if (img.className.indexOf("edui-faked-webapp") != -1) {
-                            dialogName = "webappDialog"
-                        }
-                        if (img.src.indexOf("http://api.map.baidu.com") != -1) {
-                            dialogName = "mapDialog"
-                        }
-                        if (img.className.indexOf("edui-faked-music") != -1) {
-                            dialogName = "musicDialog"
-                        }
-                        if (img.src.indexOf("http://maps.google.com/maps/api/staticmap") != -1) {
-                            dialogName = "gmapDialog"
-                        }
-                        if (img.getAttribute("anchorname")) {
-                            dialogName = "anchorDialog";
-                            html = popup.formatHtml(
-                                '<nobr>' + editor.getLang("property") + ': <span onclick=$$._onImgEditButtonClick("anchorDialog") class="edui-clickable">' + editor.getLang("modify") + '</span>&nbsp;&nbsp;' +
-                                    '<span onclick=$$._onRemoveButtonClick(\'anchor\') class="edui-clickable">' + editor.getLang("delete") + '</span></nobr>');
-                        }
-                        if (img.getAttribute("word_img")) {
-                            //todo 放到dialog去做查询
-                            editor.word_img = [img.getAttribute("word_img")];
-                            dialogName = "wordimageDialog"
-                        }
-                        if (!dialogs[dialogName]) {
-                            return;
-                        }
-                        str = '<nobr>' + editor.getLang("property") + ': '+
-                            '<span onclick=$$._onImgSetFloat("none") class="edui-clickable">' + editor.getLang("default") + '</span>&nbsp;&nbsp;' +
-                            '<span onclick=$$._onImgSetFloat("left") class="edui-clickable">' + editor.getLang("justifyleft") + '</span>&nbsp;&nbsp;' +
-                            '<span onclick=$$._onImgSetFloat("right") class="edui-clickable">' + editor.getLang("justifyright") + '</span>&nbsp;&nbsp;' +
-                            '<span onclick=$$._onImgSetFloat("center") class="edui-clickable">' + editor.getLang("justifycenter") + '</span>&nbsp;&nbsp;'+
-                            '<span onclick="$$._onImgEditButtonClick(\'' + dialogName + '\');" class="edui-clickable">' + editor.getLang("modify") + '</span></nobr>';
-
-                        !html && (html = popup.formatHtml(str))
-
-                    }
-                    if (editor.ui._dialogs.linkDialog) {
-                        var link = editor.queryCommandValue('link');
-                        var url;
-                        if (link && (url = (link.getAttribute('_href') || link.getAttribute('href', 2)))) {
-                            var txt = url;
-                            if (url.length > 30) {
-                                txt = url.substring(0, 20) + "...";
-                            }
-                            if (html) {
-                                html += '<div style="height:5px;"></div>'
-                            }
-                            html += popup.formatHtml(
-                                '<nobr>' + editor.getLang("anthorMsg") + ': <a target="_blank" href="' + url + '" title="' + url + '" >' + txt + '</a>' +
-                                    ' <span class="edui-clickable" onclick="$$._onEditButtonClick();">' + editor.getLang("modify") + '</span>' +
-                                    ' <span class="edui-clickable" onclick="$$._onRemoveButtonClick(\'unlink\');"> ' + editor.getLang("clear") + '</span></nobr>');
-                            popup.showAnchor(link);
-                        }
-                    }
-
-                    if (html) {
-                        popup.getDom('content').innerHTML = html;
-                        popup.anchorEl = img || link;
-                        popup.showAnchor(popup.anchorEl);
-                    } else {
-                        popup.hide();
-                    }
-                });
-            }
-
-        },
-        _initToolbars:function () {
-            var editor = this.editor;
-            var toolbars = this.toolbars || [];
-            var toolbarUis = [];
-            for (var i = 0; i < toolbars.length; i++) {
-                var toolbar = toolbars[i];
-                var toolbarUi = new baidu.editor.ui.Toolbar({theme:editor.options.theme});
-                for (var j = 0; j < toolbar.length; j++) {
-                    var toolbarItem = toolbar[j];
-                    var toolbarItemUi = null;
-                    if (typeof toolbarItem == 'string') {
-                        toolbarItem = toolbarItem.toLowerCase();
-                        if (toolbarItem == '|') {
-                            toolbarItem = 'Separator';
-                        }
-                        if(toolbarItem == '||'){
-                            toolbarItem = 'Breakline';
-                        }
-                        if (baidu.editor.ui[toolbarItem]) {
-                            toolbarItemUi = new baidu.editor.ui[toolbarItem](editor);
-                        }
-
-                        //fullscreen这里单独处理一下,放到首行去
-                        if (toolbarItem == 'fullscreen') {
-                            if (toolbarUis && toolbarUis[0]) {
-                                toolbarUis[0].items.splice(0, 0, toolbarItemUi);
-                            } else {
-                                toolbarItemUi && toolbarUi.items.splice(0, 0, toolbarItemUi);
-                            }
-
-                            continue;
-
-
-                        }
-                    } else {
-                        toolbarItemUi = toolbarItem;
-                    }
-                    if (toolbarItemUi && toolbarItemUi.id) {
-
-                        toolbarUi.add(toolbarItemUi);
-                    }
-                }
-                toolbarUis[i] = toolbarUi;
-            }
-            this.toolbars = toolbarUis;
-        },
-        getHtmlTpl:function () {
-            return '<div id="##" class="%%">' +
-                '<div id="##_toolbarbox" class="%%-toolbarbox">' +
-                (this.toolbars.length ?
-                    '<div id="##_toolbarboxouter" class="%%-toolbarboxouter"><div class="%%-toolbarboxinner">' +
-                        this.renderToolbarBoxHtml() +
-                        '</div></div>' : '') +
-                '<div id="##_toolbarmsg" class="%%-toolbarmsg" style="display:none;">' +
-                '<div id = "##_upload_dialog" class="%%-toolbarmsg-upload" onclick="$$.showWordImageDialog();">' + this.editor.getLang("clickToUpload") + '</div>' +
-                '<div class="%%-toolbarmsg-close" onclick="$$.hideToolbarMsg();">x</div>' +
-                '<div id="##_toolbarmsg_label" class="%%-toolbarmsg-label"></div>' +
-                '<div style="height:0;overflow:hidden;clear:both;"></div>' +
-                '</div>' +
-                '</div>' +
-                '<div id="##_iframeholder" class="%%-iframeholder"></div>' +
-                //modify wdcount by matao
-                '<div id="##_bottombar" class="%%-bottomContainer"><table><tr>' +
-                '<td id="##_elementpath" class="%%-bottombar"></td>' +
-                '<td id="##_wordcount" class="%%-wordcount"></td>' +
-                '<td id="##_scale" class="%%-scale"><div class="%%-icon"></div></td>' +
-                '</tr></table></div>' +
-                '<div id="##_scalelayer"></div>' +
-                '</div>';
-        },
-        showWordImageDialog:function () {
-            this._dialogs['wordimageDialog'].open();
-        },
-        renderToolbarBoxHtml:function () {
-            var buff = [];
-            for (var i = 0; i < this.toolbars.length; i++) {
-                buff.push(this.toolbars[i].renderHtml());
-            }
-            return buff.join('');
-        },
-        setFullScreen:function (fullscreen) {
-
-            var editor = this.editor,
-                container = editor.container.parentNode.parentNode;
-            if (this._fullscreen != fullscreen) {
-                this._fullscreen = fullscreen;
-                this.editor.fireEvent('beforefullscreenchange', fullscreen);
-                if (baidu.editor.browser.gecko) {
-                    var bk = editor.selection.getRange().createBookmark();
-                }
-                if (fullscreen) {
-                    while (container.tagName != "BODY") {
-                        var position = baidu.editor.dom.domUtils.getComputedStyle(container, "position");
-                        nodeStack.push(position);
-                        container.style.position = "static";
-                        container = container.parentNode;
-                    }
-                    this._bakHtmlOverflow = document.documentElement.style.overflow;
-                    this._bakBodyOverflow = document.body.style.overflow;
-                    this._bakAutoHeight = this.editor.autoHeightEnabled;
-                    this._bakScrollTop = Math.max(document.documentElement.scrollTop, document.body.scrollTop);
-
-                    this._bakEditorContaninerWidth = editor.iframe.parentNode.offsetWidth;
-                    if (this._bakAutoHeight) {
-                        //当全屏时不能执行自动长高
-                        editor.autoHeightEnabled = false;
-                        this.editor.disableAutoHeight();
-                    }
-
-                    document.documentElement.style.overflow = 'hidden';
-                    //修复,滚动条不收起的问题
-
-                    window.scrollTo(0,window.scrollY);
-                    this._bakCssText = this.getDom().style.cssText;
-                    this._bakCssText1 = this.getDom('iframeholder').style.cssText;
-                    editor.iframe.parentNode.style.width = '';
-                    this._updateFullScreen();
-                } else {
-                    while (container.tagName != "BODY") {
-                        container.style.position = nodeStack.shift();
-                        container = container.parentNode;
-                    }
-                    this.getDom().style.cssText = this._bakCssText;
-                    this.getDom('iframeholder').style.cssText = this._bakCssText1;
-                    if (this._bakAutoHeight) {
-                        editor.autoHeightEnabled = true;
-                        this.editor.enableAutoHeight();
-                    }
-
-                    document.documentElement.style.overflow = this._bakHtmlOverflow;
-                    document.body.style.overflow = this._bakBodyOverflow;
-                    editor.iframe.parentNode.style.width = this._bakEditorContaninerWidth + 'px';
-                    window.scrollTo(0, this._bakScrollTop);
-                }
-                if (browser.gecko && editor.body.contentEditable === 'true') {
-                    var input = document.createElement('input');
-                    document.body.appendChild(input);
-                    editor.body.contentEditable = false;
-                    setTimeout(function () {
-                        input.focus();
-                        setTimeout(function () {
-                            editor.body.contentEditable = true;
-                            editor.fireEvent('fullscreenchanged', fullscreen);
-                            editor.selection.getRange().moveToBookmark(bk).select(true);
-                            baidu.editor.dom.domUtils.remove(input);
-                            fullscreen && window.scroll(0, 0);
-                        }, 0)
-                    }, 0)
-                }
-
-                if(editor.body.contentEditable === 'true'){
-                    this.editor.fireEvent('fullscreenchanged', fullscreen);
-                    this.triggerLayout();
-                }
-
-            }
-        },
-        _updateFullScreen:function () {
-            if (this._fullscreen) {
-                var vpRect = uiUtils.getViewportRect();
-                this.getDom().style.cssText = 'border:0;position:absolute;left:0;top:' + (this.editor.options.topOffset || 0) + 'px;width:' + vpRect.width + 'px;height:' + vpRect.height + 'px;z-index:' + (this.getDom().style.zIndex * 1 + 100);
-                uiUtils.setViewportOffset(this.getDom(), { left:0, top:this.editor.options.topOffset || 0 });
-                this.editor.setHeight(vpRect.height - this.getDom('toolbarbox').offsetHeight - this.getDom('bottombar').offsetHeight - (this.editor.options.topOffset || 0));
-                //不手动调一下,会导致全屏失效
-                if(browser.gecko){
-                    try{
-                        window.onresize();
-                    }catch(e){
-
-                    }
-
-                }
-            }
-        },
-        _updateElementPath:function () {
-            var bottom = this.getDom('elementpath'), list;
-            if (this.elementPathEnabled && (list = this.editor.queryCommandValue('elementpath'))) {
-
-                var buff = [];
-                for (var i = 0, ci; ci = list[i]; i++) {
-                    buff[i] = this.formatHtml('<span unselectable="on" onclick="$$.editor.execCommand(&quot;elementpath&quot;, &quot;' + i + '&quot;);">' + ci + '</span>');
-                }
-                bottom.innerHTML = '<div class="edui-editor-breadcrumb" onmousedown="return false;">' + this.editor.getLang("elementPathTip") + ': ' + buff.join(' &gt; ') + '</div>';
-
-            } else {
-                bottom.style.display = 'none'
-            }
-        },
-        disableElementPath:function () {
-            var bottom = this.getDom('elementpath');
-            bottom.innerHTML = '';
-            bottom.style.display = 'none';
-            this.elementPathEnabled = false;
-
-        },
-        enableElementPath:function () {
-            var bottom = this.getDom('elementpath');
-            bottom.style.display = '';
-            this.elementPathEnabled = true;
-            this._updateElementPath();
-        },
-        _scale:function () {
-            var doc = document,
-                editor = this.editor,
-                editorHolder = editor.container,
-                editorDocument = editor.document,
-                toolbarBox = this.getDom("toolbarbox"),
-                bottombar = this.getDom("bottombar"),
-                scale = this.getDom("scale"),
-                scalelayer = this.getDom("scalelayer");
-
-            var isMouseMove = false,
-                position = null,
-                minEditorHeight = 0,
-                minEditorWidth = editor.options.minFrameWidth,
-                pageX = 0,
-                pageY = 0,
-                scaleWidth = 0,
-                scaleHeight = 0;
-
-            function down() {
-                position = domUtils.getXY(editorHolder);
-
-                if (!minEditorHeight) {
-                    minEditorHeight = editor.options.minFrameHeight + toolbarBox.offsetHeight + bottombar.offsetHeight;
-                }
-
-                scalelayer.style.cssText = "position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:" + editorHolder.offsetWidth + "px;height:"
-                    + editorHolder.offsetHeight + "px;z-index:" + (editor.options.zIndex + 1);
-
-                domUtils.on(doc, "mousemove", move);
-                domUtils.on(editorDocument, "mouseup", up);
-                domUtils.on(doc, "mouseup", up);
-            }
-
-            var me = this;
-            //by xuheng 全屏时关掉缩放
-            this.editor.addListener('fullscreenchanged', function (e, fullScreen) {
-                if (fullScreen) {
-                    me.disableScale();
-
-                } else {
-                    if (me.editor.options.scaleEnabled) {
-                        me.enableScale();
-                        var tmpNode = me.editor.document.createElement('span');
-                        me.editor.body.appendChild(tmpNode);
-                        me.editor.body.style.height = Math.max(domUtils.getXY(tmpNode).y, me.editor.iframe.offsetHeight - 20) + 'px';
-                        domUtils.remove(tmpNode)
-                    }
-                }
-            });
-            function move(event) {
-                clearSelection();
-                var e = event || window.event;
-                pageX = e.pageX || (doc.documentElement.scrollLeft + e.clientX);
-                pageY = e.pageY || (doc.documentElement.scrollTop + e.clientY);
-                scaleWidth = pageX - position.x;
-                scaleHeight = pageY - position.y;
-
-                if (scaleWidth >= minEditorWidth) {
-                    isMouseMove = true;
-                    scalelayer.style.width = scaleWidth + 'px';
-                }
-                if (scaleHeight >= minEditorHeight) {
-                    isMouseMove = true;
-                    scalelayer.style.height = scaleHeight + "px";
-                }
-            }
-
-            function up() {
-                if (isMouseMove) {
-                    isMouseMove = false;
-                    editor.ui._actualFrameWidth = scalelayer.offsetWidth - 2;
-                    editorHolder.style.width = editor.ui._actualFrameWidth + 'px';
-
-                    editor.setHeight(scalelayer.offsetHeight - bottombar.offsetHeight - toolbarBox.offsetHeight - 2);
-                }
-                if (scalelayer) {
-                    scalelayer.style.display = "none";
-                }
-                clearSelection();
-                domUtils.un(doc, "mousemove", move);
-                domUtils.un(editorDocument, "mouseup", up);
-                domUtils.un(doc, "mouseup", up);
-            }
-
-            function clearSelection() {
-                if (browser.ie)
-                    doc.selection.clear();
-                else
-                    window.getSelection().removeAllRanges();
-            }
-
-            this.enableScale = function () {
-                //trace:2868
-                if (editor.queryCommandState("source") == 1)    return;
-                scale.style.display = "";
-                this.scaleEnabled = true;
-                domUtils.on(scale, "mousedown", down);
-            };
-            this.disableScale = function () {
-                scale.style.display = "none";
-                this.scaleEnabled = false;
-                domUtils.un(scale, "mousedown", down);
-            };
-        },
-        isFullScreen:function () {
-            return this._fullscreen;
-        },
-        postRender:function () {
-            UIBase.prototype.postRender.call(this);
-            for (var i = 0; i < this.toolbars.length; i++) {
-                this.toolbars[i].postRender();
-            }
-            var me = this;
-            var timerId,
-                domUtils = baidu.editor.dom.domUtils,
-                updateFullScreenTime = function () {
-                    clearTimeout(timerId);
-                    timerId = setTimeout(function () {
-                        me._updateFullScreen();
-                    });
-                };
-            domUtils.on(window, 'resize', updateFullScreenTime);
-
-            me.addListener('destroy', function () {
-                domUtils.un(window, 'resize', updateFullScreenTime);
-                clearTimeout(timerId);
-            })
-        },
-        showToolbarMsg:function (msg, flag) {
-            this.getDom('toolbarmsg_label').innerHTML = msg;
-            this.getDom('toolbarmsg').style.display = '';
-            //
-            if (!flag) {
-                var w = this.getDom('upload_dialog');
-                w.style.display = 'none';
-            }
-        },
-        hideToolbarMsg:function () {
-            this.getDom('toolbarmsg').style.display = 'none';
-        },
-        mapUrl:function (url) {
-            return url ? url.replace('~/', this.editor.options.UEDITOR_HOME_URL || '') : ''
-        },
-        triggerLayout:function () {
-            var dom = this.getDom();
-            if (dom.style.zoom == '1') {
-                dom.style.zoom = '100%';
-            } else {
-                dom.style.zoom = '1';
-            }
-        }
-    };
-    utils.inherits(EditorUI, baidu.editor.ui.UIBase);
-
-
-    var instances = {};
-
-
-    UE.ui.Editor = function (options) {
-        var editor = new UE.Editor(options);
-        editor.options.editor = editor;
-        utils.loadFile(document, {
-            href:editor.options.themePath + editor.options.theme + "/css/ueditor.css",
-            tag:"link",
-            type:"text/css",
-            rel:"stylesheet"
-        });
-
-        var oldRender = editor.render;
-        editor.render = function (holder) {
-            if (holder.constructor === String) {
-                editor.key = holder;
-                instances[holder] = editor;
-            }
-            utils.domReady(function () {
-                editor.langIsReady ? renderUI() : editor.addListener("langReady", renderUI);
-                function renderUI() {
-                    editor.setOpt({
-                        labelMap:editor.options.labelMap || editor.getLang('labelMap')
-                    });
-                    new EditorUI(editor.options);
-                    if (holder) {
-                        if (holder.constructor === String) {
-                            holder = document.getElementById(holder);
-                        }
-                        holder && holder.getAttribute('name') && ( editor.options.textarea = holder.getAttribute('name'));
-                        if (holder && /script|textarea/ig.test(holder.tagName)) {
-                            var newDiv = document.createElement('div');
-                            holder.parentNode.insertBefore(newDiv, holder);
-                            var cont = holder.value || holder.innerHTML;
-                            editor.options.initialContent = /^[\t\r\n ]*$/.test(cont) ? editor.options.initialContent :
-                                cont.replace(/>[\n\r\t]+([ ]{4})+/g, '>')
-                                    .replace(/[\n\r\t]+([ ]{4})+</g, '<')
-                                    .replace(/>[\n\r\t]+</g, '><');
-                            holder.className && (newDiv.className = holder.className);
-                            holder.style.cssText && (newDiv.style.cssText = holder.style.cssText);
-                            if (/textarea/i.test(holder.tagName)) {
-                                editor.textarea = holder;
-                                editor.textarea.style.display = 'none';
-
-                            } else {
-                                holder.parentNode.removeChild(holder);
-                                holder.id && (newDiv.id = holder.id);
-                            }
-                            holder = newDiv;
-                            holder.innerHTML = '';
-                        }
-
-                    }
-                    domUtils.addClass(holder, "edui-" + editor.options.theme);
-                    editor.ui.render(holder);
-                    var opt = editor.options;
-                    //给实例添加一个编辑器的容器引用
-                    editor.container = editor.ui.getDom();
-                    var parents = domUtils.findParents(holder,true);
-                    var displays = [];
-                    for(var i = 0 ,ci;ci=parents[i];i++){
-                        displays[i] = ci.style.display;
-                        ci.style.display = 'block'
-                    }
-                    if (opt.initialFrameWidth) {
-                        opt.minFrameWidth = opt.initialFrameWidth;
-                    } else {
-                        opt.minFrameWidth = opt.initialFrameWidth = holder.offsetWidth;
-                    }
-                    if (opt.initialFrameHeight) {
-                        opt.minFrameHeight = opt.initialFrameHeight;
-                    } else {
-                        opt.initialFrameHeight = opt.minFrameHeight = holder.offsetHeight;
-                    }
-                    for(var i = 0 ,ci;ci=parents[i];i++){
-                        ci.style.display =  displays[i]
-                    }
-                    //编辑器最外容器设置了高度,会导致,编辑器不占位
-                    //todo 先去掉,没有找到原因
-                    if(holder.style.height){
-                        holder.style.height = ''
-                    }
-                    editor.container.style.width = opt.initialFrameWidth + (/%$/.test(opt.initialFrameWidth) ? '' : 'px');
-                    editor.container.style.zIndex = opt.zIndex;
-                    oldRender.call(editor, editor.ui.getDom('iframeholder'));
-                    editor.fireEvent("afteruiready");
-                }
-            })
-        };
-        return editor;
-    };
-
-
-    /**
-     * @file
-     * @name UE
-     * @short UE
-     * @desc UEditor的顶部命名空间
-     */
-    /**
-     * @name getEditor
-     * @since 1.2.4+
-     * @grammar UE.getEditor(id,[opt])  =>  Editor实例
-     * @desc 提供一个全局的方法得到编辑器实例
-     *
-     * * ''id''  放置编辑器的容器id, 如果容器下的编辑器已经存在,就直接返回
-     * * ''opt'' 编辑器的可选参数
-     * @example
-     *  UE.getEditor('containerId',{onready:function(){//创建一个编辑器实例
-     *      this.setContent('hello')
-     *  }});
-     *  UE.getEditor('containerId'); //返回刚创建的实例
-     *
-     */
-    UE.getEditor = function (id, opt) {
-        var editor = instances[id];
-        if (!editor) {
-            editor = instances[id] = new UE.ui.Editor(opt);
-            editor.render(id);
-        }
-        return editor;
-    };
-
-
-    UE.delEditor = function (id) {
-        var editor;
-        if (editor = instances[id]) {
-            editor.key && editor.destroy();
-            delete instances[id]
-        }
-    }
-})();
-///import core
-///import uicore
- ///commands 表情
-(function(){
-    var utils = baidu.editor.utils,
-        Popup = baidu.editor.ui.Popup,
-        SplitButton = baidu.editor.ui.SplitButton,
-        MultiMenuPop = baidu.editor.ui.MultiMenuPop = function(options){
-            this.initOptions(options);
-            this.initMultiMenu();
-        };
-
-    MultiMenuPop.prototype = {
-        initMultiMenu: function (){
-            var me = this;
-            this.popup = new Popup({
-                content: '',
-                editor : me.editor,
-                iframe_rendered: false,
-                onshow: function (){
-                    if (!this.iframe_rendered) {
-                        this.iframe_rendered = true;
-                        this.getDom('content').innerHTML = '<iframe id="'+me.id+'_iframe" src="'+ me.iframeUrl +'" frameborder="0"></iframe>';
-                        me.editor.container.style.zIndex && (this.getDom().style.zIndex = me.editor.container.style.zIndex * 1 + 1);
-                    }
-                }
-               // canSideUp:false,
-               // canSideLeft:false
-            });
-            this.onbuttonclick = function(){
-                this.showPopup();
-            };
-            this.initSplitButton();
-        }
-
-    };
-
-    utils.inherits(MultiMenuPop, SplitButton);
-})();
-
-(function () {
-    var UI = baidu.editor.ui,
-        UIBase = UI.UIBase,
-        uiUtils = UI.uiUtils,
-        utils = baidu.editor.utils,
-        domUtils = baidu.editor.dom.domUtils;
-
-    var allMenus = [],//存储所有快捷菜单
-        timeID,
-        isSubMenuShow = false;//是否有子pop显示
-
-    var ShortCutMenu = UI.ShortCutMenu = function (options) {
-        this.initOptions (options);
-        this.initShortCutMenu ();
-    };
-
-    ShortCutMenu.postHide = hideAllMenu;
-
-    ShortCutMenu.prototype = {
-        isHidden : true ,
-        SPACE : 5 ,
-        initShortCutMenu : function () {
-            this.items = this.items || [];
-            this.initUIBase ();
-            this.initItems ();
-            this.initEvent ();
-            allMenus.push (this);
-        } ,
-        initEvent : function () {
-            var me = this,
-                doc = me.editor.document;
-
-            domUtils.on (doc , "mousemove" , function (e) {
-                if (me.isHidden === false) {
-                    //有pop显示就不隐藏快捷菜单
-                    if (me.getSubMenuMark () || me.eventType == "contextmenu")   return;
-
-
-                    var flag = true,
-                        el = me.getDom (),
-                        wt = el.offsetWidth,
-                        ht = el.offsetHeight,
-                        distanceX = wt / 2 + me.SPACE,//距离中心X标准
-                        distanceY = ht / 2,//距离中心Y标准
-                        x = Math.abs (e.screenX - me.left),//离中心距离横坐标
-                        y = Math.abs (e.screenY - me.top);//离中心距离纵坐标
-
-                    clearTimeout (timeID);
-                    timeID = setTimeout (function () {
-                        if (y > 0 && y < distanceY) {
-                            me.setOpacity (el , "1");
-                        } else if (y > distanceY && y < distanceY + 70) {
-                            me.setOpacity (el , "0.5");
-                            flag = false;
-                        } else if (y > distanceY + 70 && y < distanceY + 140) {
-                            me.hide ();
-                        }
-
-                        if (flag && x > 0 && x < distanceX) {
-                            me.setOpacity (el , "1")
-                        } else if (x > distanceX && x < distanceX + 70) {
-                            me.setOpacity (el , "0.5")
-                        } else if (x > distanceX + 70 && x < distanceX + 140) {
-                            me.hide ();
-                        }
-                    });
-                }
-            });
-
-            //ie\ff下 mouseout不准
-            if (browser.chrome) {
-                domUtils.on (doc , "mouseout" , function (e) {
-                    var relatedTgt = e.relatedTarget || e.toElement;
-
-                    if (relatedTgt == null || relatedTgt.tagName == "HTML") {
-                        me.hide ();
-                    }
-                });
-            }
-
-            me.editor.addListener ("afterhidepop" , function () {
-                if (!me.isHidden) {
-                    isSubMenuShow = true;
-                }
-            });
-
-        } ,
-        initItems : function () {
-            if (utils.isArray (this.items)) {
-                for (var i = 0, len = this.items.length ; i < len ; i++) {
-                    var item = this.items[i].toLowerCase ();
-
-                    if (UI[item]) {
-                        this.items[i] = new UI[item] (this.editor);
-                        this.items[i].className += " edui-shortcutsubmenu ";
-                    }
-                }
-            }
-        } ,
-        setOpacity : function (el , value) {
-            if (browser.ie && browser.version < 9) {
-                el.style.filter = "alpha(opacity = " + parseFloat (value) * 100 + ");"
-            } else {
-                el.style.opacity = value;
-            }
-        } ,
-        getSubMenuMark : function () {
-            isSubMenuShow = false;
-            var layerEle = uiUtils.getFixedLayer ();
-            var list = domUtils.getElementsByTagName (layerEle , "div" , function (node) {
-                return domUtils.hasClass (node , "edui-shortcutsubmenu edui-popup")
-            });
-
-            for (var i = 0, node ; node = list[i++] ;) {
-                if (node.style.display != "none") {
-                    isSubMenuShow = true;
-                }
-            }
-            return isSubMenuShow;
-        } ,
-        show : function (e , hasContextmenu) {
-            var me = this,
-                offset = {},
-                el = this.getDom (),
-                fixedlayer = uiUtils.getFixedLayer ();
-
-            function setPos (offset) {
-                if (offset.left < 0) {
-                    offset.left = 0;
-                }
-                if (offset.top < 0) {
-                    offset.top = 0;
-                }
-                el.style.cssText = "position:absolute;left:" + offset.left + "px;top:" + offset.top + "px;";
-            }
-
-            function setPosByCxtMenu (menu) {
-                if (!menu.tagName) {
-                    menu = menu.getDom ();
-                }
-                offset.left = parseInt (menu.style.left);
-                offset.top = parseInt (menu.style.top);
-                offset.top -= el.offsetHeight + 15;
-                setPos (offset);
-            }
-
-
-            me.eventType = e.type;
-            el.style.cssText = "display:block;left:-9999px";
-
-            if (e.type == "contextmenu" && hasContextmenu) {
-                var menu = domUtils.getElementsByTagName (fixedlayer , "div" , "edui-contextmenu")[0];
-                if (menu) {
-                    setPosByCxtMenu (menu)
-                } else {
-                    me.editor.addListener ("aftershowcontextmenu" , function (type , menu) {
-                        setPosByCxtMenu (menu);
-                    });
-                }
-            } else {
-                offset = uiUtils.getViewportOffsetByEvent (e);
-                offset.top -= el.offsetHeight + me.SPACE;
-                offset.left += me.SPACE + 20;
-                setPos (offset);
-                me.setOpacity (el , 0.2);
-            }
-
-
-            me.isHidden = false;
-            me.left = e.screenX + el.offsetWidth / 2 - me.SPACE;
-            me.top = e.screenY - (el.offsetHeight / 2) - me.SPACE;
-
-            if (me.editor) {
-                el.style.zIndex = me.editor.container.style.zIndex * 1 + 10;
-                fixedlayer.style.zIndex = el.style.zIndex - 1;
-            }
-        } ,
-        hide : function () {
-            if (this.getDom ()) {
-                this.getDom ().style.display = "none";
-            }
-            this.isHidden = true;
-        } ,
-        postRender : function () {
-            if (utils.isArray (this.items)) {
-                for (var i = 0, item ; item = this.items[i++] ;) {
-                    item.postRender ();
-                }
-            }
-        } ,
-        getHtmlTpl : function () {
-            var buff;
-            if (utils.isArray (this.items)) {
-                buff = [];
-                for (var i = 0 ; i < this.items.length ; i++) {
-                    buff[i] = this.items[i].renderHtml ();
-                }
-                buff = buff.join ("");
-            } else {
-                buff = this.items;
-            }
-
-            return '<div id="##" class="%% edui-toolbar" data-src="shortcutmenu" onmousedown="return false;" onselectstart="return false;" >' +
-                buff +
-                '</div>';
-        }
-    };
-
-    utils.inherits (ShortCutMenu , UIBase);
-
-    function hideAllMenu (e) {
-        var tgt = e.target || e.srcElement,
-            cur = domUtils.findParent (tgt , function (node) {
-                return domUtils.hasClass (node , "edui-shortcutmenu") || domUtils.hasClass (node , "edui-popup");
-            } , true);
-
-        if (!cur) {
-            for (var i = 0, menu ; menu = allMenus[i++] ;) {
-                menu.hide ()
-            }
-        }
-    }
-
-    domUtils.on (document , 'mousedown' , function (e) {
-        hideAllMenu (e);
-    });
-
-    domUtils.on (window , 'scroll' , function (e) {
-        hideAllMenu (e);
-    });
-
-}) ();
-
-(function (){
-    var utils = baidu.editor.utils,
-        UIBase = baidu.editor.ui.UIBase,
-        Breakline = baidu.editor.ui.Breakline = function (options){
-            this.initOptions(options);
-            this.initSeparator();
-        };
-    Breakline.prototype = {
-        uiName: 'Breakline',
-        initSeparator: function (){
-            this.initUIBase();
-        },
-        getHtmlTpl: function (){
-            return '<br/>';
-        }
-    };
-    utils.inherits(Breakline, UIBase);
-
-})();
-
-
-})()

+ 0 - 28
DjangoUeditor/static/ueditor/uparse.js

@@ -1,28 +0,0 @@
-(function(){(function(){UE=window.UE||{};var f=!!window.ActiveXObject,h={removeLastbs:function(a){return a.replace(/\/$/,"")},extend:function(a,b){for(var d=arguments,c=this.isBoolean(d[d.length-1])?d[d.length-1]:!1,e=this.isBoolean(d[d.length-1])?d.length-1:d.length,k=1;k<e;k++){var n=d[k],l;for(l in n)c&&a.hasOwnProperty(l)||(a[l]=n[l])}return a},isIE:f,cssRule:f?function(a,b,d){var c;d=d||document;c=d.indexList?d.indexList:d.indexList={};var e;if(c[a])e=d.styleSheets[c[a]];else{if(void 0===b)return"";
-e=d.createStyleSheet("",d=d.styleSheets.length);c[a]=d}if(void 0===b)return e.cssText;e.cssText=e.cssText+"\n"+(b||"")}:function(a,b,d){d=d||document;var c=d.getElementsByTagName("head")[0],e;if(!(e=d.getElementById(a))){if(void 0===b)return"";e=d.createElement("style");e.id=a;c.appendChild(e)}if(void 0===b)return e.innerHTML;""!==b?e.innerHTML=e.innerHTML+"\n"+b:c.removeChild(e)},domReady:function(a){var b=window.document;"complete"===b.readyState?a():f?(function(){if(!b.isReady){try{b.documentElement.doScroll("left")}catch(d){setTimeout(arguments.callee,
-0);return}a()}}(),window.attachEvent("onload",function(){a()})):(b.addEventListener("DOMContentLoaded",function(){b.removeEventListener("DOMContentLoaded",arguments.callee,!1);a()},!1),window.addEventListener("load",function(){a()},!1))},each:function(a,b,d){if(null!=a)if(a.length===+a.length)for(var c=0,e=a.length;c<e;c++){if(!1===b.call(d,a[c],c,a))return!1}else for(c in a)if(a.hasOwnProperty(c)&&!1===b.call(d,a[c],c,a))return!1},inArray:function(a,b){var d=-1;this.each(a,function(a,e){if(a===b)return d=
-e,!1});return d},pushItem:function(a,b){-1==this.inArray(a,b)&&a.push(b)},trim:function(a){return a.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g,"")},indexOf:function(a,b,d){var c=-1;d=this.isNumber(d)?d:0;this.each(a,function(a,k){if(k>=d&&a===b)return c=k,!1});return c},hasClass:function(a,b){b=b.replace(/(^[ ]+)|([ ]+$)/g,"").replace(/[ ]{2,}/g," ").split(" ");for(var d=0,c,e=a.className;c=b[d++];)if(!RegExp("\\b"+c+"\\b","i").test(e))return!1;return d-1==b.length},addClass:function(a,b){if(a){b=this.trim(b).replace(/[ ]{2,}/g,
-" ").split(" ");for(var d=0,c,e=a.className;c=b[d++];)RegExp("\\b"+c+"\\b").test(e)||(e+=" "+c);a.className=h.trim(e)}},removeClass:function(a,b){b=this.isArray(b)?b:this.trim(b).replace(/[ ]{2,}/g," ").split(" ");for(var d=0,c,e=a.className;c=b[d++];)e=e.replace(RegExp("\\b"+c+"\\b"),"");e=this.trim(e).replace(/[ ]{2,}/g," ");a.className=e;!e&&a.removeAttribute("className")},on:function(a,b,d){var c=this.isArray(b)?b:b.split(/\s+/),e=c.length;if(e)for(;e--;)if(b=c[e],a.addEventListener)a.addEventListener(b,
-d,!1);else{d._d||(d._d={els:[]});var k=b+d.toString(),n=h.indexOf(d._d.els,a);d._d[k]&&-1!=n||(-1==n&&d._d.els.push(a),d._d[k]||(d._d[k]=function(a){return d.call(a.srcElement,a||window.event)}),a.attachEvent("on"+b,d._d[k]))}a=null},off:function(a,b,d){var c=this.isArray(b)?b:b.split(/\s+/),e=c.length;if(e)for(;e--;)if(b=c[e],a.removeEventListener)a.removeEventListener(b,d,!1);else{var k=b+d.toString();try{a.detachEvent("on"+b,d._d?d._d[k]:d)}catch(n){}d._d&&d._d[k]&&(b=h.indexOf(d._d.els,a),-1!=
-b&&d._d.els.splice(b,1),0==d._d.els.length&&delete d._d[k])}},loadFile:function(){function a(a,c){try{for(var e=0,k;k=b[e++];)if(k.doc===a&&k.url==(c.src||c.href))return k}catch(n){return null}}var b=[];return function(d,c,e){var k=a(d,c);if(k)k.ready?e&&e():k.funs.push(e);else if(b.push({doc:d,url:c.src||c.href,funs:[e]}),!d.body){e=[];for(var n in c)"tag"!=n&&e.push(n+'="'+c[n]+'"');d.write("<"+c.tag+" "+e.join(" ")+" ></"+c.tag+">")}else if(!c.id||!d.getElementById(c.id)){var l=d.createElement(c.tag);
-delete c.tag;for(n in c)l.setAttribute(n,c[n]);l.onload=l.onreadystatechange=function(){if(!this.readyState||/loaded|complete/.test(this.readyState)){k=a(d,c);if(0<k.funs.length){k.ready=1;for(var b;b=k.funs.pop();)b()}l.onload=l.onreadystatechange=null}};l.onerror=function(){throw Error("The load "+(c.href||c.src)+" fails,check the url");};d.getElementsByTagName("head")[0].appendChild(l)}}}()};h.each("String Function Array Number RegExp Object Boolean".split(" "),function(a){h["is"+a]=function(b){return Object.prototype.toString.apply(b)==
-"[object "+a+"]"}});var g={};UE.parse={register:function(a,b){g[a]=b},load:function(a){h.each(g,function(b){b.call(a,h)})}};uParse=function(a,b){h.domReady(function(){var d;document.querySelectorAll?d=document.querySelectorAll(a):/^#/.test(a)?d=[document.getElementById(a.replace(/^#/,""))]:/^\./.test(a)?(d=[],h.each(document.getElementsByTagName("*"),function(c){c.className&&RegExp("\\b"+a.replace(/^\./,"")+"\\b","i").test(c.className)&&d.push(c)})):d=document.getElementsByTagName(a);h.each(d,function(c){UE.parse.load(h.extend({root:c,
-selector:a},b))})})}})();UE.parse.register("insertcode",function(f){var h=this.root.getElementsByTagName("pre");if(h.length&&"undefined"==typeof XRegExp){var g,a;void 0!==this.rootPath?(g=f.removeLastbs(this.rootPath)+"/third-party/SyntaxHighlighter/shCore.js",a=f.removeLastbs(this.rootPath)+"/third-party/SyntaxHighlighter/shCoreDefault.css"):(g=this.highlightJsUrl,a=this.highlightCssUrl);f.loadFile(document,{id:"syntaxhighlighter_css",tag:"link",rel:"stylesheet",type:"text/css",href:a});f.loadFile(document,
-{id:"syntaxhighlighter_js",src:g,tag:"script",type:"text/javascript",defer:"defer"},function(){f.each(h,function(a){a&&/brush/i.test(a.className)&&SyntaxHighlighter.highlight(a)})})}});UE.parse.register("table",function(f){var h=this,g=this.root,a=g.getElementsByTagName("table");if(a.length){a=this.selector;f.cssRule("table",a+" table.noBorderTable td,"+a+" table.noBorderTable th,"+a+" table.noBorderTable caption{border:1px dashed #ddd !important}"+a+" table.sortEnabled tr.firstRow th,"+a+" table.sortEnabled tr.firstRow td{padding-right:20px; background-repeat: no-repeat;background-position: center right; background-image:url("+
-this.rootPath+"themes/default/images/sortable.png);}"+a+" table.sortEnabled tr.firstRow th:hover,"+a+" table.sortEnabled tr.firstRow td:hover{background-color: #EEE;}"+a+" table{margin-bottom:10px;border-collapse:collapse;display:table;}"+a+" td,"+a+" th{ background:white; padding: 5px 10px;border: 1px solid #DDD;}"+a+" caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}"+a+" th{border-top:1px solid #BBB;background:#F7F7F7;}"+a+" table tr.firstRow th{border-top:2px solid #BBB;background:#F7F7F7;}"+
-a+" tr.ue-table-interlace-color-single td{ background: #fcfcfc; }"+a+" tr.ue-table-interlace-color-double td{ background: #f7faff; }"+a+" td p{margin:0;padding:0;}",document);f.each(["td","th","caption"],function(a){a=g.getElementsByTagName(a);a.length&&f.each(a,function(a){a.firstChild||(a.innerHTML="&nbsp;")})});a=g.getElementsByTagName("table");f.each(a,function(a){if(/\bsortEnabled\b/.test(a.className))f.on(a,"click",function(a){a=a.target||a.srcElement;var c=b(a,["td","th"]);a=b(a,"table");var c=
-f.indexOf(a.rows[0].cells,c),l=a.getAttribute("data-sort-type");if(-1!=c&&(d(a,c,h.tableSortCompareFn||l),!f.hasClass(a.rows[0],"firstRow"))){for(c=1;c<a.rows.length;c++)f.removeClass(a.rows[c],"firstRow");f.addClass(a.rows[0],"firstRow")}})});var b=function(a,c){var d,b=a;for(c=f.isArray(c)?c:[c];b;){for(d=0;d<c.length;d++)if(b.tagName==c[d].toUpperCase())return b;b=b.parentNode}return null},d=function(a,d,b){for(var l=a.rows,q=[],g="TH"===l[0].cells[0].tagName,h=0,s=l.length;h<s;h++)q[h]=l[h];var r=
-{reversecurrent:function(a,c){return 1},orderbyasc:function(a,c){return(a.innerText||a.textContent).localeCompare(c.innerText||c.textContent)},reversebyasc:function(a,c){return c.innerHTML.localeCompare(a.innerHTML)},orderbynum:function(a,c){var b=a[f.isIE?"innerText":"textContent"].match(/\d+/),d=c[f.isIE?"innerText":"textContent"].match(/\d+/);b&&(b=+b[0]);d&&(d=+d[0]);return(b||0)-(d||0)},reversebynum:function(a,c){var b=a[f.isIE?"innerText":"textContent"].match(/\d+/),d=c[f.isIE?"innerText":"textContent"].match(/\d+/);
-b&&(b=+b[0]);d&&(d=+d[0]);return(d||0)-(b||0)}};a.setAttribute("data-sort-type",b&&"string"===typeof b&&r[b]?b:"");g&&q.splice(0,1);q=c(q,function(a,c){return b&&"function"===typeof b?b.call(this,a.cells[d],c.cells[d]):b&&"number"===typeof b?1:b&&"string"===typeof b&&r[b]?r[b].call(this,a.cells[d],c.cells[d]):r.orderbyasc.call(this,a.cells[d],c.cells[d])});l=a.ownerDocument.createDocumentFragment();g=0;for(s=q.length;g<s;g++)l.appendChild(q[g]);a.getElementsByTagName("tbody")[0].appendChild(l)},c=
-function(a,c){c=c||function(a,c){return a.localeCompare(c)};for(var b=0,d=a.length;b<d;b++)for(var f=b,g=a.length;f<g;f++)if(0<c(a[b],a[f])){var h=a[b];a[b]=a[f];a[f]=h}return a}}});UE.parse.register("charts",function(f){function h(a){var c=[];a=a.getElementsByTagName("table");for(var b=0,d;d=a[b];b++)null!==d.getAttribute("data-chart")&&c.push(g(d));return c.length?c:null}function g(a){for(var c=a.getAttribute("data-chart"),b={},d=[],f=0,e;e=a.rows[f];f++){for(var g=[],h=0,k;k=e.cells[h];h++){var m=
-k.innerText||k.textContent||"";g.push("TH"==k.tagName?m:m|0)}d.push(g)}c=c.split(";");for(f=0;e=c[f];f++)e=e.split(":"),b[e[0]]=e[1];return{table:a,meta:b,data:d}}function a(){window.jQuery?b():f.loadFile(document,{src:c+"/third-party/jquery-1.10.2.min.js",tag:"script",type:"text/javascript",defer:"defer"},function(){b()})}function b(){window.Highcharts?d():f.loadFile(document,{src:c+"/third-party/highcharts/highcharts.js",tag:"script",type:"text/javascript",defer:"defer"},function(){d()})}function d(){f.loadFile(document,
-{src:c+"/dialogs/charts/chart.config.js",tag:"script",type:"text/javascript",defer:"defer"},function(){for(var a=null,c=null,b=null,d=0,f=k.length;d<f;d++){var a=k[d],c=[],e=[],b=[],g=a.data,h=a.meta;if("1"!=h.dataFormat){for(var p=0,e=g.length;p<e;p++)for(var m=0,t=g[p].length;m<t;m++)b[m]||(b[m]=[]),b[m][p]=g[p][m];g=b}b={};if(h.chartType!=typeConfig.length-1){e=g[0].slice(1);p=1;for(m=void 0;m=g[p];p++)c.push({name:m[0],data:m.slice(1)});b.series=c;b.categories=e;b.title=h.title;b.subTitle=h.subTitle;
-b.xTitle=h.xTitle;b.yTitle=h.yTitle}else{m=[];p=1;for(e=g[0].length;p<e;p++)m.push([g[0][p],g[1][p]|0]);c[0]={type:"pie",name:h.tip,data:m};b.series=c;b.title=h.title}b.suffix=h.suffix;c=b;b=a.table;g=document.createElement("div");g.className="edui-chart-container";b.parentNode.replaceChild(g,b);b=g;a=typeConfig[a.meta.chartType];$(b).highcharts($.extend({},a,{credits:{enabled:!1},exporting:{enabled:!1},title:{text:c.title,x:-20},subtitle:{text:c.subTitle,x:-20},xAxis:{title:{text:c.xTitle},categories:c.categories},
-yAxis:{title:{text:c.yTitle},plotLines:[{value:0,width:1,color:"#808080"}]},tooltip:{enabled:!0,valueSuffix:c.suffix},legend:{layout:"vertical",align:"right",verticalAlign:"middle",borderWidth:1},series:c.series}))}})}f.cssRule("chartsContainerHeight",".edui-chart-container { height:"+(this.chartContainerHeight||300)+"px}");var c=this.rootPath,e=this.root,k=null;c&&(e=e?h(e):null,(k=e)&&a())});UE.parse.register("background",function(f){for(var h=this.root.getElementsByTagName("p"),g,a=0,b;b=h[a++];)(g=
-b.getAttribute("data-background"))&&b.parentNode.removeChild(b);g&&f.cssRule("ueditor_background",this.selector+"{"+g+"}",document)});UE.parse.register("list",function(f){function h(b){var d=this;f.each(b,function(b){if(b.className&&/custom_/i.test(b.className)){var e=b.className.match(/custom_(\w+)/)[1];if("dash"==e||"dot"==e)f.pushItem(g,c+" li.list-"+a[e]+"{background-image:url("+d.liiconpath+a[e]+".gif)}"),f.pushItem(g,c+" ul.custom_"+e+"{list-style:none;} "+c+" ul.custom_"+e+" li{background-position:0 3px;background-repeat:no-repeat}");
-else{var h=1;f.each(b.childNodes,function(b){"LI"==b.tagName&&(f.pushItem(g,c+" li.list-"+a[e]+h+"{background-image:url("+d.liiconpath+"list-"+a[e]+h+".gif)}"),h++)});f.pushItem(g,c+" ol.custom_"+e+"{list-style:none;}"+c+" ol.custom_"+e+" li{background-position:0 3px;background-repeat:no-repeat}")}switch(e){case "cn":f.pushItem(g,c+" li.list-"+e+"-paddingleft-1{padding-left:25px}");f.pushItem(g,c+" li.list-"+e+"-paddingleft-2{padding-left:40px}");f.pushItem(g,c+" li.list-"+e+"-paddingleft-3{padding-left:55px}");
-break;case "cn1":f.pushItem(g,c+" li.list-"+e+"-paddingleft-1{padding-left:30px}");f.pushItem(g,c+" li.list-"+e+"-paddingleft-2{padding-left:40px}");f.pushItem(g,c+" li.list-"+e+"-paddingleft-3{padding-left:55px}");break;case "cn2":f.pushItem(g,c+" li.list-"+e+"-paddingleft-1{padding-left:40px}");f.pushItem(g,c+" li.list-"+e+"-paddingleft-2{padding-left:55px}");f.pushItem(g,c+" li.list-"+e+"-paddingleft-3{padding-left:68px}");break;case "num":case "num1":f.pushItem(g,c+" li.list-"+e+"-paddingleft-1{padding-left:25px}");
-break;case "num2":f.pushItem(g,c+" li.list-"+e+"-paddingleft-1{padding-left:35px}");f.pushItem(g,c+" li.list-"+e+"-paddingleft-2{padding-left:40px}");break;case "dash":f.pushItem(g,c+" li.list-"+e+"-paddingleft{padding-left:35px}");break;case "dot":f.pushItem(g,c+" li.list-"+e+"-paddingleft{padding-left:20px}")}}})}var g=[],a={cn:"cn-1-",cn1:"cn-2-",cn2:"cn-3-",num:"num-1-",num1:"num-2-",num2:"num-3-",dash:"dash",dot:"dot"};f.extend(this,{liiconpath:"http://bs.baidu.com/listicon/",listDefaultPaddingLeft:"20"});
-var b=this.root,d=b.getElementsByTagName("ol"),b=b.getElementsByTagName("ul"),c=this.selector;d.length&&h.call(this,d);b.length&&h.call(this,b);if(d.length||b.length)g.push(c+" .list-paddingleft-1{padding-left:0}"),g.push(c+" .list-paddingleft-2{padding-left:"+this.listDefaultPaddingLeft+"px}"),g.push(c+" .list-paddingleft-3{padding-left:"+2*this.listDefaultPaddingLeft+"px}"),f.cssRule("list",c+" ol,"+c+" ul{margin:0;padding:0;}li{clear:both;}"+g.join("\n"),document)});UE.parse.register("vedio",function(f){var h=
-this.root.getElementsByTagName("video"),g=this.root.getElementsByTagName("audio");document.createElement("video");document.createElement("audio");if(h.length||g.length){var h=f.removeLastbs(this.rootPath),g=h+"/third-party/video-js/video.js",a=h+"/third-party/video-js/video-js.swf";f.loadFile(document,{id:"video_css",tag:"link",rel:"stylesheet",type:"text/css",href:h+"/third-party/video-js/video-js.min.css"});f.loadFile(document,{id:"video_js",src:g,tag:"script",type:"text/javascript"},function(){videojs.options.flash.swf=
-a})}})})();

+ 0 - 663
DjangoUeditor/static/ueditor/标签div不转p_不过滤style_script的editor_all_min.js

@@ -1,663 +0,0 @@
-(function(){function X(d,a,e){var b;a=a.toLowerCase();return(b=d.__allListeners||e&&(d.__allListeners={}))&&(b[a]||e&&(b[a]=[]))}function Y(d,a,e,b,c,g){b=b&&d[a];var f;for(!b&&(b=d[e]);!b&&(f=(f||d).parentNode);){if("BODY"==f.tagName||g&&!g(f))return null;b=f[e]}return b&&c&&!c(b)?Y(b,a,e,!1,c):b}UEDITOR_CONFIG=window.UEDITOR_CONFIG||{};var s=window.baidu||{};window.baidu=s;window.UE=s.editor=window.UE||{};UE.plugins={};UE.commands={};UE.instants={};UE.I18N={};UE.version="1.3.6";var I=UE.dom={},
-q=UE.browser=function(){var d=navigator.userAgent.toLowerCase(),a=window.opera,e={ie:/(msie\s|trident.*rv:)([\w.]+)/.test(d),opera:!!a&&a.version,webkit:-1<d.indexOf(" applewebkit/"),mac:-1<d.indexOf("macintosh"),quirks:"BackCompat"==document.compatMode};e.gecko="Gecko"==navigator.product&&!e.webkit&&!e.opera&&!e.ie;var b=0;e.ie&&(b=1*(d.match(/(msie\s|trident.*rv:)([\w.]+)/)[2]||0),e.ie11Compat=11==document.documentMode,e.ie9Compat=9==document.documentMode,e.ie8=!!document.documentMode,e.ie8Compat=
-8==document.documentMode,e.ie7Compat=7==b&&!document.documentMode||7==document.documentMode,e.ie6Compat=7>b||e.quirks,e.ie9above=8<b,e.ie9below=9>b);if(e.gecko){var c=d.match(/rv:([\d\.]+)/);c&&(c=c[1].split("."),b=1E4*c[0]+100*(c[1]||0)+1*(c[2]||0))}/chrome\/(\d+\.\d)/i.test(d)&&(e.chrome=+RegExp.$1);/(\d+\.\d)?(?:\.\d)?\s+safari\/?(\d+\.\d+)?/i.test(d)&&!/chrome/i.test(d)&&(e.safari=+(RegExp.$1||RegExp.$2));e.opera&&(b=parseFloat(a.version()));e.webkit&&(b=parseFloat(d.match(/ applewebkit\/(\d+)/)[1]));
-e.version=b;e.isCompatible=!e.mobile&&(e.ie&&6<=b||e.gecko&&10801<=b||e.opera&&9.5<=b||e.air&&1<=b||e.webkit&&522<=b||!1);return e}(),H=q.ie,ka=q.opera,p=UE.utils={each:function(d,a,e){if(null!=d)if(d.length===+d.length)for(var b=0,c=d.length;b<c;b++){if(!1===a.call(e,d[b],b,d))return!1}else for(b in d)if(d.hasOwnProperty(b)&&!1===a.call(e,d[b],b,d))return!1},makeInstance:function(d){var a=new Function;a.prototype=d;d=new a;a.prototype=null;return d},extend:function(d,a,e){if(a)for(var b in a)e&&
-d.hasOwnProperty(b)||(d[b]=a[b]);return d},extend2:function(d){for(var a=arguments,e=1;e<a.length;e++){var b=a[e],c;for(c in b)d.hasOwnProperty(c)||(d[c]=b[c])}return d},inherits:function(d,a){var e=d.prototype,b=p.makeInstance(a.prototype);p.extend(b,e,!0);d.prototype=b;return b.constructor=d},bind:function(d,a){return function(){return d.apply(a,arguments)}},defer:function(d,a,e){var b;return function(){e&&clearTimeout(b);b=setTimeout(d,a)}},indexOf:function(d,a,e){var b=-1;e=this.isNumber(e)?e:
-0;this.each(d,function(c,g){if(g>=e&&c===a)return b=g,!1});return b},removeItem:function(d,a){for(var e=0,b=d.length;e<b;e++)d[e]===a&&(d.splice(e,1),e--)},trim:function(d){return d.replace(/(^[ \t\n\r]+)|([ \t\n\r]+$)/g,"")},listToMap:function(d){if(!d)return{};d=p.isArray(d)?d:d.split(",");for(var a=0,e,b={};e=d[a++];)b[e.toUpperCase()]=b[e]=1;return b},unhtml:function(d,a){return d?d.replace(a||/[&<">'](?:(amp|lt|quot|gt|#39|nbsp);)?/g,function(a,b){return b?a:{"<":"&lt;","&":"&amp;",'"':"&quot;",
-">":"&gt;","'":"&#39;"}[a]}):""},html:function(d){return d?d.replace(/&((g|l|quo)t|amp|#39|nbsp);/g,function(a){return{"&lt;":"<","&amp;":"&","&quot;":'"',"&gt;":">","&#39;":"'","&nbsp;":" "}[a]}):""},cssStyleToDomStyle:function(){var d=document.createElement("div").style,a={"float":void 0!=d.cssFloat?"cssFloat":void 0!=d.styleFloat?"styleFloat":"float"};return function(e){return a[e]||(a[e]=e.toLowerCase().replace(/-./g,function(a){return a.charAt(1).toUpperCase()}))}}(),loadFile:function(){function d(e,
-b){try{for(var c=0,g;g=a[c++];)if(g.doc===e&&g.url==(b.src||b.href))return g}catch(f){return null}}var a=[];return function(e,b,c){var g=d(e,b);if(g)g.ready?c&&c():g.funs.push(c);else if(a.push({doc:e,url:b.src||b.href,funs:[c]}),!e.body){c=[];for(var f in b)"tag"!=f&&c.push(f+'="'+b[f]+'"');e.write("<"+b.tag+" "+c.join(" ")+" ></"+b.tag+">")}else if(!b.id||!e.getElementById(b.id)){var k=e.createElement(b.tag);delete b.tag;for(f in b)k.setAttribute(f,b[f]);k.onload=k.onreadystatechange=function(){if(!this.readyState||
-/loaded|complete/.test(this.readyState)){g=d(e,b);if(0<g.funs.length){g.ready=1;for(var a;a=g.funs.pop();)a()}k.onload=k.onreadystatechange=null}};k.onerror=function(){throw Error("The load "+(b.href||b.src)+" fails,check the url settings of file ueditor.config.js ");};e.getElementsByTagName("head")[0].appendChild(k)}}}(),isEmptyObject:function(d){if(null==d)return!0;if(this.isArray(d)||this.isString(d))return 0===d.length;for(var a in d)if(d.hasOwnProperty(a))return!1;return!0},fixColor:function(d,
-a){if(/color/i.test(d)&&/rgba?/.test(a)){var e=a.split(",");if(3<e.length)return"";a="#";for(var b=0,c;c=e[b++];)c=parseInt(c.replace(/[^\d]/gi,""),10).toString(16),a+=1==c.length?"0"+c:c;a=a.toUpperCase()}return a},optCss:function(d){function a(a,b){if(!a)return"";var f=a.top,k=a.bottom,e=a.left,d=a.right,n="";if(f&&e&&k&&d)n+=";"+b+":"+(f==k&&k==e&&e==d?f:f==k&&e==d?f+" "+e:e==d?f+" "+e+" "+k:f+" "+d+" "+k+" "+e)+";";else for(var h in a)n+=";"+b+"-"+h+":"+a[h]+";";return n}var e,b;d=d.replace(/(padding|margin|border)\-([^:]+):([^;]+);?/gi,
-function(a,g,f,k){if(1==k.split(" ").length)switch(g){case "padding":return!e&&(e={}),e[f]=k,"";case "margin":return!b&&(b={}),b[f]=k,"";case "border":return"initial"==k?"":a}return a});d+=a(e,"padding")+a(b,"margin");return d.replace(/^[ \n\r\t;]*|[ \n\r\t]*$/,"").replace(/;([ \n\r\t]+)|\1;/g,";").replace(/(&((l|g)t|quot|#39))?;{2,}/g,function(a,b){return b?b+";;":";"})},clone:function(d,a){var e;a=a||{};for(var b in d)d.hasOwnProperty(b)&&(e=d[b],"object"==typeof e?(a[b]=p.isArray(e)?[]:{},p.clone(d[b],
-a[b])):a[b]=e);return a},transUnitToPx:function(d){if(!/(pt|cm)/.test(d))return d;var a;d.replace(/([\d.]+)(\w+)/,function(e,b,c){d=b;a=c});switch(a){case "cm":d=25*parseFloat(d);break;case "pt":d=Math.round(96*parseFloat(d)/72)}return d+(d?"px":"")},domReady:function(){function d(e){for(e.isReady=!0;e=a.pop();e());}var a=[];return function(e,b){b=b||window;var c=b.document;e&&a.push(e);"complete"===c.readyState?d(c):(c.isReady&&d(c),q.ie&&11!=q.version?(function(){if(!c.isReady){try{c.documentElement.doScroll("left")}catch(a){setTimeout(arguments.callee,
-0);return}d(c)}}(),b.attachEvent("onload",function(){d(c)})):(c.addEventListener("DOMContentLoaded",function(){c.removeEventListener("DOMContentLoaded",arguments.callee,!1);d(c)},!1),b.addEventListener("load",function(){d(c)},!1)))}}(),cssRule:q.ie&&11!=q.version?function(d,a,e){var b,c;if(void 0===a||a&&a.nodeType&&9==a.nodeType){if(e=a&&a.nodeType&&9==a.nodeType?a:e||document,b=e.indexList||(e.indexList={}),c=b[d],void 0!==c)return e.styleSheets[c].cssText}else{e=e||document;b=e.indexList||(e.indexList=
-{});c=b[d];if(""===a)return void 0!==c?(e.styleSheets[c].cssText="",delete b[d],!0):!1;void 0!==c?sheetStyle=e.styleSheets[c]:(sheetStyle=e.createStyleSheet("",c=e.styleSheets.length),b[d]=c);sheetStyle.cssText=a}}:function(d,a,e){var b;if(void 0===a||a&&a.nodeType&&9==a.nodeType)return e=a&&a.nodeType&&9==a.nodeType?a:e||document,(b=e.getElementById(d))?b.innerHTML:void 0;e=e||document;b=e.getElementById(d);if(""===a)return b?(b.parentNode.removeChild(b),!0):!1;b?b.innerHTML=a:(b=e.createElement("style"),
-b.id=d,b.innerHTML=a,e.getElementsByTagName("head")[0].appendChild(b))},sort:function(d,a){a=a||function(a,f){return a.localeCompare(f)};for(var e=0,b=d.length;e<b;e++)for(var c=e,g=d.length;c<g;c++)if(0<a(d[e],d[c])){var f=d[e];d[e]=d[c];d[c]=f}return d},clearEmptyAttrs:function(d){for(var a in d)""===d[a]&&delete d[a];return d}};p.each("String Function Array Number RegExp Object".split(" "),function(d){UE.utils["is"+d]=function(a){return Object.prototype.toString.apply(a)=="[object "+d+"]"}});var V=
-UE.EventBase=function(){};V.prototype={addListener:function(d,a){d=p.trim(d).split(/\s+/);for(var e=0,b;b=d[e++];)X(this,b,!0).push(a)},on:function(d,a){return this.addListener(d,a)},off:function(d,a){return this.removeListener(d,a)},trigger:function(){return this.fireEvent.apply(this,arguments)},removeListener:function(d,a){d=p.trim(d).split(/\s+/);for(var e=0,b;b=d[e++];)p.removeItem(X(this,b)||[],a)},fireEvent:function(){for(var d=arguments[0],d=p.trim(d).split(" "),a=0,e;e=d[a++];){var b=X(this,
-e),c,g,f;if(b)for(f=b.length;f--;)if(b[f]){g=b[f].apply(this,arguments);if(!0===g)return g;void 0!==g&&(c=g)}if(g=this["on"+e.toLowerCase()])c=g.apply(this,arguments)}return c}};var v=I.dtd=function(){function d(a){for(var f in a)a[f.toUpperCase()]=a[f];return a}var a=p.extend2,e=d({isindex:1,fieldset:1}),b=d({input:1,button:1,select:1,textarea:1,label:1}),c=a(d({a:1}),b),g=a({iframe:1},c),f=d({hr:1,ul:1,menu:1,div:1,blockquote:1,noscript:1,table:1,center:1,address:1,dir:1,pre:1,h5:1,dl:1,h4:1,noframes:1,
-h6:1,ol:1,h1:1,h3:1,h2:1}),k=d({ins:1,del:1,script:1,style:1}),l=a(d({b:1,acronym:1,bdo:1,"var":1,"#":1,abbr:1,code:1,br:1,i:1,cite:1,kbd:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,dfn:1,span:1}),k),m=a(d({sub:1,img:1,embed:1,object:1,sup:1,basefont:1,map:1,applet:1,font:1,big:1,small:1}),l),n=a(d({p:1}),m),b=a(d({iframe:1}),m,b),m=d({img:1,embed:1,noscript:1,br:1,kbd:1,center:1,button:1,basefont:1,h5:1,h4:1,samp:1,h6:1,ol:1,h1:1,h3:1,h2:1,form:1,font:1,"#":1,select:1,menu:1,ins:1,abbr:1,label:1,
-code:1,table:1,script:1,cite:1,input:1,iframe:1,strong:1,textarea:1,noframes:1,big:1,small:1,span:1,hr:1,sub:1,bdo:1,"var":1,div:1,object:1,sup:1,strike:1,dir:1,map:1,dl:1,applet:1,del:1,isindex:1,fieldset:1,ul:1,b:1,acronym:1,a:1,blockquote:1,i:1,u:1,s:1,tt:1,address:1,q:1,pre:1,p:1,em:1,dfn:1}),r=a(d({a:0}),b),t=d({tr:1}),x=d({"#":1}),w=a(d({param:1}),m),u=a(d({form:1}),e,g,f,n),P=d({li:1,ol:1,ul:1}),F=d({style:1,script:1}),D=d({base:1,link:1,meta:1,title:1}),F=a(D,F),L=d({head:1,body:1}),W=d({html:1}),
-q=d({address:1,blockquote:1,center:1,dir:1,div:1,dl:1,fieldset:1,form:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,hr:1,isindex:1,menu:1,noframes:1,ol:1,p:1,pre:1,table:1,ul:1}),s=d({area:1,base:1,basefont:1,br:1,col:1,command:1,dialog:1,embed:1,hr:1,img:1,input:1,isindex:1,keygen:1,link:1,meta:1,param:1,source:1,track:1,wbr:1});return d({$nonBodyContent:a(W,L,D),$block:q,$inline:r,$inlineWithA:a(d({a:1}),r),$body:a(d({script:1,style:1}),q),$cdata:d({script:1,style:1}),$empty:s,$nonChild:d({iframe:1,textarea:1}),
-$listItem:d({dd:1,dt:1,li:1}),$list:d({ul:1,ol:1,dl:1}),$isNotEmpty:d({table:1,ul:1,ol:1,dl:1,iframe:1,area:1,base:1,col:1,hr:1,img:1,embed:1,input:1,link:1,meta:1,param:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1}),$removeEmpty:d({a:1,abbr:1,acronym:1,address:1,b:1,bdo:1,big:1,cite:1,code:1,del:1,dfn:1,em:1,font:1,i:1,ins:1,label:1,kbd:1,q:1,s:1,samp:1,small:1,span:1,strike:1,strong:1,sub:1,sup:1,tt:1,u:1,"var":1}),$removeEmptyBlock:d({p:1,div:1}),$tableContent:d({caption:1,col:1,colgroup:1,tbody:1,td:1,tfoot:1,
-th:1,thead:1,tr:1,table:1}),$notTransContent:d({pre:1,script:1,style:1,textarea:1}),html:L,head:F,style:x,script:x,body:u,base:{},link:{},meta:{},title:x,col:{},tr:d({td:1,th:1}),img:{},embed:{},colgroup:d({thead:1,col:1,tbody:1,tr:1,tfoot:1}),noscript:u,td:u,br:{},th:u,center:u,kbd:r,button:a(n,f),basefont:{},h5:r,h4:r,samp:r,h6:r,ol:P,h1:r,h3:r,option:x,h2:r,form:a(e,g,f,n),select:d({optgroup:1,option:1}),font:r,ins:r,menu:P,abbr:r,label:r,table:d({thead:1,col:1,tbody:1,tr:1,colgroup:1,caption:1,
-tfoot:1}),code:r,tfoot:t,cite:r,li:u,input:{},iframe:u,strong:r,textarea:x,noframes:u,big:r,small:r,span:d({"#":1,br:1,b:1,strong:1,u:1,i:1,em:1,sub:1,sup:1,strike:1,span:1}),hr:r,dt:r,sub:r,optgroup:d({option:1}),param:{},bdo:r,"var":r,div:u,object:w,sup:r,dd:u,strike:r,area:{},dir:P,map:a(d({area:1,form:1,p:1}),e,k,f),applet:w,dl:d({dt:1,dd:1}),del:r,isindex:{},fieldset:a(d({legend:1}),m),thead:t,ul:P,acronym:r,b:r,a:a(d({a:1}),b),blockquote:a(d({td:1,tr:1,tbody:1,li:1}),u),caption:r,i:r,u:r,tbody:t,
-s:r,address:a(g,n),tt:r,legend:r,q:r,pre:a(l,c),p:a(d({a:1}),r),em:r,dfn:r})}(),da=H&&9>q.version?{tabindex:"tabIndex",readonly:"readOnly","for":"htmlFor","class":"className",maxlength:"maxLength",cellspacing:"cellSpacing",cellpadding:"cellPadding",rowspan:"rowSpan",colspan:"colSpan",usemap:"useMap",frameborder:"frameBorder"}:{tabindex:"tabIndex",readonly:"readOnly"},oa=p.listToMap("-webkit-box -moz-box block list-item table table-row-group table-header-group table-footer-group table-row table-column-group table-column table-cell table-caption".split(" ")),
-d=I.domUtils={NODE_ELEMENT:1,NODE_DOCUMENT:9,NODE_TEXT:3,NODE_COMMENT:8,NODE_DOCUMENT_FRAGMENT:11,POSITION_IDENTICAL:0,POSITION_DISCONNECTED:1,POSITION_FOLLOWING:2,POSITION_PRECEDING:4,POSITION_IS_CONTAINED:8,POSITION_CONTAINS:16,fillChar:H&&"6"==q.version?"\ufeff":"\u200b",keys:{8:1,46:1,16:1,17:1,18:1,37:1,38:1,39:1,40:1,13:1},getPosition:function(d,a){if(d===a)return 0;var e,b=[d],c=[a];for(e=d;e=e.parentNode;){if(e===a)return 10;b.push(e)}for(e=a;e=e.parentNode;){if(e===d)return 20;c.push(e)}b.reverse();
-c.reverse();if(b[0]!==c[0])return 1;for(e=-1;e++,b[e]===c[e];);d=b[e];for(a=c[e];d=d.nextSibling;)if(d===a)return 4;return 2},getNodeIndex:function(d,a){for(var e=d,b=0;e=e.previousSibling;)a&&3==e.nodeType?e.nodeType!=e.nextSibling.nodeType&&b++:b++;return b},inDoc:function(h,a){return 10==d.getPosition(h,a)},findParent:function(h,a,e){if(h&&!d.isBody(h))for(h=e?h:h.parentNode;h;){if(!a||a(h)||d.isBody(h))return a&&!a(h)&&d.isBody(h)?null:h;h=h.parentNode}return null},findParentByTagName:function(h,
-a,e,b){a=p.listToMap(p.isArray(a)?a:[a]);return d.findParent(h,function(c){return a[c.tagName]&&!(b&&b(c))},e)},findParents:function(h,a,e,b){for(a=a&&(e&&e(h)||!e)?[h]:[];h=d.findParent(h,e);)a.push(h);return b?a:a.reverse()},insertAfter:function(d,a){return d.nextSibling?d.parentNode.insertBefore(a,d.nextSibling):d.parentNode.appendChild(a)},remove:function(d,a){var e=d.parentNode,b;if(e){if(a&&d.hasChildNodes())for(;b=d.firstChild;)e.insertBefore(b,d);e.removeChild(d)}return d},getNextDomNode:function(d,
-a,e,b){return Y(d,"firstChild","nextSibling",a,e,b)},getPreDomNode:function(d,a,e,b){return Y(d,"lastChild","previousSibling",a,e,b)},isBookmarkNode:function(d){return 1==d.nodeType&&d.id&&/^_baidu_bookmark_/i.test(d.id)},getWindow:function(d){d=d.ownerDocument||d;return d.defaultView||d.parentWindow},getCommonAncestor:function(d,a){if(d===a)return d;for(var e=[d],b=[a],c=d,g=-1;c=c.parentNode;){if(c===a)return c;e.push(c)}for(c=a;c=c.parentNode;){if(c===d)return c;b.push(c)}e.reverse();for(b.reverse();g++,
-e[g]===b[g];);return 0==g?null:e[g-1]},clearEmptySibling:function(h,a,e){function b(a,b){for(var f;a&&!d.isBookmarkNode(a)&&(d.isEmptyInlineElement(a)||!RegExp("[^\t\n\r"+d.fillChar+"]").test(a.nodeValue));)f=a[b],d.remove(a),a=f}!a&&b(h.nextSibling,"nextSibling");!e&&b(h.previousSibling,"previousSibling")},split:function(h,a){var e=h.ownerDocument;if(q.ie&&a==h.nodeValue.length){var b=e.createTextNode("");return d.insertAfter(h,b)}b=h.splitText(a);q.ie8&&(e=e.createTextNode(""),d.insertAfter(b,e),
-d.remove(e));return b},isWhitespace:function(h){return!RegExp("[^ \t\n\r"+d.fillChar+"]").test(h.nodeValue)},getXY:function(d){for(var a=0,e=0;d.offsetParent;)e+=d.offsetTop,a+=d.offsetLeft,d=d.offsetParent;return{x:a,y:e}},on:function(d,a,e){var b=p.isArray(a)?a:p.trim(a).split(/\s+/),c=b.length;if(c)for(;c--;)if(a=b[c],d.addEventListener)d.addEventListener(a,e,!1);else{e._d||(e._d={els:[]});var g=a+e.toString(),f=p.indexOf(e._d.els,d);e._d[g]&&-1!=f||(-1==f&&e._d.els.push(d),e._d[g]||(e._d[g]=function(a){return e.call(a.srcElement,
-a||window.event)}),d.attachEvent("on"+a,e._d[g]))}d=null},un:function(d,a,e){var b=p.isArray(a)?a:p.trim(a).split(/\s+/),c=b.length;if(c)for(;c--;)if(a=b[c],d.removeEventListener)d.removeEventListener(a,e,!1);else{var g=a+e.toString();try{d.detachEvent("on"+a,e._d?e._d[g]:e)}catch(f){}e._d&&e._d[g]&&(a=p.indexOf(e._d.els,d),-1!=a&&e._d.els.splice(a,1),0==e._d.els.length&&delete e._d[g])}},isSameElement:function(h,a){if(h.tagName!=a.tagName)return!1;var e=h.attributes,b=a.attributes;if(!H&&e.length!=
-b.length)return!1;for(var c,g,f=0,k=0,l=0;c=e[l++];){if("style"==c.nodeName)if(c.specified&&f++,d.isSameStyle(h,a))continue;else return!1;if(H)if(c.specified)f++,g=b.getNamedItem(c.nodeName);else continue;else g=a.attributes[c.nodeName];if(!g.specified||c.nodeValue!=g.nodeValue)return!1}if(H){for(l=0;g=b[l++];)g.specified&&k++;if(f!=k)return!1}return!0},isSameStyle:function(d,a){var e=d.style.cssText.replace(/( ?; ?)/g,";").replace(/( ?: ?)/g,":"),b=a.style.cssText.replace(/( ?; ?)/g,";").replace(/( ?: ?)/g,
-":");if(q.opera){e=d.style;b=a.style;if(e.length!=b.length)return!1;for(var c in e)if(!/^(\d+|csstext)$/i.test(c)&&e[c]!=b[c])return!1;return!0}if(!e||!b)return e==b;e=e.split(";");b=b.split(";");if(e.length!=b.length)return!1;c=0;for(var g;g=e[c++];)if(-1==p.indexOf(b,g))return!1;return!0},isBlockElm:function(h){return 1==h.nodeType&&(v.$block[h.tagName]||oa[d.getComputedStyle(h,"display")])&&!v.$nonChild[h.tagName]},isBody:function(d){return d&&1==d.nodeType&&"body"==d.tagName.toLowerCase()},breakParent:function(h,
-a){var e,b=h,c=h,g,f;do{b=b.parentNode;g?(e=b.cloneNode(!1),e.appendChild(g),g=e,e=b.cloneNode(!1),e.appendChild(f),f=e):(g=b.cloneNode(!1),f=g.cloneNode(!1));for(;e=c.previousSibling;)g.insertBefore(e,g.firstChild);for(;e=c.nextSibling;)f.appendChild(e);c=b}while(a!==b);e=a.parentNode;e.insertBefore(g,a);e.insertBefore(f,a);e.insertBefore(h,f);d.remove(a);return h},isEmptyInlineElement:function(h){if(1!=h.nodeType||!v.$removeEmpty[h.tagName])return 0;for(h=h.firstChild;h;){if(d.isBookmarkNode(h)||
-1==h.nodeType&&!d.isEmptyInlineElement(h)||3==h.nodeType&&!d.isWhitespace(h))return 0;h=h.nextSibling}return 1},trimWhiteTextNode:function(h){function a(a){for(var b;(b=h[a])&&3==b.nodeType&&d.isWhitespace(b);)h.removeChild(b)}a("firstChild");a("lastChild")},mergeChild:function(h,a,e){a=d.getElementsByTagName(h,h.tagName.toLowerCase());for(var b=0,c;c=a[b++];)if(c.parentNode&&!d.isBookmarkNode(c))if("span"==c.tagName.toLowerCase()){if(h===c.parentNode&&(d.trimWhiteTextNode(h),1==h.childNodes.length)){h.style.cssText=
-c.style.cssText+";"+h.style.cssText;d.remove(c,!0);continue}c.style.cssText=h.style.cssText+";"+c.style.cssText;if(e){var g=e.style;if(g)for(var g=g.split(";"),f=0,k;k=g[f++];)c.style[p.cssStyleToDomStyle(k.split(":")[0])]=k.split(":")[1]}d.isSameStyle(c,h)&&d.remove(c,!0)}else d.isSameElement(h,c)&&d.remove(c,!0)},getElementsByTagName:function(h,a,e){if(e&&p.isString(e)){var b=e;e=function(a){return d.hasClass(a,b)}}a=p.trim(a).replace(/[ ]{2,}/g," ").split(" ");for(var c=[],g=0,f;f=a[g++];){f=h.getElementsByTagName(f);
-for(var k=0,l;l=f[k++];)e&&!e(l)||c.push(l)}return c},mergeToParent:function(h){for(var a=h.parentNode;a&&v.$removeEmpty[a.tagName];){if(a.tagName==h.tagName||"A"==a.tagName){d.trimWhiteTextNode(a);if("SPAN"==a.tagName&&!d.isSameStyle(a,h)||"A"==a.tagName&&"SPAN"==h.tagName)if(1<a.childNodes.length||a!==h.parentNode){h.style.cssText=a.style.cssText+";"+h.style.cssText;a=a.parentNode;continue}else a.style.cssText+=";"+h.style.cssText,"A"==a.tagName&&(a.style.textDecoration="underline");if("A"!=a.tagName){a===
-h.parentNode&&d.remove(h,!0);break}}a=a.parentNode}},mergeSibling:function(h,a,e){function b(a,b,f){var k;if((k=f[a])&&!d.isBookmarkNode(k)&&1==k.nodeType&&d.isSameElement(f,k)){for(;k.firstChild;)"firstChild"==b?f.insertBefore(k.lastChild,f.firstChild):f.appendChild(k.firstChild);d.remove(k)}}!a&&b("previousSibling","firstChild",h);!e&&b("nextSibling","lastChild",h)},unSelectable:H||q.opera?function(d){d.onselectstart=function(){return!1};d.onclick=d.onkeyup=d.onkeydown=function(){return!1};d.unselectable=
-"on";d.setAttribute("unselectable","on");for(var a=0,e;e=d.all[a++];)switch(e.tagName.toLowerCase()){case "iframe":case "textarea":case "input":case "select":break;default:e.unselectable="on",d.setAttribute("unselectable","on")}}:function(d){d.style.MozUserSelect=d.style.webkitUserSelect=d.style.KhtmlUserSelect="none"},removeAttributes:function(d,a){a=p.isArray(a)?a:p.trim(a).replace(/[ ]{2,}/g," ").split(" ");for(var e=0,b;b=a[e++];){b=da[b]||b;switch(b){case "className":d[b]="";break;case "style":d.style.cssText=
-"",!q.ie&&d.removeAttributeNode(d.getAttributeNode("style"))}d.removeAttribute(b)}},createElement:function(h,a,e){return d.setAttributes(h.createElement(a),e)},setAttributes:function(d,a){for(var e in a)if(a.hasOwnProperty(e)){var b=a[e];switch(e){case "class":d.className=b;break;case "style":d.style.cssText=d.style.cssText+";"+b;break;case "innerHTML":d[e]=b;break;case "value":d.value=b;break;default:d.setAttribute(da[e]||e,b)}}return d},getComputedStyle:function(h,a){if(-1<"width height top left".indexOf(a))return h["offset"+
-a.replace(/^\w/,function(a){return a.toUpperCase()})]+"px";3==h.nodeType&&(h=h.parentNode);if(q.ie&&9>q.version&&"font-size"==a&&!h.style.fontSize&&!v.$empty[h.tagName]&&!v.$nonChild[h.tagName]){var e=h.ownerDocument.createElement("span");e.style.cssText="padding:0;border:0;font-family:simsun;";e.innerHTML=".";h.appendChild(e);var b=e.offsetHeight;h.removeChild(e);e=null;return b+"px"}try{e=d.getStyle(h,a)||(window.getComputedStyle?d.getWindow(h).getComputedStyle(h,"").getPropertyValue(a):(h.currentStyle||
-h.style)[p.cssStyleToDomStyle(a)])}catch(c){return""}return p.transUnitToPx(p.fixColor(a,e))},removeClasses:function(h,a){a=p.isArray(a)?a:p.trim(a).replace(/[ ]{2,}/g," ").split(" ");for(var e=0,b,c=h.className;b=a[e++];)c=c.replace(RegExp("\\b"+b+"\\b"),"");(c=p.trim(c).replace(/[ ]{2,}/g," "))?h.className=c:d.removeAttributes(h,["class"])},addClass:function(d,a){if(d){a=p.trim(a).replace(/[ ]{2,}/g," ").split(" ");for(var e=0,b,c=d.className;b=a[e++];)RegExp("\\b"+b+"\\b").test(c)||(c+=" "+b);
-d.className=p.trim(c)}},hasClass:function(d,a){if(p.isRegExp(a))return a.test(d.className);a=p.trim(a).replace(/[ ]{2,}/g," ").split(" ");for(var e=0,b,c=d.className;b=a[e++];)if(!RegExp("\\b"+b+"\\b","i").test(c))return!1;return e-1==a.length},preventDefault:function(d){d.preventDefault?d.preventDefault():d.returnValue=!1},removeStyle:function(h,a){q.ie?("color"==a&&(a="(^|;)"+a),h.style.cssText=h.style.cssText.replace(RegExp(a+"[^:]*:[^;]+;?","ig"),"")):h.style.removeProperty?h.style.removeProperty(a):
-h.style.removeAttribute(p.cssStyleToDomStyle(a));h.style.cssText||d.removeAttributes(h,["style"])},getStyle:function(d,a){var e=d.style[p.cssStyleToDomStyle(a)];return p.fixColor(a,e)},setStyle:function(d,a,e){d.style[p.cssStyleToDomStyle(a)]=e;p.trim(d.style.cssText)||this.removeAttributes(d,"style")},setStyles:function(h,a){for(var e in a)a.hasOwnProperty(e)&&d.setStyle(h,e,a[e])},removeDirtyAttr:function(d){for(var a=0,e,b=d.getElementsByTagName("*");e=b[a++];)e.removeAttribute("_moz_dirty");d.removeAttribute("_moz_dirty")},
-getChildCount:function(d,a){var e=0,b=d.firstChild;for(a=a||function(){return 1};b;)a(b)&&e++,b=b.nextSibling;return e},isEmptyNode:function(h){return!h.firstChild||0==d.getChildCount(h,function(a){return!d.isBr(a)&&!d.isBookmarkNode(a)&&!d.isWhitespace(a)})},clearSelectedArr:function(h){for(var a;a=h.pop();)d.removeAttributes(a,["class"])},scrollToView:function(h,a,e){var b=function(){var b=a.document,d="CSS1Compat"==b.compatMode;return{width:(d?b.documentElement.clientWidth:b.body.clientWidth)||
-0,height:(d?b.documentElement.clientHeight:b.body.clientHeight)||0}}().height;e=-1*b+e+(h.offsetHeight||0);h=d.getXY(h);e+=h.y;h=function(a){if("pageXOffset"in a)return{x:a.pageXOffset||0,y:a.pageYOffset||0};a=a.document;return{x:a.documentElement.scrollLeft||a.body.scrollLeft||0,y:a.documentElement.scrollTop||a.body.scrollTop||0}}(a).y;(e>h||e<h-b)&&a.scrollTo(0,e+(0>e?-20:20))},isBr:function(d){return 1==d.nodeType&&"BR"==d.tagName},isFillChar:function(h,a){if(3!=h.nodeType)return!1;var e=h.nodeValue;
-return a?RegExp("^"+d.fillChar).test(e):!e.replace(RegExp(d.fillChar,"g"),"").length},isStartInblock:function(h){h=h.cloneRange();var a=0,e=h.startContainer,b;if(1==e.nodeType&&e.childNodes[h.startOffset])for(var e=e.childNodes[h.startOffset],c=e.previousSibling;c&&d.isFillChar(c);)e=c,c=c.previousSibling;this.isFillChar(e,!0)&&1==h.startOffset&&(h.setStartBefore(e),e=h.startContainer);for(;e&&d.isFillChar(e);)b=e,e=e.previousSibling;b&&(h.setStartBefore(b),e=h.startContainer);for(1==e.nodeType&&
-(d.isEmptyNode(e)&&1==h.startOffset)&&h.setStart(e,0).collapse(!0);!h.startOffset;){e=h.startContainer;if(d.isBlockElm(e)||d.isBody(e)){a=1;break}var c=h.startContainer.previousSibling,g;if(c){for(;c&&d.isFillChar(c);)g=c,c=c.previousSibling;g?h.setStartBefore(g):h.setStartBefore(h.startContainer)}else h.setStartBefore(h.startContainer)}return a&&!d.isBody(h.startContainer)?1:0},isEmptyBlock:function(h,a){if(1!=h.nodeType)return 0;a=a||RegExp("[ \t\r\n"+d.fillChar+"]","g");if(0<h[q.ie?"innerText":
-"textContent"].replace(a,"").length)return 0;for(var e in v.$isNotEmpty)if(h.getElementsByTagName(e).length)return 0;return 1},setViewportOffset:function(d,a){var e=parseInt(d.style.left)|0,b=parseInt(d.style.top)|0,c=d.getBoundingClientRect(),g=a.left-c.left,c=a.top-c.top;g&&(d.style.left=e+g+"px");c&&(d.style.top=b+c+"px")},fillNode:function(h,a){var e=q.ie?h.createTextNode(d.fillChar):h.createElement("br");a.innerHTML="";a.appendChild(e)},moveChild:function(d,a,e){for(;d.firstChild;)e&&a.firstChild?
-a.insertBefore(d.lastChild,a.firstChild):a.appendChild(d.firstChild)},hasNoAttributes:function(d){return q.ie?/^<\w+\s*?>/.test(d.outerHTML):0==d.attributes.length},isCustomeNode:function(d){return 1==d.nodeType&&d.getAttribute("_ue_custom_node_")},isTagNode:function(d,a){return 1==d.nodeType&&RegExp("\\b"+d.tagName+"\\b","i").test(a)},filterNodeList:function(d,a,e){var b=[];if(!p.isFunction(a)){var c=a;a=function(a){return-1!=p.indexOf(p.isArray(c)?c:c.split(" "),a.tagName.toLowerCase())}}p.each(d,
-function(d){a(d)&&b.push(d)});return 0==b.length?null:1!=b.length&&e?b:b[0]},isInNodeEndBoundary:function(d,a){var e=d.startContainer;if(3==e.nodeType&&d.startOffset!=e.nodeValue.length||1==e.nodeType&&d.startOffset!=e.childNodes.length)return 0;for(;e!==a;){if(e.nextSibling)return 0;e=e.parentNode}return 1},isBoundaryNode:function(h,a){for(var e;!d.isBody(h);)if(e=h,h=h.parentNode,e!==h[a])return!1;return!0}},O=RegExp(d.fillChar,"g");(function(){function h(a){return!a.collapsed&&1==a.startContainer.nodeType&&
-a.startContainer===a.endContainer&&1==a.endOffset-a.startOffset}function a(a,f,b,c){1==f.nodeType&&(v.$empty[f.tagName]||v.$nonChild[f.tagName])&&(b=d.getNodeIndex(f)+(a?0:1),f=f.parentNode);a?(c.startContainer=f,c.startOffset=b,c.endContainer||c.collapse(!0)):(c.endContainer=f,c.endOffset=b,c.startContainer||c.collapse(!1));c.collapsed=c.startContainer&&c.endContainer&&c.startContainer===c.endContainer&&c.startOffset==c.endOffset;return c}function e(a,f){var b=a.startContainer,c=a.endContainer,k=
-a.startOffset,e=a.endOffset,l=a.document,g=l.createDocumentFragment(),h,D;1==b.nodeType&&(b=b.childNodes[k]||(h=b.appendChild(l.createTextNode(""))));1==c.nodeType&&(c=c.childNodes[e]||(D=c.appendChild(l.createTextNode(""))));if(b===c&&3==b.nodeType)return g.appendChild(l.createTextNode(b.substringData(k,e-k))),f&&(b.deleteData(k,e-k),a.collapse(!0)),g;for(var p,q,s=g,J=d.findParents(b,!0),v=d.findParents(c,!0),z=0;J[z]==v[z];)z++;for(var E=z,B;B=J[E];E++){p=B.nextSibling;B==b?h||(3==a.startContainer.nodeType?
-(s.appendChild(l.createTextNode(b.nodeValue.slice(k))),f&&b.deleteData(k,b.nodeValue.length-k)):s.appendChild(f?b:b.cloneNode(!0))):(q=B.cloneNode(!1),s.appendChild(q));for(;p&&p!==c&&p!==v[E];)B=p.nextSibling,s.appendChild(f?p:p.cloneNode(!0)),p=B;s=q}s=g;J[z]||(s.appendChild(J[z-1].cloneNode(!1)),s=s.firstChild);for(E=z;k=v[E];E++){p=k.previousSibling;k==c?D||3!=a.endContainer.nodeType||(s.appendChild(l.createTextNode(c.substringData(0,e))),f&&c.deleteData(0,e)):(q=k.cloneNode(!1),s.appendChild(q));
-if(E!=z||!J[z])for(;p&&p!==b;)k=p.previousSibling,s.insertBefore(f?p:p.cloneNode(!0),s.firstChild),p=k;s=q}f&&a.setStartBefore(v[z]?J[z]?v[z]:J[z-1]:v[z-1]).collapse(!0);h&&d.remove(h);D&&d.remove(D);return g}function b(a,f){try{if(k&&d.inDoc(k,a))if(k.nodeValue.replace(O,"").length)k.nodeValue=k.nodeValue.replace(O,"");else{var b=k.parentNode;for(d.remove(k);b&&d.isEmptyInlineElement(b)&&(q.safari?!(d.getPosition(b,f)&d.POSITION_CONTAINS):!b.contains(f));)k=b.parentNode,d.remove(b),b=k}}catch(c){}}
-function c(a,f){var b;for(a=a[f];a&&d.isFillChar(a);)b=a[f],d.remove(a),a=b}var g=0,f=d.fillChar,k,l=I.Range=function(a){this.startContainer=this.startOffset=this.endContainer=this.endOffset=null;this.document=a;this.collapsed=!0};l.prototype={cloneContents:function(){return this.collapsed?null:e(this,0)},deleteContents:function(){var a;this.collapsed||e(this,1);q.webkit&&(a=this.startContainer,3!=a.nodeType||a.nodeValue.length||(this.setStartBefore(a).collapse(!0),d.remove(a)));return this},extractContents:function(){return this.collapsed?
-null:e(this,2)},setStart:function(f,b){return a(!0,f,b,this)},setEnd:function(f,b){return a(!1,f,b,this)},setStartAfter:function(a){return this.setStart(a.parentNode,d.getNodeIndex(a)+1)},setStartBefore:function(a){return this.setStart(a.parentNode,d.getNodeIndex(a))},setEndAfter:function(a){return this.setEnd(a.parentNode,d.getNodeIndex(a)+1)},setEndBefore:function(a){return this.setEnd(a.parentNode,d.getNodeIndex(a))},setStartAtFirst:function(a){return this.setStart(a,0)},setStartAtLast:function(a){return this.setStart(a,
-3==a.nodeType?a.nodeValue.length:a.childNodes.length)},setEndAtFirst:function(a){return this.setEnd(a,0)},setEndAtLast:function(a){return this.setEnd(a,3==a.nodeType?a.nodeValue.length:a.childNodes.length)},selectNode:function(a){return this.setStartBefore(a).setEndAfter(a)},selectNodeContents:function(a){return this.setStart(a,0).setEndAtLast(a)},cloneRange:function(){return(new l(this.document)).setStart(this.startContainer,this.startOffset).setEnd(this.endContainer,this.endOffset)},collapse:function(a){a?
-(this.endContainer=this.startContainer,this.endOffset=this.startOffset):(this.startContainer=this.endContainer,this.startOffset=this.endOffset);this.collapsed=!0;return this},shrinkBoundary:function(a){function f(a){return 1==a.nodeType&&!d.isBookmarkNode(a)&&!v.$empty[a.tagName]&&!v.$nonChild[a.tagName]}for(var b,c=this.collapsed;1==this.startContainer.nodeType&&(b=this.startContainer.childNodes[this.startOffset])&&f(b);)this.setStart(b,0);if(c)return this.collapse(!0);if(!a)for(;1==this.endContainer.nodeType&&
-0<this.endOffset&&(b=this.endContainer.childNodes[this.endOffset-1])&&f(b);)this.setEnd(b,b.childNodes.length);return this},getCommonAncestor:function(a,b){var f=this.startContainer,c=this.endContainer;return f===c?a&&h(this)&&(f=f.childNodes[this.startOffset],1==f.nodeType)?f:b&&3==f.nodeType?f.parentNode:f:d.getCommonAncestor(f,c)},trimBoundary:function(a){this.txtToElmBoundary();var f=this.startContainer,b=this.startOffset,c=this.collapsed,k=this.endContainer;if(3==f.nodeType){if(0==b)this.setStartBefore(f);
-else if(b>=f.nodeValue.length)this.setStartAfter(f);else{var e=d.split(f,b);f===k?this.setEnd(e,this.endOffset-b):f.parentNode===k&&(this.endOffset+=1);this.setStartBefore(e)}if(c)return this.collapse(!0)}a||(b=this.endOffset,k=this.endContainer,3==k.nodeType&&(0==b?this.setEndBefore(k):(b<k.nodeValue.length&&d.split(k,b),this.setEndAfter(k))));return this},txtToElmBoundary:function(a){function f(a,b){var c=a[b+"Container"],d=a[b+"Offset"];if(3==c.nodeType)if(!d)a["set"+b.replace(/(\w)/,function(a){return a.toUpperCase()})+
-"Before"](c);else if(d>=c.nodeValue.length)a["set"+b.replace(/(\w)/,function(a){return a.toUpperCase()})+"After"](c)}if(a||!this.collapsed)f(this,"start"),f(this,"end");return this},insertNode:function(a){var f=a,b=1;11==a.nodeType&&(f=a.firstChild,b=a.childNodes.length);this.trimBoundary(!0);var c=this.startContainer,d=c.childNodes[this.startOffset];d?c.insertBefore(a,d):c.appendChild(a);f.parentNode===this.endContainer&&(this.endOffset+=b);return this.setStartBefore(f)},setCursor:function(a,f){return this.collapse(!a).select(f)},
-createBookmark:function(a,f){var b,c=this.document.createElement("span");c.style.cssText="display:none;line-height:0px;";c.appendChild(this.document.createTextNode("\u200d"));c.id="_baidu_bookmark_start_"+(f?"":g++);this.collapsed||(b=c.cloneNode(!0),b.id="_baidu_bookmark_end_"+(f?"":g++));this.insertNode(c);b&&this.collapse().insertNode(b).setEndBefore(b);this.setStartAfter(c);return{start:a?c.id:c,end:b?a?b.id:b:null,id:a}},moveToBookmark:function(a){var f=a.id?this.document.getElementById(a.start):
-a.start;a=a.end&&a.id?this.document.getElementById(a.end):a.end;this.setStartBefore(f);d.remove(f);a?(this.setEndBefore(a),d.remove(a)):this.collapse(!0);return this},enlarge:function(a,f){var b=d.isBody,c,k,e=this.document.createTextNode("");if(a){k=this.startContainer;1==k.nodeType?k.childNodes[this.startOffset]?c=k=k.childNodes[this.startOffset]:(k.appendChild(e),c=k=e):c=k;for(;;){if(d.isBlockElm(k)){for(k=c;(c=k.previousSibling)&&!d.isBlockElm(c);)k=c;this.setStartBefore(k);break}c=k;k=k.parentNode}k=
-this.endContainer;1==k.nodeType?((c=k.childNodes[this.endOffset])?k.insertBefore(e,c):k.appendChild(e),c=k=e):c=k;for(;;){if(d.isBlockElm(k)){for(k=c;(c=k.nextSibling)&&!d.isBlockElm(c);)k=c;this.setEndAfter(k);break}c=k;k=k.parentNode}e.parentNode===this.endContainer&&this.endOffset--;d.remove(e)}if(!this.collapsed){for(;!(0!=this.startOffset||f&&f(this.startContainer)||b(this.startContainer));)this.setStartBefore(this.startContainer);for(;!(this.endOffset!=(1==this.endContainer.nodeType?this.endContainer.childNodes.length:
-this.endContainer.nodeValue.length)||f&&f(this.endContainer)||b(this.endContainer));)this.setEndAfter(this.endContainer)}return this},enlargeToBlockElm:function(a){for(;!d.isBlockElm(this.startContainer);)this.setStartBefore(this.startContainer);if(!a)for(;!d.isBlockElm(this.endContainer);)this.setEndAfter(this.endContainer);return this},adjustmentBoundary:function(){if(!this.collapsed){for(;!d.isBody(this.startContainer)&&this.startOffset==this.startContainer[3==this.startContainer.nodeType?"nodeValue":
-"childNodes"].length&&this.startContainer[3==this.startContainer.nodeType?"nodeValue":"childNodes"].length;)this.setStartAfter(this.startContainer);for(;!d.isBody(this.endContainer)&&!this.endOffset&&this.endContainer[3==this.endContainer.nodeType?"nodeValue":"childNodes"].length;)this.setEndBefore(this.endContainer)}return this},applyInlineStyle:function(a,f,b){if(this.collapsed)return this;this.trimBoundary().enlarge(!1,function(a){return 1==a.nodeType&&d.isBlockElm(a)}).adjustmentBoundary();for(var c=
-this.createBookmark(),k=c.end,e=function(a){return 1==a.nodeType?"br"!=a.tagName.toLowerCase():!d.isWhitespace(a)},l=d.getNextDomNode(c.start,!1,e),g,h,p=this.cloneRange();l&&d.getPosition(l,k)&d.POSITION_PRECEDING;)if(3==l.nodeType||v[a][l.tagName]){p.setStartBefore(l);for(g=l;g&&(3==g.nodeType||v[a][g.tagName])&&g!==k;)h=g,g=d.getNextDomNode(g,1==g.nodeType,null,function(f){return v[a][f.tagName]});var l=p.setEndAfter(h).extractContents(),q;if(b&&0<b.length){var W;W=q=b[0].cloneNode(!1);for(var s=
-1,J;J=b[s++];)q.appendChild(J.cloneNode(!1)),q=q.firstChild}else q=p.document.createElement(a);f&&d.setAttributes(q,f);q.appendChild(l);p.insertNode(b?W:q);var ca;"span"==a&&f.style&&/text\-decoration/.test(f.style)&&(ca=d.findParentByTagName(q,"a",!0))?(d.setAttributes(ca,f),d.remove(q,!0),q=ca):(d.mergeSibling(q),d.clearEmptySibling(q));d.mergeChild(q,f);l=d.getNextDomNode(q,!1,e);d.mergeToParent(q);if(g===k)break}else l=d.getNextDomNode(l,!0,e);return this.moveToBookmark(c)},removeInlineStyle:function(a){if(this.collapsed)return this;
-a=p.isArray(a)?a:[a];this.shrinkBoundary().adjustmentBoundary();for(var f=this.startContainer,b=this.endContainer;;){if(1==f.nodeType){if(-1<p.indexOf(a,f.tagName.toLowerCase()))break;if("body"==f.tagName.toLowerCase()){f=null;break}}f=f.parentNode}for(;;){if(1==b.nodeType){if(-1<p.indexOf(a,b.tagName.toLowerCase()))break;if("body"==b.tagName.toLowerCase()){b=null;break}}b=b.parentNode}var c=this.createBookmark(),k,e;f&&(e=this.cloneRange().setEndBefore(c.start).setStartBefore(f),k=e.extractContents(),
-e.insertNode(k),d.clearEmptySibling(f,!0),f.parentNode.insertBefore(c.start,f));b&&(e=this.cloneRange().setStartAfter(c.end).setEndAfter(b),k=e.extractContents(),e.insertNode(k),d.clearEmptySibling(b,!1,!0),b.parentNode.insertBefore(c.end,b.nextSibling));for(f=d.getNextDomNode(c.start,!1,function(a){return 1==a.nodeType});f&&f!==c.end;)b=d.getNextDomNode(f,!0,function(a){return 1==a.nodeType}),-1<p.indexOf(a,f.tagName.toLowerCase())&&d.remove(f,!0),f=b;return this.moveToBookmark(c)},getClosedNode:function(){var a;
-if(!this.collapsed){var f=this.cloneRange().adjustmentBoundary().shrinkBoundary();h(f)&&(f=f.startContainer.childNodes[f.startOffset])&&(1==f.nodeType&&(v.$empty[f.tagName]||v.$nonChild[f.tagName]))&&(a=f)}return a},select:q.ie?function(a,e){var l;this.collapsed||this.shrinkBoundary();var g=this.getClosedNode();if(g&&!e){try{l=this.document.body.createControlRange(),l.addElement(g),l.select()}catch(h){}return this}var g=this.createBookmark(),w=g.start;l=this.document.body.createTextRange();l.moveToElementText(w);
-l.moveStart("character",1);if(!this.collapsed){var u=this.document.body.createTextRange(),w=g.end;u.moveToElementText(w);l.setEndPoint("EndToEnd",u)}else if(!a&&3!=this.startContainer.nodeType){var u=this.document.createTextNode(f),P=this.document.createElement("span");P.appendChild(this.document.createTextNode(f));w.parentNode.insertBefore(P,w);w.parentNode.insertBefore(u,w);b(this.document,u);k=u;c(P,"previousSibling");c(w,"nextSibling");l.moveStart("character",-1);l.collapse(!0)}this.moveToBookmark(g);
-P&&d.remove(P);try{l.select()}catch(F){}return this}:function(a){function e(a){function f(b,c,k){3==b.nodeType&&b.nodeValue.length<c&&(a[k+"Offset"]=b.nodeValue.length)}f(a.startContainer,a.startOffset,"start");f(a.endContainer,a.endOffset,"end")}var l=d.getWindow(this.document),g=l.getSelection();q.gecko?this.document.body.focus():l.focus();if(g){g.removeAllRanges();this.collapsed&&!a&&(a=l=this.startContainer,1==l.nodeType&&(a=l.childNodes[this.startOffset]),3==l.nodeType&&this.startOffset||(a?
-a.previousSibling&&3==a.previousSibling.nodeType:l.lastChild&&3==l.lastChild.nodeType)||(a=this.document.createTextNode(f),this.insertNode(a),b(this.document,a),c(a,"previousSibling"),c(a,"nextSibling"),k=a,this.setStart(a,q.webkit?1:0).collapse(!0)));l=this.document.createRange();if(this.collapsed&&q.opera&&1==this.startContainer.nodeType)if(a=this.startContainer.childNodes[this.startOffset]){for(;a&&d.isBlockElm(a);)if(1==a.nodeType&&a.childNodes[0])a=a.childNodes[0];else break;a&&this.setStartBefore(a).collapse(!0)}else(a=
-this.startContainer.lastChild)&&d.isBr(a)&&this.setStartBefore(a).collapse(!0);e(this);l.setStart(this.startContainer,this.startOffset);l.setEnd(this.endContainer,this.endOffset);g.addRange(l)}return this},scrollToView:function(a,f){a=a?window:d.getWindow(this.document);var b=this.document.createElement("span");b.innerHTML="&nbsp;";this.cloneRange().insertNode(b);d.scrollToView(b,a,f);d.remove(b);return this},inFillChar:function(){var a=this.startContainer;return this.collapsed&&3==a.nodeType&&a.nodeValue.replace(RegExp("^"+
-d.fillChar),"").length+1==a.nodeValue.length?!0:!1},createAddress:function(a,f){function b(a){for(var c=a?k.startContainer:k.endContainer,e=d.findParents(c,!0,function(a){return!d.isBody(a)}),l=[],g=0,m;m=e[g++];)l.push(d.getNodeIndex(m,f));e=0;if(f)if(3==c.nodeType){for(c=c.previousSibling;c&&3==c.nodeType;)e+=c.nodeValue.replace(O,"").length,c=c.previousSibling;e+=a?k.startOffset:k.endOffset}else if(c=c.childNodes[a?k.startOffset:k.endOffset])e=d.getNodeIndex(c,f);else for(c=a?k.startContainer:
-k.endContainer,a=c.firstChild;a;)if(d.isFillChar(a))a=a.nextSibling;else if(e++,3==a.nodeType)for(;a&&3==a.nodeType;)a=a.nextSibling;else a=a.nextSibling;else e=a?d.isFillChar(c)?0:k.startOffset:k.endOffset;0>e&&(e=0);l.push(e);return l}var c={},k=this;c.startAddress=b(!0);a||(c.endAddress=k.collapsed?[].concat(c.startAddress):b());return c},moveToAddress:function(a,f){function b(a,f){for(var k=c.document.body,d,e,l=0,g,m=a.length;l<m;l++)if(g=a[l],d=k,k=k.childNodes[g],!k){e=g;break}f?k?c.setStartBefore(k):
-c.setStart(d,e):k?c.setEndBefore(k):c.setEnd(d,e)}var c=this;b(a.startAddress,!0);!f&&a.endAddress&&b(a.endAddress);return c},equals:function(a){for(var f in this)if(this.hasOwnProperty(f)&&this[f]!==a[f])return!1;return!0},traversal:function(a,f){if(this.collapsed)return this;for(var b=this.createBookmark(),c=b.end,k=d.getNextDomNode(b.start,!1,f);k&&k!==c&&d.getPosition(k,c)&d.POSITION_PRECEDING;){var e=d.getNextDomNode(k,!1,f);a(k);k=e}return this.moveToBookmark(b)}}})();(function(){function h(a,
-c){var e=d.getNodeIndex;a=a.duplicate();a.collapse(c);var f=a.parentElement();if(!f.hasChildNodes())return{container:f,offset:0};for(var k=f.children,l,m=a.duplicate(),n=0,h=k.length-1,t=-1;n<=h;){t=Math.floor((n+h)/2);l=k[t];m.moveToElementText(l);var x=m.compareEndPoints("StartToStart",a);if(0<x)h=t-1;else if(0>x)n=t+1;else return{container:f,offset:e(l)}}if(-1==t){m.moveToElementText(f);m.setEndPoint("StartToStart",a);m=m.text.replace(/(\r\n|\r)/g,"\n").length;k=f.childNodes;if(!m)return l=k[k.length-
-1],{container:l,offset:l.nodeValue.length};for(e=k.length;0<m;)m-=k[--e].nodeValue.length;return{container:k[e],offset:-m}}m.collapse(0<x);m.setEndPoint(0<x?"StartToStart":"EndToStart",a);m=m.text.replace(/(\r\n|\r)/g,"\n").length;if(!m)return v.$empty[l.tagName]||v.$nonChild[l.tagName]?{container:f,offset:e(l)+(0<x?0:1)}:{container:l,offset:0<x?0:l.childNodes.length};for(;0<m;)try{k=l,l=l[0<x?"previousSibling":"nextSibling"],m-=l.nodeValue.length}catch(w){return{container:f,offset:e(k)}}return{container:l,
-offset:0<x?-m:l.nodeValue.length+m}}function a(a,c){if(a.item)c.selectNode(a.item(0));else{var d=h(a,!0);c.setStart(d.container,d.offset);0!=a.compareEndPoints("StartToEnd",a)&&(d=h(a,!1),c.setEnd(d.container,d.offset))}return c}function e(a){var c;try{c=a.getNative().createRange()}catch(d){return null}var f=c.item?c.item(0):c.parentElement();return(f.ownerDocument||f)===a.document?c:null}(I.Selection=function(a){var c=this;c.document=a;q.ie9below&&(a=d.getWindow(a).frameElement,d.on(a,"beforedeactivate",
-function(){c._bakIERange=c.getIERange()}),d.on(a,"activate",function(){try{!e(c)&&c._bakIERange&&c._bakIERange.select()}catch(a){}c._bakIERange=null}));a=a=null}).prototype={rangeInBody:function(a,c){var e=q.ie9below||c?a.item?a.item():a.parentElement():a.startContainer;return e===this.document.body||d.inDoc(e,this.document)},getNative:function(){var a=this.document;try{return a?q.ie9below?a.selection:d.getWindow(a).getSelection():null}catch(c){return null}},getIERange:function(){var a=e(this);return!a&&
-this._bakIERange?this._bakIERange:a},cache:function(){this.clear();this._cachedRange=this.getRange();this._cachedStartElement=this.getStart();this._cachedStartElementPath=this.getStartElementPath()},getStartElementPath:function(){if(this._cachedStartElementPath)return this._cachedStartElementPath;var a=this.getStart();return a?d.findParents(a,!0,null,!0):[]},clear:function(){this._cachedStartElementPath=this._cachedRange=this._cachedStartElement=null},isFocus:function(){try{if(q.ie9below){var a=e(this);
-return!(!a||!this.rangeInBody(a))}return!!this.getNative().rangeCount}catch(c){return!1}},getRange:function(){function b(a){for(var f=c.document.body.firstChild,b=a.collapsed;f&&f.firstChild;)a.setStart(f,0),f=f.firstChild;a.startContainer||a.setStart(c.document.body,0);b&&a.collapse(!0)}var c=this;if(null!=c._cachedRange)return this._cachedRange;var e=new s.editor.dom.Range(c.document);if(q.ie9below){var f=c.getIERange();if(f)try{a(f,e)}catch(k){b(e)}else b(e)}else{var l=c.getNative();if(l&&l.rangeCount)f=
-l.getRangeAt(0),l=l.getRangeAt(l.rangeCount-1),e.setStart(f.startContainer,f.startOffset).setEnd(l.endContainer,l.endOffset),e.collapsed&&(d.isBody(e.startContainer)&&!e.startOffset)&&b(e);else{if(this._bakRange&&d.inDoc(this._bakRange.startContainer,this.document))return this._bakRange;b(e)}}return this._bakRange=e},getStart:function(){if(this._cachedStartElement)return this._cachedStartElement;var a=q.ie9below?this.getIERange():this.getRange(),c,d;if(q.ie9below){if(!a)return this.document.body.firstChild;
-if(a.item)return a.item(0);c=a.duplicate();0<c.text.length&&c.moveStart("character",1);c.collapse(1);c=c.parentElement();for(d=a=a.parentElement();a=a.parentNode;)if(a==c){c=d;break}}else if(a.shrinkBoundary(),c=a.startContainer,1==c.nodeType&&c.hasChildNodes()&&(c=c.childNodes[Math.min(c.childNodes.length-1,a.startOffset)]),3==c.nodeType)return c.parentNode;return c},getText:function(){var a;return this.isFocus()&&(a=this.getNative())?(a=q.ie9below?a.createRange():a.getRangeAt(0),q.ie9below?a.text:
-a.toString()):""},clearRange:function(){this.getNative()[q.ie9below?"empty":"removeAllRanges"]()}}})();(function(){function h(a,b){var c;if(b.textarea)if(p.isString(b.textarea))for(var e=0,g,h=d.getElementsByTagName(a,"textarea");g=h[e++];){if(g.id=="ueditor_textarea_"+b.options.textarea){c=g;break}}else c=b.textarea;c||(a.appendChild(c=d.createElement(document,"textarea",{name:b.options.textarea,id:"ueditor_textarea_"+b.options.textarea,style:"display:none"})),b.textarea=c);c.value=b.hasContents()?
-b.options.allHtmlEnabled?b.getAllHtml():b.getContent(null,null,!0):""}function a(a){for(var b in a)return b}function e(a){a.langIsReady=!0;a.fireEvent("langReady")}var b=0,c,g=UE.Editor=function(f){var c=this;c.uid=b++;V.call(c);c.commands={};c.options=p.extend(p.clone(f||{}),UEDITOR_CONFIG,!0);c.shortcutkeys={};c.inputRules=[];c.outputRules=[];c.setOpt({isShow:!0,initialContent:"",initialStyle:"",autoClearinitialContent:!1,iframeCssUrl:c.options.UEDITOR_HOME_URL+"themes/iframe.css",textarea:"editorValue",
-focus:!1,focusInEnd:!0,autoClearEmptyNode:!0,fullscreen:!1,readonly:!1,zIndex:999,imagePopup:!0,enterTag:"p",customDomain:!1,lang:"zh-cn",langPath:c.options.UEDITOR_HOME_URL+"lang/",theme:"default",themePath:c.options.UEDITOR_HOME_URL+"themes/",allHtmlEnabled:!1,scaleEnabled:!1,tableNativeEditInFF:!1,autoSyncData:!0,fileNameFormat:"{time}{rand:6}"});p.isEmptyObject(UE.I18N)?p.loadFile(document,{src:c.options.langPath+c.options.lang+"/"+c.options.lang+".js",tag:"script",type:"text/javascript",defer:"defer"},
-function(){UE.plugin.load(c);e(c)}):(c.options.lang=a(UE.I18N),UE.plugin.load(c),e(c));UE.instants["ueditorInstant"+c.uid]=c};g.prototype={ready:function(a){a&&(this.isReady?a.apply(this):this.addListener("ready",a))},setOpt:function(a,b){var c={};p.isString(a)?c[a]=b:c=a;p.extend(this.options,c,!0)},destroy:function(){this.fireEvent("destroy");var a=this.container.parentNode,b=this.textarea;b?b.style.display="":(b=document.createElement("textarea"),a.parentNode.insertBefore(b,a));b.style.width=this.iframe.offsetWidth+
-"px";b.style.height=this.iframe.offsetHeight+"px";b.value=this.getContent();b.id=this.key;a.innerHTML="";d.remove(a);var a=this.key,c;for(c in this)this.hasOwnProperty(c)&&delete this[c];UE.delEditor(a)},render:function(a){var b=this.options;p.isString(a)&&(a=document.getElementById(a));if(a){b.minFrameWidth=b.initialFrameWidth?b.initialFrameWidth:b.initialFrameWidth=a.offsetWidth;b.initialFrameHeight?b.minFrameHeight=b.initialFrameHeight:b.initialFrameHeight=b.minFrameHeight=a.offsetHeight;a.style.width=
-/%$/.test(b.initialFrameWidth)?"100%":b.initialFrameWidth-parseInt(d.getComputedStyle(a,"padding-left"))-parseInt(d.getComputedStyle(a,"padding-right"))+"px";a.style.height=/%$/.test(b.initialFrameHeight)?"100%":b.initialFrameHeight-parseInt(d.getComputedStyle(a,"padding-top"))-parseInt(d.getComputedStyle(a,"padding-bottom"))+"px";a.style.zIndex=b.zIndex;var c=(H&&9>q.version?"":"<!DOCTYPE html>")+"<html xmlns='http://www.w3.org/1999/xhtml' class='view' ><head><style type='text/css'>.view{padding:0;word-wrap:break-word;cursor:text;height:90%;}\nbody{margin:8px;font-family:sans-serif;font-size:16px;}p{margin:5px 0;}</style>"+
-(b.iframeCssUrl?"<link rel='stylesheet' type='text/css' href='"+p.unhtml(b.iframeCssUrl)+"'/>":"")+(b.initialStyle?"<style>"+b.initialStyle+"</style>":"")+"</head><body class='view' ></body><script type='text/javascript' "+(H?"defer='defer'":"")+" id='_initialScript'>setTimeout(function(){editor = window.parent.UE.instants['ueditorInstant"+this.uid+"'];editor._setup(document);},0);var _tmpScript = document.getElementById('_initialScript');_tmpScript.parentNode.removeChild(_tmpScript);\x3c/script></html>";
-a.appendChild(d.createElement(document,"iframe",{id:"ueditor_"+this.uid,width:"100%",height:"100%",frameborder:"0",src:"javascript:void(function(){document.open();"+(b.customDomain&&document.domain!=location.hostname?'document.domain="'+document.domain+'";':"")+'document.write("'+c+'");document.close();}())'}));a.style.overflow="hidden";setTimeout(function(){/%$/.test(b.initialFrameWidth)&&(b.minFrameWidth=b.initialFrameWidth=a.offsetWidth);/%$/.test(b.initialFrameHeight)&&(b.minFrameHeight=b.initialFrameHeight=
-a.offsetHeight,a.style.height=b.initialFrameHeight+"px")})}},_setup:function(a){var b=this,c=b.options;H?(a.body.disabled=!0,a.body.contentEditable=!0,a.body.disabled=!1):a.body.contentEditable=!0;a.body.spellcheck=!1;b.document=a;b.window=a.defaultView||a.parentWindow;b.iframe=b.window.frameElement;b.body=a.body;b.selection=new I.Selection(a);var e;q.gecko&&(e=this.selection.getNative())&&e.removeAllRanges();this._initEvents();for(var g=this.iframe.parentNode;!d.isBody(g);g=g.parentNode)if("FORM"==
-g.tagName){b.form=g;if(b.options.autoSyncData)d.on(b.window,"blur",function(){h(g,b)});else d.on(g,"submit",function(){h(this,b)});break}if(c.initialContent)if(c.autoClearinitialContent){var r=b.execCommand;b.execCommand=function(){b.fireEvent("firstBeforeExecCommand");return r.apply(b,arguments)};this._setDefaultContent(c.initialContent)}else this.setContent(c.initialContent,!1,!0);d.isEmptyNode(b.body)&&(b.body.innerHTML="<p>"+(q.ie?"":"<br/>")+"</p>");c.focus&&setTimeout(function(){b.focus(b.options.focusInEnd);
-!b.options.autoClearinitialContent&&b._selectionChange()},0);b.container||(b.container=this.iframe.parentNode);c.fullscreen&&b.ui&&b.ui.setFullScreen(!0);try{b.document.execCommand("2D-position",!1,!1)}catch(t){}try{b.document.execCommand("enableInlineTableEditing",!1,!1)}catch(x){}try{b.document.execCommand("enableObjectResizing",!1,!1)}catch(w){}b._bindshortcutKeys();b.isReady=1;b.fireEvent("ready");c.onready&&c.onready.call(b);if(!q.ie9below)d.on(b.window,["blur","focus"],function(a){if("blur"==
-a.type){b._bakRange=b.selection.getRange();try{b._bakNativeRange=b.selection.getNative().getRangeAt(0),b.selection.getNative().removeAllRanges()}catch(f){b._bakNativeRange=null}}else try{b._bakRange&&b._bakRange.select()}catch(c){}});q.gecko&&10902>=q.version&&(b.body.contentEditable=!1,setTimeout(function(){b.body.contentEditable=!0},100),setInterval(function(){b.body.style.height=b.iframe.offsetHeight-20+"px"},100));!c.isShow&&b.setHide();c.readonly&&b.setDisabled()},sync:function(a){(a=a?document.getElementById(a):
-d.findParent(this.iframe.parentNode,function(a){return"FORM"==a.tagName},!0))&&h(a,this)},setHeight:function(a,b){a!==parseInt(this.iframe.parentNode.style.height)&&(this.iframe.parentNode.style.height=a+"px");!b&&(this.options.minFrameHeight=this.options.initialFrameHeight=a);this.body.style.height=a+"px"},addshortcutkey:function(a,b){var c={};b?c[a]=b:c=a;p.extend(this.shortcutkeys,c)},_bindshortcutKeys:function(){var a=this,b=this.shortcutkeys;a.addListener("keydown",function(c,e){var g=e.keyCode||
-e.which,h;for(h in b)for(var t=b[h].split(","),x=0,w;w=t[x++];){w=w.split(":");var u=w[0];w=w[1];if(/^(ctrl)(\+shift)?\+(\d+)$/.test(u.toLowerCase())||/^(\d+)$/.test(u))if("ctrl"==RegExp.$1&&(e.ctrlKey||e.metaKey)&&(""!=RegExp.$2?e[RegExp.$2.slice(1)+"Key"]:1)&&g==RegExp.$3||g==RegExp.$1)-1!=a.queryCommandState(h,w)&&a.execCommand(h,w),d.preventDefault(e)}})},getContent:function(a,b,c,d,e){a&&p.isFunction(a)&&(b=a,a="");if(b?!b():!this.hasContents())return"";this.fireEvent("beforegetcontent");b=UE.htmlparser(this.body.innerHTML,
-d);this.filterOutputRule(b);this.fireEvent("aftergetcontent",a,b);return b.toHtml(e)},getAllHtml:function(){var a=[];this.fireEvent("getAllHtml",a);if(q.ie&&8<q.version){var b="";p.each(this.document.styleSheets,function(a){b+=a.href?'<link rel="stylesheet" type="text/css" href="'+a.href+'" />':"<style>"+a.cssText+"</style>"});p.each(this.document.getElementsByTagName("script"),function(a){b+=a.outerHTML})}return"<html><head>"+(this.options.charset?'<meta http-equiv="Content-Type" content="text/html; charset='+
-this.options.charset+'"/>':"")+(b||this.document.getElementsByTagName("head")[0].innerHTML)+a.join("\n")+"</head><body "+(H&&9>q.version?'class="view"':"")+">"+this.getContent(null,null,!0)+"</body></html>"},getPlainTxt:function(){var a=RegExp(d.fillChar,"g"),b=this.body.innerHTML.replace(/[\n\r]/g,""),b=b.replace(/<(p|div)[^>]*>(<br\/?>|&nbsp;)<\/\1>/gi,"\n").replace(/<br\/?>/gi,"\n").replace(/<[^>/]+>/g,"").replace(/(\n)?<\/([^>]+)>/g,function(a,b,c){return v.$block[c]?"\n":b?b:""});return b.replace(a,
-"").replace(/\u00a0/g," ").replace(/&nbsp;/g," ")},getContentTxt:function(){return this.body[q.ie?"innerText":"textContent"].replace(RegExp(d.fillChar,"g"),"").replace(/\u00a0/g," ")},setContent:function(a,b,c){this.fireEvent("beforesetcontent",a);a=UE.htmlparser(a);this.filterInputRule(a);a=a.toHtml();this.body.innerHTML=(b?this.body.innerHTML:"")+a;if("p"==this.options.enterTag)if(b=this.body.firstChild,!b||1==b.nodeType&&(v.$cdata[b.tagName]||"DIV"==b.tagName&&b.getAttribute("cdata_tag")||d.isCustomeNode(b))&&
-b===this.body.lastChild)this.body.innerHTML="<p>"+(q.ie?"&nbsp;":"<br/>")+"</p>"+this.body.innerHTML;else for(var e=this.document.createElement("p");b;){for(;b&&(3==b.nodeType||1==b.nodeType&&v.p[b.tagName]&&!v.$cdata[b.tagName]);)a=b.nextSibling,e.appendChild(b),b=a;if(e.firstChild)if(b)b.parentNode.insertBefore(e,b),e=this.document.createElement("p");else{this.body.appendChild(e);break}b=b.nextSibling}this.fireEvent("aftersetcontent");this.fireEvent("contentchange");!c&&this._selectionChange();
-this._bakRange=this._bakIERange=this._bakNativeRange=null;var g;q.gecko&&(g=this.selection.getNative())&&g.removeAllRanges();this.options.autoSyncData&&this.form&&h(this.form,this)},focus:function(a){try{var b=this.selection.getRange();if(a){var c=this.body.lastChild;c&&(1==c.nodeType&&!v.$empty[c.tagName])&&(d.isEmptyBlock(c)?b.setStartAtFirst(c):b.setStartAtLast(c),b.collapse(!0));b.setCursor(!0)}else!b.collapsed&&d.isBody(b.startContainer)&&0==b.startOffset&&(c=this.body.firstChild)&&(1==c.nodeType&&
-!v.$empty[c.tagName])&&b.setStartAtFirst(c).collapse(!0),b.select(!0);this.fireEvent("focus selectionchange")}catch(e){}},isFocus:function(){return this.selection.isFocus()},blur:function(){var a=this.selection.getNative();if(a.empty&&q.ie){var b=document.body.createTextRange();b.moveToElementText(document.body);b.collapse(!0);b.select();a.empty()}else a.removeAllRanges()},_initEvents:function(){var a=this,b=a.document,c=a.window;a._proxyDomEvent=p.bind(a._proxyDomEvent,a);d.on(b,"click contextmenu mousedown keydown keyup keypress mouseup mouseover mouseout selectstart".split(" "),
-a._proxyDomEvent);d.on(c,["focus","blur"],a._proxyDomEvent);d.on(a.body,"drop",function(b){q.gecko&&b.stopPropagation&&b.stopPropagation();a.fireEvent("contentchange")});d.on(b,["mouseup","keydown"],function(b){"keydown"==b.type&&(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)||2!=b.button&&a._selectionChange(250,b)})},_proxyDomEvent:function(a){return!1===this.fireEvent("before"+a.type.replace(/^on/,"").toLowerCase())||!1===this.fireEvent(a.type.replace(/^on/,""),a)?!1:this.fireEvent("after"+a.type.replace(/^on/,
-"").toLowerCase())},_selectionChange:function(a,b){var e=this,d=!1,g,h;q.ie&&(9>q.version&&b&&"mouseup"==b.type)&&!this.selection.getRange().collapsed&&(d=!0,g=b.clientX,h=b.clientY);clearTimeout(c);c=setTimeout(function(){if(e.selection&&e.selection.getNative()){var a;if(d&&"None"==e.selection.getNative().type){a=e.document.body.createTextRange();try{a.moveToPoint(g,h)}catch(c){a=null}}var f;a&&(f=e.selection.getIERange,e.selection.getIERange=function(){return a});e.selection.cache();f&&(e.selection.getIERange=
-f);e.selection._cachedRange&&e.selection._cachedStartElement&&(e.fireEvent("beforeselectionchange"),e.fireEvent("selectionchange",!!b),e.fireEvent("afterselectionchange"),e.selection.clear())}},a||50)},_callCmdFn:function(a,b){var c=b[0].toLowerCase(),e;e=(c=this.commands[c]||UE.commands[c])&&c[a];if(!(c&&e||"queryCommandState"!=a))return 0;if(e)return e.apply(this,b)},execCommand:function(a){a=a.toLowerCase();var b,c=this.commands[a]||UE.commands[a];if(!c||!c.execCommand)return null;c.notNeedUndo||
-this.__hasEnterExecCommand?(b=this._callCmdFn("execCommand",arguments),this.__hasEnterExecCommand||(c.ignoreContentChange||this._ignoreContentChange)||this.fireEvent("contentchange")):(this.__hasEnterExecCommand=!0,-1!=this.queryCommandState.apply(this,arguments)&&(this.fireEvent("saveScene"),this.fireEvent("beforeexeccommand",a),b=this._callCmdFn("execCommand",arguments),c.ignoreContentChange||this._ignoreContentChange||this.fireEvent("contentchange"),this.fireEvent("afterexeccommand",a),this.fireEvent("saveScene")),
-this.__hasEnterExecCommand=!1);this.__hasEnterExecCommand||(c.ignoreContentChange||this._ignoreContentChange)||this._selectionChange();return b},queryCommandState:function(a){return this._callCmdFn("queryCommandState",arguments)},queryCommandValue:function(a){return this._callCmdFn("queryCommandValue",arguments)},hasContents:function(a){if(a)for(var b=0,c;c=a[b++];)if(0<this.document.getElementsByTagName(c).length)return!0;if(!d.isEmptyBlock(this.body))return!0;a=["div"];for(b=0;c=a[b++];){c=d.getElementsByTagName(this.document,
-c);for(var e=0,g;g=c[e++];)if(d.isCustomeNode(g))return!0}return!1},reset:function(){this.fireEvent("reset")},setEnabled:function(){var a;if("false"==this.body.contentEditable){this.body.contentEditable=!0;a=this.selection.getRange();try{a.moveToBookmark(this.lastBk),delete this.lastBk}catch(b){a.setStartAtFirst(this.body).collapse(!0)}a.select(!0);this.bkqueryCommandState&&(this.queryCommandState=this.bkqueryCommandState,delete this.bkqueryCommandState);this.fireEvent("selectionchange")}},enable:function(){return this.setEnabled()},
-setDisabled:function(a){var b=this;a=a?p.isArray(a)?a:[a]:[];"true"==b.body.contentEditable&&(b.lastBk||(b.lastBk=b.selection.getRange().createBookmark(!0)),b.body.contentEditable=!1,b.bkqueryCommandState=b.queryCommandState,b.queryCommandState=function(c){return-1!=p.indexOf(a,c)?b.bkqueryCommandState.apply(b,arguments):-1},b.fireEvent("selectionchange"))},disable:function(a){return this.setDisabled(a)},_setDefaultContent:function(){function a(){var b=this;b.document.getElementById("initContent")&&
-(b.body.innerHTML="<p>"+(H?"":"<br/>")+"</p>",b.removeListener("firstBeforeExecCommand focus",a),setTimeout(function(){b.focus();b._selectionChange()},0))}return function(b){this.body.innerHTML='<p id="initContent">'+b+"</p>";this.addListener("firstBeforeExecCommand focus",a)}}(),setShow:function(){var a=this.selection.getRange();if("none"==this.container.style.display){try{a.moveToBookmark(this.lastBk),delete this.lastBk}catch(b){a.setStartAtFirst(this.body).collapse(!0)}setTimeout(function(){a.select(!0)},
-100);this.container.style.display=""}},show:function(){return this.setShow()},setHide:function(){this.lastBk||(this.lastBk=this.selection.getRange().createBookmark(!0));this.container.style.display="none"},hide:function(){return this.setHide()},getLang:function(a){var b=UE.I18N[this.options.lang];if(!b)throw Error("not import language file");a=(a||"").split(".");for(var c=0,e;(e=a[c++])&&(b=b[e],b););return b},getContentLength:function(a,b){var c=this.getContent(!1,!1,!0).length;if(a){b=(b||[]).concat(["hr",
-"img","iframe"]);for(var c=this.getContentTxt().replace(/[\t\r\n]+/g,"").length,e=0,d;d=b[e++];)c+=this.document.getElementsByTagName(d).length}return c},addInputRule:function(a){this.inputRules.push(a)},filterInputRule:function(a){for(var b=0,c;c=this.inputRules[b++];)c.call(this,a)},addOutputRule:function(a){this.outputRules.push(a)},filterOutputRule:function(a){for(var b=0,c;c=this.outputRules[b++];)c.call(this,a)}};p.inherits(g,V)})();UE.ajax=function(){function d(a){var b=[],c;for(c in a)"method"!=
-c&&"timeout"!=c&&"async"!=c&&"function"!=(typeof a[c]).toLowerCase()&&"object"!=(typeof a[c]).toLowerCase()&&b.push(encodeURIComponent(c)+"="+encodeURIComponent(a[c]));return b.join("&")}var a="XMLHttpRequest()";try{new ActiveXObject("Msxml2.XMLHTTP"),a="ActiveXObject('Msxml2.XMLHTTP')"}catch(e){try{new ActiveXObject("Microsoft.XMLHTTP"),a="ActiveXObject('Microsoft.XMLHTTP')"}catch(b){}}var c=new Function("return new "+a);return{request:function(a,b){var e=c(),l=!1,m={method:"POST",timeout:5E3,async:!0,
-data:{},onsuccess:function(){},onerror:function(){}};"object"===typeof a&&(b=a,a=b.url);if(e&&a){var n=b?p.extend(m,b):m,m=d(n);p.isEmptyObject(n.data)||(m+=(m?"&":"")+d(n.data));var r=setTimeout(function(){4!=e.readyState&&(l=!0,e.abort(),clearTimeout(r))},n.timeout),t=n.method.toUpperCase(),x=a+(-1==a.indexOf("?")?"?":"&")+("POST"==t?"":m+"&noCache="+ +new Date);e.open(t,x,n.async);e.onreadystatechange=function(){if(4==e.readyState)if(l||200!=e.status)n.onerror(e);else n.onsuccess(e)};"POST"==t?
-(e.setRequestHeader("Content-Type","application/x-www-form-urlencoded"),e.send(m)):e.send(null)}}}}();UE.filterWord=function(){function d(a){return a=a.replace(/[\d.]+\w+/g,function(a){return p.transUnitToPx(a)})}function a(a){return a.replace(/[\t\r\n]+/g," ").replace(/\x3c!--[\s\S]*?--\x3e/ig,"").replace(/<v:shape [^>]*>[\s\S]*?.<\/v:shape>/gi,function(a){if(q.opera)return"";try{if(/Bitmap/i.test(a))return"";var c=a.match(/width:([ \d.]*p[tx])/i)[1],e=a.match(/height:([ \d.]*p[tx])/i)[1],f=a.match(/src=\s*"([^"]*)"/i)[1];
-return'<img width="'+d(c)+'" height="'+d(e)+'" src="'+f+'" />'}catch(k){return""}}).replace(/<\/?div[^>]*>/g,"").replace(/v:\w+=(["']?)[^'"]+\1/g,"").replace(/<(!|script[^>]*>.*?<\/script(?=[>\s])|\/?(\?xml(:\w+)?|xml|meta|link|style|\w+:\w+)(?=[\s\/>]))[^>]*>/gi,"").replace(/<p [^>]*class="?MsoHeading"?[^>]*>(.*?)<\/p>/gi,"<p><strong>$1</strong></p>").replace(/\s+(class|lang|align)\s*=\s*(['"]?)([\w-]+)\2/ig,function(a,c,e,d){return"class"==c&&"MsoListParagraph"==d?a:""}).replace(/<(font|span)[^>]*>(\s*)<\/\1>/gi,
-function(a,c,e){return e.replace(/[\t\r\n ]+/g," ")}).replace(/(<[a-z][^>]*)\sstyle=(["'])([^\2]*?)\2/gi,function(a,c,e,f){a=[];f=f.replace(/^\s+|\s+$/,"").replace(/&#39;/g,"'").replace(/&quot;/gi,"'").split(/;\s*/g);e=0;for(var k;k=f[e];e++){var l,m=k.split(":");if(2==m.length&&(k=m[0].toLowerCase(),l=m[1].toLowerCase(),!(/^(background)\w*/.test(k)&&0==l.replace(/(initial|\s)/g,"").length||/^(margin)\w*/.test(k)&&/^0\w+$/.test(l)))){switch(k){case "mso-padding-alt":case "mso-padding-top-alt":case "mso-padding-right-alt":case "mso-padding-bottom-alt":case "mso-padding-left-alt":case "mso-margin-alt":case "mso-margin-top-alt":case "mso-margin-right-alt":case "mso-margin-bottom-alt":case "mso-margin-left-alt":case "mso-height":case "mso-width":case "mso-vertical-align-alt":/<table/.test(c)||
-(a[e]=k.replace(/^mso-|-alt$/g,"")+":"+d(l));continue;case "horiz-align":a[e]="text-align:"+l;continue;case "vert-align":a[e]="vertical-align:"+l;continue;case "font-color":case "mso-foreground":a[e]="color:"+l;continue;case "mso-background":case "mso-highlight":a[e]="background:"+l;continue;case "mso-default-height":a[e]="min-height:"+d(l);continue;case "mso-default-width":a[e]="min-width:"+d(l);continue;case "mso-padding-between-alt":a[e]="border-collapse:separate;border-spacing:"+d(l);continue;
-case "text-line-through":if("single"==l||"double"==l)a[e]="text-decoration:line-through";continue;case "mso-zero-height":"yes"==l&&(a[e]="display:none");continue;case "margin":if(!/[1-9]/.test(l))continue}/^(mso|column|font-emph|lang|layout|line-break|list-image|nav|panose|punct|row|ruby|sep|size|src|tab-|table-border|text-(?:decor|trans)|top-bar|version|vnd|word-break)/.test(k)||/text\-indent|padding|margin/.test(k)&&/\-[\d.]+/.test(l)||(a[e]=k+":"+m[1])}}return c+(a.length?' style="'+a.join(";").replace(/;{2,}/g,
-";")+'"':"")}).replace(/[\d.]+(cm|pt)/g,function(a){return p.transUnitToPx(a)})}return function(e){return/(class="?Mso|style="[^"]*\bmso\-|w:WordDocument|<(v|o):|lang=)/ig.test(e)?a(e):e}}();(function(){function d(a,b,c){a.push(r);return b+(c?1:-1)}function a(a,b){for(var c=0;c<b;c++)a.push(n)}function e(c,f,l,g){switch(c.type){case "root":for(var k=0,n;n=c.children[k++];)l&&("element"==n.type&&!v.$inlineWithA[n.tagName]&&1<k)&&(d(f,g,!0),a(f,g)),e(n,f,l,g);break;case "text":"pre"==c.parentNode.tagName?
-f.push(c.data):f.push(m[c.parentNode.tagName]?p.html(c.data):c.data.replace(/[ ]{2}/g," &nbsp;"));break;case "element":b(c,f,l,g);break;case "comment":f.push("\x3c!--"+c.data+"--\x3e")}return f}function b(b,c,f,g){var k="";if(b.attrs){var k=[],m=b.attrs,n;for(n in m)k.push(n+(void 0!==m[n]?'="'+(l[n]?p.html(m[n]).replace(/["]/g,function(a){return"&quot;"}):p.unhtml(m[n]))+'"':""));k=k.join(" ")}c.push("<"+b.tagName+(k?" "+k:"")+(v.$empty[b.tagName]?"/":"")+">");f&&(!v.$inlineWithA[b.tagName]&&"pre"!=
-b.tagName)&&(b.children&&b.children.length)&&(g=d(c,g,!0),a(c,g));if(b.children&&b.children.length)for(k=0;m=b.children[k++];)f&&("element"==m.type&&!v.$inlineWithA[m.tagName]&&1<k)&&(d(c,g),a(c,g)),e(m,c,f,g);v.$empty[b.tagName]||(f&&(!v.$inlineWithA[b.tagName]&&"pre"!=b.tagName)&&(b.children&&b.children.length)&&(g=d(c,g),a(c,g)),c.push("</"+b.tagName+">"))}function c(a,b){var e;if("element"==a.type&&a.getAttr("id")==b)return a;if(a.children&&a.children.length)for(var f=0;e=a.children[f++];)if(e=
-c(e,b))return e}function g(a,b,c){"element"==a.type&&a.tagName==b&&c.push(a);if(a.children&&a.children.length)for(var e=0,f;f=a.children[e++];)g(f,b,c)}function f(a,b){if(a.children&&a.children.length)for(var c=0,e;e=a.children[c];)f(e,b),e.parentNode&&(e.children&&e.children.length&&b(e),e.parentNode&&c++);else b(a)}var k=UE.uNode=function(a){this.type=a.type;this.data=a.data;this.tagName=a.tagName;this.parentNode=a.parentNode;this.attrs=a.attrs||{};this.children=a.children},l={href:1,src:1,_src:1,
-_href:1,cdata_data:1},m={style:1,script:1},n="    ",r="\n";k.createElement=function(a){return/[<>]/.test(a)?UE.htmlparser(a).children[0]:new k({type:"element",children:[],tagName:a})};k.createText=function(a,b){return new UE.uNode({type:"text",data:b?a:p.unhtml(a||"")})};k.prototype={toHtml:function(a){var b=[];e(this,b,a,0);return b.join("")},innerHTML:function(a){if("element"!=this.type||v.$empty[this.tagName])return this;if(p.isString(a)){if(this.children)for(var b=0,c;c=this.children[b++];)c.parentNode=
-null;this.children=[];a=UE.htmlparser(a);for(b=0;c=a.children[b++];)this.children.push(c),c.parentNode=this;return this}a=new UE.uNode({type:"root",children:this.children});return a.toHtml()},innerText:function(a,b){if("element"!=this.type||v.$empty[this.tagName])return this;if(a){if(this.children)for(var c=0,e;e=this.children[c++];)e.parentNode=null;this.children=[];this.appendChild(k.createText(a,b));return this}return this.toHtml().replace(/<[^>]+>/g,"")},getData:function(){return"element"==this.type?
-"":this.data},firstChild:function(){return this.children?this.children[0]:null},lastChild:function(){return this.children?this.children[this.children.length-1]:null},previousSibling:function(){for(var a=this.parentNode,b=0,c;c=a.children[b];b++)if(c===this)return 0==b?null:a.children[b-1]},nextSibling:function(){for(var a=this.parentNode,b=0,c;c=a.children[b++];)if(c===this)return a.children[b]},replaceChild:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c=0,e;e=
-this.children[c];c++)if(e===b)return this.children.splice(c,1,a),b.parentNode=null,a.parentNode=this,a}},appendChild:function(a){if("root"==this.type||"element"==this.type&&!v.$empty[this.tagName]){this.children||(this.children=[]);a.parentNode&&a.parentNode.removeChild(a);for(var b=0,c;c=this.children[b];b++)if(c===a){this.children.splice(b,1);break}this.children.push(a);a.parentNode=this;return a}},insertBefore:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c=
-0,e;e=this.children[c];c++)if(e===b)return this.children.splice(c,0,a),a.parentNode=this,a}},insertAfter:function(a,b){if(this.children){a.parentNode&&a.parentNode.removeChild(a);for(var c=0,e;e=this.children[c];c++)if(e===b)return this.children.splice(c+1,0,a),a.parentNode=this,a}},removeChild:function(a,b){if(this.children)for(var c=0,e;e=this.children[c];c++)if(e===a){this.children.splice(c,1);e.parentNode=null;if(b&&e.children&&e.children.length)for(var f=0,d;d=e.children[f];f++)this.children.splice(c+
-f,0,d),d.parentNode=this;return e}},getAttr:function(a){return this.attrs&&this.attrs[a.toLowerCase()]},setAttr:function(a,b){if(a)if(this.attrs||(this.attrs={}),p.isObject(a))for(var c in a)a[c]?this.attrs[c.toLowerCase()]=a[c]:delete this.attrs[c];else b?this.attrs[a.toLowerCase()]=b:delete this.attrs[a];else delete this.attrs},getIndex:function(){for(var a=this.parentNode,b=0,c;c=a.children[b];b++)if(c===this)return b;return-1},getNodeById:function(a){var b;if(this.children&&this.children.length)for(var e=
-0;b=this.children[e++];)if(b=c(b,a))return b},getNodesByTagName:function(a){a=p.trim(a).replace(/[ ]{2,}/g," ").split(" ");var b=[],c=this;p.each(a,function(a){if(c.children&&c.children.length)for(var e=0,f;f=c.children[e++];)g(f,a,b)});return b},getStyle:function(a){var b=this.getAttr("style");return b?(a=b.match(RegExp("(^|;)\\s*"+a+":([^;]+)","i")))&&a[0]?a[2]:"":""},setStyle:function(a,b){function c(a,b){e=e.replace(RegExp("(^|;)\\s*"+a+":([^;]+;?)","gi"),"$1");b&&(e=a+":"+p.unhtml(b)+";"+e)}
-var e=this.getAttr("style");e||(e="");if(p.isObject(a))for(var f in a)c(f,a[f]);else c(a,b);this.setAttr("style",p.trim(e))},traversal:function(a){this.children&&this.children.length&&f(this,a);return this}}})();UE.htmlparser=function(h,a){function e(a,b){if(n[a.tagName]){var c=l.createElement(n[a.tagName]);a.appendChild(c);c.appendChild(l.createText(b))}else a.appendChild(l.createText(b))}function b(a,c,e){var f;if(f=m[c]){for(var d=a,n;"root"!=d.type;){if(p.isArray(f)?-1!=p.indexOf(f,d.tagName):
-f==d.tagName){a=d;n=!0;break}d=d.parentNode}n||(a=b(a,p.isArray(f)?f[0]:f))}f=new l({parentNode:a,type:"element",tagName:c.toLowerCase(),children:v.$empty[c]?null:[]});if(e){for(d={};n=g.exec(e);)d[n[1].toLowerCase()]=k[n[1].toLowerCase()]?n[2]||n[3]||n[4]:p.unhtml(n[2]||n[3]||n[4]);f.attrs=d}a.children.push(f);return v.$empty[c]?a:f}var c=/<(?:(?:\/([^>]+)>)|(?:!--([\S|\s]*?)--\x3e)|(?:([^\s\/>]+)\s*((?:(?:"[^"]*")|(?:'[^']*')|[^"'<>])*)\/?>))/g,g=/([\w\-:.]+)(?:(?:\s*=\s*(?:(?:"([^"]*)")|(?:'([^']*)')|([^\s>]+)))|(?=\s|$))/g,
-f={b:1,code:1,i:1,u:1,strike:1,s:1,tt:1,strong:1,q:1,samp:1,em:1,span:1,sub:1,img:1,sup:1,font:1,big:1,small:1,iframe:1,a:1,br:1,pre:1};h=h.replace(RegExp(d.fillChar,"g"),"");a||(h=h.replace(RegExp("[\\r\\t\\n"+(a?"":" ")+"]*</?(\\w+)\\s*(?:[^>]*)>[\\r\\t\\n"+(a?"":" ")+"]*","g"),function(b,c){return c&&f[c.toLowerCase()]?b.replace(/(^[\n\r]+)|([\n\r]+$)/g,""):b.replace(RegExp("^[\\r\\n"+(a?"":" ")+"]+"),"").replace(RegExp("[\\r\\n"+(a?"":" ")+"]+$"),"")}));for(var k={href:1,src:1},l=UE.uNode,m={td:"tr",
-tr:["tbody","thead","tfoot"],tbody:"table",th:"tr",thead:"table",tfoot:"table",caption:"table",li:["ul","ol"],dt:"dl",dd:"dl",option:"select"},n={ol:"li",ul:"li"},r,t=0,x=0,w=new l({type:"root",children:[]}),u=w;r=c.exec(h);){t=r.index;try{if(t>x&&e(u,h.slice(x,t)),r[3])v.$cdata[u.tagName]?e(u,r[0]):u=b(u,r[3].toLowerCase(),r[4]);else if(r[1]){if("root"!=u.type)if(v.$cdata[u.tagName]&&!v.$cdata[r[1]])e(u,r[0]);else{for(t=u;"element"==u.type&&u.tagName!=r[1].toLowerCase();)if(u=u.parentNode,"root"==
-u.type)throw u=t,"break";u=u.parentNode}}else r[2]&&u.children.push(new l({type:"comment",data:r[2],parentNode:u}))}catch(P){}x=c.lastIndex}x<h.length&&e(u,h.slice(x));return w};UE.filterNode=function(){function d(a,e){switch(a.type){case "element":var b;if(b=e[a.tagName])if("-"===b)a.parentNode.removeChild(a);else if(p.isFunction(b)){var c=a.parentNode,g=a.getIndex();b(a);if(a.parentNode){if(a.children)for(b=0;g=a.children[b];)d(g,e),g.parentNode&&b++}else for(b=g;g=c.children[b];)d(g,e),g.parentNode&&
-b++}else{if((b=b.$)&&a.attrs){var g={},f;for(c in b){f=a.getAttr(c);if("style"==c&&p.isArray(b[c])){var k=[];p.each(b[c],function(b){var c;(c=a.getStyle(b))&&k.push(b+":"+c)});f=k.join(";")}f&&(g[c]=f)}a.attrs=g}if(a.children)for(b=0;g=a.children[b];)d(g,e),g.parentNode&&b++}else if(v.$cdata[a.tagName])a.parentNode.removeChild(a);else for(c=a.parentNode,g=a.getIndex(),a.parentNode.removeChild(a,!0),b=g;g=c.children[b];)d(g,e),g.parentNode&&b++;break;case "comment":a.parentNode.removeChild(a)}}return function(a,
-e){if(p.isEmptyObject(e))return a;var b;(b=e["-"])&&p.each(b.split(" "),function(a){e[a]="-"});b=0;for(var c;c=a.children[b];)d(c,e),c.parentNode&&b++;return a}}();UE.plugin=function(){var d={};return{register:function(a,e,b,c){b&&p.isFunction(b)&&(c=b,b=null);d[a]={optionName:b||a,execFn:e,afterDisabled:c}},load:function(a){p.each(d,function(e){var b=e.execFn.call(a);!1!==a.options[e.optionName]?b&&p.each(b,function(b,e){switch(e.toLowerCase()){case "shortcutkey":a.addshortcutkey(b);break;case "bindevents":p.each(b,
-function(b,c){a.addListener(c,b)});break;case "bindmultievents":p.each(p.isArray(b)?b:[b],function(b){var c=p.trim(b.type).split(/\s+/);p.each(c,function(c){a.addListener(c,b.handler)})});break;case "commands":p.each(b,function(b,c){a.commands[c]=b});break;case "outputrule":a.addOutputRule(b);break;case "inputrule":a.addInputRule(b);break;case "defaultoptions":a.setOpt(b)}}):e.afterDisabled&&e.afterDisabled.call(a)});p.each(UE.plugins,function(e){e.call(a)})},run:function(a,e){var b=d[pluginName];
-b&&b.exeFn.call(e)}}}();UE.plugins.defaultfilter=function(){var d=this;d.setOpt({allowDivTransToP:0,disabledTableInTable:!0});d.addInputRule(function(a){function e(a){for(;a&&"element"==a.type;){if("td"==a.tagName)return!0;a=a.parentNode}return!1}var b=this.options.allowDivTransToP,c;a.traversal(function(a){if("element"==a.type)if(v.$cdata[a.tagName]||!d.options.autoClearEmptyNode||!v.$inline[a.tagName]||v.$empty[a.tagName]||a.attrs&&!p.isEmptyObject(a.attrs))switch(a.tagName){case "a":(c=a.getAttr("href"))&&a.setAttr("_href",c);break;case "img":if((c=a.getAttr("src"))&&/^data:/.test(c)){a.parentNode.removeChild(a);break}a.setAttr("_src",a.getAttr("src"));break;case "span":q.webkit&&(c=a.getStyle("white-space"))&&/nowrap|normal/.test(c)&&(a.setStyle("white-space",""),d.options.autoClearEmptyNode&&p.isEmptyObject(a.attrs)&&a.parentNode.removeChild(a,!0));break;case "p":if(c=a.getAttr("align"))a.setAttr("align"),
-a.setStyle("text-align",c);p.each(a.children,function(b){if("element"==b.type&&"p"==b.tagName){var c=b.nextSibling();for(a.parentNode.insertAfter(b,a);c;){var e=c.nextSibling();a.parentNode.insertAfter(c,b);b=c;c=e}return!1}});a.firstChild()||a.innerHTML(q.ie?"&nbsp;":"<br/>");break;case "div":if(a.getAttr("cdata_tag"))break;if((c=a.getAttr("class"))&&/^line number\d+/.test(c))break;if(!b)break;for(var f,k=UE.uNode.createElement("p");f=a.firstChild();)"text"!=f.type&&UE.dom.dtd.$block[f.tagName]?
-k.firstChild()?(a.parentNode.insertBefore(k,a),k=UE.uNode.createElement("p")):a.parentNode.insertBefore(f,a):k.appendChild(f);k.firstChild()&&a.parentNode.insertBefore(k,a);a.parentNode.removeChild(a);break;case "dl":a.tagName="ul";break;case "dt":case "dd":a.tagName="li";break;case "li":(f=a.getAttr("class"))&&/list\-/.test(f)||a.setAttr();f=a.getNodesByTagName("ol ul");UE.utils.each(f,function(b){a.parentNode.insertAfter(b,a)});break;case "td":case "th":case "caption":a.children&&a.children.length||
-a.appendChild(q.ie?UE.uNode.createText(" "):UE.uNode.createElement("br"));break;case "table":d.options.disabledTableInTable&&e(a)&&(a.parentNode.insertBefore(UE.uNode.createText(a.innerText()),a),a.parentNode.removeChild(a))}else a.firstChild()?"span"!=a.tagName||a.attrs&&!p.isEmptyObject(a.attrs)||a.parentNode.removeChild(a,!0):a.parentNode.removeChild(a)})});d.addOutputRule(function(a){var e;a.traversal(function(a){if("element"==a.type)if(!d.options.autoClearEmptyNode||!v.$inline[a.tagName]||v.$empty[a.tagName]||
-a.attrs&&!p.isEmptyObject(a.attrs))switch(a.tagName){case "div":if(e=a.getAttr("cdata_tag"))a.tagName=e,a.appendChild(UE.uNode.createText(a.getAttr("cdata_data"))),a.setAttr({cdata_tag:"",cdata_data:"",_ue_custom_node_:""});break;case "a":(e=a.getAttr("_href"))&&a.setAttr({href:p.html(e),_href:""});break;case "img":(e=a.getAttr("_src"))&&a.setAttr({src:a.getAttr("_src"),_src:""})}else a.firstChild()?"span"!=a.tagName||a.attrs&&!p.isEmptyObject(a.attrs)||a.parentNode.removeChild(a,!0):a.parentNode.removeChild(a)})})};
-UE.commands.inserthtml={execCommand:function(h,a,e){var b=this,c;if(a&&!0!==b.fireEvent("beforeinserthtml",a)){c=b.selection.getRange();h=c.document.createElement("div");h.style.display="inline";e||(a=UE.htmlparser(a),b.options.filterRules&&UE.filterNode(a,b.options.filterRules),b.filterInputRule(a),a=a.toHtml());h.innerHTML=p.trim(a);if(!c.collapsed&&(a=c.startContainer,d.isFillChar(a)&&c.setStartBefore(a),a=c.endContainer,d.isFillChar(a)&&c.setEndAfter(a),c.txtToElmBoundary(),c.endContainer&&1==
-c.endContainer.nodeType&&(a=c.endContainer.childNodes[c.endOffset])&&d.isBr(a)&&c.setEndAfter(a),0==c.startOffset&&(a=c.startContainer,d.isBoundaryNode(a,"firstChild")&&(a=c.endContainer,c.endOffset==(3==a.nodeType?a.nodeValue.length:a.childNodes.length)&&d.isBoundaryNode(a,"lastChild")&&(b.body.innerHTML="<p>"+(q.ie?"":"<br/>")+"</p>",c.setStart(b.body.firstChild,0).collapse(!0)))),!c.collapsed&&c.deleteContents(),1==c.startContainer.nodeType)){a=c.startContainer.childNodes[c.startOffset];var g;
-if(a&&d.isBlockElm(a)&&(g=a.previousSibling)&&d.isBlockElm(g)){for(c.setEnd(g,g.childNodes.length).collapse();a.firstChild;)g.appendChild(a.firstChild);d.remove(a)}}var f,k;e=0;var l;c.inFillChar()&&(a=c.startContainer,d.isFillChar(a)?(c.setStartBefore(a).collapse(!0),d.remove(a)):d.isFillChar(a,!0)&&(a.nodeValue=a.nodeValue.replace(O,""),c.startOffset--,c.collapsed&&c.collapse(!0)));var m=d.findParentByTagName(c.startContainer,"li",!0);if(m){for(var n;a=h.firstChild;){for(;a&&(3==a.nodeType||!d.isBlockElm(a)||
-"HR"==a.tagName);)n=a.nextSibling,c.insertNode(a).collapse(),f=a,a=n;if(a)if(/^(ol|ul)$/i.test(a.tagName)){for(;a.firstChild;)f=a.firstChild,d.insertAfter(m,a.firstChild),m=m.nextSibling;d.remove(a)}else n=a.nextSibling,g=b.document.createElement("li"),d.insertAfter(m,g),g.appendChild(a),f=a,a=n,m=g}m=d.findParentByTagName(c.startContainer,"li",!0);d.isEmptyBlock(m)&&d.remove(m);f&&c.setStartAfter(f).collapse(!0).select(!0)}else{for(;a=h.firstChild;){if(e){for(f=b.document.createElement("p");a&&(3==
-a.nodeType||!v.$block[a.tagName]);)l=a.nextSibling,f.appendChild(a),a=l;f.firstChild&&(a=f)}c.insertNode(a);l=a.nextSibling;if(!e&&a.nodeType==d.NODE_ELEMENT&&d.isBlockElm(a)&&(f=d.findParent(a,function(a){return d.isBlockElm(a)}))&&"body"!=f.tagName.toLowerCase()&&(!v[f.tagName][a.nodeName]||a.parentNode!==f)){if(v[f.tagName][a.nodeName])for(k=a.parentNode;k!==f;)g=k,k=k.parentNode;else g=f;d.breakParent(a,g||k);g=a.previousSibling;d.trimWhiteTextNode(g);g.childNodes.length||d.remove(g);!q.ie&&((n=
-a.nextSibling)&&d.isBlockElm(n)&&n.lastChild&&!d.isBr(n.lastChild))&&n.appendChild(b.document.createElement("br"));e=1}n=a.nextSibling;if(!h.firstChild&&n&&d.isBlockElm(n)){c.setStart(n,0).collapse(!0);break}c.setEndAfter(a).collapse()}a=c.startContainer;l&&d.isBr(l)&&d.remove(l);if(d.isBlockElm(a)&&d.isEmptyNode(a))if(l=a.nextSibling)d.remove(a),1==l.nodeType&&v.$block[l.tagName]&&c.setStart(l,0).collapse(!0).shrinkBoundary();else try{a.innerHTML=q.ie?d.fillChar:"<br/>"}catch(r){c.setStartBefore(a),
-d.remove(a)}try{c.select(!0)}catch(t){}}setTimeout(function(){c=b.selection.getRange();c.scrollToView(b.autoHeightEnabled,b.autoHeightEnabled?d.getXY(b.iframe).y:0);b.fireEvent("afterinserthtml")},200)}}};UE.plugins.autotypeset=function(){function h(a,b){if(!a||3==a.nodeType)return 0;if(d.isBr(a))return 1;if(a&&a.parentNode&&k[a.tagName.toLowerCase()])return l&&l.contains(a)||a.getAttribute("pagebreak")?0:b?!d.isEmptyBlock(a):d.isEmptyBlock(a,RegExp("[\\s"+d.fillChar+"]","g"))}function a(a){a.style.cssText||
-(d.removeAttributes(a,["style"]),"span"==a.tagName.toLowerCase()&&d.hasNoAttributes(a)&&d.remove(a,!0))}function e(b,e){var k;if(e){if(!c.pasteFilter)return;k=this.document.createElement("div");k.innerHTML=e.html}else k=this.document.body;for(var t=d.getElementsByTagName(k,"*"),x=0,w;w=t[x++];)if(!0!==this.fireEvent("excludeNodeinautotype",w)){c.clearFontSize&&w.style.fontSize&&(d.removeStyle(w,"font-size"),a(w));c.clearFontFamily&&w.style.fontFamily&&(d.removeStyle(w,"font-family"),a(w));if(h(w)){if(c.mergeEmptyline)for(var u=
-w.nextSibling,p,F=d.isBr(w);h(u);){p=u;u=p.nextSibling;if(F&&(!u||u&&!d.isBr(u)))break;d.remove(p)}if(c.removeEmptyline&&d.inDoc(w,k)&&!f[w.parentNode.tagName.toLowerCase()]){if(d.isBr(w)&&(u=w.nextSibling)&&!d.isBr(u))continue;d.remove(w);continue}}h(w,!0)&&"SPAN"!=w.tagName&&(c.indent&&(w.style.textIndent=c.indentValue),c.textAlign&&(w.style.textAlign=c.textAlign));if(c.removeClass&&w.className&&!g[w.className.toLowerCase()]){if(l&&l.contains(w))continue;d.removeAttributes(w,["class"])}if(c.imageBlockLine&&
-"img"==w.tagName.toLowerCase()&&!w.getAttribute("emotion"))if(e)switch(F=w,c.imageBlockLine){case "left":case "right":case "none":for(var u=F.parentNode,D;v.$inline[u.tagName]||"A"==u.tagName;)u=u.parentNode;p=u;if("P"==p.tagName&&"center"==d.getStyle(p,"text-align")&&!d.isBody(p)&&1==d.getChildCount(p,function(a){return!d.isBr(a)&&!d.isWhitespace(a)}))if(D=p.previousSibling,u=p.nextSibling,D&&u&&1==D.nodeType&&1==u.nodeType&&D.tagName==u.tagName&&d.isBlockElm(D)){for(D.appendChild(p.firstChild);u.firstChild;)D.appendChild(u.firstChild);
-d.remove(p);d.remove(u)}else d.setStyle(p,"text-align","");d.setStyle(F,"float",c.imageBlockLine);break;case "center":if("center"!=this.queryCommandValue("imagefloat")){u=F.parentNode;d.setStyle(F,"float","none");for(p=F;u&&1==d.getChildCount(u,function(a){return!d.isBr(a)&&!d.isWhitespace(a)})&&(v.$inline[u.tagName]||"A"==u.tagName);)p=u,u=u.parentNode;u=this.document.createElement("p");d.setAttributes(u,{style:"text-align:center"});p.parentNode.insertBefore(u,p);u.appendChild(p);d.setStyle(p,"float",
-"")}}else this.selection.getRange().selectNode(w).select(),this.execCommand("imagefloat",c.imageBlockLine);c.removeEmptyNode&&c.removeTagNames[w.tagName.toLowerCase()]&&(d.hasNoAttributes(w)&&d.isEmptyBlock(w))&&d.remove(w)}e&&(e.html=k.innerHTML)}this.setOpt({autotypeset:{mergeEmptyline:!0,removeClass:!0,removeEmptyline:!1,textAlign:"left",imageBlockLine:"center",pasteFilter:!1,clearFontSize:!1,clearFontFamily:!1,removeEmptyNode:!1,removeTagNames:p.extend({div:1},v.$removeEmpty),indent:!1,indentValue:"2em"}});
-var b=this,c=b.options.autotypeset,g={selectTdClass:1,pagebreak:1,anchorclass:1},f={li:1},k={div:1,p:1,blockquote:1,center:1,h1:1,h2:1,h3:1,h4:1,h5:1,h6:1,span:1},l;c&&(c.pasteFilter&&b.addListener("beforepaste",e),b.commands.autotypeset={execCommand:function(){b.removeListener("beforepaste",e);c.pasteFilter&&b.addListener("beforepaste",e);e.call(b)}})};UE.plugin.register("autosubmit",function(){return{shortcutkey:{autosubmit:"ctrl+13"},commands:{autosubmit:{execCommand:function(){var h=d.findParentByTagName(this.iframe,
-"form",!1);h&&!1!==this.fireEvent("beforesubmit")&&(this.sync(),h.submit())}}}}});UE.plugin.register("background",function(){function h(a){var b={};a=a.split(";");p.each(a,function(a){var c=a.indexOf(":"),e=p.trim(a.substr(0,c)).toLowerCase();e&&(b[e]=p.trim(a.substr(c+1)||""))});return b}function a(a){if(a){var c=[],d;for(d in a)a.hasOwnProperty(d)&&c.push(d+":"+a[d]+"; ");p.cssRule(b,c.length?"body{"+c.join("")+"}":"",e.document)}else p.cssRule(b,"",e.document)}var e=this,b="editor_background",
-c,g=/body[\s]*\{(.+)\}/i,f=e.hasContents;e.hasContents=function(){return e.queryCommandValue("background")?!0:f.apply(e,arguments)};return{bindEvents:{getAllHtml:function(a,b){var c=this.body,f=d.getComputedStyle(c,"background-image"),g="",g=0<f.indexOf(e.options.imagePath)?f.substring(f.indexOf(e.options.imagePath),f.length-1).replace(/"|\(|\)/ig,""):"none"!=f?f.replace(/url\("?|"?\)/ig,""):"",f='<style type="text/css">body{',c={"background-color":d.getComputedStyle(c,"background-color")||"#ffffff",
-"background-image":g?"url("+g+")":"","background-repeat":d.getComputedStyle(c,"background-repeat")||"","background-position":q.ie?d.getComputedStyle(c,"background-position-x")+" "+d.getComputedStyle(c,"background-position-y"):d.getComputedStyle(c,"background-position"),height:d.getComputedStyle(c,"height")},h;for(h in c)c.hasOwnProperty(h)&&(f+=h+":"+c[h]+"; ");b.push(f+"}</style> ")},aftersetcontent:function(){!1==c&&a()}},inputRule:function(b){c=!1;p.each(b.getNodesByTagName("p"),function(b){var e=
-b.getAttr("data-background");e&&(c=!0,a(h(e)),b.parentNode.removeChild(b))})},outputRule:function(a){var c=(p.cssRule(b,this.document)||"").replace(/[\n\r]+/g,"").match(g);c&&a.appendChild(UE.uNode.createElement('<p style="display:none;" data-background="'+p.trim(c[1].replace(/"/g,"").replace(/[\s]+/g," "))+'"><br/></p>'))},commands:{background:{execCommand:function(b,c){a(c)},queryCommandValue:function(){var a=(p.cssRule(b,this.document)||"").replace(/[\n\r]+/g,"").match(g);return a?h(a[1]):null},
-notNeedUndo:!0}}}});UE.commands.imagefloat={execCommand:function(h,a){var e=this.selection.getRange();if(!e.collapsed){var b=e.getClosedNode();if(b&&"IMG"==b.tagName)switch(a){case "left":case "right":case "none":for(var c=b.parentNode,g,f;v.$inline[c.tagName]||"A"==c.tagName;)c=c.parentNode;g=c;if("P"==g.tagName&&"center"==d.getStyle(g,"text-align")){if(!d.isBody(g)&&1==d.getChildCount(g,function(a){return!d.isBr(a)&&!d.isWhitespace(a)}))if(c=g.previousSibling,f=g.nextSibling,c&&f&&1==c.nodeType&&
-1==f.nodeType&&c.tagName==f.tagName&&d.isBlockElm(c)){for(c.appendChild(g.firstChild);f.firstChild;)c.appendChild(f.firstChild);d.remove(g);d.remove(f)}else d.setStyle(g,"text-align","");e.selectNode(b).select()}d.setStyle(b,"float","none"==a?"":a);"none"==a&&d.removeAttributes(b,"align");break;case "center":if("center"!=this.queryCommandValue("imagefloat")){c=b.parentNode;d.setStyle(b,"float","");d.removeAttributes(b,"align");for(g=b;c&&1==d.getChildCount(c,function(a){return!d.isBr(a)&&!d.isWhitespace(a)})&&
-(v.$inline[c.tagName]||"A"==c.tagName);)g=c,c=c.parentNode;e.setStartBefore(g).setCursor(!1);c=this.document.createElement("div");c.appendChild(g);d.setStyle(g,"float","");this.execCommand("insertHtml",'<p id="_img_parent_tmp" style="text-align:center">'+c.innerHTML+"</p>");g=this.document.getElementById("_img_parent_tmp");g.removeAttribute("id");g=g.firstChild;e.selectNode(g).select();(f=g.parentNode.nextSibling)&&d.isEmptyNode(f)&&d.remove(f)}}}},queryCommandValue:function(){var h=this.selection.getRange(),
-a;return h.collapsed?"none":(h=h.getClosedNode())&&1==h.nodeType&&"IMG"==h.tagName?(a=d.getComputedStyle(h,"float")||h.getAttribute("align"),"none"==a&&(a="center"==d.getComputedStyle(h.parentNode,"text-align")?"center":a),{left:1,right:1,center:1}[a]?a:"none"):"none"},queryCommandState:function(){var d=this.selection.getRange();return d.collapsed?-1:(d=d.getClosedNode())&&1==d.nodeType&&"IMG"==d.tagName?0:-1}};UE.commands.insertimage={execCommand:function(h,a){a=p.isArray(a)?a:[a];if(a.length){var e=
-this.selection.getRange(),b=e.getClosedNode();if(!b||!/img/i.test(b.tagName)||"edui-faked-video"==b.className&&-1==b.className.indexOf("edui-upload-video")||b.getAttribute("word_img")){var e=[],b="",c;c=a[0];if(1==a.length)b='<img src="'+c.src+'" '+(c._src?' _src="'+c._src+'" ':"")+(c.width?'width="'+c.width+'" ':"")+(c.height?' height="'+c.height+'" ':"")+("left"==c.floatStyle||"right"==c.floatStyle?' style="float:'+c.floatStyle+';"':"")+(c.title&&""!=c.title?' title="'+c.title+'"':"")+(c.border&&
-"0"!=c.border?' border="'+c.border+'"':"")+(c.alt&&""!=c.alt?' alt="'+c.alt+'"':"")+(c.hspace&&"0"!=c.hspace?' hspace = "'+c.hspace+'"':"")+(c.vspace&&"0"!=c.vspace?' vspace = "'+c.vspace+'"':"")+"/>","center"==c.floatStyle&&(b='<p style="text-align: center">'+b+"</p>"),e.push(b);else for(var g=0;c=a[g++];)b="<p "+("center"==c.floatStyle?'style="text-align: center" ':"")+'><img src="'+c.src+'" '+(c.width?'width="'+c.width+'" ':"")+(c._src?' _src="'+c._src+'" ':"")+(c.height?' height="'+c.height+'" ':
-"")+' style="'+(c.floatStyle&&"center"!=c.floatStyle?"float:"+c.floatStyle+";":"")+(c.border||"")+'" '+(c.title?' title="'+c.title+'"':"")+" /></p>",e.push(b);this.execCommand("insertHtml",e.join(""))}else c=a.shift(),g=c.floatStyle,delete c.floatStyle,d.setAttributes(b,c),this.execCommand("imagefloat",g),0<a.length&&(e.setStartAfter(b).setCursor(!1,!0),this.execCommand("insertimage",a))}}};UE.plugins.justify=function(){var h=d.isBlockElm,a={left:1,right:1,center:1,justify:1},e=function(a,c){var e=
-a.createBookmark(),f=function(a){return 1==a.nodeType?"br"!=a.tagName.toLowerCase()&&!d.isBookmarkNode(a):!d.isWhitespace(a)};a.enlarge(!0);for(var k=a.createBookmark(),l=d.getNextDomNode(k.start,!1,f),m=a.cloneRange(),n;l&&!(d.getPosition(l,k.end)&d.POSITION_FOLLOWING);)if(3!=l.nodeType&&h(l))l=d.getNextDomNode(l,!0,f);else{for(m.setStartBefore(l);l&&l!==k.end&&!h(l);)n=l,l=d.getNextDomNode(l,!1,null,function(a){return!h(a)});m.setEndAfter(n);l=m.getCommonAncestor();if(!d.isBody(l)&&h(l))d.setStyles(l,
-p.isString(c)?{"text-align":c}:c);else{l=a.document.createElement("p");d.setStyles(l,p.isString(c)?{"text-align":c}:c);var r=m.extractContents();l.appendChild(r);m.insertNode(l)}l=d.getNextDomNode(l,!1,f)}return a.moveToBookmark(k).moveToBookmark(e)};UE.commands.justify={execCommand:function(a,c){var g=this.selection.getRange(),f;g.collapsed&&(f=this.document.createTextNode("p"),g.insertNode(f));e(g,c);f&&(g.setStartBefore(f).collapse(!0),d.remove(f));g.select();return!0},queryCommandValue:function(){var b=
-this.selection.getStart(),b=d.getComputedStyle(b,"text-align");return a[b]?b:"left"},queryCommandState:function(){var a=this.selection.getStart();return a&&d.findParentByTagName(a,["td","th","caption"],!0)?-1:0}}};UE.plugins.font=function(){function h(a){for(var b;b=a.parentNode;)if("SPAN"==b.tagName&&1==d.getChildCount(b,function(a){return!d.isBookmarkNode(a)&&!d.isBr(a)}))b.style.cssText+=a.style.cssText,d.remove(a,!0),a=b;else break}function a(a,b,c){if(g[b]&&(a.adjustmentBoundary(),!a.collapsed&&
-1==a.startContainer.nodeType)){var e=a.startContainer.childNodes[a.startOffset];if(e&&d.isTagNode(e,"span")){var f=a.createBookmark();p.each(d.getElementsByTagName(e,"span"),function(a){!a.parentNode||d.isBookmarkNode(a)||"backcolor"==b&&d.getComputedStyle(a,"background-color").toLowerCase()===c||(d.removeStyle(a,g[b]),0==a.style.cssText.replace(/^\s+$/,"").length&&d.remove(a,!0))});a.moveToBookmark(f)}}}function e(b,c,e){var f=b.collapsed,g=b.createBookmark();if(f)for(f=g.start.parentNode;v.$inline[f.tagName];)f=
-f.parentNode;else f=d.getCommonAncestor(g.start,g.end);p.each(d.getElementsByTagName(f,"span"),function(a){if(a.parentNode&&!d.isBookmarkNode(a))if(/\s*border\s*:\s*none;?\s*/i.test(a.style.cssText))/^\s*border\s*:\s*none;?\s*$/.test(a.style.cssText)?d.remove(a,!0):d.removeStyle(a,"border");else{/border/i.test(a.style.cssText)&&("SPAN"==a.parentNode.tagName&&/border/i.test(a.parentNode.style.cssText))&&(a.style.cssText=a.style.cssText.replace(/border[^:]*:[^;]+;?/gi,""));if("fontborder"!=c||"none"!=
-e)for(var b=a.nextSibling;b&&1==b.nodeType&&"SPAN"==b.tagName;){if(d.isBookmarkNode(b)&&"fontborder"==c)a.appendChild(b);else if(b.style.cssText==a.style.cssText&&(d.moveChild(b,a),d.remove(b)),a.nextSibling===b)break;b=a.nextSibling}h(a);q.ie&&8<q.version&&(b=d.findParent(a,function(a){return"SPAN"==a.tagName&&/background-color/.test(a.style.cssText)}))&&!/background-color/.test(a.style.cssText)&&(a.style.backgroundColor=b.style.backgroundColor)}});b.moveToBookmark(g);a(b,c,e)}var b={forecolor:"color",
-backcolor:"background-color",fontsize:"font-size",fontfamily:"font-family",underline:"text-decoration",strikethrough:"text-decoration",fontborder:"border"},c={underline:1,strikethrough:1,fontborder:1},g={forecolor:"color",backcolor:"background-color",fontsize:"font-size",fontfamily:"font-family"};this.setOpt({fontfamily:[{name:"songti",val:"\u5b8b\u4f53,SimSun"},{name:"yahei",val:"\u5fae\u8f6f\u96c5\u9ed1,Microsoft YaHei"},{name:"kaiti",val:"\u6977\u4f53,\u6977\u4f53_GB2312, SimKai"},{name:"heiti",
-val:"\u9ed1\u4f53, SimHei"},{name:"lishu",val:"\u96b6\u4e66, SimLi"},{name:"andaleMono",val:"andale mono"},{name:"arial",val:"arial, helvetica,sans-serif"},{name:"arialBlack",val:"arial black,avant garde"},{name:"comicSansMs",val:"comic sans ms"},{name:"impact",val:"impact,chicago"},{name:"timesNewRoman",val:"times new roman"}],fontsize:[10,11,12,14,16,18,20,24,36]});this.addInputRule(function(a){p.each(a.getNodesByTagName("u s del font strike"),function(a){if("font"==a.tagName){var b=[],c;for(c in a.attrs)switch(c){case "size":b.push("font-size:"+
-({1:"10",2:"12",3:"16",4:"18",5:"24",6:"32",7:"48"}[a.attrs[c]]||a.attrs[c])+"px");break;case "color":b.push("color:"+a.attrs[c]);break;case "face":b.push("font-family:"+a.attrs[c]);break;case "style":b.push(a.attrs[c])}a.attrs={style:b.join(";")}}else b="u"==a.tagName?"underline":"line-through",a.attrs={style:(a.getAttr("style")||"")+"text-decoration:"+b+";"};a.tagName="span"})});for(var f in b)(function(a,b){UE.commands[a]={execCommand:function(f,g){g=g||(this.queryCommandState(f)?"none":"underline"==
-f?"underline":"fontborder"==f?"1px solid #000":"line-through");var h=this.selection.getRange(),t;if("default"==g)h.collapsed&&(t=this.document.createTextNode("font"),h.insertNode(t).select()),this.execCommand("removeFormat","span,a",b),t&&(h.setStartBefore(t).collapse(!0),d.remove(t)),e(h,f,g),h.select();else if(h.collapsed){var x=d.findParentByTagName(h.startContainer,"span",!0);t=this.document.createTextNode("font");if(!x||x.children.length||x[q.ie?"innerText":"textContent"].replace(O,"").length){h.insertNode(t);
-h.selectNode(t).select();x=h.document.createElement("span");if(c[a]){if(d.findParentByTagName(t,"a",!0)){h.setStartBefore(t).setCursor();d.remove(t);return}this.execCommand("removeFormat","span,a",b)}x.style.cssText=b+":"+g;t.parentNode.insertBefore(x,t);if(!q.ie||q.ie&&9==q.version)for(var w=x.parentNode;!d.isBlockElm(w);)"SPAN"==w.tagName&&(x.style.cssText=w.style.cssText+";"+x.style.cssText),w=w.parentNode;ka?setTimeout(function(){h.setStart(x,0).collapse(!0);e(h,f,g);h.select()}):(h.setStart(x,
-0).collapse(!0),e(h,f,g),h.select())}else h.insertNode(t),c[a]&&(h.selectNode(t).select(),this.execCommand("removeFormat","span,a",b,null),x=d.findParentByTagName(t,"span",!0),h.setStartBefore(t)),x&&(x.style.cssText+=";"+b+":"+g),h.collapse(!0).select();d.remove(t)}else c[a]&&this.queryCommandValue(a)&&this.execCommand("removeFormat","span,a",b),h=this.selection.getRange(),h.applyInlineStyle("span",{style:b+":"+g}),e(h,f,g),h.select();return!0},queryCommandValue:function(a){var c=this.selection.getStart();
-if("underline"==a||"strikethrough"==a){for(var e=c;e&&!d.isBlockElm(e)&&!d.isBody(e);){if(1==e.nodeType&&(a=d.getComputedStyle(e,b),"none"!=a))return a;e=e.parentNode}return"none"}if("fontborder"==a){for(a=c;a&&v.$inline[a.tagName];){if((e=d.getComputedStyle(a,"border"))&&/1px/.test(e)&&/solid/.test(e))return e;a=a.parentNode}return""}return"FontSize"==a?(e=d.getComputedStyle(c,b),(a=/^([\d\.]+)(\w+)$/.exec(e))?Math.floor(a[1])+a[2]:e):d.getComputedStyle(c,b)},queryCommandState:function(a){if(!c[a])return 0;
-var b=this.queryCommandValue(a);return"fontborder"==a?/1px/.test(b)&&/solid/.test(b):"underline"==a?/underline/.test(b):/line\-through/.test(b)}}})(f,b[f])};UE.plugins.link=function(){function h(a){var e=a.startContainer,b=a.endContainer;(e=d.findParentByTagName(e,"a",!0))&&a.setStartBefore(e);(b=d.findParentByTagName(b,"a",!0))&&a.setEndAfter(b)}UE.commands.unlink={execCommand:function(){var a=this.selection.getRange(),e;if(!a.collapsed||d.findParentByTagName(a.startContainer,"a",!0))e=a.createBookmark(),
-h(a),a.removeInlineStyle("a").moveToBookmark(e).select()},queryCommandState:function(){return!this.highlight&&this.queryCommandValue("link")?0:-1}};UE.commands.link={execCommand:function(a,e){var b;e._href&&(e._href=p.unhtml(e._href,/[<">]/g));e.href&&(e.href=p.unhtml(e.href,/[<">]/g));e.textValue&&(e.textValue=p.unhtml(e.textValue,/[<">]/g));var c=b=this.selection.getRange(),g=c.cloneRange(),f=this.queryCommandValue("link");h(c=c.adjustmentBoundary());var k=c.startContainer;1==k.nodeType&&f&&(k=
-k.childNodes[c.startOffset])&&(1==k.nodeType&&"A"==k.tagName&&/^(?:https?|ftp|file)\s*:\s*\/\//.test(k[q.ie?"innerText":"textContent"]))&&(k[q.ie?"innerText":"textContent"]=p.html(e.textValue||e.href));if(!g.collapsed||f)c.removeInlineStyle("a"),g=c.cloneRange();if(g.collapsed){var f=c.document.createElement("a"),l="";e.textValue?(l=p.html(e.textValue),delete e.textValue):l=p.html(e.href);d.setAttributes(f,e);(k=d.findParentByTagName(g.startContainer,"a",!0))&&d.isInNodeEndBoundary(g,k)&&c.setStartAfter(k).collapse(!0);
-f[q.ie?"innerText":"textContent"]=l;c.insertNode(f).selectNode(f)}else c.applyInlineStyle("a",e);b.collapse().select(!0)},queryCommandValue:function(){var a=this.selection.getRange(),e;if(a.collapsed){if(e=a.startContainer,(e=1==e.nodeType?e:e.parentNode)&&(e=d.findParentByTagName(e,"a",!0))&&!d.isInNodeEndBoundary(a,e))return e}else{a.shrinkBoundary();var b=3!=a.startContainer.nodeType&&a.startContainer.childNodes[a.startOffset]?a.startContainer.childNodes[a.startOffset]:a.startContainer,c=3==a.endContainer.nodeType||
-0==a.endOffset?a.endContainer:a.endContainer.childNodes[a.endOffset-1],a=a.getCommonAncestor();e=d.findParentByTagName(a,"a",!0);if(!e&&1==a.nodeType)for(var a=a.getElementsByTagName("a"),g,f,k=0,l;l=a[k++];)if(g=d.getPosition(l,b),f=d.getPosition(l,c),(g&d.POSITION_FOLLOWING||g&d.POSITION_CONTAINS)&&(f&d.POSITION_PRECEDING||f&d.POSITION_CONTAINS)){e=l;break}return e}},queryCommandState:function(){var a=this.selection.getRange().getClosedNode();return!a||"edui-faked-video"!=a.className&&-1==a.className.indexOf("edui-upload-video")?
-0:-1}}};UE.plugins.insertframe=function(){var d=this;d.addListener("selectionchange",function(){d._iframe&&delete d._iframe})};UE.commands.scrawl={queryCommandState:function(){return q.ie&&8>=q.version?-1:0}};UE.plugins.removeformat=function(){this.setOpt({removeFormatTags:"b,big,code,del,dfn,em,font,i,ins,kbd,q,samp,small,span,strike,strong,sub,sup,tt,u,var",removeFormatAttributes:"class,style,lang,width,height,align,hspace,valign"});this.commands.removeformat={execCommand:function(h,a,e,b,c){function g(a){if(3==
-a.nodeType||"span"!=a.tagName.toLowerCase())return 0;if(q.ie){var b=a.attributes;if(b.length){a=0;for(var c=b.length;a<c;a++)if(b[a].specified)return 0;return 1}}return!a.attributes.length}var f=RegExp("^(?:"+(a||this.options.removeFormatTags).replace(/,/g,"|")+")$","i"),k=e?[]:(b||this.options.removeFormatAttributes).split(",");h=new I.Range(this.document);var l,m,n=function(a){return 1==a.nodeType};h=this.selection.getRange();(function(a){var b=a.createBookmark();a.collapsed&&a.enlarge(!0);if(!c){var h=
-d.findParentByTagName(a.startContainer,"a",!0);h&&a.setStartBefore(h);(h=d.findParentByTagName(a.endContainer,"a",!0))&&a.setEndAfter(h)}l=a.createBookmark();for(h=l.start;(m=h.parentNode)&&!d.isBlockElm(m);)d.breakParent(h,m),d.clearEmptySibling(h);if(l.end){for(h=l.end;(m=h.parentNode)&&!d.isBlockElm(m);)d.breakParent(h,m),d.clearEmptySibling(h);for(var h=d.getNextDomNode(l.start,!1,n),w;h&&h!=l.end;)w=d.getNextDomNode(h,!0,n),v.$empty[h.tagName.toLowerCase()]||d.isBookmarkNode(h)||(f.test(h.tagName)?
-e?(d.removeStyle(h,e),g(h)&&"text-decoration"!=e&&d.remove(h,!0)):d.remove(h,!0):v.$tableContent[h.tagName]||v.$list[h.tagName]||(d.removeAttributes(h,k),g(h)&&d.remove(h,!0))),h=w}h=l.start.parentNode;!d.isBlockElm(h)||(v.$tableContent[h.tagName]||v.$list[h.tagName])||d.removeAttributes(h,k);h=l.end.parentNode;l.end&&(d.isBlockElm(h)&&!v.$tableContent[h.tagName]&&!v.$list[h.tagName])&&d.removeAttributes(h,k);a.moveToBookmark(l).moveToBookmark(b);h=a.startContainer;for(w=a.collapsed;1==h.nodeType&&
-d.isEmptyNode(h)&&v.$removeEmpty[h.tagName];)b=h.parentNode,a.setStartBefore(h),a.startContainer===a.endContainer&&a.endOffset--,d.remove(h),h=b;if(!w)for(h=a.endContainer;1==h.nodeType&&d.isEmptyNode(h)&&v.$removeEmpty[h.tagName];)b=h.parentNode,a.setEndBefore(h),d.remove(h),h=b})(h);h.select()}}};UE.plugins.blockquote=function(){this.commands.blockquote={execCommand:function(h,a){var e=this.selection.getRange(),b=d.filterNodeList(this.selection.getStartElementPath(),"blockquote"),c=v.blockquote,
-g=e.createBookmark();if(b){var c=e.startContainer,c=d.isBlockElm(c)?c:d.findParent(c,function(a){return d.isBlockElm(a)}),f=e.endContainer,f=d.isBlockElm(f)?f:d.findParent(f,function(a){return d.isBlockElm(a)}),c=d.findParentByTagName(c,"li",!0)||c,f=d.findParentByTagName(f,"li",!0)||f;"LI"==c.tagName||"TD"==c.tagName||c===b||d.isBody(c)?d.remove(b,!0):d.breakParent(c,b);c!==f&&(b=d.findParentByTagName(f,"blockquote"))&&("LI"==f.tagName||"TD"==f.tagName||d.isBody(f)?b.parentNode&&d.remove(b,!0):d.breakParent(f,
-b));for(var k=d.getElementsByTagName(this.document,"blockquote"),b=0,l;l=k[b++];)l.childNodes.length?d.getPosition(l,c)&d.POSITION_FOLLOWING&&d.getPosition(l,f)&d.POSITION_PRECEDING&&d.remove(l,!0):d.remove(l)}else{b=e.cloneRange();k=f=1==b.startContainer.nodeType?b.startContainer:b.startContainer.parentNode;for(l=1;;){if(d.isBody(f)){k!==f?e.collapsed?(b.selectNode(k),l=0):b.setStartBefore(k):b.setStart(f,0);break}if(!c[f.tagName]){e.collapsed?b.selectNode(k):b.setStartBefore(k);break}k=f;f=f.parentNode}if(l)for(k=
-f=f=1==b.endContainer.nodeType?b.endContainer:b.endContainer.parentNode;;){if(d.isBody(f)){k!==f?b.setEndAfter(k):b.setEnd(f,f.childNodes.length);break}if(!c[f.tagName]){b.setEndAfter(k);break}k=f;f=f.parentNode}f=e.document.createElement("blockquote");d.setAttributes(f,a);f.appendChild(b.extractContents());b.insertNode(f);c=d.getElementsByTagName(f,"blockquote");for(b=0;f=c[b++];)f.parentNode&&d.remove(f,!0)}e.moveToBookmark(g).select()},queryCommandState:function(){return d.filterNodeList(this.selection.getStartElementPath(),
-"blockquote")?1:0}}};UE.commands.touppercase=UE.commands.tolowercase={execCommand:function(h){var a=this.selection.getRange();if(a.collapsed)return a;for(var e=a.createBookmark(),b=e.end,c=function(a){return!d.isBr(a)&&!d.isWhitespace(a)},g=d.getNextDomNode(e.start,!1,c);g&&d.getPosition(g,b)&d.POSITION_PRECEDING&&(3==g.nodeType&&(g.nodeValue=g.nodeValue["touppercase"==h?"toUpperCase":"toLowerCase"]()),g=d.getNextDomNode(g,!0,c),g!==b););a.moveToBookmark(e).select()}};UE.commands.indent={execCommand:function(){var d=
-this.queryCommandState("indent")?"0em":this.options.indentValue||"2em";this.execCommand("Paragraph","p",{style:"text-indent:"+d})},queryCommandState:function(){var h=d.filterNodeList(this.selection.getStartElementPath(),"p h1 h2 h3 h4 h5 h6");return h&&h.style.textIndent&&parseInt(h.style.textIndent)?1:0}};UE.commands.print={execCommand:function(){this.window.print()},notNeedUndo:1};UE.plugins.selectall=function(){this.commands.selectall={execCommand:function(){var h=this.body,a=this.selection.getRange();
-a.selectNodeContents(h);d.isEmptyBlock(h)&&(q.opera&&(h.firstChild&&1==h.firstChild.nodeType)&&a.setStartAtFirst(h.firstChild),a.collapse(!0));a.select(!0)},notNeedUndo:1};this.addshortcutkey({selectAll:"ctrl+65"})};UE.plugins.paragraph=function(){var h=d.isBlockElm,a=["TD","LI","PRE"],e=function(b,c,e,f){var k=b.createBookmark(),l=function(a){return 1==a.nodeType?"br"!=a.tagName.toLowerCase()&&!d.isBookmarkNode(a):!d.isWhitespace(a)},m;b.enlarge(!0);var n=b.createBookmark();m=d.getNextDomNode(n.start,
-!1,l);for(var r=b.cloneRange(),t;m&&!(d.getPosition(m,n.end)&d.POSITION_FOLLOWING);)if(3!=m.nodeType&&h(m))m=d.getNextDomNode(m,!0,l);else{for(r.setStartBefore(m);m&&m!==n.end&&!h(m);)t=m,m=d.getNextDomNode(m,!1,null,function(a){return!h(a)});r.setEndAfter(t);m=b.document.createElement(c);e&&(d.setAttributes(m,e),f&&("customstyle"==f&&e.style)&&(m.style.cssText=e.style));m.appendChild(r.extractContents());d.isEmptyNode(m)&&d.fillChar(b.document,m);r.insertNode(m);var x=m.parentNode;h(x)&&(!d.isBody(m.parentNode)&&
--1==p.indexOf(a,x.tagName))&&(f&&"customstyle"==f||(x.getAttribute("dir")&&m.setAttribute("dir",x.getAttribute("dir")),x.style.cssText&&(m.style.cssText=x.style.cssText+";"+m.style.cssText),x.style.textAlign&&!m.style.textAlign&&(m.style.textAlign=x.style.textAlign),x.style.textIndent&&!m.style.textIndent&&(m.style.textIndent=x.style.textIndent),x.style.padding&&!m.style.padding&&(m.style.padding=x.style.padding)),e&&/h\d/i.test(x.tagName)&&!/h\d/i.test(m.tagName)?(d.setAttributes(x,e),f&&("customstyle"==
-f&&e.style)&&(x.style.cssText=e.style),d.remove(m,!0),m=x):d.remove(m.parentNode,!0));m=-1!=p.indexOf(a,x.tagName)?x:m;m=d.getNextDomNode(m,!1,l)}return b.moveToBookmark(n).moveToBookmark(k)};this.setOpt("paragraph",{p:"",h1:"",h2:"",h3:"",h4:"",h5:"",h6:""});this.commands.paragraph={execCommand:function(a,c,g,f){a=this.selection.getRange();if(a.collapsed){var k=this.document.createTextNode("p");a.insertNode(k);if(q.ie){var l=k.previousSibling;l&&d.isWhitespace(l)&&d.remove(l);(l=k.nextSibling)&&
-d.isWhitespace(l)&&d.remove(l)}}a=e(a,c,g,f);k&&(a.setStartBefore(k).collapse(!0),pN=k.parentNode,d.remove(k),d.isBlockElm(pN)&&d.isEmptyNode(pN)&&d.fillNode(this.document,pN));q.gecko&&a.collapsed&&1==a.startContainer.nodeType&&(g=a.startContainer.childNodes[a.startOffset])&&(1==g.nodeType&&g.tagName.toLowerCase()==c)&&a.setStart(g,0).collapse(!0);a.select();return!0},queryCommandValue:function(){var a=d.filterNodeList(this.selection.getStartElementPath(),"p h1 h2 h3 h4 h5 h6");return a?a.tagName.toLowerCase():
-""}}};(function(){var h=d.isBlockElm,a=function(a){return d.filterNodeList(a.selection.getStartElementPath(),function(a){return a.getAttribute("dir")})},e=function(b,c,e){var f=function(a){return 1==a.nodeType?!d.isBookmarkNode(a):!d.isWhitespace(a)};if((c=a(c))&&b.collapsed)return c.setAttribute("dir",e),b;c=b.createBookmark();b.enlarge(!0);for(var k=b.createBookmark(),l=d.getNextDomNode(k.start,!1,f),m=b.cloneRange(),n;l&&!(d.getPosition(l,k.end)&d.POSITION_FOLLOWING);)if(3!=l.nodeType&&h(l))l=
-d.getNextDomNode(l,!0,f);else{for(m.setStartBefore(l);l&&l!==k.end&&!h(l);)n=l,l=d.getNextDomNode(l,!1,null,function(a){return!h(a)});m.setEndAfter(n);l=m.getCommonAncestor();if(!d.isBody(l)&&h(l))l.setAttribute("dir",e);else{l=b.document.createElement("p");l.setAttribute("dir",e);var r=m.extractContents();l.appendChild(r);m.insertNode(l)}l=d.getNextDomNode(l,!1,f)}return b.moveToBookmark(k).moveToBookmark(c)};UE.commands.directionality={execCommand:function(a,c){var g=this.selection.getRange();if(g.collapsed){var f=
-this.document.createTextNode("d");g.insertNode(f)}e(g,this,c);f&&(g.setStartBefore(f).collapse(!0),d.remove(f));g.select();return!0},queryCommandValue:function(){var b=a(this);return b?b.getAttribute("dir"):"ltr"}}})();UE.plugins.horizontal=function(){this.commands.horizontal={execCommand:function(d){if(-1!==this.queryCommandState(d)){this.execCommand("insertHtml","<hr>");d=this.selection.getRange();var a=d.startContainer;if(1==a.nodeType&&!a.childNodes[d.startOffset]){var e;(e=a.childNodes[d.startOffset-
-1])&&(1==e.nodeType&&"HR"==e.tagName)&&("p"==this.options.enterTag?(e=this.document.createElement("p"),d.insertNode(e),d.setStart(e,0).setCursor()):(e=this.document.createElement("br"),d.insertNode(e),d.setStartBefore(e).setCursor()))}return!0}},queryCommandState:function(){return d.filterNodeList(this.selection.getStartElementPath(),"table")?-1:0}};this.addListener("delkeydown",function(h,a){var e=this.selection.getRange();e.txtToElmBoundary(!0);if(d.isStartInblock(e)){var b=e.startContainer.previousSibling;
-if(b&&d.isTagNode(b,"hr"))return d.remove(b),e.select(),d.preventDefault(a),!0}})};UE.commands.time=UE.commands.date={execCommand:function(d,a){function e(a,b){var c=("0"+a.getHours()).slice(-2),e=("0"+a.getMinutes()).slice(-2),d=("0"+a.getSeconds()).slice(-2);return(b||"hh:ii:ss").replace(/hh/ig,c).replace(/ii/ig,e).replace(/ss/ig,d)}function b(a,b){var c=("000"+a.getFullYear()).slice(-4),e=c.slice(-2),d=("0"+(a.getMonth()+1)).slice(-2),n=("0"+a.getDate()).slice(-2);return(b||"yyyy-mm-dd").replace(/yyyy/ig,
-c).replace(/yy/ig,e).replace(/mm/ig,d).replace(/dd/ig,n)}var c=new Date;this.execCommand("insertHtml","time"==d?e(c,a):b(c,a))}};UE.plugins.rowspacing=function(){this.setOpt({rowspacingtop:["5","10","15","20","25"],rowspacingbottom:["5","10","15","20","25"]});this.commands.rowspacing={execCommand:function(d,a,e){this.execCommand("paragraph","p",{style:"margin-"+e+":"+a+"px"});return!0},queryCommandValue:function(h,a){var e=d.filterNodeList(this.selection.getStartElementPath(),function(a){return d.isBlockElm(a)});
-return e?(e=d.getComputedStyle(e,"margin-"+a).replace(/[^\d]/g,""))?e:0:0}}};UE.plugins.lineheight=function(){this.setOpt({lineheight:"1 1.5 1.75 2 3 4 5".split(" ")});this.commands.lineheight={execCommand:function(d,a){this.execCommand("paragraph","p",{style:"line-height:"+("1"==a?"normal":a+"em")});return!0},queryCommandValue:function(){var h=d.filterNodeList(this.selection.getStartElementPath(),function(a){return d.isBlockElm(a)});if(h)return h=d.getComputedStyle(h,"line-height"),"normal"==h?1:
-h.replace(/[^\d.]*/ig,"")}}};UE.plugins.insertcode=function(){var h=this;h.ready(function(){p.cssRule("pre","pre{margin:.5em 0;padding:.4em .6em;border-radius:8px;background:#f8f8f8;}",h.document)});h.setOpt("insertcode",{as3:"ActionScript3",bash:"Bash/Shell",cpp:"C/C++",css:"Css",cf:"CodeFunction","c#":"C#",delphi:"Delphi",diff:"Diff",erlang:"Erlang",groovy:"Groovy",html:"Html",java:"Java",jfx:"JavaFx",js:"Javascript",pl:"Perl",php:"Php",plain:"Plain Text",ps:"PowerShell",python:"Python",ruby:"Ruby",
-scala:"Scala",sql:"Sql",vb:"Vb",xml:"Xml"});h.commands.insertcode={execCommand:function(a,e){var b=this.selection.getRange(),c=d.findParentByTagName(b.startContainer,"pre",!0);if(c)c.className="brush:"+e+";toolbar:false;";else{var g="";b.collapsed?g=q.ie?8<q.version?"":"&nbsp;":"<br/>":(c=b.extractContents(),b=this.document.createElement("div"),b.appendChild(c),p.each(UE.filterNode(UE.htmlparser(b.innerHTML.replace(/[\r\t]/g,"")),this.options.filterTxtRules).children,function(a){q.ie&&8<q.version?
-("element"==a.type?"br"==a.tagName?g+="\n":v.$empty[a.tagName]||(p.each(a.children,function(b){"element"==b.type?"br"==b.tagName?g+="\n":v.$empty[a.tagName]||(g+=b.innerText()):g+=b.data}),/\n$/.test(g)||(g+="\n")):g+=a.data+"\n",!a.nextSibling()&&/\n$/.test(g)&&(g=g.replace(/\n$/,""))):q.ie?("element"==a.type?"br"==a.tagName?g+="<br>":v.$empty[a.tagName]||(p.each(a.children,function(b){"element"==b.type?"br"==b.tagName?g+="<br>":v.$empty[a.tagName]||(g+=b.innerText()):g+=b.data}),/br>$/.test(g)||
-(g+="<br>")):g+=a.data+"<br>",!a.nextSibling()&&/<br>$/.test(g)&&(g=g.replace(/<br>$/,""))):(g+="element"==a.type?v.$empty[a.tagName]?"":a.innerText():a.data,!/br\/?\s*>$/.test(g)&&a.nextSibling()&&(g+="<br>"))}));this.execCommand("inserthtml",'<pre id="coder"class="brush:'+e+';toolbar:false">'+g+"</pre>",!0);c=this.document.getElementById("coder");d.removeAttributes(c,"id");(b=c.previousSibling)&&(3==b.nodeType&&1==b.nodeValue.length&&q.ie&&6==q.version||d.isEmptyBlock(b))&&d.remove(b);b=this.selection.getRange();
-d.isEmptyBlock(c)?b.setStart(c,0).setCursor(!1,!0):b.selectNodeContents(c).select()}},queryCommandValue:function(){var a=this.selection.getStartElementPath(),e="";p.each(a,function(a){if("PRE"==a.nodeName)return e=(a=a.className.match(/brush:([^;]+)/))&&a[1]?a[1]:"",!1});return e}};h.addInputRule(function(a){p.each(a.getNodesByTagName("pre"),function(a){var b=a.getNodesByTagName("br");b.length?q.ie&&8<q.version&&p.each(b,function(a){var b=UE.uNode.createText("\n");a.parentNode.insertBefore(b,a);a.parentNode.removeChild(a)}):
-q.ie&&8<q.version||(b=a.innerText().split(/\n/),a.innerHTML(""),p.each(b,function(b){b.length&&a.appendChild(UE.uNode.createText(b));a.appendChild(UE.uNode.createElement("br"))}))})});h.addOutputRule(function(a){p.each(a.getNodesByTagName("pre"),function(a){var b="";p.each(a.children,function(a){b="text"==a.type?b+a.data.replace(/[ ]/g,"&nbsp;").replace(/\n$/,""):"br"==a.tagName?b+"\n":b+(v.$empty[a.tagName]?a.innerText():"")});a.innerText(b.replace(/(&nbsp;|\n)+$/,""))})});h.notNeedCodeQuery={help:1,
-undo:1,redo:1,source:1,print:1,searchreplace:1,fullscreen:1,preview:1,insertparagraph:1,elementpath:1,insertcode:1,inserthtml:1,selectall:1};h.queryCommandState=function(a){return!this.notNeedCodeQuery[a.toLowerCase()]&&this.selection&&this.queryCommandValue("insertcode")?-1:UE.Editor.prototype.queryCommandState.apply(this,arguments)};h.addListener("beforeenterkeydown",function(){var a=h.selection.getRange(),e=d.findParentByTagName(a.startContainer,"pre",!0);if(e){h.fireEvent("saveScene");a.collapsed||
-a.deleteContents();if(!q.ie||q.ie9above){e=h.document.createElement("br");a.insertNode(e).setStartAfter(e).collapse(!0);e.nextSibling||q.ie&&!(10<q.version)?a.setStartAfter(e):a.insertNode(e.cloneNode(!1));for(var e=e.previousSibling,b;e;)if(b=e,e=e.previousSibling,!e||"BR"==e.nodeName){e=b;break}if(e){for(b="";e&&"BR"!=e.nodeName&&RegExp("^[\\s"+d.fillChar+"]*$").test(e.nodeValue);)b+=e.nodeValue,e=e.nextSibling;"BR"!=e.nodeName&&(e=e.nodeValue.match(RegExp("^([\\s"+d.fillChar+"]+)")))&&e[1]&&(b+=
-e[1]);b&&(b=h.document.createTextNode(b),a.insertNode(b).setStartAfter(b))}a.collapse(!0).select(!0)}else if(8<q.version)if(e=h.document.createTextNode("\n"),b=a.startContainer,0==a.startOffset){if(b.previousSibling){a.insertNode(e);var c=h.document.createTextNode(" ");a.setStartAfter(e).insertNode(c).setStart(c,0).collapse(!0).select(!0)}}else a.insertNode(e).setStartAfter(e),c=h.document.createTextNode(" "),(b=a.startContainer.childNodes[a.startOffset])&&!/^\n/.test(b.nodeValue)&&a.setStartBefore(e),
-a.insertNode(c).setStart(c,0).collapse(!0).select(!0);else{e=h.document.createElement("br");a.insertNode(e);a.insertNode(h.document.createTextNode(d.fillChar));a.setStartAfter(e);for(e=e.previousSibling;e;)if(b=e,e=e.previousSibling,!e||"BR"==e.nodeName){e=b;break}if(e){for(b="";e&&"BR"!=e.nodeName&&RegExp("^[ "+d.fillChar+"]*$").test(e.nodeValue);)b+=e.nodeValue,e=e.nextSibling;"BR"!=e.nodeName&&(e=e.nodeValue.match(RegExp("^([ "+d.fillChar+"]+)")))&&e[1]&&(b+=e[1]);b=h.document.createTextNode(b);
-a.insertNode(b).setStartAfter(b)}a.collapse(!0).select()}h.fireEvent("saveScene");return!0}});h.addListener("tabkeydown",function(a,e){var b=h.selection.getRange(),c=d.findParentByTagName(b.startContainer,"pre",!0);if(c){h.fireEvent("saveScene");if(!e.shiftKey)if(b.collapsed)c=h.document.createTextNode("    "),b.insertNode(c).setStartAfter(c).collapse(!0).select(!0);else{for(var g=b.createBookmark(),f=g.start.previousSibling;f;){if(c.firstChild===f&&!d.isBr(f)){c.insertBefore(h.document.createTextNode("    "),
-f);break}if(d.isBr(f)){c.insertBefore(h.document.createTextNode("    "),f.nextSibling);break}f=f.previousSibling}var k=g.end,f=g.start.nextSibling;for(c.firstChild===g.start&&c.insertBefore(h.document.createTextNode("    "),f.nextSibling);f&&f!==k;){if(d.isBr(f)&&f.nextSibling){if(f.nextSibling===k)break;c.insertBefore(h.document.createTextNode("    "),f.nextSibling)}f=f.nextSibling}b.moveToBookmark(g).select()}h.fireEvent("saveScene");return!0}});h.addListener("beforeinserthtml",function(a,e){var b=
-this,c=b.selection.getRange();if(d.findParentByTagName(c.startContainer,"pre",!0)){c.collapsed||c.deleteContents();var g="";if(q.ie&&8<q.version){p.each(UE.filterNode(UE.htmlparser(e),b.options.filterTxtRules).children,function(a){"element"==a.type?"br"==a.tagName?g+="\n":v.$empty[a.tagName]||(p.each(a.children,function(b){"element"==b.type?"br"==b.tagName?g+="\n":v.$empty[a.tagName]||(g+=b.innerText()):g+=b.data}),/\n$/.test(g)||(g+="\n")):g+=a.data+"\n";!a.nextSibling()&&/\n$/.test(g)&&(g=g.replace(/\n$/,
-""))});var f=b.document.createTextNode(p.html(g.replace(/&nbsp;/g," ")));c.insertNode(f).selectNode(f).select()}else{var k=b.document.createDocumentFragment();p.each(UE.filterNode(UE.htmlparser(e),b.options.filterTxtRules).children,function(a){"element"==a.type?"br"==a.tagName?k.appendChild(b.document.createElement("br")):v.$empty[a.tagName]||(p.each(a.children,function(c){"element"==c.type?"br"==c.tagName?k.appendChild(b.document.createElement("br")):v.$empty[a.tagName]||k.appendChild(b.document.createTextNode(p.html(c.innerText().replace(/&nbsp;/g,
-" ")))):k.appendChild(b.document.createTextNode(p.html(c.data.replace(/&nbsp;/g," "))))}),"BR"!=k.lastChild.nodeName&&k.appendChild(b.document.createElement("br"))):k.appendChild(b.document.createTextNode(p.html(a.data.replace(/&nbsp;/g," "))));a.nextSibling()||"BR"!=k.lastChild.nodeName||k.removeChild(k.lastChild)});c.insertNode(k).select()}return!0}});h.addListener("keydown",function(a,e){if(40==(e.keyCode||e.which)){var b=this.selection.getRange(),c,g=b.startContainer;if(b.collapsed&&(c=d.findParentByTagName(b.startContainer,
-"pre",!0))&&!c.nextSibling){for(var f=c.lastChild;f&&"BR"==f.nodeName;)f=f.previousSibling;if(f===g||b.startContainer===c&&b.startOffset==c.childNodes.length)this.execCommand("insertparagraph"),d.preventDefault(e)}}});h.addListener("delkeydown",function(a,e){var b=this.selection.getRange();b.txtToElmBoundary(!0);var c=b.startContainer;if(d.isTagNode(c,"pre")&&b.collapsed&&d.isStartInblock(b)){var g=h.document.createElement("p");d.fillNode(h.document,g);c.parentNode.insertBefore(g,c);d.remove(c);b.setStart(g,
-0).setCursor(!1,!0);d.preventDefault(e);return!0}})};UE.commands.cleardoc={execCommand:function(d){var a=this;d=a.options.enterTag;var e=a.selection.getRange();"br"==d?(a.body.innerHTML="<br/>",e.setStart(a.body,0).setCursor()):(a.body.innerHTML="<p>"+(H?"":"<br/>")+"</p>",e.setStart(a.body.firstChild,0).setCursor(!1,!0));setTimeout(function(){a.fireEvent("clearDoc")},0)}};UE.plugin.register("anchor",function(){return{bindEvents:{ready:function(){p.cssRule("anchor",".anchorclass{background: url('"+
-this.options.themePath+this.options.theme+"/images/anchor.gif') no-repeat scroll left center transparent;border: 1px dotted #0000FF;cursor: auto;display: inline-block;height: 16px;width: 15px;}",this.document)}},outputRule:function(d){p.each(d.getNodesByTagName("img"),function(a){var e;if(e=a.getAttr("anchorname"))a.tagName="a",a.setAttr({anchorname:"",name:e,"class":""})})},inputRule:function(d){p.each(d.getNodesByTagName("a"),function(a){a.getAttr("name")&&!a.getAttr("href")&&(a.tagName="img",a.setAttr({anchorname:a.getAttr("name"),
-"class":"anchorclass"}),a.setAttr("name"))})},commands:{anchor:{execCommand:function(h,a){var e=this.selection.getRange(),b=e.getClosedNode();b&&b.getAttribute("anchorname")?a?b.setAttribute("anchorname",a):(e.setStartBefore(b).setCursor(),d.remove(b)):a&&(b=this.document.createElement("img"),e.collapse(!0),d.setAttributes(b,{anchorname:a,"class":"anchorclass"}),e.insertNode(b).setStartAfter(b).setCursor(!1,!0))}}}}});UE.plugins.wordcount=function(){var h=this;h.setOpt("wordCount",!0);h.addListener("contentchange",
-function(){h.fireEvent("wordcount")});var a;h.addListener("ready",function(){var e=this;d.on(e.body,"keyup",function(b){(b.keyCode||b.which)in{16:1,18:1,20:1,37:1,38:1,39:1,40:1}||(clearTimeout(a),a=setTimeout(function(){e.fireEvent("wordcount")},200))})})};UE.plugins.pagebreak=function(){function h(a){if(d.isEmptyBlock(a)){for(var b=a.firstChild,f;b&&1==b.nodeType&&d.isEmptyBlock(b);)f=b,b=b.firstChild;!f&&(f=a);d.fillNode(e.document,f)}}function a(a){return a&&1==a.nodeType&&"HR"==a.tagName&&"pagebreak"==
-a.className}var e=this,b=["td"];e.setOpt("pageBreakTag","_ueditor_page_break_tag_");e.ready(function(){p.cssRule("pagebreak",".pagebreak{display:block;clear:both !important;cursor:default !important;width: 100% !important;margin:0;}",e.document)});e.addInputRule(function(a){a.traversal(function(a){if("text"==a.type&&a.data==e.options.pageBreakTag){var b=UE.uNode.createElement('<hr class="pagebreak" noshade="noshade" size="5" style="-webkit-user-select: none;">');a.parentNode.insertBefore(b,a);a.parentNode.removeChild(a)}})});
-e.addOutputRule(function(a){p.each(a.getNodesByTagName("hr"),function(a){if("pagebreak"==a.getAttr("class")){var b=UE.uNode.createText(e.options.pageBreakTag);a.parentNode.insertBefore(b,a);a.parentNode.removeChild(a)}})});e.commands.pagebreak={execCommand:function(){var c=e.selection.getRange(),g=e.document.createElement("hr");d.setAttributes(g,{"class":"pagebreak",noshade:"noshade",size:"5"});d.unSelectable(g);var f=d.findParentByTagName(c.startContainer,b,!0),k=[];if(f)switch(f.tagName){case "TD":f=
-f.parentNode,f.previousSibling?(f.parentNode.insertBefore(g,f),k=d.findParents(g)):(c=d.findParentByTagName(f,"table"),c.parentNode.insertBefore(g,c),k=d.findParents(g,!0)),f=k[1],g!==f&&d.breakParent(g,f),e.fireEvent("afteradjusttable",e.document)}else{if(!c.collapsed)for(c.deleteContents(),f=c.startContainer;!d.isBody(f)&&d.isBlockElm(f)&&d.isEmptyNode(f);)c.setStartBefore(f).collapse(!0),d.remove(f),f=c.startContainer;c.insertNode(g);for(f=g.parentNode;!d.isBody(f);)d.breakParent(g,f),(f=g.nextSibling)&&
-d.isEmptyBlock(f)&&d.remove(f),f=g.parentNode;f=g.nextSibling;k=g.previousSibling;a(k)?d.remove(k):k&&h(k);f?(a(f)?d.remove(f):h(f),c.setEndAfter(g).collapse(!1)):(f=e.document.createElement("p"),g.parentNode.appendChild(f),d.fillNode(e.document,f),c.setStart(f,0).collapse(!0));c.select(!0)}}}};UE.plugin.register("wordimage",function(){var h=this,a=[];return{commands:{wordimage:{execCommand:function(){for(var a=d.getElementsByTagName(h.body,"img"),b=[],c=0,g;g=a[c++];)(g=g.getAttribute("word_img"))&&
-b.push(g);return b},queryCommandState:function(){a=d.getElementsByTagName(h.body,"img");for(var e=0,b;b=a[e++];)if(b.getAttribute("word_img"))return 1;return-1},notNeedUndo:!0}},inputRule:function(a){p.each(a.getNodesByTagName("img"),function(a){var c=a.attrs,e=128>parseInt(c.width)||43>parseInt(c.height),d=h.options,k=d.UEDITOR_HOME_URL+"themes/default/images/spacer.gif";c.src&&/^(?:(file:\/+))/.test(c.src)&&a.setAttr({width:c.width,height:c.height,alt:c.alt,word_img:c.src,src:k,style:"background:url("+
-(e?d.themePath+d.theme+"/images/word.gif":d.langPath+d.lang+"/images/localimage.png")+") no-repeat center center;border:1px solid #ddd"})})}}});UE.plugins.dragdrop=function(){var h=this;h.ready(function(){d.on(this.body,"dragend",function(){var a=h.selection.getRange(),e=a.getClosedNode()||h.selection.getStart();if(e&&"IMG"==e.tagName){for(var b=e.previousSibling,c;(c=e.nextSibling)&&1==c.nodeType&&"SPAN"==c.tagName&&!c.firstChild;)d.remove(c);(!b||1!=b.nodeType||d.isEmptyBlock(b))&&b||c&&(!c||d.isEmptyBlock(c))||
-(b&&"P"==b.tagName&&!d.isEmptyBlock(b)?(b.appendChild(e),d.moveChild(c,b),d.remove(c)):c&&("P"==c.tagName&&!d.isEmptyBlock(c))&&c.insertBefore(e,c.firstChild),b&&("P"==b.tagName&&d.isEmptyBlock(b))&&d.remove(b),c&&("P"==c.tagName&&d.isEmptyBlock(c))&&d.remove(c),a.selectNode(e).select(),h.fireEvent("saveScene"))}})});h.addListener("keyup",function(a,e){if(13==(e.keyCode||e.which)){var b=h.selection.getRange(),c;(c=d.findParentByTagName(b.startContainer,"p",!0))&&"center"==d.getComputedStyle(c,"text-align")&&
-d.removeStyle(c,"text-align")}})};UE.plugins.undo=function(){function h(a,b){if(a.length!=b.length)return 0;for(var c=0,e=a.length;c<e;c++)if(a[c]!=b[c])return 0;return 1}var a,e=this,b=e.options.maxUndoCount||20,c=e.options.maxInputCount||20,g=RegExp(d.fillChar+"|</hr>","gi"),f={ol:1,ul:1,table:1,tbody:1,tr:1,body:1},k=e.options.autoClearEmptyNode;e.undoManger=new function(){this.list=[];this.index=0;this.hasRedo=this.hasUndo=!1;this.undo=function(){if(this.hasUndo)if(this.list[this.index-1]||1!=
-this.list.length){for(;this.list[this.index].content==this.list[this.index-1].content;)if(this.index--,0==this.index)return this.restore(0);this.restore(--this.index)}else this.reset()};this.redo=function(){if(this.hasRedo){for(;this.list[this.index].content==this.list[this.index+1].content;)if(this.index++,this.index==this.list.length-1)return this.restore(this.index);this.restore(++this.index)}};this.restore=function(){var a=this.editor,b=this.list[this.index],c=UE.htmlparser(b.content.replace(g,
-""));a.options.autoClearEmptyNode=!1;a.filterInputRule(c);a.options.autoClearEmptyNode=k;a.document.body.innerHTML=c.toHtml();a.fireEvent("afterscencerestore");q.ie&&p.each(d.getElementsByTagName(a.document,"td th caption p"),function(b){d.isEmptyNode(b)&&d.fillNode(a.document,b)});try{var e=(new I.Range(a.document)).moveToAddress(b.address);e.select(f[e.startContainer.nodeName.toLowerCase()])}catch(l){}this.update();this.clearKey();a.fireEvent("reset",!0)};this.getScene=function(){var a=this.editor,
-b=a.selection.getRange().createAddress(!1,!0);a.fireEvent("beforegetscene");var c=UE.htmlparser(a.body.innerHTML);a.options.autoClearEmptyNode=!1;a.filterOutputRule(c);a.options.autoClearEmptyNode=k;c=c.toHtml();a.fireEvent("aftergetscene");return{address:b,content:c}};this.save=function(c,e){clearTimeout(a);var d=this.getScene(e),f=this.list[this.index],l;if(l=f)if(l=f.content==d.content)c?f=1:(f=f.address,l=d.address,f=f.collapsed!=l.collapsed?0:h(f.startAddress,l.startAddress)&&h(f.endAddress,
-l.endAddress)?1:0),l=f;l||(this.list=this.list.slice(0,this.index+1),this.list.push(d),this.list.length>b&&this.list.shift(),this.index=this.list.length-1,this.clearKey(),this.update())};this.update=function(){this.hasRedo=!!this.list[this.index+1];this.hasUndo=!!this.list[this.index-1]};this.reset=function(){this.list=[];this.index=0;this.hasRedo=this.hasUndo=!1;this.clearKey()};this.clearKey=function(){m=0}};e.undoManger.editor=e;e.addListener("saveScene",function(){var a=Array.prototype.splice.call(arguments,
-1);this.undoManger.save.apply(this.undoManger,a)});e.addListener("reset",function(a,b){b||this.undoManger.reset()});e.commands.redo=e.commands.undo={execCommand:function(a){this.undoManger[a]()},queryCommandState:function(a){return this.undoManger["has"+("undo"==a.toLowerCase()?"Undo":"Redo")]?0:-1},notNeedUndo:1};var l={16:1,17:1,18:1,37:1,38:1,39:1,40:1},m=0,n=!1;e.addListener("ready",function(){d.on(this.body,"compositionstart",function(){n=!0});d.on(this.body,"compositionend",function(){n=!1})});
-e.addshortcutkey({Undo:"ctrl+90",Redo:"ctrl+89"});var r=!0;e.addListener("keydown",function(b,e){var d=this;if(!(l[e.keyCode||e.which]||(e.ctrlKey||e.metaKey||e.shiftKey||e.altKey)||n))if(d.selection.getRange().collapsed){0==d.undoManger.list.length&&d.undoManger.save(!0);clearTimeout(a);var f=function(a){a.selection.getRange().collapsed&&a.fireEvent("contentchange");a.undoManger.save(!1,!0);a.fireEvent("selectionchange")};a=setTimeout(function(){if(n)var a=setInterval(function(){n||(f(d),clearInterval(a))},
-300);else f(d)},200);m++;m>=c&&f(d)}else d.undoManger.save(!1,!0),r=!1});e.addListener("keyup",function(a,b){l[b.keyCode||b.which]||(b.ctrlKey||b.metaKey||b.shiftKey||b.altKey)||n||r||(this.undoManger.save(!1,!0),r=!0)});e.stopCmdUndo=function(){e.__hasEnterExecCommand=!0};e.startCmdUndo=function(){e.__hasEnterExecCommand=!1}};UE.plugins.paste=function(){function h(a){var b=this.document;if(!b.getElementById("baidu_pastebin")){var c=this.selection.getRange(),e=c.createBookmark(),g=b.createElement("div");
-g.id="baidu_pastebin";q.webkit&&g.appendChild(b.createTextNode(d.fillChar+d.fillChar));b.body.appendChild(g);e.start.style.display="";g.style.cssText="position:absolute;width:1px;height:1px;overflow:hidden;left:-1000px;white-space:nowrap;top:"+d.getXY(e.start).y+"px";c.selectNodeContents(g).select(!0);setTimeout(function(){if(q.webkit)for(var h=0,t=b.querySelectorAll("#baidu_pastebin"),x;x=t[h++];)if(d.isEmptyNode(x))d.remove(x);else{g=x;break}try{g.parentNode.removeChild(g)}catch(w){}c.moveToBookmark(e).select(!0);
-a(g)},0)}}function a(a){var k;if(a.firstChild){var l=d.getElementsByTagName(a,"span");k=0;for(var m;m=l[k++];)"_baidu_cut_start"!=m.id&&"_baidu_cut_end"!=m.id||d.remove(m);if(q.webkit){m=a.querySelectorAll("div br");for(k=0;l=m[k++];)l=l.parentNode,"DIV"==l.tagName&&1==l.childNodes.length&&(l.innerHTML="<p><br/></p>",d.remove(l));l=a.querySelectorAll("#baidu_pastebin");for(k=0;m=l[k++];){var n=e.document.createElement("p");for(m.parentNode.insertBefore(n,m);m.firstChild;)n.appendChild(m.firstChild);
-d.remove(m)}m=a.querySelectorAll("meta");for(k=0;l=m[k++];)d.remove(l);m=a.querySelectorAll("br");for(k=0;l=m[k++];)/^apple-/i.test(l.className)&&d.remove(l)}if(q.gecko)for(m=a.querySelectorAll("[_moz_dirty]"),k=0;l=m[k++];)l.removeAttribute("_moz_dirty");if(!q.ie)for(m=a.querySelectorAll("span.Apple-style-span"),k=0;l=m[k++];)d.remove(l,!0);k=a.innerHTML;k=UE.filterWord(k);a=UE.htmlparser(k);e.options.filterRules&&UE.filterNode(a,e.options.filterRules);e.filterInputRule(a);q.webkit&&((k=a.lastChild())&&
-("element"==k.type&&"br"==k.tagName)&&a.removeChild(k),p.each(e.body.querySelectorAll("div"),function(a){d.isEmptyBlock(a)&&d.remove(a,!0)}));k={html:a.toHtml()};e.fireEvent("beforepaste",k,a);k.html&&(a=UE.htmlparser(k.html,!0),1===e.queryCommandState("pasteplain")?e.execCommand("insertHtml",UE.filterNode(a,e.options.filterTxtRules).toHtml(),!0):(UE.filterNode(a,e.options.filterTxtRules),b=a.toHtml(),c=k.html,g=e.selection.getRange().createAddress(!0),e.execCommand("insertHtml",c,!0)),e.fireEvent("afterpaste",
-k))}}var e=this,b,c,g;e.addListener("pasteTransfer",function(a,k){if(g&&b&&c&&b!=c){var l=e.selection.getRange();l.moveToAddress(g,!0);if(!l.collapsed){for(;!d.isBody(l.startContainer);){var m=l.startContainer;if(1==m.nodeType){m=m.childNodes[l.startOffset];if(!m){l.setStartBefore(l.startContainer);continue}(m=m.previousSibling)&&(3==m.nodeType&&RegExp("^[\n\r\t "+d.fillChar+"]*$").test(m.nodeValue))&&l.setStartBefore(m)}if(0==l.startOffset)l.setStartBefore(l.startContainer);else break}for(;!d.isBody(l.endContainer);){m=
-l.endContainer;if(1==m.nodeType){m=m.childNodes[l.endOffset];if(!m){l.setEndAfter(l.endContainer);continue}(m=m.nextSibling)&&(3==m.nodeType&&RegExp("^[\n\r\t"+d.fillChar+"]*$").test(m.nodeValue))&&l.setEndAfter(m)}if(l.endOffset==l.endContainer[3==l.endContainer.nodeType?"nodeValue":"childNodes"].length)l.setEndAfter(l.endContainer);else break}}l.deleteContents();l.select(!0);e.__hasEnterExecCommand=!0;l=c;2===k?l=l.replace(/<(\/?)([\w\-]+)([^>]*)>/gi,function(a,b,c,e){c=c.toLowerCase();if({img:1}[c])return a;
-e=e.replace(/([\w\-]*?)\s*=\s*(("([^"]*)")|('([^']*)')|([^\s>]+))/gi,function(a,b,c){return{src:1,href:1,name:1}[b.toLowerCase()]?b+"="+c+" ":""});return{span:1,div:1}[c]?"":"<"+b+c+" "+p.trim(e)+">"}):k&&(l=b);e.execCommand("inserthtml",l,!0);e.__hasEnterExecCommand=!1;for(l=e.selection.getRange();!d.isBody(l.startContainer)&&!l.startOffset&&l.startContainer[3==l.startContainer.nodeType?"nodeValue":"childNodes"].length;)l.setStartBefore(l.startContainer);l=l.createAddress(!0);g.endAddress=l.startAddress}});
-e.addListener("ready",function(){d.on(e.body,"cut",function(){!e.selection.getRange().collapsed&&e.undoManger&&e.undoManger.save()});d.on(e.body,q.ie||q.opera?"keydown":"paste",function(b){(!q.ie&&!q.opera||(b.ctrlKey||b.metaKey)&&"86"==b.keyCode)&&h.call(e,function(b){a(b)})})})};UE.plugins.list=function(){function h(a){var b=[],c;for(c in a)b.push(c);return b}function a(a){var b=a.className;return d.hasClass(a,/custom_/)?b.match(/custom_(\w+)/)[1]:d.getStyle(a,"list-style-type")}function e(e,f){p.each(d.getElementsByTagName(e,
-"ol ul"),function(l){if(d.inDoc(l,e)){var g=l.parentNode;if(g.tagName==l.tagName){var k=a(l)||("OL"==l.tagName?"decimal":"disc"),h=a(g)||("OL"==g.tagName?"decimal":"disc");k==h&&(k=p.indexOf(n[l.tagName],k),k=k+1==n[l.tagName].length?0:k+1,c(l,n[l.tagName][k]))}var r=0,k=2;d.hasClass(l,/custom_/)?/[ou]l/i.test(g.tagName)&&d.hasClass(g,/custom_/)||(k=1):/[ou]l/i.test(g.tagName)&&d.hasClass(g,/custom_/)&&(k=3);(g=d.getStyle(l,"list-style-type"))&&(l.style.cssText="list-style-type:"+g);l.className=p.trim(l.className.replace(/list-paddingleft-\w+/,
-""))+" list-paddingleft-"+k;p.each(d.getElementsByTagName(l,"li"),function(b){b.style.cssText&&(b.style.cssText="");if(!b.firstChild)d.remove(b);else if(b.parentNode===l){r++;if(d.hasClass(l,/custom_/)){var c=1,e=a(l);if("OL"==l.tagName){if(e)switch(e){case "cn":case "cn1":case "cn2":10<r&&(0==r%10||10<r&&20>r)?c=2:20<r&&(c=3);break;case "num2":9<r&&(c=2)}b.className="list-"+m[e]+r+" list-"+e+"-paddingleft-"+c}else b.className="list-"+m[e]+" list-"+e+"-paddingleft"}else b.className=b.className.replace(/list-[\w\-]+/gi,
-"");c=b.getAttribute("class");null===c||c.replace(/\s/g,"")||d.removeAttributes(b,"class")}});!f&&b(l,l.tagName.toLowerCase(),a(l)||d.getStyle(l,"list-style-type"),!0)}})}function b(b,c,f,l){var g=b.nextSibling;g&&(1==g.nodeType&&g.tagName.toLowerCase()==c&&(a(g)||d.getStyle(g,"list-style-type")||("ol"==c?"decimal":"disc"))==f)&&(d.moveChild(g,b),0==g.childNodes.length&&d.remove(g));g&&d.isFillChar(g)&&d.remove(g);(g=b.previousSibling)&&(1==g.nodeType&&g.tagName.toLowerCase()==c&&(a(g)||d.getStyle(g,
-"list-style-type")||("ol"==c?"decimal":"disc"))==f)&&d.moveChild(b,g);g&&d.isFillChar(g)&&d.remove(g);!l&&d.isEmptyBlock(b)&&d.remove(b);a(b)&&e(b.ownerDocument,!0)}function c(a,b){m[b]&&(a.className="custom_"+b);try{d.setStyle(a,"list-style-type",b)}catch(c){}}function g(a){var b=a.previousSibling;b&&d.isEmptyBlock(b)&&d.remove(b);(b=a.nextSibling)&&d.isEmptyBlock(b)&&d.remove(b)}function f(a){for(;a&&!d.isBody(a);){if("TABLE"==a.nodeName)return null;if("LI"==a.nodeName)return a;a=a.parentNode}}
-var k=this,l={TD:1,PRE:1,BLOCKQUOTE:1},m={cn:"cn-1-",cn1:"cn-2-",cn2:"cn-3-",num:"num-1-",num1:"num-2-",num2:"num-3-",dash:"dash",dot:"dot"};k.setOpt({autoTransWordToList:!1,insertorderedlist:{num:"",num1:"",num2:"",cn:"",cn1:"",cn2:"",decimal:"","lower-alpha":"","lower-roman":"","upper-alpha":"","upper-roman":""},insertunorderedlist:{circle:"",disc:"",square:"",dash:"",dot:""},listDefaultPaddingLeft:"30",listiconpath:"http://bs.baidu.com/listicon/",maxListLevel:-1});var n={OL:h(k.options.insertorderedlist),
-UL:h(k.options.insertunorderedlist)},r=k.options.listiconpath,t;for(t in m)k.options.insertorderedlist.hasOwnProperty(t)||k.options.insertunorderedlist.hasOwnProperty(t)||delete m[t];k.ready(function(){var a=[],b;for(b in m){if("dash"==b||"dot"==b)a.push("li.list-"+m[b]+"{background-image:url("+r+m[b]+".gif)}"),a.push("ul.custom_"+b+"{list-style:none;}ul.custom_"+b+" li{background-position:0 3px;background-repeat:no-repeat}");else{for(var c=0;99>c;c++)a.push("li.list-"+m[b]+c+"{background-image:url("+
-r+"list-"+m[b]+c+".gif)}");a.push("ol.custom_"+b+"{list-style:none;}ol.custom_"+b+" li{background-position:0 3px;background-repeat:no-repeat}")}switch(b){case "cn":a.push("li.list-"+b+"-paddingleft-1{padding-left:25px}");a.push("li.list-"+b+"-paddingleft-2{padding-left:40px}");a.push("li.list-"+b+"-paddingleft-3{padding-left:55px}");break;case "cn1":a.push("li.list-"+b+"-paddingleft-1{padding-left:30px}");a.push("li.list-"+b+"-paddingleft-2{padding-left:40px}");a.push("li.list-"+b+"-paddingleft-3{padding-left:55px}");
-break;case "cn2":a.push("li.list-"+b+"-paddingleft-1{padding-left:40px}");a.push("li.list-"+b+"-paddingleft-2{padding-left:55px}");a.push("li.list-"+b+"-paddingleft-3{padding-left:68px}");break;case "num":case "num1":a.push("li.list-"+b+"-paddingleft-1{padding-left:25px}");break;case "num2":a.push("li.list-"+b+"-paddingleft-1{padding-left:35px}");a.push("li.list-"+b+"-paddingleft-2{padding-left:40px}");break;case "dash":a.push("li.list-"+b+"-paddingleft{padding-left:35px}");break;case "dot":a.push("li.list-"+
-b+"-paddingleft{padding-left:20px}")}}a.push(".list-paddingleft-1{padding-left:0}");a.push(".list-paddingleft-2{padding-left:"+k.options.listDefaultPaddingLeft+"px}");a.push(".list-paddingleft-3{padding-left:"+2*k.options.listDefaultPaddingLeft+"px}");p.cssRule("list","ol,ul{margin:0;pading:0;"+(q.ie?"":"width:95%")+"}li{clear:both;}"+a.join("\n"),k.document)});k.ready(function(){d.on(k.body,"cut",function(){setTimeout(function(){var a=k.selection.getRange(),b;if(!a.collapsed&&(b=d.findParentByTagName(a.startContainer,
-"li",!0))&&!b.nextSibling&&d.isEmptyBlock(b)){b=b.parentNode;var c;(c=b.previousSibling)?(d.remove(b),a.setStartAtLast(c).collapse(!0)):(c=b.nextSibling)?(d.remove(b),a.setStartAtFirst(c).collapse(!0)):(c=k.document.createElement("p"),d.fillNode(k.document,c),b.parentNode.insertBefore(c,b),d.remove(b),a.setStart(c,0).collapse(!0));a.select(!0)}})})});k.addListener("beforepaste",function(b,c){var e=this.selection.getRange(),f=UE.htmlparser(c.html,!0);if(e=d.findParentByTagName(e.startContainer,"li",
-!0)){var g=e.parentNode;p.each(f.getNodesByTagName("OL"==g.tagName?"ul":"ol"),function(c){c.tagName=g.tagName;c.setAttr();if(c.parentNode===f)b=a(g)||("OL"==g.tagName?"decimal":"disc");else{var e=c.parentNode.getAttr("class");(b=e&&/custom_/.test(e)?e.match(/custom_(\w+)/)[1]:c.parentNode.getStyle("list-style-type"))||(b="OL"==g.tagName?"decimal":"disc")}e=p.indexOf(n[g.tagName],b);c.parentNode!==f&&(e=e+1==n[g.tagName].length?0:e+1);e=n[g.tagName][e];m[e]?c.setAttr("class","custom_"+e):c.setStyle("list-style-type",
-e)})}c.html=f.toHtml()});k.addInputRule(function(a){p.each(a.getNodesByTagName("li"),function(a){for(var b=UE.uNode.createElement("p"),c=0,e;e=a.children[c];)"text"==e.type||v.p[e.tagName]?b.appendChild(e):b.firstChild()?(a.insertBefore(b,e),b=UE.uNode.createElement("p"),c+=2):c++;(b.firstChild()&&!b.parentNode||!a.firstChild())&&a.appendChild(b);b.firstChild()||b.innerHTML(q.ie?"&nbsp;":"<br/>");a=a.firstChild();(b=a.lastChild())&&("text"==b.type&&/^\s*$/.test(b.data))&&a.removeChild(b)});if(k.options.autoTransWordToList){var b=
-{num1:/^\d+\)/,decimal:/^\d+\./,"lower-alpha":/^[a-z]+\)/,"upper-alpha":/^[A-Z]+\./,cn:/^[\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+[\u3001]/,cn2:/^\([\u4E00\u4E8C\u4E09\u56DB\u516d\u4e94\u4e03\u516b\u4e5d]+\)/},c={square:"n"},e=function(a,e){var d=e.firstChild();if(d&&"element"==d.type&&"span"==d.tagName&&/Wingdings|Symbol/.test(d.getStyle("font-family"))){for(var f in c)if(c[f]==d.data)return f;return"disc"}for(f in b)if(b[f].test(a))return f};p.each(a.getNodesByTagName("p"),function(a){if("MsoListParagraph"==
-a.getAttr("class")){a.setStyle("margin","");a.setStyle("margin-left","");a.setAttr("class","");var c=a,d,f=a;if("li"!=a.parentNode.tagName&&(d=e(a.innerText(),a))){var g=UE.uNode.createElement(k.options.insertorderedlist.hasOwnProperty(d)?"ol":"ul");for(m[d]?g.setAttr("class","custom_"+d):g.setStyle("list-style-type",d);a&&"li"!=a.parentNode.tagName&&e(a.innerText(),a);){(c=a.nextSibling())||a.parentNode.insertBefore(g,a);var l=g,n=d;if("ol"==l.tagName)if(q.ie){var h=a.firstChild();"element"==h.type&&
-("span"==h.tagName&&b[n].test(h.innerText()))&&a.removeChild(h)}else a.innerHTML(a.innerHTML().replace(b[n],""));else a.removeChild(a.firstChild());n=UE.uNode.createElement("li");n.appendChild(a);l.appendChild(n);a=c}!g.parentNode&&(a&&a.parentNode)&&a.parentNode.insertBefore(g,a)}(c=f.firstChild())&&("element"==c.type&&"span"==c.tagName&&/^\s*(&nbsp;)+\s*$/.test(c.innerText()))&&c.parentNode.removeChild(c)}})}});k.addListener("contentchange",function(){e(k.document)});k.addListener("keydown",function(a,
-b){function c(){b.preventDefault?b.preventDefault():b.returnValue=!1;k.fireEvent("contentchange");k.undoManger&&k.undoManger.save()}function e(a,b){for(;a&&!d.isBody(a)&&!b(a);){if(1==a.nodeType&&/[ou]l/i.test(a.tagName))return a;a=a.parentNode}return null}var f=b.keyCode||b.which;if(13==f&&!b.shiftKey){var l=k.selection.getRange(),n=d.findParent(l.startContainer,function(a){return d.isBlockElm(a)},!0),m=d.findParentByTagName(l.startContainer,"li",!0);n&&("PRE"!=n.tagName&&!m)&&(m=n.innerHTML.replace(RegExp(d.fillChar,
-"g"),""),/^\s*1\s*\.[^\d]/.test(m)&&(n.innerHTML=m.replace(/^\s*1\s*\./,""),l.setStartAtLast(n).collapse(!0).select(),k.__hasEnterExecCommand=!0,k.execCommand("insertorderedlist"),k.__hasEnterExecCommand=!1));l=k.selection.getRange();n=e(l.startContainer,function(a){return"TABLE"==a.tagName});m=l.collapsed?n:e(l.endContainer,function(a){return"TABLE"==a.tagName});if(n&&m&&n===m){if(!l.collapsed)if(n=d.findParentByTagName(l.startContainer,"li",!0),m=d.findParentByTagName(l.endContainer,"li",!0),n&&
-m&&n===m){if(l.deleteContents(),(m=d.findParentByTagName(l.startContainer,"li",!0))&&d.isEmptyBlock(m)){t=m.previousSibling;next=m.nextSibling;n=k.document.createElement("p");d.fillNode(k.document,n);r=m.parentNode;t&&next?(l.setStart(next,0).collapse(!0).select(!0),d.remove(m)):((t||next)&&t?m.parentNode.parentNode.insertBefore(n,r.nextSibling):r.parentNode.insertBefore(n,r),d.remove(m),r.firstChild||d.remove(r),l.setStart(n,0).setCursor());c();return}}else{var n=l.cloneRange(),h=n.collapse(!1).createBookmark();
-l.deleteContents();n.moveToBookmark(h);m=d.findParentByTagName(n.startContainer,"li",!0);g(m);n.select();c();return}if(m=d.findParentByTagName(l.startContainer,"li",!0)){if(d.isEmptyBlock(m)){var h=l.createBookmark(),r=m.parentNode;m!==r.lastChild?(d.breakParent(m,r),g(m)):(r.parentNode.insertBefore(m,r.nextSibling),d.isEmptyNode(r)&&d.remove(r));if(!v.$list[m.parentNode.tagName])if(d.isBlockElm(m.firstChild))d.remove(m,!0);else{n=k.document.createElement("p");for(m.parentNode.insertBefore(n,m);m.firstChild;)n.appendChild(m.firstChild);
-d.remove(m)}l.moveToBookmark(h).select()}else{n=m.firstChild;if(!n||!d.isBlockElm(n)){n=k.document.createElement("p");for(!m.firstChild&&d.fillNode(k.document,n);m.firstChild;)n.appendChild(m.firstChild);m.appendChild(n)}h=k.document.createElement("span");l.insertNode(h);d.breakParent(h,m);t=h.nextSibling;n=t.firstChild;n||(n=k.document.createElement("p"),d.fillNode(k.document,n),t.appendChild(n));d.isEmptyNode(n)&&(n.innerHTML="",d.fillNode(k.document,n));l.setStart(n,0).collapse(!0).shrinkBoundary().select();
-d.remove(h);var t=t.previousSibling;t&&d.isEmptyBlock(t)&&(t.innerHTML="<p></p>",d.fillNode(k.document,t.firstChild))}c()}}}if(8==f&&(l=k.selection.getRange(),l.collapsed&&d.isStartInblock(l)&&(n=l.cloneRange().trimBoundary(),(m=d.findParentByTagName(l.startContainer,"li",!0))&&d.isStartInblock(n))))if((n=d.findParentByTagName(l.startContainer,"p",!0))&&n!==m.firstChild)r=d.findParentByTagName(n,["ol","ul"]),d.breakParent(n,r),g(n),k.fireEvent("contentchange"),l.setStart(n,0).setCursor(!1,!0),k.fireEvent("saveScene"),
-d.preventDefault(b);else if(m&&(t=m.previousSibling)){if(46!=f||!m.childNodes.length){v.$list[t.tagName]&&(t=t.lastChild);k.undoManger&&k.undoManger.save();n=m.firstChild;if(d.isBlockElm(n))if(d.isEmptyNode(n))for(t.appendChild(n),l.setStart(n,0).setCursor(!1,!0);m.firstChild;)t.appendChild(m.firstChild);else h=k.document.createElement("span"),l.insertNode(h),d.isEmptyBlock(t)&&(t.innerHTML=""),d.moveChild(m,t),l.setStartBefore(h).collapse(!0).select(!0),d.remove(h);else if(d.isEmptyNode(m))n=k.document.createElement("p"),
-t.appendChild(n),l.setStart(n,0).setCursor();else for(l.setEnd(t,t.childNodes.length).collapse().select(!0);m.firstChild;)t.appendChild(m.firstChild);d.remove(m);k.fireEvent("contentchange");k.fireEvent("saveScene");d.preventDefault(b)}}else if(m&&!m.previousSibling){r=m.parentNode;h=l.createBookmark();if(d.isTagNode(r.parentNode,"ol ul"))r.parentNode.insertBefore(m,r);else{for(;m.firstChild;)r.parentNode.insertBefore(m.firstChild,r);d.remove(m)}d.isEmptyNode(r)&&d.remove(r);l.moveToBookmark(h).setCursor(!1,
-!0);k.fireEvent("contentchange");k.fireEvent("saveScene");d.preventDefault(b)}});k.addListener("keyup",function(c,e){if(8==(e.keyCode||e.which)){var f=k.selection.getRange(),l;(l=d.findParentByTagName(f.startContainer,["ol","ul"],!0))&&b(l,l.tagName.toLowerCase(),a(l)||d.getComputedStyle(l,"list-style-type"),!0)}});k.addListener("tabkeydown",function(){function e(a){if(-1!=k.options.maxListLevel){a=a.parentNode;for(var b=0;/[ou]l/i.test(a.tagName);)b++,a=a.parentNode;if(b>=k.options.maxListLevel)return!0}}
-var f=k.selection.getRange(),l=d.findParentByTagName(f.startContainer,"li",!0);if(l){var g;if(f.collapsed){if(e(l))return!0;var m=l.parentNode,h=k.document.createElement(m.tagName),r=p.indexOf(n[h.tagName],a(m)||d.getComputedStyle(m,"list-style-type")),r=r+1==n[h.tagName].length?0:r+1,r=n[h.tagName][r];c(h,r);if(d.isStartInblock(f))return k.fireEvent("saveScene"),g=f.createBookmark(),m.insertBefore(h,l),h.appendChild(l),b(h,h.tagName.toLowerCase(),r),k.fireEvent("contentchange"),f.moveToBookmark(g).select(!0),
-!0}else{k.fireEvent("saveScene");g=f.createBookmark();for(var m=0,t,h=d.findParents(l),q;q=h[m++];)if(d.isTagNode(q,"ol ul")){t=q;break}q=l;if(g.end)for(;q&&!(d.getPosition(q,g.end)&d.POSITION_FOLLOWING);)if(e(q))q=d.getNextDomNode(q,!1,null,function(a){return a!==t});else{m=q.parentNode;h=k.document.createElement(m.tagName);r=p.indexOf(n[h.tagName],a(m)||d.getComputedStyle(m,"list-style-type"));r=n[h.tagName][r+1==n[h.tagName].length?0:r+1];c(h,r);for(m.insertBefore(h,q);q&&!(d.getPosition(q,g.end)&
-d.POSITION_FOLLOWING);){l=q.nextSibling;h.appendChild(q);if(!l||d.isTagNode(l,"ol ul")){if(l)for(;(l=l.firstChild)&&"LI"!=l.tagName;);else l=d.getNextDomNode(q,!1,null,function(a){return a!==t});break}q=l}b(h,h.tagName.toLowerCase(),r);q=l}k.fireEvent("contentchange");f.moveToBookmark(g).select();return!0}}});k.commands.insertorderedlist=k.commands.insertunorderedlist={execCommand:function(e,g){g||(g="insertorderedlist"==e.toLowerCase()?"decimal":"disc");var k=this.selection.getRange(),n=function(a){return 1==
-a.nodeType?"br"!=a.tagName.toLowerCase():!d.isWhitespace(a)},m="insertorderedlist"==e.toLowerCase()?"ol":"ul",h=this.document.createDocumentFragment();k.adjustmentBoundary().shrinkBoundary();var r=k.createBookmark(!0),t=f(this.document.getElementById(r.start)),p=0,q=f(this.document.getElementById(r.end)),s=0,z,E,B,A;if(t||q){t&&(z=t.parentNode);r.end||(q=t);q&&(E=q.parentNode);if(z===E){for(;t!==q;){A=t;t=t.nextSibling;if(!d.isBlockElm(A.firstChild)){for(n=this.document.createElement("p");A.firstChild;)n.appendChild(A.firstChild);
-A.appendChild(n)}h.appendChild(A)}A=this.document.createElement("span");z.insertBefore(A,q);if(!d.isBlockElm(q.firstChild)){for(n=this.document.createElement("p");q.firstChild;)n.appendChild(q.firstChild);q.appendChild(n)}h.appendChild(q);d.breakParent(A,z);d.isEmptyNode(A.previousSibling)&&d.remove(A.previousSibling);d.isEmptyNode(A.nextSibling)&&d.remove(A.nextSibling);n=a(z)||d.getComputedStyle(z,"list-style-type")||("insertorderedlist"==e.toLowerCase()?"decimal":"disc");if(z.tagName.toLowerCase()==
-m&&n==g){q=0;for(q=this.document.createDocumentFragment();n=h.firstChild;)if(d.isTagNode(n,"ol ul"))q.appendChild(n);else for(;n.firstChild;)q.appendChild(n.firstChild),d.remove(n);A.parentNode.insertBefore(q,A)}else B=this.document.createElement(m),c(B,g),B.appendChild(h),A.parentNode.insertBefore(B,A);d.remove(A);B&&b(B,m,g);k.moveToBookmark(r).select();return}if(t){for(;t;){A=t.nextSibling;if(d.isTagNode(t,"ol ul"))h.appendChild(t);else{B=this.document.createDocumentFragment();for(var N=0;t.firstChild;)d.isBlockElm(t.firstChild)&&
-(N=1),B.appendChild(t.firstChild);N?h.appendChild(B):(N=this.document.createElement("p"),N.appendChild(B),h.appendChild(N));d.remove(t)}t=A}z.parentNode.insertBefore(h,z.nextSibling);d.isEmptyNode(z)?(k.setStartBefore(z),d.remove(z)):k.setStartAfter(z);p=1}if(q&&d.inDoc(E,this.document)){for(t=E.firstChild;t&&t!==q;){A=t.nextSibling;if(d.isTagNode(t,"ol ul"))h.appendChild(t);else{B=this.document.createDocumentFragment();for(N=0;t.firstChild;)d.isBlockElm(t.firstChild)&&(N=1),B.appendChild(t.firstChild);
-N?h.appendChild(B):(N=this.document.createElement("p"),N.appendChild(B),h.appendChild(N));d.remove(t)}t=A}A=d.createElement(this.document,"div",{tmpDiv:1});d.moveChild(q,A);h.appendChild(A);d.remove(q);E.parentNode.insertBefore(h,E);k.setEndBefore(E);d.isEmptyNode(E)&&d.remove(E);s=1}}p||k.setStartBefore(this.document.getElementById(r.start));r.end&&!s&&k.setEndAfter(this.document.getElementById(r.end));k.enlarge(!0,function(a){return l[a.tagName]});h=this.document.createDocumentFragment();q=k.createBookmark();
-z=d.getNextDomNode(q.start,!1,n);B=k.cloneRange();for(p=d.isBlockElm;z&&z!==q.end&&d.getPosition(z,q.end)&d.POSITION_PRECEDING;)if(3==z.nodeType||v.li[z.tagName])if(1==z.nodeType&&v.$list[z.tagName]){for(;z.firstChild;)h.appendChild(z.firstChild);t=d.getNextDomNode(z,!1,n);d.remove(z);z=t}else{t=z;for(B.setStartBefore(z);z&&z!==q.end&&(!p(z)||d.isBookmarkNode(z));)t=z,z=d.getNextDomNode(z,!1,null,function(a){return!l[a.tagName]});z&&p(z)&&(A=d.getNextDomNode(t,!1,n))&&d.isBookmarkNode(A)&&(z=d.getNextDomNode(A,
-!1,n),t=A);B.setEndAfter(t);z=d.getNextDomNode(t,!1,n);A=k.document.createElement("li");A.appendChild(B.extractContents());if(d.isEmptyNode(A)){for(t=k.document.createElement("p");A.firstChild;)t.appendChild(A.firstChild);A.appendChild(t)}h.appendChild(A)}else z=d.getNextDomNode(z,!0,n);k.moveToBookmark(q).collapse(!0);B=this.document.createElement(m);c(B,g);B.appendChild(h);k.insertNode(B);b(B,m,g);q=0;for(m=d.getElementsByTagName(B,"div");n=m[q++];)n.getAttribute("tmpDiv")&&d.remove(n,!0);k.moveToBookmark(r).select()},
-queryCommandState:function(a){a="insertorderedlist"==a.toLowerCase()?"ol":"ul";for(var b=this.selection.getStartElementPath(),c=0,e;(e=b[c++])&&"TABLE"!=e.nodeName;)if(a==e.nodeName.toLowerCase())return 1;return 0},queryCommandValue:function(b){b="insertorderedlist"==b.toLowerCase()?"ol":"ul";for(var c=this.selection.getStartElementPath(),e,f=0,l;l=c[f++];){if("TABLE"==l.nodeName){e=null;break}if(b==l.nodeName.toLowerCase()){e=l;break}}return e?a(e)||d.getComputedStyle(e,"list-style-type"):null}}};
-(function(){var h={textarea:function(a,e){var b=e.ownerDocument.createElement("textarea");b.style.cssText="position:absolute;resize:none;width:100%;height:100%;border:0;padding:0;margin:0;overflow-y:auto;";q.ie&&8>q.version&&(b.style.width=e.offsetWidth+"px",b.style.height=e.offsetHeight+"px",e.onresize=function(){b.style.width=e.offsetWidth+"px";b.style.height=e.offsetHeight+"px"});e.appendChild(b);return{setContent:function(a){b.value=a},getContent:function(){return b.value},select:function(){var a;
-q.ie?(a=b.createTextRange(),a.collapse(!0),a.select()):(b.setSelectionRange(0,0),b.focus())},dispose:function(){e.removeChild(b);e=b=e.onresize=null}}},codemirror:function(a,e){var b=window.CodeMirror(e,{mode:"text/html",tabMode:"indent",lineNumbers:!0,lineWrapping:!0}),c=b.getWrapperElement();c.style.cssText='position:absolute;left:0;top:0;width:100%;height:100%;font-family:consolas,"Courier new",monospace;font-size:13px;';b.getScrollerElement().style.cssText="position:absolute;left:0;top:0;width:100%;height:100%;";
-b.refresh();return{getCodeMirror:function(){return b},setContent:function(a){b.setValue(a)},getContent:function(){return b.getValue()},select:function(){b.focus()},dispose:function(){e.removeChild(c);b=c=null}}}};UE.plugins.source=function(){var a=this,e=this.options,b=!1,c,g;e.sourceEditor=q.ie?"textarea":e.sourceEditor||"codemirror";a.setOpt({sourceEditorFirst:!1});var f,k,l;a.commands.source={execCommand:function(){if(b=!b){l=a.selection.getRange().createAddress(!1,!0);a.undoManger&&a.undoManger.save(!0);
-q.gecko&&(a.body.contentEditable=!1);f=a.iframe.style.cssText;a.iframe.style.cssText+="position:absolute;left:-32768px;top:-32768px;";a.fireEvent("beforegetcontent");var n=UE.htmlparser(a.body.innerHTML);a.filterOutputRule(n);n.traversal(function(a){if("element"==a.type)switch(a.tagName){case "td":case "th":case "caption":a.children&&1==a.children.length&&"br"==a.firstChild().tagName&&a.removeChild(a.firstChild());break;case "pre":a.innerText(a.innerText().replace(/&nbsp;/g," "))}});a.fireEvent("aftergetcontent");
-n=n.toHtml(!0);c=h["codemirror"==e.sourceEditor&&window.CodeMirror?"codemirror":"textarea"](a,a.iframe.parentNode);c.setContent(n);g=a.setContent;a.setContent=function(b){b=UE.htmlparser(b);a.filterInputRule(b);b=b.toHtml();c.setContent(b)};setTimeout(function(){c.select();a.addListener("fullscreenchanged",function(){try{c.getCodeMirror().refresh()}catch(a){}})});k=a.getContent;a.getContent=function(){return c.getContent()||"<p>"+(q.ie?"":"<br/>")+"</p>"}}else if(a.iframe.style.cssText=f,n=c.getContent()||
-"<p>"+(q.ie?"":"<br/>")+"</p>",n=n.replace(RegExp("[\\r\\t\\n ]*</?(\\w+)\\s*(?:[^>]*)>","g"),function(a,b){return b&&!v.$inlineWithA[b.toLowerCase()]?a.replace(/(^[\n\r\t ]*)|([\n\r\t ]*$)/g,""):a.replace(/(^[\n\r\t]*)|([\n\r\t]*$)/g,"")}),a.setContent=g,a.setContent(n),c.dispose(),c=null,a.getContent=k,n=a.body.firstChild,n||(a.body.innerHTML="<p>"+(q.ie?"":"<br/>")+"</p>",n=a.body.firstChild),a.undoManger&&a.undoManger.save(!0),q.gecko){var m=document.createElement("input");m.style.cssText="position:absolute;left:0;top:-32768px";
-document.body.appendChild(m);a.body.contentEditable=!1;setTimeout(function(){d.setViewportOffset(m,{left:-32768,top:0});m.focus();setTimeout(function(){a.body.contentEditable=!0;a.selection.getRange().moveToAddress(l).select(!0);d.remove(m)})})}else try{a.selection.getRange().moveToAddress(l).select(!0)}catch(t){}this.fireEvent("sourcemodechanged",b)},queryCommandState:function(){return b|0},notNeedUndo:1};var m=a.queryCommandState;a.queryCommandState=function(a){a=a.toLowerCase();return b?a in{source:1,
-fullscreen:1}?1:-1:m.apply(this,arguments)};"codemirror"==e.sourceEditor&&a.addListener("ready",function(){p.loadFile(document,{src:e.codeMirrorJsUrl||e.UEDITOR_HOME_URL+"third-party/codemirror/codemirror.js",tag:"script",type:"text/javascript",defer:"defer"},function(){e.sourceEditorFirst&&setTimeout(function(){a.execCommand("source")},0)});p.loadFile(document,{tag:"link",rel:"stylesheet",type:"text/css",href:e.codeMirrorCssUrl||e.UEDITOR_HOME_URL+"third-party/codemirror/codemirror.css"})})}})();
-UE.plugins.enterkey=function(){var h,a=this,e=a.options.enterTag;a.addListener("keyup",function(b,c){if(13==(c.keyCode||c.which)){var e=a.selection.getRange(),f=e.startContainer,k;if(q.ie)a.fireEvent("saveScene",!0,!0);else{if(/h\d/i.test(h)){if(q.gecko)d.findParentByTagName(f,"h1 h2 h3 h4 h5 h6 blockquote caption table".split(" "),!0)||(a.document.execCommand("formatBlock",!1,"<p>"),k=1);else if(1==f.nodeType){var f=a.document.createTextNode(""),l;e.insertNode(f);if(l=d.findParentByTagName(f,"div",
-!0)){for(k=a.document.createElement("p");l.firstChild;)k.appendChild(l.firstChild);l.parentNode.insertBefore(k,l);d.remove(l);e.setStartBefore(f).setCursor();k=1}d.remove(f)}a.undoManger&&k&&a.undoManger.save()}q.opera&&e.select()}}});a.addListener("keydown",function(b,c){if(13==(c.keyCode||c.which))if(a.fireEvent("beforeenterkeydown"))d.preventDefault(c);else{a.fireEvent("saveScene",!0,!0);h="";var g=a.selection.getRange();if(!g.collapsed){var f=g.startContainer,k=g.endContainer,f=d.findParentByTagName(f,
-"td",!0),k=d.findParentByTagName(k,"td",!0);if(f&&k&&f!==k||!f&&k||f&&!k){c.preventDefault?c.preventDefault():c.returnValue=!1;return}}if("p"==e)q.ie||((f=d.findParentByTagName(g.startContainer,"ol ul p h1 h2 h3 h4 h5 h6 blockquote caption".split(" "),!0))||q.opera?(h=f.tagName,"p"==f.tagName.toLowerCase()&&q.gecko&&d.removeDirtyAttr(f)):(a.document.execCommand("formatBlock",!1,"<p>"),q.gecko&&(g=a.selection.getRange(),(f=d.findParentByTagName(g.startContainer,"p",!0))&&d.removeDirtyAttr(f))));else if(c.preventDefault?
-c.preventDefault():c.returnValue=!1,g.collapsed)k=g.document.createElement("br"),g.insertNode(k),k.parentNode.lastChild===k?(k.parentNode.insertBefore(k.cloneNode(!0),k),g.setStartBefore(k)):g.setStartAfter(k),g.setCursor();else if(g.deleteContents(),f=g.startContainer,1==f.nodeType&&(f=f.childNodes[g.startOffset])){for(;1==f.nodeType;){if(v.$empty[f.tagName])return g.setStartBefore(f).setCursor(),a.undoManger&&a.undoManger.save(),!1;if(!f.firstChild)return k=g.document.createElement("br"),f.appendChild(k),
-g.setStart(f,0).setCursor(),a.undoManger&&a.undoManger.save(),!1;f=f.firstChild}f===g.startContainer.childNodes[g.startOffset]?(k=g.document.createElement("br"),g.insertNode(k).setCursor()):g.setStart(f,0).setCursor()}else k=g.document.createElement("br"),g.insertNode(k).setStartAfter(k).setCursor()}})};UE.plugins.keystrokes=function(){var h=this,a=!0;h.addListener("keydown",function(e,b){var c=b.keyCode||b.which,g=h.selection.getRange();if(!g.collapsed&&!(b.ctrlKey||b.shiftKey||b.altKey||b.metaKey)&&
-(65<=c&&90>=c||48<=c&&57>=c||96<=c&&111>=c||{13:1,8:1,46:1}[c])){var f=g.startContainer;d.isFillChar(f)&&g.setStartBefore(f);f=g.endContainer;d.isFillChar(f)&&g.setEndAfter(f);g.txtToElmBoundary();g.endContainer&&1==g.endContainer.nodeType&&(f=g.endContainer.childNodes[g.endOffset])&&d.isBr(f)&&g.setEndAfter(f);if(0==g.startOffset&&(f=g.startContainer,d.isBoundaryNode(f,"firstChild")&&(f=g.endContainer,g.endOffset==(3==f.nodeType?f.nodeValue.length:f.childNodes.length)&&d.isBoundaryNode(f,"lastChild")))){h.fireEvent("saveScene");
-h.body.innerHTML="<p>"+(q.ie?"":"<br/>")+"</p>";g.setStart(h.body.firstChild,0).setCursor(!1,!0);h._selectionChange();return}}if(8==c){g=h.selection.getRange();a=g.collapsed;if(h.fireEvent("delkeydown",b))return;var k,l;g.collapsed&&g.inFillChar()&&(k=g.startContainer,d.isFillChar(k)?(g.setStartBefore(k).shrinkBoundary(!0).collapse(!0),d.remove(k)):(k.nodeValue=k.nodeValue.replace(RegExp("^"+d.fillChar),""),g.startOffset--,g.collapse(!0).select(!0)));if(k=g.getClosedNode()){h.fireEvent("saveScene");
-g.setStartBefore(k);d.remove(k);g.setCursor();h.fireEvent("saveScene");d.preventDefault(b);return}if(!q.ie&&(k=d.findParentByTagName(g.startContainer,"table",!0),l=d.findParentByTagName(g.endContainer,"table",!0),k&&!l||!k&&l||k!==l)){b.preventDefault();return}}if(9==c){var m={ol:1,ul:1,table:1};if(h.fireEvent("tabkeydown",b)){d.preventDefault(b);return}g=h.selection.getRange();h.fireEvent("saveScene");var f=0,n="";k=h.options.tabSize||4;for(l=h.options.tabNode||"&nbsp;";f<k;f++)n+=l;f=h.document.createElement("span");
-f.innerHTML=n+d.fillChar;if(g.collapsed)g.insertNode(f.cloneNode(!0).firstChild).setCursor(!0);else if(n=function(a){return d.isBlockElm(a)&&!m[a.tagName.toLowerCase()]},k=d.findParent(g.startContainer,n,!0),l=d.findParent(g.endContainer,n,!0),k&&l&&k===l)g.deleteContents(),g.insertNode(f.cloneNode(!0).firstChild).setCursor(!0);else{k=g.createBookmark();g.enlarge(!0);l=g.createBookmark();for(var r=d.getNextDomNode(l.start,!1,n);r&&!(d.getPosition(r,l.end)&d.POSITION_FOLLOWING);)r.insertBefore(f.cloneNode(!0).firstChild,
-r.firstChild),r=d.getNextDomNode(r,!1,n);g.moveToBookmark(l).moveToBookmark(k).select()}d.preventDefault(b)}if(q.gecko&&46==c&&(g=h.selection.getRange(),g.collapsed&&(k=g.startContainer,d.isEmptyBlock(k)))){for(c=k.parentNode;1==d.getChildCount(c)&&!d.isBody(c);)k=c,c=c.parentNode;k===c.lastChild&&b.preventDefault()}});h.addListener("keyup",function(e,b){var c;if(8==(b.keyCode||b.which)&&!this.fireEvent("delkeyup")){c=this.selection.getRange();if(c.collapsed){var g;if((g=d.findParentByTagName(c.startContainer,
-"h1 h2 h3 h4 h5 h6".split(" "),!0))&&d.isEmptyBlock(g)){var f=g.previousSibling;if(f&&"TABLE"!=f.nodeName){d.remove(g);c.setStartAtLast(f).setCursor(!1,!0);return}if((f=g.nextSibling)&&"TABLE"!=f.nodeName){d.remove(g);c.setStartAtFirst(f).setCursor(!1,!0);return}}d.isBody(c.startContainer)&&(g=d.createElement(this.document,"p",{innerHTML:q.ie?d.fillChar:"<br/>"}),c.insertNode(g).setStart(g,0).setCursor(!1,!0))}!a&&(3==c.startContainer.nodeType||1==c.startContainer.nodeType&&d.isEmptyBlock(c.startContainer))&&
-(q.ie?(g=c.document.createElement("span"),c.insertNode(g).setStartBefore(g).collapse(!0),c.select(),d.remove(g)):c.select())}})};UE.plugins.fiximgclick=function(){function h(){this.cover=this.resizer=this.editor=null;this.doc=document;this.prePos={x:0,y:0};this.startPos={x:0,y:0}}(function(){var a=[[0,0,-1,-1],[0,0,0,-1],[0,0,1,-1],[0,0,-1,0],[0,0,1,0],[0,0,-1,1],[0,0,0,1],[0,0,1,1]];h.prototype={init:function(a){var b=this;b.editor=a;b.startPos=this.prePos={x:0,y:0};b.dragId=-1;a=[];var c=b.cover=
-document.createElement("div"),g=b.resizer=document.createElement("div");c.id=b.editor.ui.id+"_imagescale_cover";c.style.cssText="position:absolute;display:none;z-index:"+b.editor.options.zIndex+";filter:alpha(opacity=0); opacity:0;background:#CCC;";d.on(c,"mousedown click",function(){b.hide()});for(i=0;8>i;i++)a.push('<span class="edui-editor-scale-hand'+i+'"></span>');g.id=b.editor.ui.id+"_imagescale";g.className="edui-editor-scale";g.innerHTML=a.join("");g.style.cssText+=";display:none;border:1px solid #3b77ff;z-index:"+
-b.editor.options.zIndex+";";b.editor.ui.getDom().appendChild(c);b.editor.ui.getDom().appendChild(g);b.initStyle();b.initEvents()},initStyle:function(){p.cssRule("imagescale",".edui-editor-scale{position:absolute;border:1px solid #38B2CE;}.edui-editor-scale span{position:absolute;width:6px;height:6px;overflow:hidden;font-size:0px;display:block;background-color:#3C9DD0;}.edui-editor-scale .edui-editor-scale-hand0{cursor:nw-resize;top:0;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-scale .edui-editor-scale-hand1{cursor:n-resize;top:0;margin-top:-4px;left:50%;margin-left:-4px;}.edui-editor-scale .edui-editor-scale-hand2{cursor:ne-resize;top:0;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-scale .edui-editor-scale-hand3{cursor:w-resize;top:50%;margin-top:-4px;left:0;margin-left:-4px;}.edui-editor-scale .edui-editor-scale-hand4{cursor:e-resize;top:50%;margin-top:-4px;left:100%;margin-left:-3px;}.edui-editor-scale .edui-editor-scale-hand5{cursor:sw-resize;top:100%;margin-top:-3px;left:0;margin-left:-4px;}.edui-editor-scale .edui-editor-scale-hand6{cursor:s-resize;top:100%;margin-top:-3px;left:50%;margin-left:-4px;}.edui-editor-scale .edui-editor-scale-hand7{cursor:se-resize;top:100%;margin-top:-3px;left:100%;margin-left:-3px;}")},
-initEvents:function(){this.startPos.x=this.startPos.y=0;this.isDraging=!1},_eventHandler:function(a){switch(a.type){case "mousedown":var b=a.target||a.srcElement;-1!=b.className.indexOf("edui-editor-scale-hand")&&-1==this.dragId&&(this.dragId=b.className.slice(-1),this.startPos.x=this.prePos.x=a.clientX,this.startPos.y=this.prePos.y=a.clientY,d.on(this.doc,"mousemove",this.proxy(this._eventHandler,this)));break;case "mousemove":-1!=this.dragId&&(this.updateContainerStyle(this.dragId,{x:a.clientX-
-this.prePos.x,y:a.clientY-this.prePos.y}),this.prePos.x=a.clientX,this.prePos.y=a.clientY,this.updateTargetElement());break;case "mouseup":-1!=this.dragId&&(this.updateContainerStyle(this.dragId,{x:a.clientX-this.prePos.x,y:a.clientY-this.prePos.y}),this.updateTargetElement(),this.target.parentNode&&this.attachTo(this.target),this.dragId=-1),d.un(this.doc,"mousemove",this.proxy(this._eventHandler,this)),this.editor.fireEvent("contentchange")}},updateTargetElement:function(){d.setStyles(this.target,
-{width:this.resizer.style.width,height:this.resizer.style.height});this.attachTo(this.target)},updateContainerStyle:function(e,b){var c=this.resizer,d;0!=a[e][0]&&(d=parseInt(c.style.left)+b.x,c.style.left=this._validScaledProp("left",d)+"px");0!=a[e][1]&&(d=parseInt(c.style.top)+b.y,c.style.top=this._validScaledProp("top",d)+"px");0!=a[e][2]&&(d=c.clientWidth+a[e][2]*b.x,c.style.width=this._validScaledProp("width",d)+"px");0!=a[e][3]&&(d=c.clientHeight+a[e][3]*b.y,c.style.height=this._validScaledProp("height",
-d)+"px")},_validScaledProp:function(a,b){var c=this.resizer,d=document;b=isNaN(b)?0:b;switch(a){case "left":return 0>b?0:b+c.clientWidth>d.clientWidth?d.clientWidth-c.clientWidth:b;case "top":return 0>b?0:b+c.clientHeight>d.clientHeight?d.clientHeight-c.clientHeight:b;case "width":return 0>=b?1:b+c.offsetLeft>d.clientWidth?d.clientWidth-c.offsetLeft:b;case "height":return 0>=b?1:b+c.offsetTop>d.clientHeight?d.clientHeight-c.offsetTop:b}},hideCover:function(){this.cover.style.display="none"},showCover:function(){var a=
-d.getXY(this.editor.ui.getDom()),b=d.getXY(this.editor.iframe);d.setStyles(this.cover,{width:this.editor.iframe.offsetWidth+"px",height:this.editor.iframe.offsetHeight+"px",top:b.y-a.y+"px",left:b.x-a.x+"px",position:"absolute",display:""})},show:function(a){this.resizer.style.display="block";a&&this.attachTo(a);d.on(this.resizer,"mousedown",this.proxy(this._eventHandler,this));d.on(this.doc,"mouseup",this.proxy(this._eventHandler,this));this.showCover();this.editor.fireEvent("afterscaleshow",this);
-this.editor.fireEvent("saveScene")},hide:function(){this.hideCover();this.resizer.style.display="none";d.un(this.resizer,"mousedown",this.proxy(this._eventHandler,this));d.un(this.doc,"mouseup",this.proxy(this._eventHandler,this));this.editor.fireEvent("afterscalehide",this)},proxy:function(a,b){return function(c){return a.apply(b||this,arguments)}},attachTo:function(a){a=this.target=a;var b=this.resizer,c=d.getXY(a),g=d.getXY(this.editor.iframe),f=d.getXY(b.parentNode);d.setStyles(b,{width:a.width+
-"px",height:a.height+"px",left:g.x+c.x-this.editor.document.body.scrollLeft-f.x-parseInt(b.style.borderLeftWidth)+"px",top:g.y+c.y-this.editor.document.body.scrollTop-f.y-parseInt(b.style.borderTopWidth)+"px"})}}})();return function(){var a=this,e;a.setOpt("imageScaleEnabled",!0);!q.ie&&a.options.imageScaleEnabled&&a.addListener("click",function(b,c){var g=a.selection.getRange().getClosedNode();if(g&&"IMG"==g.tagName&&"false"!=a.body.contentEditable){if(!e){e=new h;e.init(a);a.ui.getDom().appendChild(e.resizer);
-var f=function(b){e.hide();e.target&&a.selection.getRange().selectNode(e.target).select()},k=function(a){var b=a.target||a.srcElement;!b||void 0!==b.className&&-1!=b.className.indexOf("edui-editor-scale")||f(a)},l;a.addListener("afterscaleshow",function(b){a.addListener("beforekeydown",f);a.addListener("beforemousedown",k);d.on(document,"keydown",f);d.on(document,"mousedown",k);a.selection.getNative().removeAllRanges()});a.addListener("afterscalehide",function(b){a.removeListener("beforekeydown",
-f);a.removeListener("beforemousedown",k);d.un(document,"keydown",f);d.un(document,"mousedown",k);b=e.target;b.parentNode&&a.selection.getRange().selectNode(b).select()});d.on(e.resizer,"mousedown",function(b){a.selection.getNative().removeAllRanges();var c=b.target||b.srcElement;c&&-1==c.className.indexOf("edui-editor-scale-hand")&&(l=setTimeout(function(){e.hide();e.target&&a.selection.getRange().selectNode(c).select()},200))});d.on(e.resizer,"mouseup",function(a){(a=a.target||a.srcElement)&&-1==
-a.className.indexOf("edui-editor-scale-hand")&&clearTimeout(l)})}e.show(g)}else e&&"none"!=e.resizer.style.display&&e.hide()});q.webkit&&a.addListener("click",function(b,c){"IMG"==c.target.tagName&&"false"!=a.body.contentEditable&&(new I.Range(a.document)).selectNode(c.target).select()})}}();UE.plugin.register("autolink",function(){return q.ie?{}:{bindEvents:{reset:function(){},keydown:function(h,a){var e=a.keyCode||a.which;if(32==e||13==e){for(var e=this.selection.getNative(),b=e.getRangeAt(0).cloneRange(),
-c,g=b.startContainer;1==g.nodeType&&0<b.startOffset;){g=b.startContainer.childNodes[b.startOffset-1];if(!g)break;b.setStart(g,1==g.nodeType?g.childNodes.length:g.nodeValue.length);b.collapse(!0);g=b.startContainer}do{if(0==b.startOffset){for(g=b.startContainer.previousSibling;g&&1==g.nodeType;)g=g.lastChild;if(!g||d.isFillChar(g))break;c=g.nodeValue.length}else g=b.startContainer,c=b.startOffset;b.setStart(g,c-1);c=b.toString().charCodeAt(0)}while(160!=c&&32!=c);if(b.toString().replace(RegExp(d.fillChar,
-"g"),"").match(/(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i)){for(;b.toString().length&&!/^(?:https?:\/\/|ssh:\/\/|ftp:\/\/|file:\/|www\.)/i.test(b.toString());)try{b.setStart(b.startContainer,b.startOffset+1)}catch(f){for(g=b.startContainer;!(next=g.nextSibling);){if(d.isBody(g))return;g=g.parentNode}b.setStart(next,0)}if(!d.findParentByTagName(b.startContainer,"a",!0)){c=this.document.createElement("a");var g=this.document.createTextNode(" "),k;this.undoManger&&this.undoManger.save();c.appendChild(b.extractContents());
-c.href=c.innerHTML=c.innerHTML.replace(/<[^>]+>/g,"");k=c.getAttribute("href").replace(RegExp(d.fillChar,"g"),"");k=/^(?:https?:\/\/)/ig.test(k)?k:"http://"+k;c.setAttribute("_src",p.html(k));c.href=p.html(k);b.insertNode(c);c.parentNode.insertBefore(g,c.nextSibling);b.setStart(g,0);b.collapse(!0);e.removeAllRanges();e.addRange(b);this.undoManger&&this.undoManger.save()}}}}}}},function(){function h(a){if(3==a.nodeType)return null;if("A"==a.nodeName)return a;for(a=a.lastChild;a;){if("A"==a.nodeName)return a;
-if(3==a.nodeType){if(d.isWhitespace(a)){a=a.previousSibling;continue}return null}a=a.lastChild}}var a={37:1,38:1,39:1,40:1,13:1,32:1};q.ie&&this.addListener("keyup",function(e,b){var c=b.keyCode;if(a[c]){var g=this.selection.getRange(),f=g.startContainer;if(13==c){for(;f&&!d.isBody(f)&&!d.isBlockElm(f);)f=f.parentNode;f&&!d.isBody(f)&&"P"==f.nodeName&&(g=f.previousSibling)&&1==g.nodeType&&(g=h(g))&&!g.getAttribute("_href")&&d.remove(g,!0)}else 32==c?3==f.nodeType&&/^\s$/.test(f.nodeValue)&&(f=f.previousSibling)&&
-("A"==f.nodeName&&!f.getAttribute("_href"))&&d.remove(f,!0):(f=d.findParentByTagName(f,"a",!0))&&!f.getAttribute("_href")&&(c=g.createBookmark(),d.remove(f,!0),g.moveToBookmark(c).select(!0))}})});UE.plugins.autoheight=function(){function h(){var a=this;clearTimeout(f);k||a.queryCommandState&&(!a.queryCommandState||1==a.queryCommandState("source"))||(f=setTimeout(function(){for(var e=a.body.lastChild;e&&1!=e.nodeType;)e=e.previousSibling;e&&1==e.nodeType&&(e.style.clear="both",g=Math.max(d.getXY(e).y+
-e.offsetHeight+25,Math.max(c.minFrameHeight,c.initialFrameHeight)),g!=b&&(a.setHeight(g,!0),b=g),d.removeStyle(e,"clear"))},50))}var a=this;a.autoHeightEnabled=!1!==a.options.autoHeightEnabled;if(a.autoHeightEnabled){var e,b=0,c=a.options,g,f,k;a.addListener("fullscreenchanged",function(a,b){k=b});a.addListener("destroy",function(){a.removeListener("contentchange afterinserthtml keyup mouseup",h)});a.enableAutoHeight=function(){var a=this;if(a.autoHeightEnabled){var b=a.document;a.autoHeightEnabled=
-!0;e=b.body.style.overflowY;b.body.style.overflowY="hidden";a.addListener("contentchange afterinserthtml keyup mouseup",h);setTimeout(function(){h.call(a)},q.gecko?100:0);a.fireEvent("autoheightchanged",a.autoHeightEnabled)}};a.disableAutoHeight=function(){a.body.style.overflowY=e||"";a.removeListener("contentchange",h);a.removeListener("keyup",h);a.removeListener("mouseup",h);a.autoHeightEnabled=!1;a.fireEvent("autoheightchanged",a.autoHeightEnabled)};a.addListener("ready",function(){a.enableAutoHeight();
-var b;d.on(q.ie?a.body:a.document,q.webkit?"dragover":"drop",function(){clearTimeout(b);b=setTimeout(function(){h.call(a)},100)})})}};UE.plugins.autofloat=function(){function h(){var a=document.body.style;a.backgroundImage='url("about:blank")';a.backgroundAttachment="fixed"}function a(){w=!0;n.parentNode&&n.parentNode.removeChild(n);r.style.cssText=m}function e(){var c=x(b.container),e=b.options.toolbarTopOffset||0;if(0>c.top&&c.bottom-r.offsetHeight>e){var c=d.getXY(r),e=d.getComputedStyle(r,"position"),
-f=d.getComputedStyle(r,"left");r.style.width=r.offsetWidth+"px";r.style.zIndex=1*b.options.zIndex+1;r.parentNode.insertBefore(n,r);k||l&&q.ie?("absolute"!=r.style.position&&(r.style.position="absolute"),r.style.top=(document.body.scrollTop||document.documentElement.scrollTop)-t+g+"px"):(q.ie7Compat&&w&&(w=!1,r.style.left=d.getXY(r).x-document.documentElement.getBoundingClientRect().left+2+"px"),"fixed"!=r.style.position&&(r.style.position="fixed",r.style.top=g+"px",("absolute"==e||"relative"==e)&&
-parseFloat(f)&&(r.style.left=c.x+"px")))}else a()}var b=this,c=b.getLang();b.setOpt({topOffset:0});var g=b.options.topOffset;if(!1!==b.options.autoFloatEnabled){var f=UE.ui.uiUtils,k=q.ie&&6>=q.version,l=q.quirks,m,n=document.createElement("div"),r,t,x,w=!0,u=p.defer(function(){e()},q.ie?200:100,!0);b.addListener("destroy",function(){d.un(window,["scroll","resize"],e);b.removeListener("keydown",u)});b.addListener("ready",function(){var l;UE.ui?l=1:(alert(c.autofloatMsg),l=0);l&&b.ui&&(x=f.getClientRect,
-r=b.ui.getDom("toolbarbox"),t=x(r).top,m=r.style.cssText,n.style.height=r.offsetHeight+"px",k&&h(),d.on(window,["scroll","resize"],e),b.addListener("keydown",u),b.addListener("beforefullscreenchange",function(b,c){c&&a()}),b.addListener("fullscreenchanged",function(a,b){b||e()}),b.addListener("sourcemodechanged",function(a,b){setTimeout(function(){e()},0)}),b.addListener("clearDoc",function(){setTimeout(function(){e()},0)}))})}};UE.plugins.pasteplain=function(){this.setOpt({pasteplain:!1,filterTxtRules:function(){function a(a){a.tagName=
-"p";a.setStyle()}function e(a){a.parentNode.removeChild(a,!0)}return{"-":"script style object iframe embed input select",p:{$:{}},br:{$:{}},div:function(a){for(var c,e=UE.uNode.createElement("p");c=a.firstChild();)"text"!=c.type&&UE.dom.dtd.$block[c.tagName]?e.firstChild()?(a.parentNode.insertBefore(e,a),e=UE.uNode.createElement("p")):a.parentNode.insertBefore(c,a):e.appendChild(c);e.firstChild()&&a.parentNode.insertBefore(e,a);a.parentNode.removeChild(a)},ol:e,ul:e,dl:e,dt:e,dd:e,li:e,caption:a,
-th:a,tr:a,h1:a,h2:a,h3:a,h4:a,h5:a,h6:a,td:function(a){a.innerText()&&a.parentNode.insertAfter(UE.uNode.createText(" &nbsp; &nbsp;"),a);a.parentNode.removeChild(a,a.innerText())}}}()});var d=this.options.pasteplain;this.commands.pasteplain={queryCommandState:function(){return d?1:0},execCommand:function(){d=!d|0},notNeedUndo:1}};UE.plugins.video=function(){function h(a,c,d,f,k,l,m){var n;switch(m){case "image":n="<img "+(f?'id="'+f+'"':"")+' width="'+c+'" height="'+d+'" _url="'+a+'" class="'+l+'" src="'+
-e.options.UEDITOR_HOME_URL+'themes/default/images/spacer.gif" style="background:url('+e.options.UEDITOR_HOME_URL+"themes/default/images/videologo.gif) no-repeat center center; border:1px solid gray;"+(k?"float:"+k+";":"")+'" />';break;case "embed":n='<embed type="application/x-shockwave-flash" class="'+l+'" pluginspage="http://www.macromedia.com/go/getflashplayer" src="'+p.html(a)+'" width="'+c+'" height="'+d+'"'+(k?' style="float:'+k+'"':"")+' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" >';
-break;case "video":m=a.substr(a.lastIndexOf(".")+1),"ogv"==m&&(m="ogg"),n="<video"+(f?' id="'+f+'"':"")+' class="'+l+'" '+(k?' style="float:'+k+'"':"")+' controls preload="none" width="'+c+'" height="'+d+'" src="'+a+'" data-setup="{}"><source src="'+a+'" type="video/'+m+'" /></video>'}return n}function a(a,c){p.each(a.getNodesByTagName(c?"img":"embed video"),function(a){var b=a.getAttr("class");if(b&&-1!=b.indexOf("edui-faked-video")){var e=h(c?a.getAttr("_url"):a.getAttr("src"),a.getAttr("width"),
-a.getAttr("height"),null,a.getStyle("float")||"",b,c?"embed":"image");a.parentNode.replaceChild(UE.uNode.createElement(e),a)}b&&-1!=b.indexOf("edui-upload-video")&&(e=h(c?a.getAttr("_url"):a.getAttr("src"),a.getAttr("width"),a.getAttr("height"),null,a.getStyle("float")||"",b,c?"video":"image"),a.parentNode.replaceChild(UE.uNode.createElement(e),a))})}var e=this;e.addOutputRule(function(b){a(b,!0)});e.addInputRule(function(b){a(b)});e.commands.insertvideo={execCommand:function(a,c,g){c=p.isArray(c)?
-c:[c];var f=[],k;a=0;for(var l,m=c.length;a<m;a++)l=c[a],k="upload"==g?"edui-upload-video video-js vjs-default-skin":"edui-faked-video",f.push(h(l.url,l.width||420,l.height||280,"tmpVedio"+a,null,k,"image"));e.execCommand("inserthtml",f.join(""),!0);g=this.selection.getRange();a=0;for(m=c.length;a<m;a++)f=this.document.getElementById("tmpVedio"+a),d.removeAttributes(f,"id"),g.selectNode(f).select(),e.execCommand("imagefloat",c[a].align)},queryCommandState:function(){var a=e.selection.getRange().getClosedNode();
-return!a||"edui-faked-video"!=a.className&&-1==a.className.indexOf("edui-upload-video")?0:1}}};(function(){var h=UE.UETable=function(a){this.table=a;this.indexTable=[];this.selectedTds=[];this.cellsRange={};this.update(a)};h.removeSelectedClass=function(a){p.each(a,function(a){d.removeClasses(a,"selectTdClass")})};h.addSelectedClass=function(a){p.each(a,function(a){d.addClass(a,"selectTdClass")})};h.isEmptyBlock=function(a){var e=RegExp(d.fillChar,"g");if(0<a[q.ie?"innerText":"textContent"].replace(/^\s*$/,
-"").replace(e,"").length)return 0;for(var b in v.$isNotEmpty)if(v.$isNotEmpty.hasOwnProperty(b)&&a.getElementsByTagName(b).length)return 0;return 1};h.getWidth=function(a){return a?parseInt(d.getComputedStyle(a,"width"),10):0};h.getTableCellAlignState=function(a){!p.isArray(a)&&(a=[a]);var e={},b=["align","valign"],c=null,d=!0;p.each(a,function(a){p.each(b,function(b){c=a.getAttribute(b);if(!e[b]&&c)e[b]=c;else if(!e[b]||c!==e[b])return d=!1});return d});return d?e:null};h.getTableItemsByRange=function(a){var e=
-a.selection.getStart();e&&(e.id&&0===e.id.indexOf("_baidu_bookmark_start_"))&&(e=e.nextSibling);var b=(a=e&&d.findParentByTagName(e,["td","th"],!0))&&a.parentNode,e=e&&d.findParentByTagName(e,"caption",!0);return{cell:a,tr:b,table:e?e.parentNode:b&&b.parentNode.parentNode,caption:e}};h.getUETableBySelected=function(a){return(a=h.getTableItemsByRange(a).table)&&a.ueTable&&a.ueTable.selectedTds.length?a.ueTable:null};h.getDefaultValue=function(a,e){var b={thin:"0px",medium:"1px",thick:"2px"},c,g,f;
-if(e)k=e.getElementsByTagName("td")[0],f=d.getComputedStyle(e,"border-left-width"),c=parseInt(b[f]||f,10),f=d.getComputedStyle(k,"padding-left"),g=parseInt(b[f]||f,10),f=d.getComputedStyle(k,"border-left-width"),b=parseInt(b[f]||f,10);else{e=a.document.createElement("table");e.insertRow(0).insertCell(0).innerHTML="xxx";a.body.appendChild(e);var k=e.getElementsByTagName("td")[0];f=d.getComputedStyle(e,"border-left-width");c=parseInt(b[f]||f,10);f=d.getComputedStyle(k,"padding-left");g=parseInt(b[f]||
-f,10);f=d.getComputedStyle(k,"border-left-width");b=parseInt(b[f]||f,10);d.remove(e)}return{tableBorder:c,tdPadding:g,tdBorder:b}};h.getUETable=function(a){var e=a.tagName.toLowerCase();a="td"==e||"th"==e||"caption"==e?d.findParentByTagName(a,"table",!0):a;a.ueTable||(a.ueTable=new h(a));return a.ueTable};h.cloneCell=function(a,e,b){if(!a||p.isString(a))return this.table.ownerDocument.createElement(a||"td");var c=d.hasClass(a,"selectTdClass");c&&d.removeClasses(a,"selectTdClass");var g=a.cloneNode(!0);
-e&&(g.rowSpan=g.colSpan=1);!b&&d.removeAttributes(g,"width height");!b&&d.removeAttributes(g,"style");g.style.borderLeftStyle="";g.style.borderTopStyle="";g.style.borderLeftColor=a.style.borderRightColor;g.style.borderLeftWidth=a.style.borderRightWidth;g.style.borderTopColor=a.style.borderBottomColor;g.style.borderTopWidth=a.style.borderBottomWidth;c&&d.addClass(a,"selectTdClass");return g};h.prototype={getMaxRows:function(){for(var a=this.table.rows,e=1,b=0,c;c=a[b];b++){for(var d=1,f=0,k;k=c.cells[f++];)d=
-Math.max(k.rowSpan||1,d);e=Math.max(d+b,e)}return e},getMaxCols:function(){for(var a=this.table.rows,e=0,b={},c=0,d;d=a[c];c++){for(var f=0,k=0,l;l=d.cells[k++];)if(f+=l.colSpan||1,l.rowSpan&&1<l.rowSpan)for(var m=1;m<l.rowSpan;m++)b["row_"+(c+m)]?b["row_"+(c+m)]++:b["row_"+(c+m)]=l.colSpan||1;f+=b["row_"+c]||0;e=Math.max(f,e)}return e},getCellColIndex:function(a){},getHSideCell:function(a,e){try{var b=this.getCellInfo(a),c,d,f=this.selectedTds.length,k=this.cellsRange;if(!e&&(f?!k.beginColIndex:
-!b.colIndex)||e&&(f?k.endColIndex==this.colsNum-1:b.colIndex==this.colsNum-1))return null;c=f?k.beginRowIndex:b.rowIndex;d=e?f?k.endColIndex+1:b.colIndex+1:f?k.beginColIndex-1:1>b.colIndex?0:b.colIndex-1;return this.getCell(this.indexTable[c][d].rowIndex,this.indexTable[c][d].cellIndex)}catch(l){}},getTabNextCell:function(a,e){var b=this.getCellInfo(a),c=e||b.rowIndex,b=b.colIndex+1+(b.colSpan-1),d;try{d=this.getCell(this.indexTable[c][b].rowIndex,this.indexTable[c][b].cellIndex)}catch(f){try{c=1*
-c+1,b=0,d=this.getCell(this.indexTable[c][b].rowIndex,this.indexTable[c][b].cellIndex)}catch(k){}}return d},getVSideCell:function(a,e,b){try{var c=this.getCellInfo(a),d,f,k=this.selectedTds.length&&!b,l=this.cellsRange;if(!e&&0==c.rowIndex||e&&(k?l.endRowIndex==this.rowsNum-1:c.rowIndex+c.rowSpan>this.rowsNum-1))return null;d=e?k?l.endRowIndex+1:c.rowIndex+c.rowSpan:k?l.beginRowIndex-1:c.rowIndex-1;f=k?l.beginColIndex:c.colIndex;return this.getCell(this.indexTable[d][f].rowIndex,this.indexTable[d][f].cellIndex)}catch(m){}},
-getSameEndPosCells:function(a,e){try{for(var b="x"===e.toLowerCase(),c=d.getXY(a)[b?"x":"y"]+a["offset"+(b?"Width":"Height")],g=this.table.rows,f=null,k=[],l=0;l<this.rowsNum;l++)for(var f=g[l].cells,m=0,n;n=f[m++];){var h=d.getXY(n)[b?"x":"y"]+n["offset"+(b?"Width":"Height")];if(h>c&&b)break;if(a==n||c==h)if(1==n[b?"colSpan":"rowSpan"]&&k.push(n),b)break}return k}catch(t){}},setCellContent:function(a,e){a.innerHTML=e||(q.ie?d.fillChar:"<br />")},cloneCell:h.cloneCell,getSameStartPosXCells:function(a){try{var e=
-d.getXY(a).x+a.offsetWidth,b=this.table.rows,c;a=[];for(var g=0;g<this.rowsNum;g++){c=b[g].cells;for(var f=0,k;k=c[f++];){var l=d.getXY(k).x;if(l>e)break;if(l==e&&1==k.colSpan){a.push(k);break}}}return a}catch(m){}},update:function(a){this.table=a||this.table;this.selectedTds=[];this.cellsRange={};this.indexTable=[];a=this.table.rows;for(var e=this.getMaxRows(),b=e-a.length,c=this.getMaxCols();b--;)this.table.insertRow(a.length);this.rowsNum=e;this.colsNum=c;for(var b=0,g=a.length;b<g;b++)this.indexTable[b]=
-Array(c);for(var b=0,f;f=a[b];b++){var g=0,k;for(f=f.cells;k=f[g];g++){k.rowSpan>e&&(k.rowSpan=e);var l=g,m=k.rowSpan||1;for(k=k.colSpan||1;this.indexTable[b][l];)l++;for(var n=0;n<m;n++)for(var h=0;h<k;h++)this.indexTable[b+n][l+h]={rowIndex:b,cellIndex:g,colIndex:l,rowSpan:m,colSpan:k}}}for(n=0;n<e;n++)for(h=0;h<c;h++)void 0===this.indexTable[n][h]&&(f=a[n],k=(k=f.cells[f.cells.length-1])?k.cloneNode(!0):this.table.ownerDocument.createElement("td"),this.setCellContent(k),1!==k.colSpan&&(k.colSpan=
-1),1!==k.rowSpan&&(k.rowSpan=1),f.appendChild(k),this.indexTable[n][h]={rowIndex:n,cellIndex:k.cellIndex,colIndex:h,rowSpan:1,colSpan:1});a=d.getElementsByTagName(this.table,"td");var t=[];p.each(a,function(a){d.hasClass(a,"selectTdClass")&&t.push(a)});t.length&&(e=t[t.length-1],a=this.getCellInfo(t[0]),e=this.getCellInfo(e),this.selectedTds=t,this.cellsRange={beginRowIndex:a.rowIndex,beginColIndex:a.colIndex,endRowIndex:e.rowIndex+e.rowSpan-1,endColIndex:e.colIndex+e.colSpan-1});if(!d.hasClass(this.table.rows[0],
-"firstRow"))for(d.addClass(this.table.rows[0],"firstRow"),b=1;b<this.table.rows.length;b++)d.removeClasses(this.table.rows[b],"firstRow")},getCellInfo:function(a){if(a){var e=a.cellIndex;a=a.parentNode.rowIndex;for(var b=this.indexTable[a],c=this.colsNum,d=e;d<c;d++){var f=b[d];if(f.rowIndex===a&&f.cellIndex===e)return f}}},getCell:function(a,e){return a<this.rowsNum&&this.table.rows[a].cells[e]||null},deleteCell:function(a,e){e="number"==typeof e?e:a.parentNode.rowIndex;this.table.rows[e].deleteCell(a.cellIndex)},
-getCellsRange:function(a,e){function b(a,e,d,f){var l=a,k=e,g=d,n=f,m,h,r;if(0<a)for(h=e;h<f;h++)m=c.indexTable[a][h],r=m.rowIndex,r<a&&(l=Math.min(r,l));if(f<c.colsNum)for(r=a;r<d;r++)m=c.indexTable[r][f],h=m.colIndex+m.colSpan-1,h>f&&(n=Math.max(h,n));if(d<c.rowsNum)for(h=e;h<f;h++)m=c.indexTable[d][h],r=m.rowIndex+m.rowSpan-1,r>d&&(g=Math.max(r,g));if(0<e)for(r=a;r<d;r++)m=c.indexTable[r][e],h=m.colIndex,h<e&&(k=Math.min(m.colIndex,k));return l!=a||k!=e||g!=d||n!=f?b(l,k,g,n):{beginRowIndex:a,
-beginColIndex:e,endRowIndex:d,endColIndex:f}}try{var c=this,d=c.getCellInfo(a);if(a===e)return{beginRowIndex:d.rowIndex,beginColIndex:d.colIndex,endRowIndex:d.rowIndex+d.rowSpan-1,endColIndex:d.colIndex+d.colSpan-1};var f=c.getCellInfo(e),k=Math.min(d.rowIndex,f.rowIndex),l=Math.min(d.colIndex,f.colIndex),m=Math.max(d.rowIndex+d.rowSpan-1,f.rowIndex+f.rowSpan-1),n=Math.max(d.colIndex+d.colSpan-1,f.colIndex+f.colSpan-1);return b(k,l,m,n)}catch(h){}},getCells:function(a){this.clearSelected();for(var e=
-a.beginColIndex,b=a.endRowIndex,c=a.endColIndex,d,f,k={},l=[],m=a.beginRowIndex;m<=b;m++)for(var n=e;n<=c;n++){a=this.indexTable[m][n];d=a.rowIndex;f=a.colIndex;var h=d+"|"+f;if(!k[h]){k[h]=1;if(d<m||f<n||d+a.rowSpan-1>b||f+a.colSpan-1>c)return null;l.push(this.getCell(d,a.cellIndex))}}return l},clearSelected:function(){h.removeSelectedClass(this.selectedTds);this.selectedTds=[];this.cellsRange={}},setSelected:function(a){var e=this.getCells(a);h.addSelectedClass(e);this.selectedTds=e;this.cellsRange=
-a},isFullRow:function(){var a=this.cellsRange;return a.endColIndex-a.beginColIndex+1==this.colsNum},isFullCol:function(){var a=this.cellsRange,e=this.table.getElementsByTagName("th"),a=a.endRowIndex-a.beginRowIndex+1;return e.length?a==this.rowsNum||a==this.rowsNum-1:a==this.rowsNum},getNextCell:function(a,e,b){try{var c=this.getCellInfo(a),d,f,k=this.selectedTds.length&&!b,l=this.cellsRange;if(!e&&0==c.rowIndex||e&&(k?l.endRowIndex==this.rowsNum-1:c.rowIndex+c.rowSpan>this.rowsNum-1))return null;
-d=e?k?l.endRowIndex+1:c.rowIndex+c.rowSpan:k?l.beginRowIndex-1:c.rowIndex-1;f=k?l.beginColIndex:c.colIndex;return this.getCell(this.indexTable[d][f].rowIndex,this.indexTable[d][f].cellIndex)}catch(m){}},getPreviewCell:function(a,e){try{var b=this.getCellInfo(a),c,d,f=this.selectedTds.length,k=this.cellsRange;if(!e&&(f?!k.beginColIndex:!b.colIndex)||e&&(f?k.endColIndex==this.colsNum-1:b.rowIndex>this.colsNum-1))return null;c=e?f?k.beginRowIndex:1>b.rowIndex?0:b.rowIndex-1:f?k.beginRowIndex:b.rowIndex;
-d=e?f?k.endColIndex+1:b.colIndex:f?k.beginColIndex-1:1>b.colIndex?0:b.colIndex-1;return this.getCell(this.indexTable[c][d].rowIndex,this.indexTable[c][d].cellIndex)}catch(l){}},moveContent:function(a,e){if(!h.isEmptyBlock(e))if(h.isEmptyBlock(a))a.innerHTML=e.innerHTML;else{var b=a.lastChild;for(3!=b.nodeType&&v.$block[b.tagName]||a.appendChild(a.ownerDocument.createElement("br"));b=e.firstChild;)a.appendChild(b)}},mergeRight:function(a){var e=this.getCellInfo(a),b=this.indexTable[e.rowIndex][e.colIndex+
-e.colSpan],c=this.getCell(b.rowIndex,b.cellIndex);a.colSpan=e.colSpan+b.colSpan;a.removeAttribute("width");this.moveContent(a,c);this.deleteCell(c,b.rowIndex);this.update()},mergeDown:function(a){var e=this.getCellInfo(a),b=this.indexTable[e.rowIndex+e.rowSpan][e.colIndex],c=this.getCell(b.rowIndex,b.cellIndex);a.rowSpan=e.rowSpan+b.rowSpan;a.removeAttribute("height");this.moveContent(a,c);this.deleteCell(c,b.rowIndex);this.update()},mergeRange:function(){var a=this.cellsRange,e=this.getCell(a.beginRowIndex,
-this.indexTable[a.beginRowIndex][a.beginColIndex].cellIndex);if("TH"==e.tagName&&a.endRowIndex!==a.beginRowIndex)var b=this.indexTable,a=this.getCellInfo(e),e=this.getCell(1,b[1][a.colIndex].cellIndex),a=this.getCellsRange(e,this.getCell(b[this.rowsNum-1][a.colIndex].rowIndex,b[this.rowsNum-1][a.colIndex].cellIndex));for(var c=this.getCells(a),b=0,d;d=c[b++];)d!==e&&(this.moveContent(e,d),this.deleteCell(d));e.rowSpan=a.endRowIndex-a.beginRowIndex+1;1<e.rowSpan&&e.removeAttribute("height");e.colSpan=
-a.endColIndex-a.beginColIndex+1;1<e.colSpan&&e.removeAttribute("width");e.rowSpan==this.rowsNum&&1!=e.colSpan&&(e.colSpan=1);if(e.colSpan==this.colsNum&&1!=e.rowSpan){c=e.parentNode.rowIndex;if(this.table.deleteRow)for(b=c+1,c+=1,a=e.rowSpan;b<a;b++)this.table.deleteRow(c);else for(b=0,a=e.rowSpan-1;b<a;b++)d=this.table.rows[c+1],d.parentNode.removeChild(d);e.rowSpan=1}this.update()},insertRow:function(a,e){function b(a,b,c){0==a?(a=(c.nextSibling||c.previousSibling).cells[a],"TH"==a.tagName&&(a=
-b.ownerDocument.createElement("th"),a.appendChild(b.firstChild),c.insertBefore(a,b),d.remove(b))):"TH"==b.tagName&&(a=b.ownerDocument.createElement("td"),a.appendChild(b.firstChild),c.insertBefore(a,b),d.remove(b))}var c=this.colsNum,g=this.table.insertRow(a),f,k="string"==typeof e&&"TH"==e.toUpperCase();if(0==a||a==this.rowsNum)for(var l=0;l<c;l++)f=this.cloneCell(e,!0),this.setCellContent(f),f.getAttribute("vAlign")&&f.setAttribute("vAlign",f.getAttribute("vAlign")),g.appendChild(f),k||b(l,f,g);
-else for(var m=this.indexTable[a],l=0;l<c;l++){var n=m[l];n.rowIndex<a?(f=this.getCell(n.rowIndex,n.cellIndex),f.rowSpan=n.rowSpan+1):(f=this.cloneCell(e,!0),this.setCellContent(f),g.appendChild(f));k||b(l,f,g)}this.update();return g},deleteRow:function(a){for(var e=this.table.rows[a],b=this.indexTable[a],c=this.colsNum,g=0,f=0;f<c;){var k=b[f],l=this.getCell(k.rowIndex,k.cellIndex);if(1<l.rowSpan&&k.rowIndex==a){k=l.cloneNode(!0);k.rowSpan=l.rowSpan-1;k.innerHTML="";l.rowSpan=1;var m=a+1,n=this.table.rows[m],
-m=this.getPreviewMergedCellsNum(m,f)-g;m<f?(m=f-m-1,d.insertAfter(n.cells[m],k)):n.cells.length&&n.insertBefore(k,n.cells[0]);g+=1}f+=l.colSpan||1}a=[];g={};for(f=0;f<c;f++)l=b[f].rowIndex,k=b[f].cellIndex,n=l+"_"+k,g[n]||(g[n]=1,l=this.getCell(l,k),a.push(l));var h=[];p.each(a,function(a){1==a.rowSpan?a.parentNode.removeChild(a):h.push(a)});p.each(h,function(a){a.rowSpan--});e.parentNode.removeChild(e);this.update()},insertCol:function(a,e,b){function c(a,b,c){0==a?(a=b.nextSibling||b.previousSibling,
-"TH"==a.tagName&&(a=b.ownerDocument.createElement("th"),a.appendChild(b.firstChild),c.insertBefore(a,b),d.remove(b))):"TH"==b.tagName&&(a=b.ownerDocument.createElement("td"),a.appendChild(b.firstChild),c.insertBefore(a,b),d.remove(b))}var g=this.rowsNum,f=0,k,l,m=parseInt((this.table.offsetWidth-20*(this.colsNum+1)-(this.colsNum+1))/(this.colsNum+1),10),n="string"==typeof e&&"TH"==e.toUpperCase(),h;if(0==a||a==this.colsNum)for(;f<g;f++)k=this.table.rows[f],h=k.cells[0==a?a:k.cells.length],l=this.cloneCell(e,
-!0),this.setCellContent(l),l.setAttribute("vAlign",l.getAttribute("vAlign")),h&&l.setAttribute("width",h.getAttribute("width")),a?d.insertAfter(k.cells[k.cells.length-1],l):k.insertBefore(l,k.cells[0]),n||c(f,l,k);else for(;f<g;f++)h=this.indexTable[f][a],h.colIndex<a?(l=this.getCell(h.rowIndex,h.cellIndex),l.colSpan=h.colSpan+1):(k=this.table.rows[f],h=k.cells[h.cellIndex],l=this.cloneCell(e,!0),this.setCellContent(l),l.setAttribute("vAlign",l.getAttribute("vAlign")),h&&l.setAttribute("width",h.getAttribute("width")),
-h?k.insertBefore(l,h):k.appendChild(l)),n||c(f,l,k);this.update();this.updateWidth(m,b||{tdPadding:10,tdBorder:1})},updateWidth:function(a,e){var b=this.table,c=h.getWidth(b)-2*e.tdPadding-e.tdBorder+a;c<b.ownerDocument.body.offsetWidth?b.setAttribute("width",c):(b=d.getElementsByTagName(this.table,"td th"),p.each(b,function(b){b.setAttribute("width",a)}))},deleteCol:function(a){for(var e=this.indexTable,b=this.table.rows,c=this.table.getAttribute("width"),d=0,f=this.rowsNum,k={},l=0;l<f;){var h=
-e[l][a],n=h.rowIndex+"_"+h.colIndex;k[n]||(k[n]=1,n=this.getCell(h.rowIndex,h.cellIndex),d||(d=n&&parseInt(n.offsetWidth/n.colSpan,10).toFixed(0)),1<n.colSpan?n.colSpan--:b[l].deleteCell(h.cellIndex),l+=h.rowSpan||1)}this.table.setAttribute("width",c-d);this.update()},splitToCells:function(a){var d=this;a=this.splitToRows(a);p.each(a,function(a){d.splitToCols(a)})},splitToRows:function(a){var d=this.getCellInfo(a),b=d.rowIndex,c=d.colIndex,g=[];a.rowSpan=1;g.push(a);for(var f=b,k=b+d.rowSpan;f<k;f++)if(f!=
-b){var l=this.table.rows[f].insertCell(c-this.getPreviewMergedCellsNum(f,c));l.colSpan=d.colSpan;this.setCellContent(l);l.setAttribute("vAlign",a.getAttribute("vAlign"));l.setAttribute("align",a.getAttribute("align"));a.style.cssText&&(l.style.cssText=a.style.cssText);g.push(l)}this.update();return g},getPreviewMergedCellsNum:function(a,d){for(var b=this.indexTable[a],c=0,g=0;g<d;)var f=b[g].colSpan,c=c+(f-(b[g].rowIndex==a?1:0)),g=g+f;return c},splitToCols:function(a){var e=(a.offsetWidth/a.colSpan-
-22).toFixed(0),b=this.getCellInfo(a),c=b.rowIndex,g=b.colIndex,f=[];a.colSpan=1;a.setAttribute("width",e);f.push(a);for(var k=g,l=g+b.colSpan;k<l;k++)if(k!=g){var h=this.table.rows[c],n=h.insertCell(this.indexTable[c][k].cellIndex+1);n.rowSpan=b.rowSpan;this.setCellContent(n);n.setAttribute("vAlign",a.getAttribute("vAlign"));n.setAttribute("align",a.getAttribute("align"));n.setAttribute("width",e);a.style.cssText&&(n.style.cssText=a.style.cssText);if("TH"==a.tagName){var r=a.ownerDocument.createElement("th");
-r.appendChild(n.firstChild);r.setAttribute("vAlign",a.getAttribute("vAlign"));r.rowSpan=n.rowSpan;h.insertBefore(r,n);d.remove(n)}f.push(n)}this.update();return f},isLastCell:function(a,d,b){d=d||this.rowsNum;b=b||this.colsNum;a=this.getCellInfo(a);return a.rowIndex+a.rowSpan==d&&a.colIndex+a.colSpan==b},getLastCell:function(a){a=a||this.table.getElementsByTagName("td");this.getCellInfo(a[0]);var d=this,b=a[0],c=b.parentNode,g=0,f=0,k;p.each(a,function(a){a.parentNode==c&&(f+=a.colSpan||1);g+=a.rowSpan*
-a.colSpan||1});k=g/f;p.each(a,function(a){if(d.isLastCell(a,k,f))return b=a,!1});return b},selectRow:function(a){var d=this.indexTable[a];a=this.getCell(d[0].rowIndex,d[0].cellIndex);d=this.getCell(d[this.colsNum-1].rowIndex,d[this.colsNum-1].cellIndex);a=this.getCellsRange(a,d);this.setSelected(a)},selectTable:function(){var a=this.table.getElementsByTagName("td"),a=this.getCellsRange(a[0],a[a.length-1]);this.setSelected(a)},setBackground:function(a,d){if("string"===typeof d)p.each(a,function(a){a.style.backgroundColor=
-d});else if("object"===typeof d){d=p.extend({repeat:!0,colorList:["#ddd","#fff"]},d);for(var b=this.getCellInfo(a[0]).rowIndex,c=0,g=d.colorList,f=function(a,b,c){return a[b]?a[b]:c?a[b%a.length]:""},k=0,l;l=a[k++];){var h=this.getCellInfo(l);l.style.backgroundColor=f(g,b+c==h.rowIndex?c:++c,d.repeat)}}},removeBackground:function(a){p.each(a,function(a){a.style.backgroundColor=""})}}})();(function(){function h(c,e){var l=d.getElementsByTagName(c,"td th");p.each(l,function(a){a.removeAttribute("width")});
-c.setAttribute("width",a(e,!0,b.getDefaultValue(e,c)));var g=[];setTimeout(function(){p.each(l,function(a){1==a.colSpan&&g.push(a.offsetWidth)});p.each(l,function(a,b){1==a.colSpan&&a.setAttribute("width",g[b]+"")})},0)}function a(a,b,c){var e=a.body;return e.offsetWidth-(b?2*parseInt(d.getComputedStyle(e,"margin-left"),10):0)-2*c.tableBorder-(a.options.offsetWidth||0)}function e(a){if(a=c(a).cell){var b=g(a);return b.selectedTds.length?b.selectedTds:[a]}return[]}var b=UE.UETable,c=function(a){return b.getTableItemsByRange(a)},
-g=function(a){return b.getUETable(a)};UE.commands.inserttable={queryCommandState:function(){return c(this).table?-1:0},execCommand:function(a,c){c||(c=p.extend({},{numCols:this.options.defaultCols,numRows:this.options.defaultRows,tdvalign:this.options.tdvalign}));var e=this.selection.getRange().startContainer,e=d.findParent(e,function(a){return d.isBlockElm(a)},!0)||this.body,g=b.getDefaultValue(this,void 0),e=Math.floor(e.offsetWidth/c.numCols-2*g.tdPadding-g.tdBorder);!c.tdvalign&&(c.tdvalign=this.options.tdvalign);
-this.execCommand("inserthtml",function(a,b){for(var c=[],e=a.numRows,f=a.numCols,l=0;l<e;l++){c.push("<tr>");for(var k=0;k<f;k++)c.push('<td width="'+b+'"  vAlign="'+a.tdvalign+'" >'+(q.ie?d.fillChar:"<br/>")+"</td>");c.push("</tr>")}return"<table><tbody>"+c.join("")+"</tbody></table>"}(c,e))}};UE.commands.insertparagraphbeforetable={queryCommandState:function(){return c(this).cell?0:-1},execCommand:function(){var a=c(this).table;if(a){var b=this.document.createElement("p");b.innerHTML=q.ie?"&nbsp;":
-"<br />";a.parentNode.insertBefore(b,a);this.selection.getRange().setStart(b,0).setCursor()}}};UE.commands.deletetable={queryCommandState:function(){var a=this.selection.getRange();return d.findParentByTagName(a.startContainer,"table",!0)?0:-1},execCommand:function(a,b){var c=this.selection.getRange();if(b=b||d.findParentByTagName(c.startContainer,"table",!0)){var e=b.nextSibling;e||(e=d.createElement(this.document,"p",{innerHTML:q.ie?d.fillChar:"<br/>"}),b.parentNode.insertBefore(e,b));d.remove(b);
-c=this.selection.getRange();3==e.nodeType?c.setStartBefore(e):c.setStart(e,0);c.setCursor(!1,!0);this.fireEvent("tablehasdeleted")}}};UE.commands.cellalign={queryCommandState:function(){return e(this).length?0:-1},execCommand:function(a,b){var c=e(this);if(c.length)for(var d=0,g;g=c[d++];)g.setAttribute("align",b)}};UE.commands.cellvalign={queryCommandState:function(){return e(this).length?0:-1},execCommand:function(a,b){var c=e(this);if(c.length)for(var d=0,g;g=c[d++];)g.setAttribute("vAlign",b)}};
-UE.commands.insertcaption={queryCommandState:function(){var a=c(this).table;return a?0==a.getElementsByTagName("caption").length?1:-1:-1},execCommand:function(){var a=c(this).table;if(a){var b=this.document.createElement("caption");b.innerHTML=q.ie?d.fillChar:"<br/>";a.insertBefore(b,a.firstChild);this.selection.getRange().setStart(b,0).setCursor()}}};UE.commands.deletecaption={queryCommandState:function(){var a=this.selection.getRange();return(a=d.findParentByTagName(a.startContainer,"table"))?0==
-a.getElementsByTagName("caption").length?-1:1:-1},execCommand:function(){var a=this.selection.getRange();if(a=d.findParentByTagName(a.startContainer,"table"))d.remove(a.getElementsByTagName("caption")[0]),this.selection.getRange().setStart(a.rows[0].cells[0],0).setCursor()}};UE.commands.inserttitle={queryCommandState:function(){var a=c(this).table;return a?(a=a.rows[0],"th"!=a.cells[a.cells.length-1].tagName.toLowerCase()?0:-1):-1},execCommand:function(){var a=c(this).table;a&&g(a).insertRow(0,"th");
-a=a.getElementsByTagName("th")[0];this.selection.getRange().setStart(a,0).setCursor(!1,!0)}};UE.commands.deletetitle={queryCommandState:function(){var a=c(this).table;return a?(a=a.rows[0],"th"==a.cells[a.cells.length-1].tagName.toLowerCase()?0:-1):-1},execCommand:function(){var a=c(this).table;a&&d.remove(a.rows[0]);a=a.getElementsByTagName("td")[0];this.selection.getRange().setStart(a,0).setCursor(!1,!0)}};UE.commands.inserttitlecol={queryCommandState:function(){var a=c(this).table;return a?a.rows[a.rows.length-
-1].getElementsByTagName("th").length?-1:0:-1},execCommand:function(a){(a=c(this).table)&&g(a).insertCol(0,"th");h(a,this);a=a.getElementsByTagName("th")[0];this.selection.getRange().setStart(a,0).setCursor(!1,!0)}};UE.commands.deletetitlecol={queryCommandState:function(){var a=c(this).table;return a?a.rows[a.rows.length-1].getElementsByTagName("th").length?0:-1:-1},execCommand:function(){var a=c(this).table;if(a)for(var b=0;b<a.rows.length;b++)d.remove(a.rows[b].children[0]);h(a,this);a=a.getElementsByTagName("td")[0];
-this.selection.getRange().setStart(a,0).setCursor(!1,!0)}};UE.commands.mergeright={queryCommandState:function(a){var b=c(this);if(!b.cell)return-1;a=g(b.table);if(a.selectedTds.length)return-1;var b=a.getCellInfo(b.cell),d=b.colIndex+b.colSpan;if(d>=a.colsNum)return-1;a=a.indexTable[b.rowIndex][d];return a.rowIndex==b.rowIndex&&a.rowSpan==b.rowSpan?0:-1},execCommand:function(a){a=this.selection.getRange();var b=a.createBookmark(!0),d=c(this).cell;g(d).mergeRight(d);a.moveToBookmark(b).select()}};
-UE.commands.mergedown={queryCommandState:function(a){a=c(this);var b=a.cell;if(!b||"TH"==b.tagName)return-1;var d=g(a.table);if(d.selectedTds.length)return-1;var b=d.getCellInfo(a.cell),e=b.rowIndex+b.rowSpan;if(e>=d.rowsNum)return-1;d=d.indexTable[e][b.colIndex];return d.colIndex==b.colIndex&&d.colSpan==b.colSpan&&"TH"!==a.cell.tagName?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),d=c(this).cell;g(d).mergeDown(d);a.moveToBookmark(b).select()}};UE.commands.mergecells=
-{queryCommandState:function(){return b.getUETableBySelected(this)?0:-1},execCommand:function(){var a=b.getUETableBySelected(this);if(a&&a.selectedTds.length){var c=a.selectedTds[0];a.mergeRange();a=this.selection.getRange();d.isEmptyBlock(c)?a.setStart(c,0).collapse(!0):a.selectNodeContents(c);a.select()}}};UE.commands.insertrow={queryCommandState:function(){var a=c(this),b=a.cell;return b&&("TD"==b.tagName||"TH"==b.tagName&&a.tr!==a.table.rows[0])&&g(a.table).rowsNum<this.options.maxRowNum?0:-1},
-execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),d=c(this),e=d.cell,d=d.table,h=g(d),r=h.getCellInfo(e);if(h.selectedTds.length)for(var r=h.cellsRange,t=0,p=r.endRowIndex-r.beginRowIndex+1;t<p;t++)h.insertRow(r.beginRowIndex,e);else h.insertRow(r.rowIndex,e);a.moveToBookmark(b).select();"enabled"===d.getAttribute("interlaced")&&this.fireEvent("interlacetable",d)}};UE.commands.insertrownext={queryCommandState:function(){var a=c(this),b=a.cell;return b&&"TD"==b.tagName&&
-g(a.table).rowsNum<this.options.maxRowNum?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),d=c(this),e=d.cell,d=d.table,h=g(d),r=h.getCellInfo(e);if(h.selectedTds.length)for(var r=h.cellsRange,t=0,p=r.endRowIndex-r.beginRowIndex+1;t<p;t++)h.insertRow(r.endRowIndex+1,e);else h.insertRow(r.rowIndex+r.rowSpan,e);a.moveToBookmark(b).select();"enabled"===d.getAttribute("interlaced")&&this.fireEvent("interlacetable",d)}};UE.commands.deleterow={queryCommandState:function(){if(!c(this).cell)return-1},
-execCommand:function(){var a=c(this).cell,b=g(a),e=b.cellsRange,h=b.getCellInfo(a),n=b.getVSideCell(a),r=b.getVSideCell(a,!0),a=this.selection.getRange();if(p.isEmptyObject(e))b.deleteRow(h.rowIndex);else for(var t=e.beginRowIndex;t<e.endRowIndex+1;t++)b.deleteRow(e.beginRowIndex);t=b.table;t.getElementsByTagName("td").length?1==h.rowSpan||h.rowSpan==e.endRowIndex-e.beginRowIndex+1?(r||n)&&a.selectNodeContents(r||n).setCursor(!1,!0):(b=b.getCell(h.rowIndex,b.indexTable[h.rowIndex][h.colIndex].cellIndex))&&
-a.selectNodeContents(b).setCursor(!1,!0):(b=t.nextSibling,d.remove(t),b&&a.setStart(b,0).setCursor(!1,!0));"enabled"===t.getAttribute("interlaced")&&this.fireEvent("interlacetable",t)}};UE.commands.insertcol={queryCommandState:function(a){a=c(this);var b=a.cell;return b&&("TD"==b.tagName||"TH"==b.tagName&&b!==a.tr.cells[0])&&g(a.table).colsNum<this.options.maxColNum?0:-1},execCommand:function(a){var b=this.selection.getRange(),d=b.createBookmark(!0);if(-1!=this.queryCommandState(a)){a=c(this).cell;
-var e=g(a),h=e.getCellInfo(a);if(e.selectedTds.length)for(var h=e.cellsRange,r=0,t=h.endColIndex-h.beginColIndex+1;r<t;r++)e.insertCol(h.beginColIndex,a);else e.insertCol(h.colIndex,a);b.moveToBookmark(d).select(!0)}}};UE.commands.insertcolnext={queryCommandState:function(){var a=c(this);return a.cell&&g(a.table).colsNum<this.options.maxColNum?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),d=c(this).cell,e=g(d),h=e.getCellInfo(d);if(e.selectedTds.length)for(var h=
-e.cellsRange,r=0,t=h.endColIndex-h.beginColIndex+1;r<t;r++)e.insertCol(h.endColIndex+1,d);else e.insertCol(h.colIndex+h.colSpan,d);a.moveToBookmark(b).select()}};UE.commands.deletecol={queryCommandState:function(){if(!c(this).cell)return-1},execCommand:function(){var a=c(this).cell,b=g(a),e=b.cellsRange,h=b.getCellInfo(a),n=b.getHSideCell(a),r=b.getHSideCell(a,!0);if(p.isEmptyObject(e))b.deleteCol(h.colIndex);else for(h=e.beginColIndex;h<e.endColIndex+1;h++)b.deleteCol(e.beginColIndex);b=b.table;
-e=this.selection.getRange();b.getElementsByTagName("td").length?d.inDoc(a,this.document)?e.setStart(a,0).setCursor(!1,!0):r&&d.inDoc(r,this.document)?e.selectNodeContents(r).setCursor(!1,!0):n&&d.inDoc(n,this.document)&&e.selectNodeContents(n).setCursor(!0,!0):(a=b.nextSibling,d.remove(b),a&&e.setStart(a,0).setCursor(!1,!0))}};UE.commands.splittocells={queryCommandState:function(){var a=c(this),b=a.cell;return!b||0<g(a.table).selectedTds.length?-1:b&&(1<b.colSpan||1<b.rowSpan)?0:-1},execCommand:function(){var a=
-this.selection.getRange(),b=a.createBookmark(!0),d=c(this).cell;g(d).splitToCells(d);a.moveToBookmark(b).select()}};UE.commands.splittorows={queryCommandState:function(){var a=c(this),b=a.cell;return!b||0<g(a.table).selectedTds.length?-1:b&&1<b.rowSpan?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),d=c(this).cell;g(d).splitToRows(d);a.moveToBookmark(b).select()}};UE.commands.splittocols={queryCommandState:function(){var a=c(this),b=a.cell;return!b||0<g(a.table).selectedTds.length?
--1:b&&1<b.colSpan?0:-1},execCommand:function(){var a=this.selection.getRange(),b=a.createBookmark(!0),d=c(this).cell;g(d).splitToCols(d);a.moveToBookmark(b).select()}};UE.commands.adaptbytext=UE.commands.adaptbywindow={queryCommandState:function(){return c(this).table?0:-1},execCommand:function(a){var b=c(this).table;b&&("adaptbywindow"==a?h(b,this):(a=d.getElementsByTagName(b,"td th"),p.each(a,function(a){a.removeAttribute("width")}),b.removeAttribute("width")))}};UE.commands.averagedistributecol=
-{queryCommandState:function(){var a=b.getUETableBySelected(this);return a?a.isFullRow()||a.isFullCol()?0:-1:-1},execCommand:function(a){function c(){var a=h.table,d=0,e=0,f=b.getDefaultValue(g,a);if(h.isFullRow())d=a.offsetWidth,e=h.colsNum;else for(var a=h.cellsRange.endColIndex,l,k=h.cellsRange.beginColIndex;k<=a;)l=h.selectedTds[k],d+=l.offsetWidth,k+=l.colSpan,e+=1;return Math.ceil(d/e)-2*f.tdBorder-2*f.tdPadding}function e(a){p.each(d.getElementsByTagName(h.table,"th"),function(a){a.setAttribute("width",
-"")});var b=h.isFullRow()?d.getElementsByTagName(h.table,"td"):h.selectedTds;p.each(b,function(b){1==b.colSpan&&b.setAttribute("width",a)})}var g=this,h=b.getUETableBySelected(g);h&&h.selectedTds.length&&e(c())}};UE.commands.averagedistributerow={queryCommandState:function(){var a=b.getUETableBySelected(this);return!a||a.selectedTds&&/th/ig.test(a.selectedTds[0].tagName)?-1:a.isFullRow()||a.isFullCol()?0:-1},execCommand:function(a){function c(){var a,e=0;a=h.table;var f=b.getDefaultValue(g,a),l=parseInt(d.getComputedStyle(a.getElementsByTagName("td")[0],
-"padding-top"));if(h.isFullCol()){var e=d.getElementsByTagName(a,"caption"),k=d.getElementsByTagName(a,"th"),p,s;0<e.length&&(p=e[0].offsetHeight);0<k.length&&(s=k[0].offsetHeight);e=a.offsetHeight-(p||0)-(s||0);a=0==k.length?h.rowsNum:h.rowsNum-1}else{s=h.cellsRange.beginRowIndex;k=h.cellsRange.endRowIndex;p=0;for(a=d.getElementsByTagName(a,"tr");s<=k;s++)e+=a[s].offsetHeight,p+=1;a=p}return q.ie&&9>q.version?Math.ceil(e/a):Math.ceil(e/a)-2*f.tdBorder-2*l}function e(a){var b=h.isFullCol()?d.getElementsByTagName(h.table,
-"td"):h.selectedTds;p.each(b,function(b){1==b.rowSpan&&b.setAttribute("height",a)})}var g=this,h=b.getUETableBySelected(g);h&&h.selectedTds.length&&e(c())}};UE.commands.cellalignment={queryCommandState:function(){return c(this).table?0:-1},execCommand:function(a,c){var e=b.getUETableBySelected(this);e?p.each(e.selectedTds,function(a){d.setAttributes(a,c)}):(e=(e=this.selection.getStart())&&d.findParentByTagName(e,["td","th","caption"],!0),/caption/ig.test(e.tagName)?(e.style.textAlign=c.align,e.style.verticalAlign=
-c.vAlign):d.setAttributes(e,c),this.selection.getRange().setCursor(!0))},queryCommandValue:function(a){(a=c(this).cell)||(a=e(this)[0]);if(a){var b=UE.UETable.getUETable(a).selectedTds;!b.length&&(b=a);return UE.UETable.getTableCellAlignState(b)}return null}};UE.commands.tablealignment={queryCommandState:function(){return q.ie&&8>q.version?-1:c(this).table?0:-1},execCommand:function(a,b){var c=this.selection.getStart();(c=c&&d.findParentByTagName(c,["table"],!0))&&c.setAttribute("align",b)}};UE.commands.edittable=
-{queryCommandState:function(){return c(this).table?0:-1},execCommand:function(a,b){var c=this.selection.getRange();if(c=d.findParentByTagName(c.startContainer,"table"))c=d.getElementsByTagName(c,"td").concat(d.getElementsByTagName(c,"th"),d.getElementsByTagName(c,"caption")),p.each(c,function(a){a.style.borderColor=b})}};UE.commands.edittd={queryCommandState:function(){return c(this).table?0:-1},execCommand:function(a,c){var e=b.getUETableBySelected(this);if(e)p.each(e.selectedTds,function(a){a.style.backgroundColor=
-c});else if(e=(e=this.selection.getStart())&&d.findParentByTagName(e,["td","th","caption"],!0))e.style.backgroundColor=c}};UE.commands.settablebackground={queryCommandState:function(){return 1<e(this).length?0:-1},execCommand:function(a,b){var c;c=e(this);g(c[0]).setBackground(c,b)}};UE.commands.cleartablebackground={queryCommandState:function(){var a=e(this);if(!a.length)return-1;for(var b=0,c;c=a[b++];)if(""!==c.style.backgroundColor)return 0;return-1},execCommand:function(){var a=e(this);g(a[0]).removeBackground(a)}};
-UE.commands.interlacetable=UE.commands.uninterlacetable={queryCommandState:function(a){var b=c(this).table;if(!b)return-1;b=b.getAttribute("interlaced");return"interlacetable"==a?"enabled"===b?-1:0:b&&"disabled"!==b?0:-1},execCommand:function(a,b){var d=c(this).table;"interlacetable"==a?(d.setAttribute("interlaced","enabled"),this.fireEvent("interlacetable",d,b)):(d.setAttribute("interlaced","disabled"),this.fireEvent("uninterlacetable",d))}};UE.commands.setbordervisible={queryCommandState:function(a){return c(this).table?
-0:-1},execCommand:function(){var a=c(this).table;p.each(d.getElementsByTagName(a,"td"),function(a){a.style.borderWidth="1px";a.style.borderStyle="solid"})}}})();UE.plugins.table=function(){function h(b,c){a(b,"width",!0);a(b,"height",!0)}function a(a,b,c){a.style[b]&&(c&&a.setAttribute(b,parseInt(a.style[b],10)),a.style[b]="")}function e(a){if("TD"==a.tagName||"TH"==a.tagName)return a;var b;return(b=d.findParentByTagName(a,"td",!0)||d.findParentByTagName(a,"th",!0))?b:null}function b(a){var b=RegExp(d.fillChar,
-"g");if(0<a[q.ie?"innerText":"textContent"].replace(/^\s*$/,"").replace(b,"").length)return 0;for(var c in v.$isNotEmpty)if(a.getElementsByTagName(c).length)return 0;return 1}function c(a){return a.pageX||a.pageY?{x:a.pageX,y:a.pageY}:{x:a.clientX+y.document.body.scrollLeft-y.document.body.clientLeft,y:a.clientY+y.document.body.scrollTop-y.document.body.clientTop}}function g(a){if(!J())try{var b=e(a.target||a.srcElement),g;ea&&(y.body.style.webkitUserSelect="none",Math.abs($.x-a.clientX)>da||Math.abs($.y-
-a.clientY)>da)&&(s(),ea=!1,Q=0,D(a));if(T&&R)if(Q=0,y.body.style.webkitUserSelect="none",y.selection.getNative()[q.ie9below?"empty":"removeAllRanges"](),g=c(a),m(y,!0,T,g,b),"h"==T){var k=S.style,h;var b=R,r=M(b);if(r){var t=r.getSameEndPosCells(b,"x")[0],p=r.getSameStartPosXCells(b)[0],w=c(a).x,x=(t?d.getXY(t).x:d.getXY(r.table).x)+20,u=p?d.getXY(p).x+p.offsetWidth-20:y.body.offsetWidth+5||parseInt(d.getComputedStyle(y.body,"width"),10),x=x+V,u=u-V;h=w<x?x:w>u?u:w}else h=void 0;k.left=h+"px"}else{if("v"==
-T){var F=S.style,v;a:{try{var z=d.getXY(R).y,A=c(a).y;v=A<z?z:A;break a}catch(B){}v=void 0}F.top=v+"px"}}else if(b){if(!0!==y.fireEvent("excludetable",b)){g=c(a);var aa=n(b,g),fa=d.findParentByTagName(b,"table",!0);l(fa,b,a,!0)?!0!==y.fireEvent("excludetable",fa)&&(y.body.style.cursor="url("+y.options.cursorpath+"h.png),pointer"):l(fa,b,a)?!0!==y.fireEvent("excludetable",fa)&&(y.body.style.cursor="url("+y.options.cursorpath+"v.png),pointer"):(y.body.style.cursor="text",/\d/.test(aa)&&(aa=aa.replace(/\d/,
-""),b=M(b).getPreviewCell(b,"v"==aa)),m(y,b?!!aa:!1,b?aa:"",g,b))}}else f(!1,fa,y)}catch(L){}}function f(a,b,c){a?k(b,c):ga||setTimeout(function(){!ga&&G&&G.parentNode&&G.parentNode.removeChild(G)},2E3)}function k(a,b){function c(d,e){clearTimeout(g);g=setTimeout(function(){b.fireEvent("tableClicked",a,e)},300)}var e=d.getXY(a),f=a.ownerDocument;if(G&&G.parentNode)return G;G=f.createElement("div");G.contentEditable=!1;G.innerHTML="";G.style.cssText="width:15px;height:15px;background-image:url("+b.options.UEDITOR_HOME_URL+
-"dialogs/table/dragicon.png);position: absolute;cursor:move;top:"+(e.y-15)+"px;left:"+e.x+"px;";d.unSelectable(G);G.onmouseover=function(a){ga=!0};G.onmouseout=function(a){ga=!1};d.on(G,"click",function(a,b){c(b,this)});d.on(G,"dblclick",function(c,d){clearTimeout(g);var e=M(a),f=a.rows[0].cells[0],l=e.getLastCell(),l=e.getCellsRange(f,l);b.selection.getRange().setStart(f,0).setCursor(!1,!0);e.setSelected(l)});d.on(G,"dragstart",function(a,b){d.preventDefault(b)});var g;f.body.appendChild(G)}function l(a,
-b,e,f){e=c(e);b=n(b,e);return f?(f=(f=a.getElementsByTagName("caption")[0])?f.offsetHeight:0,"v1"==b&&8>e.y-d.getXY(a).y-f):"h1"==b&&8>e.x-d.getXY(a).x}function m(a,b,c,d,e){try{a.body.style.cursor="h"==c?"col-resize":"v"==c?"row-resize":"text",q.ie&&(!c||ba||C.getUETableBySelected(a)?Z(a):(N(a,a.document),ma(c,e))),la=b}catch(f){}}function n(a,b){var c=d.getXY(a);return c?c.x+a.offsetWidth-b.x<ha?"h":b.x-c.x<ha?"h1":c.y+a.offsetHeight-b.y<ha?"v":b.y-c.y<ha?"v1":"":""}function r(a,b){if(!J())if($=
-{x:b.clientX,y:b.clientY},2==b.button){var c=C.getUETableBySelected(y),e=!1;if(c){var f=X(y,b);p.each(c.selectedTds,function(a){a===f&&(e=!0)});e?(f=c.selectedTds[0],setTimeout(function(){y.selection.getRange().setStart(f,0).setCursor(!1,!0)},0)):(ia(d.getElementsByTagName(y.body,"th td")),c.clearSelected())}}else x(b)}function t(a){Q=0;a=a||y.window.event;var b=e(a.target||a.srcElement);if(b){var f;if(f=n(b,c(a)))if(Z(y),"h1"==f&&(f="h",l(d.findParentByTagName(b,"table"),b,a)?y.execCommand("adaptbywindow"):
-(b=M(b).getPreviewCell(b))&&y.selection.getRange().selectNodeContents(b).setCursor(!0,!0)),"h"==f){a=M(b);var g=z(b,a.table,!0),g=u(g,"left");a.width=a.offsetWidth;var k=[],h=[];p.each(g,function(a){k.push(a.offsetWidth)});p.each(g,function(a){a.removeAttribute("width")});window.setTimeout(function(){var a=!0;p.each(g,function(b,c){var d=b.offsetWidth;if(d>k[c])return a=!1;h.push(d)});var b=a?h:k;p.each(g,function(a,c){a.width=b[c]-A()})},0)}}}function x(a){ia(d.getElementsByTagName(y.body,"td th"));
-p.each(y.document.getElementsByTagName("table"),function(a){a.ueTable=null});if(K=X(y,a)){var b=d.findParentByTagName(K,"table",!0);(ut=M(b))&&ut.clearSelected();la?w(a):(y.document.body.style.webkitUserSelect="",ba=!0,y.addListener("mouseover",W))}}function w(a){q.ie&&(a=F(a));s();ea=!0;ja=setTimeout(function(){D(a)},na)}function u(a,b){for(var c=[],d=null,e=0,f=a.length;e<f;e++)(d=a[e][b])&&c.push(d);return c}function s(){ja&&clearTimeout(ja);ja=null}function F(a){var b="pageX pageY clientX clientY srcElement target".split(" "),
-c={};if(a)for(var d=0,e,f;e=b[d];d++)(f=a[e])&&(c[e]=f);return c}function D(a){ea=!1;K&&(a=Math.abs($.x-a.clientX)>=Math.abs($.y-a.clientY)?"h":"v",/\d/.test(a)&&(a=a.replace(/\d/,""),K=M(K).getPreviewCell(K,"v"==a)),Z(y),N(y,y.document),y.fireEvent("saveScene"),ma(a,K),ba=!0,T=a,R=K)}function L(a,b){if(!J()){s();ea=!1;if(la&&(Q=++Q%3,$={x:b.clientX,y:b.clientY},setTimeout(function(){0<Q&&Q--},na),2===Q)){Q=0;t(b);return}if(2!=b.button){var c=this.selection.getRange(),e=d.findParentByTagName(c.startContainer,
-"table",!0),f=d.findParentByTagName(c.endContainer,"table",!0);if(e||f)e===f?(e=d.findParentByTagName(c.startContainer,["td","th","caption"],!0),f=d.findParentByTagName(c.endContainer,["td","th","caption"],!0),e!==f&&this.selection.clearRange()):this.selection.clearRange();ba=!1;this.document.body.style.webkitUserSelect="";if(T&&R){this.selection.getNative()[q.ie9below?"empty":"removeAllRanges"]();Q=0;S=this.document.getElementById("ue_tableDragLine");c=d.getXY(R);e=d.getXY(S);switch(T){case "h":H(R,
-e.x-c.x);break;case "v":ca(R,e.y-c.y-R.offsetHeight)}T="";R=null;Z(this);this.fireEvent("saveScene")}else{if(K)(e=(c=M(K))?c.selectedTds[0]:null)?(c=new I.Range(this.document),d.isEmptyBlock(e)?c.setStart(e,0).setCursor(!1,!0):c.selectNodeContents(e).shrinkBoundary().setCursor(!1,!0)):(c=this.selection.getRange().shrinkBoundary(),c.collapsed||(e=d.findParentByTagName(c.startContainer,["td","th"],!0),f=d.findParentByTagName(c.endContainer,["td","th"],!0),(e&&!f||!e&&f||e&&f&&e!==f)&&c.setCursor(!1,
-!0))),K=null,this.removeListener("mouseover",W);else if((e=d.findParentByTagName(b.target||b.srcElement,"td",!0))||(e=d.findParentByTagName(b.target||b.srcElement,"th",!0)),e&&("TD"==e.tagName||"TH"==e.tagName)){if(!0===this.fireEvent("excludetable",e))return;c=new I.Range(this.document);c.setStart(e,0).setCursor(!1,!0)}this._selectionChange(250,b)}}}}function W(a,b){if(!J()){var c=b.target||b.srcElement;U=d.findParentByTagName(c,"td",!0)||d.findParentByTagName(c,"th",!0);if(K&&U&&("TD"==K.tagName&&
-"TD"==U.tagName||"TH"==K.tagName&&"TH"==U.tagName)&&d.findParentByTagName(K,"table")==d.findParentByTagName(U,"table"))if(c=M(U),K!=U){this.document.body.style.webkitUserSelect="none";this.selection.getNative()[q.ie9below?"empty":"removeAllRanges"]();var e=c.getCellsRange(K,U);c.setSelected(e)}else this.document.body.style.webkitUserSelect="",c.clearSelected();b.preventDefault?b.preventDefault():b.returnValue=!1}}function H(a,b){var c=M(a);if(c){var c=c.table,e=z(a,c);c.style.width="";c.removeAttribute("width");
-b=E(b,a,e);a.nextSibling?p.each(e,function(a){a.left.width=+a.left.width+b;a.right&&(a.right.width=+a.right.width-b)}):p.each(e,function(a){a.left.width-=-b})}}function J(){return"false"===y.body.contentEditable}function ca(a,b){if(!(10>Math.abs(b))){var c=M(a);if(c)for(var c=c.getSameEndPosCells(a,"y"),e=c[0]?c[0].offsetHeight:0,f=0,g;g=c[f++];){var l=b,k=e,h=parseInt(d.getComputedStyle(g,"line-height"),10),l=k+l,l=l<h?h:l;g.style.height&&(g.style.height="");1==g.rowSpan?g.setAttribute("height",
-l):g.removeAttribute&&g.removeAttribute("height")}}}function z(a,b,c){b||(b=d.findParentByTagName(a,"table"));if(!b)return null;d.getNodeIndex(a);b=b.rows;for(var e=0;a;)1===a.nodeType&&(e+=a.colSpan||1),a=a.previousSibling;a=null;var f=[];p.each(b,function(a){var b=0;p.each(a.cells,function(a){b+=a.colSpan||1;if(b===e)return f.push({left:a,right:a.nextSibling||null}),!1;if(b>e)return c&&f.push({left:a}),!1})});return f}function E(a,b,c){a-=A();if(0>a)return 0;a-=B(b);var e=0>a?"left":"right";a=Math.abs(a);
-p.each(c,function(b){(b=b[e])&&(a=Math.min(a,B(b)-V))});a=0>a?0:a;return"left"===e?-a:a}function B(a){var b=0,b=a.offsetWidth-A();if(!a.nextSibling){tab=d.findParentByTagName(a,"table",!1);if(void 0===tab.offsetVal){var c=a.previousSibling;tab.offsetVal=c?a.offsetWidth-c.offsetWidth===C.borderWidth?C.borderWidth:0:0}b-=tab.offsetVal}b=0>b?0:b;try{a.width=b}catch(e){}return b}function A(){if(void 0===C.tabcellSpace){var a=y.document.createElement("table"),b=y.document.createElement("tbody"),c=y.document.createElement("tr"),
-e=y.document.createElement("td"),d=null;e.style.cssText="border: 0;";e.width=1;c.appendChild(e);c.appendChild(d=e.cloneNode(!1));b.appendChild(c);a.appendChild(b);a.style.cssText="visibility: hidden;";y.body.appendChild(a);C.paddingSpace=e.offsetWidth-1;b=a.offsetWidth;e.style.cssText="";d.style.cssText="";C.borderWidth=(a.offsetWidth-b)/3;C.tabcellSpace=C.paddingSpace+C.borderWidth;y.body.removeChild(a)}A=function(){return C.tabcellSpace};return C.tabcellSpace}function N(a,b){ba||(S=a.document.createElement("div"),
-d.setAttributes(S,{id:"ue_tableDragLine",unselectable:"on",contenteditable:!1,onresizestart:"return false",ondragstart:"return false",onselectstart:"return false",style:"background-color:blue;position:absolute;padding:0;margin:0;background-image:none;border:0px none;opacity:0;filter:alpha(opacity=0)"}),a.body.appendChild(S))}function Z(a){if(!ba)for(var b;b=a.document.getElementById("ue_tableDragLine");)d.remove(b)}function ma(a,b){if(b){var c=d.findParentByTagName(b,"table"),e=c.getElementsByTagName("caption"),
-f=c.offsetWidth,g=c.offsetHeight-(0<e.length?e[0].offsetHeight:0),c=d.getXY(c),l=d.getXY(b);switch(a){case "h":e="height:"+g+"px;top:"+(c.y+(0<e.length?e[0].offsetHeight:0))+"px;left:"+(l.x+b.offsetWidth);S.style.cssText=e+"px;position: absolute;display:block;background-color:blue;width:1px;border:0; color:blue;opacity:.3;filter:alpha(opacity=30)";break;case "v":e="width:"+f+"px;left:"+c.x+"px;top:"+(l.y+b.offsetHeight),S.style.cssText=e+"px;overflow:hidden;position: absolute;display:block;background-color:blue;height:1px;border:0;color:blue;opacity:.2;filter:alpha(opacity=20)"}}}
-function O(a,b){for(var c=d.getElementsByTagName(a.body,"table"),e,f=0,g;g=c[f++];)e=d.getElementsByTagName(g,"td"),e[0]&&(b?(e=e[0].style.borderColor.replace(/\s/g,""),/(#ffffff)|(rgb\(255,255,255\))/ig.test(e)&&d.addClass(g,"noBorderTable")):d.removeClasses(g,"noBorderTable"))}function Y(a,b,c){var e=a.body;return e.offsetWidth-(b?2*parseInt(d.getComputedStyle(e,"margin-left"),10):0)-2*c.tableBorder-(a.options.offsetWidth||0)}function X(a,b){var e=d.findParentByTagName(b.target||b.srcElement,["td",
-"th"],!0),f=null;if(!e)return null;f=n(e,c(b));if(!e)return null;if("h1"===f&&e.previousSibling){var f=d.getXY(e),g=e.offsetWidth;Math.abs(f.x+g-b.clientX)>g/3&&(e=e.previousSibling)}else"v1"===f&&e.parentNode.previousSibling&&(f=d.getXY(e),g=e.offsetHeight,Math.abs(f.y+g-b.clientY)>g/3&&(e=e.parentNode.previousSibling.firstChild));return e&&!0!==a.fireEvent("excludetable",e)?e:null}var y=this,ja=null,V=5,ea=!1,ha=5,da=10,Q=0,$=null,na=360,C=UE.UETable,M=function(a){return C.getUETable(a)},ia=function(a){return C.removeSelectedClass(a)};
-y.ready(function(){var a=this,b=a.selection.getText;a.selection.getText=function(){var c=C.getUETableBySelected(a);if(c){var e="";p.each(c.selectedTds,function(a){e+=a[q.ie?"innerText":"textContent"]});return e}return b.call(a.selection)}});var K=null,U=null,T="",la=!1,G=null,ga=!1,S=null,R=null,ba=!1;y.setOpt({maxColNum:20,maxRowNum:100,defaultCols:5,defaultRows:5,tdvalign:"top",cursorpath:y.options.UEDITOR_HOME_URL+"themes/default/images/cursor_",tableDragable:!1,classList:["ue-table-interlace-color-single",
-"ue-table-interlace-color-double"]});y.getUETable=M;var ka={deletetable:1,inserttable:1,cellvalign:1,insertcaption:1,deletecaption:1,inserttitle:1,deletetitle:1,mergeright:1,mergedown:1,mergecells:1,insertrow:1,insertrownext:1,deleterow:1,insertcol:1,insertcolnext:1,deletecol:1,splittocells:1,splittorows:1,splittocols:1,adaptbytext:1,adaptbywindow:1,adaptbycustomer:1,insertparagraph:1,insertparagraphbeforetable:1,averagedistributecol:1,averagedistributerow:1};y.ready(function(){p.cssRule("table",
-".selectTdClass{background-color:#edf5fa !important}table.noBorderTable td,table.noBorderTable th,table.noBorderTable caption{border:1px dashed #ddd !important}table{margin-bottom:10px;border-collapse:collapse;display:table;}td,th{padding: 5px 10px;border: 1px solid #DDD;}caption{border:1px dashed #DDD;border-bottom:0;padding:3px;text-align:center;}th{border-top:1px solid #BBB;background-color:#F7F7F7;}table tr.firstRow th{border-top-width:2px;}.ue-table-interlace-color-single{ background-color: #fcfcfc; } .ue-table-interlace-color-double{ background-color: #f7faff; }td p{margin:0;padding:0;}",
-y.document);var a,c,k;y.addListener("keydown",function(e,f){var g=f.keyCode||f.which;if(8==g){var l=C.getUETableBySelected(this);l&&l.selectedTds.length&&(l.isFullCol()?this.execCommand("deletecol"):l.isFullRow()?this.execCommand("deleterow"):this.fireEvent("delcells"),d.preventDefault(f));var h=d.findParentByTagName(this.selection.getStart(),"caption",!0),n=this.selection.getRange();n.collapsed&&(h&&b(h))&&(this.fireEvent("saveScene"),l=h.parentNode,d.remove(h),l&&n.setStart(l.rows[0].cells[0],0).setCursor(!1,
-!0),this.fireEvent("saveScene"))}if(46==g&&(l=C.getUETableBySelected(this))){this.fireEvent("saveScene");for(h=0;n=l.selectedTds[h++];)d.fillNode(this.document,n);this.fireEvent("saveScene");d.preventDefault(f)}if(13==g){g=this.selection.getRange();if(h=d.findParentByTagName(g.startContainer,"caption",!0)){l=d.findParentByTagName(h,"table");g.collapsed?h&&g.setStart(l.rows[0].cells[0],0).setCursor(!1,!0):(g.deleteContents(),this.fireEvent("saveScene"));d.preventDefault(f);return}g.collapsed&&(l=d.findParentByTagName(g.startContainer,
-"table"))&&(n=l.rows[0].cells[0],h=d.findParentByTagName(this.selection.getStart(),["td","th"],!0),l=l.previousSibling,n===h&&(!l||1==l.nodeType&&"TABLE"==l.tagName)&&d.isStartInblock(g)&&(g=d.findParent(this.selection.getStart(),function(a){return d.isBlockElm(a)},!0))&&(/t(h|d)/i.test(g.tagName)||g===h.firstChild)&&(this.execCommand("insertparagraphbeforetable"),d.preventDefault(f)))}if((f.ctrlKey||f.metaKey)&&"67"==f.keyCode&&(a=null,l=C.getUETableBySelected(this)))for(g=l.selectedTds,c=l.isFullCol(),
-k=l.isFullRow(),a=[[l.cloneCell(g[0],null,!0)]],h=1;n=g[h];h++)n.parentNode!==g[h-1].parentNode?a.push([l.cloneCell(n,null,!0)]):a[a.length-1].push(l.cloneCell(n,null,!0))});y.addListener("tablehasdeleted",function(){m(this,!1,"",null);G&&d.remove(G)});y.addListener("beforepaste",function(e,f){var g=this,l=g.selection.getRange();if(d.findParentByTagName(l.startContainer,"caption",!0))l=g.document.createElement("div"),l.innerHTML=f.html,f.html=l[q.ie9below?"innerText":"textContent"];else{var n=C.getUETableBySelected(g);
-if(a){g.fireEvent("saveScene");var l=g.selection.getRange(),m=d.findParentByTagName(l.startContainer,["td","th"],!0),r,t;if(m){n=M(m);if(k){var w=n.getCellInfo(m).rowIndex;"TH"==m.tagName&&w++;for(var l=0,x;x=a[l++];){t=n.insertRow(w++,"td");for(var u=0,s;s=x[u];u++)(m=t.cells[u])||(m=t.insertCell(u)),m.innerHTML=s.innerHTML,s.getAttribute("width")&&m.setAttribute("width",s.getAttribute("width")),s.getAttribute("vAlign")&&m.setAttribute("vAlign",s.getAttribute("vAlign")),s.getAttribute("align")&&
-m.setAttribute("align",s.getAttribute("align")),s.style.cssText&&(m.style.cssText=s.style.cssText);for(u=0;(s=t.cells[u])&&x[u];u++)s.innerHTML=x[u].innerHTML,x[u].getAttribute("width")&&s.setAttribute("width",x[u].getAttribute("width")),x[u].getAttribute("vAlign")&&s.setAttribute("vAlign",x[u].getAttribute("vAlign")),x[u].getAttribute("align")&&s.setAttribute("align",x[u].getAttribute("align")),x[u].style.cssText&&(s.style.cssText=x[u].style.cssText)}}else{if(c){w=n.getCellInfo(m);u=m=0;for(x=a[0];s=
-x[u++];)m+=s.colSpan||1;g.__hasEnterExecCommand=!0;for(l=0;l<m;l++)g.execCommand("insertcol");g.__hasEnterExecCommand=!1;m=n.table.rows[0].cells[w.cellIndex];"TH"==m.tagName&&(m=n.table.rows[1].cells[w.cellIndex])}for(l=0;x=a[l++];){r=m;for(u=0;s=x[u++];)m?(m.innerHTML=s.innerHTML,s.getAttribute("width")&&m.setAttribute("width",s.getAttribute("width")),s.getAttribute("vAlign")&&m.setAttribute("vAlign",s.getAttribute("vAlign")),s.getAttribute("align")&&m.setAttribute("align",s.getAttribute("align")),
-s.style.cssText&&(m.style.cssText=s.style.cssText),t=m,m=m.nextSibling):(w=s.cloneNode(!0),d.removeAttributes(w,["class","rowSpan","colSpan"]),t.parentNode.appendChild(w));m=n.getNextCell(r,!0,!0);if(!a[l])break;m||(w=n.getCellInfo(r),n.table.insertRow(n.table.rows.length),n.update(),m=n.getVSideCell(r,!0))}}n.update()}else{n=g.document.createElement("table");for(l=0;x=a[l++];){t=n.insertRow(n.rows.length);for(u=0;s=x[u++];)w=C.cloneCell(s,null,!0),d.removeAttributes(w,["class"]),t.appendChild(w);
-2==u&&1<w.rowSpan&&(w.rowSpan=1)}l=C.getDefaultValue(g,void 0);l=g.body.offsetWidth-2*parseInt(d.getComputedStyle(g.body,"margin-left"),10)-2*l.tableBorder-(g.options.offsetWidth||0);g.execCommand("insertHTML","<table  "+(c&&k?'width="'+l+'"':"")+">"+n.innerHTML.replace(/>\s*</g,"><").replace(/\bth\b/gi,"td")+"</table>")}g.fireEvent("contentchange");g.fireEvent("saveScene");f.html="";return!0}l=g.document.createElement("div");l.innerHTML=f.html;x=l.getElementsByTagName("table");d.findParentByTagName(g.selection.getStart(),
-"table")?(p.each(x,function(a){d.remove(a)}),d.findParentByTagName(g.selection.getStart(),"caption",!0)&&(l.innerHTML=l[q.ie?"innerText":"textContent"])):p.each(x,function(a){h(a,!0);d.removeAttributes(a,["style","border"]);p.each(d.getElementsByTagName(a,"td"),function(a){b(a)&&d.fillNode(g.document,a);h(a,!0)})});f.html=l.innerHTML}});y.addListener("afterpaste",function(){p.each(d.getElementsByTagName(y.body,"table"),function(a){if(a.offsetWidth>y.body.offsetWidth){var b=C.getDefaultValue(y,a);
-a.style.width=y.body.offsetWidth-2*parseInt(d.getComputedStyle(y.body,"margin-left"),10)-2*b.tableBorder-(y.options.offsetWidth||0)+"px"}})});y.addListener("blur",function(){a=null});var n;y.addListener("keydown",function(){clearTimeout(n);n=setTimeout(function(){var a=y.selection.getRange();if(a=d.findParentByTagName(a.startContainer,["th","td"],!0)){var b=a.parentNode.parentNode.parentNode;b.offsetWidth>b.getAttribute("width")&&(a.style.wordBreak="break-all")}},100)});y.addListener("selectionchange",
-function(){m(y,!1,"",null)});y.addListener("contentchange",function(){var a=this;Z(a);if(!C.getUETableBySelected(a)){var b=a.selection.getRange().startContainer,b=d.findParentByTagName(b,["td","th"],!0);p.each(d.getElementsByTagName(a.document,"table"),function(b){!0!==a.fireEvent("excludetable",b)&&(b.ueTable=new C(b),b.onmouseover=function(){a.fireEvent("tablemouseover",b)},b.onmousemove=function(){a.fireEvent("tablemousemove",b);a.options.tableDragable&&f(!0,this,a);p.defer(function(){a.fireEvent("contentchange",
-50)},!0)},b.onmouseout=function(){a.fireEvent("tablemouseout",b);m(a,!1,"",null);Z(a)},b.onclick=function(b){b=a.window.event||b;var c=e(b.target||b.srcElement);if(c){var d=M(c),f=d.table,g=d.getCellInfo(c),k=a.selection.getRange();l(f,c,b,!0)?(f=d.getCell(d.indexTable[d.rowsNum-1][g.colIndex].rowIndex,d.indexTable[d.rowsNum-1][g.colIndex].cellIndex),b.shiftKey&&d.selectedTds.length?d.selectedTds[0]!==f?(b=d.getCellsRange(d.selectedTds[0],f),d.setSelected(b)):k&&k.selectNodeContents(f).select():c!==
-f?(b=d.getCellsRange(c,f),d.setSelected(b)):k&&k.selectNodeContents(f).select()):l(f,c,b)&&(f=d.getCell(d.indexTable[g.rowIndex][d.colsNum-1].rowIndex,d.indexTable[g.rowIndex][d.colsNum-1].cellIndex),b.shiftKey&&d.selectedTds.length?d.selectedTds[0]!==f?(b=d.getCellsRange(d.selectedTds[0],f),d.setSelected(b)):k&&k.selectNodeContents(f).select():c!==f?(b=d.getCellsRange(c,f),d.setSelected(b)):k&&k.selectNodeContents(f).select())}})});O(a,!0)}});d.on(y.document,"mousemove",g);d.on(y.document,"mouseout",
-function(a){"TABLE"==(a.target||a.srcElement).tagName&&m(y,!1,"",null)});y.addListener("interlacetable",function(a,b,c){if(b){a=b.rows;b=a.length;for(var e=0;e<b;e++)a[e].className=(c||this.options.classList)[e]?(c||this.options.classList)[e]:(c||this.options.classList)[e%(c||this.options.classList).length]}});y.addListener("uninterlacetable",function(a,b){if(b)for(var c=b.rows,e=this.options.classList,f=c.length,g=0;g<f;g++)d.removeClasses(c[g],e)});y.addListener("mousedown",r);y.addListener("mouseup",
-L);d.on(y.body,"dragstart",function(a){L.call(y,"dragstart",a)});var t=0;y.addListener("mousedown",function(){t=0});y.addListener("tabkeydown",function(){var a=this.selection.getRange(),c=a.getCommonAncestor(!0,!0),e=d.findParentByTagName(c,"table");if(e){if(d.findParentByTagName(c,"caption",!0))(c=d.getElementsByTagName(e,"th td"))&&c.length&&a.setStart(c[0],0).setCursor(!1,!0);else{var c=d.findParentByTagName(c,["td","th"],!0),f=M(c);t=1<c.rowSpan?t:f.getCellInfo(c).rowIndex;(c=f.getTabNextCell(c,
-t))?b(c)?a.setStart(c,0).setCursor(!1,!0):a.selectNodeContents(c).select():(y.fireEvent("saveScene"),y.__hasEnterExecCommand=!0,this.execCommand("insertrownext"),y.__hasEnterExecCommand=!1,a=this.selection.getRange(),a.setStart(e.rows[e.rows.length-1].cells[0],0).setCursor(),y.fireEvent("saveScene"))}return!0}});q.ie&&y.addListener("selectionchange",function(){m(this,!1,"",null)});y.addListener("keydown",function(a,b){var c=b.keyCode||b.which;if(8!=c&&46!=c){(c=!b.ctrlKey&&!b.metaKey&&!b.shiftKey&&
-!b.altKey)&&ia(d.getElementsByTagName(this.body,"td"));var e=C.getUETableBySelected(this);e&&c&&e.clearSelected()}});y.addListener("beforegetcontent",function(){O(this,!1);q.ie&&p.each(this.document.getElementsByTagName("caption"),function(a){d.isEmptyNode(a)&&(a.innerHTML="&nbsp;")})});y.addListener("aftergetcontent",function(){O(this,!0)});y.addListener("getAllHtml",function(){ia(y.document.getElementsByTagName("td"))});y.addListener("fullscreenchanged",function(a,b){if(!b){var c=this.body.offsetWidth/
-document.body.offsetWidth,e=d.getElementsByTagName(this.body,"table");p.each(e,function(a){if(a.offsetWidth<y.body.offsetWidth)return!1;var b=d.getElementsByTagName(a,"td"),e=[];p.each(b,function(a){e.push(a.offsetWidth)});for(var f=0,g;g=b[f];f++)g.setAttribute("width",Math.floor(e[f]*c));a.setAttribute("width",Math.floor(Y(y,!0,C.getDefaultValue(y,void 0))))})}});var w=y.execCommand;y.execCommand=function(a,c){a=a.toLowerCase();var e=C.getUETableBySelected(this),f=new I.Range(this.document),g=this.commands[a]||
-UE.commands[a],l;if(g){if(!e||ka[a]||g.notNeedUndo||this.__hasEnterExecCommand)l=w.apply(this,arguments);else{this.__hasEnterExecCommand=!0;this.fireEvent("beforeexeccommand",a);for(var e=e.selectedTds,k=g=-2,h,n,m=0,r;r=e[m];m++)if(b(r)?f.setStart(r,0).setCursor(!1,!0):f.selectNode(r).select(!0),n=this.queryCommandState(a),h=this.queryCommandValue(a),-1!=n){if(g!==n||k!==h)this._ignoreContentChange=!0,l=w.apply(this,arguments),this._ignoreContentChange=!1;g=this.queryCommandState(a);k=this.queryCommandValue(a);
-d.isEmptyBlock(r)&&d.fillNode(this.document,r)}f.setStart(e[0],0).shrinkBoundary(!0).setCursor(!1,!0);this.fireEvent("contentchange");this.fireEvent("afterexeccommand",a);this.__hasEnterExecCommand=!1;this._selectionChange()}return l}}})};UE.UETable.prototype.sortTable=function(d,a){var e=this.table,b=e.rows,c=[],g="TH"===b[0].cells[0].tagName,f=0;if(this.selectedTds.length){for(var k=this.cellsRange,l=k.endRowIndex+1,m=k.beginRowIndex;m<l;m++)c[m]=b[m];c.splice(0,k.beginRowIndex);f=k.endRowIndex+
-1===this.rowsNum?0:k.endRowIndex+1}else for(m=0,l=b.length;m<l;m++)c[m]=b[m];var n={reversecurrent:function(a,b){return 1},orderbyasc:function(a,b){return(a.innerText||a.textContent).localeCompare(b.innerText||b.textContent)},reversebyasc:function(a,b){return b.innerHTML.localeCompare(a.innerHTML)},orderbynum:function(a,b){var c=a[q.ie?"innerText":"textContent"].match(/\d+/),e=b[q.ie?"innerText":"textContent"].match(/\d+/);c&&(c=+c[0]);e&&(e=+e[0]);return(c||0)-(e||0)},reversebynum:function(a,b){var c=
-a[q.ie?"innerText":"textContent"].match(/\d+/),e=b[q.ie?"innerText":"textContent"].match(/\d+/);c&&(c=+c[0]);e&&(e=+e[0]);return(e||0)-(c||0)}};e.setAttribute("data-sort-type",a&&"string"===typeof a&&n[a]?a:"");g&&c.splice(0,1);c=p.sort(c,function(b,c){return a&&"function"===typeof a?a.call(this,b.cells[d],c.cells[d]):a&&"number"===typeof a?1:a&&"string"===typeof a&&n[a]?n[a].call(this,b.cells[d],c.cells[d]):n.orderbyasc.call(this,b.cells[d],c.cells[d])});g=e.ownerDocument.createDocumentFragment();
-m=0;for(l=c.length;m<l;m++)g.appendChild(c[m]);e=e.getElementsByTagName("tbody")[0];f?e.insertBefore(g,b[f-k.endRowIndex+k.beginRowIndex-1]):e.appendChild(g)};UE.plugins.tablesort=function(){var h=this,a=UE.UETable;h.ready(function(){p.cssRule("tablesort","table.sortEnabled tr.firstRow th,table.sortEnabled tr.firstRow td{padding-right:20px;background-repeat: no-repeat;background-position: center right;   background-image:url("+h.options.themePath+h.options.theme+"/images/sortable.png);}",h.document);
-h.addListener("afterexeccommand",function(a,b){"mergeright"!=b&&"mergedown"!=b&&"mergecells"!=b||this.execCommand("disablesort")})});UE.commands.sorttable={queryCommandState:function(){var e=a.getTableItemsByRange(this);if(!e.cell)return-1;for(var e=e.table.getElementsByTagName("td"),b=0,c;c=e[b++];)if(1!=c.rowSpan||1!=c.colSpan)return-1;return 0},execCommand:function(e,b){var c=this.selection.getRange(),d=c.createBookmark(!0),f=a.getTableItemsByRange(this),k=f.cell,f=a.getUETable(f.table),k=f.getCellInfo(k);
-f.sortTable(k.cellIndex,b);c.moveToBookmark(d);try{c.select()}catch(l){}}};UE.commands.enablesort=UE.commands.disablesort={queryCommandState:function(e){var b=a.getTableItemsByRange(this).table;if(b&&"enablesort"==e)for(var c=d.getElementsByTagName(b,"th td"),g=0;g<c.length;g++)if(1<c[g].getAttribute("colspan")||1<c[g].getAttribute("rowspan"))return-1;return b?"enablesort"==e^"sortEnabled"!=b.getAttribute("data-sort")?-1:0:-1},execCommand:function(e){var b=a.getTableItemsByRange(this).table;b.setAttribute("data-sort",
-"enablesort"==e?"sortEnabled":"sortDisabled");"enablesort"==e?d.addClass(b,"sortEnabled"):d.removeClasses(b,"sortEnabled")}}};UE.plugins.contextmenu=function(){var h=this,a=h.getLang("contextMenu"),e,b=h.options.contextMenu||[{label:a.selectall,cmdName:"selectall"},{label:a.cleardoc,cmdName:"cleardoc",exec:function(){confirm(a.confirmclear)&&this.execCommand("cleardoc")}},"-",{label:a.unlink,cmdName:"unlink"},"-",{group:a.paragraph,icon:"justifyjustify",subMenu:[{label:a.justifyleft,cmdName:"justify",
-value:"left"},{label:a.justifyright,cmdName:"justify",value:"right"},{label:a.justifycenter,cmdName:"justify",value:"center"},{label:a.justifyjustify,cmdName:"justify",value:"justify"}]},"-",{group:a.table,icon:"table",subMenu:[{label:a.inserttable,cmdName:"inserttable"},{label:a.deletetable,cmdName:"deletetable"},"-",{label:a.deleterow,cmdName:"deleterow"},{label:a.deletecol,cmdName:"deletecol"},{label:a.insertcol,cmdName:"insertcol"},{label:a.insertcolnext,cmdName:"insertcolnext"},{label:a.insertrow,
-cmdName:"insertrow"},{label:a.insertrownext,cmdName:"insertrownext"},"-",{label:a.insertcaption,cmdName:"insertcaption"},{label:a.deletecaption,cmdName:"deletecaption"},{label:a.inserttitle,cmdName:"inserttitle"},{label:a.deletetitle,cmdName:"deletetitle"},{label:a.inserttitlecol,cmdName:"inserttitlecol"},{label:a.deletetitlecol,cmdName:"deletetitlecol"},"-",{label:a.mergecells,cmdName:"mergecells"},{label:a.mergeright,cmdName:"mergeright"},{label:a.mergedown,cmdName:"mergedown"},"-",{label:a.splittorows,
-cmdName:"splittorows"},{label:a.splittocols,cmdName:"splittocols"},{label:a.splittocells,cmdName:"splittocells"},"-",{label:a.averageDiseRow,cmdName:"averagedistributerow"},{label:a.averageDisCol,cmdName:"averagedistributecol"},"-",{label:a.edittd,cmdName:"edittd",exec:function(){UE.ui.edittd&&new UE.ui.edittd(this);this.getDialog("edittd").open()}},{label:a.edittable,cmdName:"edittable",exec:function(){UE.ui.edittable&&new UE.ui.edittable(this);this.getDialog("edittable").open()}},{label:a.setbordervisible,
-cmdName:"setbordervisible"}]},{group:a.tablesort,icon:"tablesort",subMenu:[{label:a.enablesort,cmdName:"enablesort"},{label:a.disablesort,cmdName:"disablesort"},"-",{label:a.reversecurrent,cmdName:"sorttable",value:"reversecurrent"},{label:a.orderbyasc,cmdName:"sorttable",value:"orderbyasc"},{label:a.reversebyasc,cmdName:"sorttable",value:"reversebyasc"},{label:a.orderbynum,cmdName:"sorttable",value:"orderbynum"},{label:a.reversebynum,cmdName:"sorttable",value:"reversebynum"}]},{group:a.borderbk,
-icon:"borderBack",subMenu:[{label:a.setcolor,cmdName:"interlacetable",exec:function(){this.execCommand("interlacetable")}},{label:a.unsetcolor,cmdName:"uninterlacetable",exec:function(){this.execCommand("uninterlacetable")}},{label:a.setbackground,cmdName:"settablebackground",exec:function(){this.execCommand("settablebackground",{repeat:!0,colorList:["#bbb","#ccc"]})}},{label:a.unsetbackground,cmdName:"cleartablebackground",exec:function(){this.execCommand("cleartablebackground")}},{label:a.redandblue,
-cmdName:"settablebackground",exec:function(){this.execCommand("settablebackground",{repeat:!0,colorList:["red","blue"]})}},{label:a.threecolorgradient,cmdName:"settablebackground",exec:function(){this.execCommand("settablebackground",{repeat:!0,colorList:["#aaa","#bbb","#ccc"]})}}]},{group:a.aligntd,icon:"aligntd",subMenu:[{cmdName:"cellalignment",value:{align:"left",vAlign:"top"}},{cmdName:"cellalignment",value:{align:"center",vAlign:"top"}},{cmdName:"cellalignment",value:{align:"right",vAlign:"top"}},
-{cmdName:"cellalignment",value:{align:"left",vAlign:"middle"}},{cmdName:"cellalignment",value:{align:"center",vAlign:"middle"}},{cmdName:"cellalignment",value:{align:"right",vAlign:"middle"}},{cmdName:"cellalignment",value:{align:"left",vAlign:"bottom"}},{cmdName:"cellalignment",value:{align:"center",vAlign:"bottom"}},{cmdName:"cellalignment",value:{align:"right",vAlign:"bottom"}}]},{group:a.aligntable,icon:"aligntable",subMenu:[{cmdName:"tablealignment",className:"left",label:a.tableleft,value:"left"},
-{cmdName:"tablealignment",className:"center",label:a.tablecenter,value:"center"},{cmdName:"tablealignment",className:"right",label:a.tableright,value:"right"}]},"-",{label:a.insertparagraphbefore,cmdName:"insertparagraph",value:!0},{label:a.insertparagraphafter,cmdName:"insertparagraph"},{label:a.copy,cmdName:"copy",exec:function(){alert(a.copymsg)},query:function(){return 0}},{label:a.paste,cmdName:"paste",exec:function(){alert(a.pastemsg)},query:function(){return 0}}];if(b.length){var c=UE.ui.uiUtils;
-h.addListener("contextmenu",function(g,f){var k=c.getViewportOffsetByEvent(f);h.fireEvent("beforeselectionchange");e&&e.destroy();for(var l=0,m,n=[];m=b[l];l++){var r;(function(b){if("-"==b)(r=n[n.length-1])&&"-"!==r&&n.push("-");else if(b.hasOwnProperty("group")){for(var c=0,e,d=[];e=b.subMenu[c];c++)(function(a){"-"==a?(r=d[d.length-1])&&"-"!==r?d.push("-"):d.splice(d.length-1):(h.commands[a.cmdName]||UE.commands[a.cmdName]||a.query)&&-1<(a.query?a.query():h.queryCommandState(a.cmdName))&&d.push({label:a.label||
-h.getLang("contextMenu."+a.cmdName+(a.value||""))||"",className:"edui-for-"+a.cmdName+(a.className?" edui-for-"+a.cmdName+"-"+a.className:""),onclick:a.exec?function(){a.exec.call(h)}:function(){h.execCommand(a.cmdName,a.value)}})})(e);d.length&&n.push({label:function(){switch(b.icon){case "table":return h.getLang("contextMenu.table");case "justifyjustify":return h.getLang("contextMenu.paragraph");case "aligntd":return h.getLang("contextMenu.aligntd");case "aligntable":return h.getLang("contextMenu.aligntable");
-case "tablesort":return a.tablesort;case "borderBack":return a.borderbk;default:return""}}(),className:"edui-for-"+b.icon,subMenu:{items:d,editor:h}})}else(h.commands[b.cmdName]||UE.commands[b.cmdName]||b.query)&&-1<(b.query?b.query.call(h):h.queryCommandState(b.cmdName))&&n.push({label:b.label||h.getLang("contextMenu."+b.cmdName),className:"edui-for-"+(b.icon?b.icon:b.cmdName+(b.value||"")),onclick:b.exec?function(){b.exec.call(h)}:function(){h.execCommand(b.cmdName,b.value)}})})(m)}"-"==n[n.length-
-1]&&n.pop();e=new UE.ui.Menu({items:n,className:"edui-contextmenu",editor:h});e.render();e.showAt(k);h.fireEvent("aftershowcontextmenu",e);d.preventDefault(f);if(q.ie){var t;try{t=h.selection.getNative().createRange()}catch(p){return}t.item&&(new I.Range(h.document)).selectNode(t.item(0)).select(!0,!0)}})}};UE.plugins.shortcutmenu=function(){var h,a=this.options.shortcutMenu||[];a.length&&(this.addListener("contextmenu mouseup",function(e,b){var c=this,g={type:e,target:b.target||b.srcElement,screenX:b.screenX,
-screenY:b.screenY,clientX:b.clientX,clientY:b.clientY};setTimeout(function(){if(!1===c.selection.getRange().collapsed||"contextmenu"==e)h||(h=new s.editor.ui.ShortCutMenu({editor:c,items:a,theme:c.options.theme,className:"edui-shortcutmenu"}),h.render(),c.fireEvent("afterrendershortcutmenu",h)),h.show(g,!!UE.plugins.contextmenu)});if("contextmenu"==e&&(d.preventDefault(b),q.ie9below)){var f;try{f=c.selection.getNative().createRange()}catch(k){return}f.item&&(new I.Range(c.document)).selectNode(f.item(0)).select(!0,
-!0)}}),this.addListener("keydown",function(a){"keydown"==a&&h&&!h.isHidden&&h.hide()}))};UE.plugins.basestyle=function(){var h={bold:["strong","b"],italic:["em","i"],subscript:["sub"],superscript:["sup"]},a=this;a.addshortcutkey({Bold:"ctrl+66",Italic:"ctrl+73",Underline:"ctrl+85"});a.addInputRule(function(a){p.each(a.getNodesByTagName("b i"),function(a){switch(a.tagName){case "b":a.tagName="strong";break;case "i":a.tagName="em"}})});for(var e in h)(function(b,c){a.commands[b]={execCommand:function(b){var e=
-a.selection.getRange(),k=d.filterNodeList(this.selection.getStartElementPath(),c);if(e.collapsed){if(k)b=a.document.createTextNode(""),e.insertNode(b).removeInlineStyle(c),e.setStartBefore(b),d.remove(b);else{k=e.document.createElement(c[0]);if("superscript"==b||"subscript"==b)b=a.document.createTextNode(""),e.insertNode(b).removeInlineStyle(["sub","sup"]).setStartBefore(b).collapse(!0);e.insertNode(k).setStart(k,0)}e.collapse(!0)}else{if("superscript"==b||"subscript"==b)k&&k.tagName.toLowerCase()==
-b||e.removeInlineStyle(["sub","sup"]);k?e.removeInlineStyle(c):e.applyInlineStyle(c[0])}e.select()},queryCommandState:function(){return d.filterNodeList(this.selection.getStartElementPath(),c)?1:0}}})(e,h[e])};UE.plugins.elementpath=function(){var d,a,e=this;e.setOpt("elementPathEnabled",!0);e.options.elementPathEnabled&&(e.commands.elementpath={execCommand:function(b,c){var g=a[c],f=e.selection.getRange();d=1*c;f.selectNode(g).select()},queryCommandValue:function(){var b=[].concat(this.selection.getStartElementPath()).reverse(),
-c=[];a=b;for(var e=0,f;f=b[e];e++)if(3!=f.nodeType){var k=f.tagName.toLowerCase();"img"==k&&f.getAttribute("anchorname")&&(k="anchor");c[e]=k;if(d==e){d=-1;break}}return c}})};UE.plugins.formatmatch=function(){function h(g,f){if(q.webkit)var k="IMG"==f.target.tagName?f.target:null;a.undoManger&&a.undoManger.save();var l=a.selection.getRange(),k=k||l.getClosedNode();if(b&&k&&"IMG"==k.tagName)k.style.cssText+=";float:"+(b.style.cssFloat||b.style.styleFloat||"none")+";display:"+(b.style.display||"inline"),
-b=null;else if(!b){if(l.collapsed){var m=a.document.createTextNode("match");l.insertNode(m).select()}a.__hasEnterExecCommand=!0;l=a.options.removeFormatAttributes;a.options.removeFormatAttributes="";a.execCommand("removeformat");a.options.removeFormatAttributes=l;a.__hasEnterExecCommand=!1;l=a.selection.getRange();e.length&&(k=l,m&&k.selectNode(m),k.applyInlineStyle(e[e.length-1].tagName,null,e));m&&l.setStartBefore(m).collapse(!0);l.select();m&&d.remove(m)}a.undoManger&&a.undoManger.save();a.removeListener("mouseup",
-h);c=0}var a=this,e=[],b,c=0;a.addListener("reset",function(){e=[];c=0});a.commands.formatmatch={execCommand:function(g){if(c)c=0,e=[],a.removeListener("mouseup",h);else{g=a.selection.getRange();b=g.getClosedNode();if(!b||"IMG"!=b.tagName){g.collapse(!0).shrinkBoundary();e=d.findParents(g.startContainer,!0,function(a){return!d.isBlockElm(a)&&1==a.nodeType});g=0;for(var f;f=e[g];g++)if("A"==f.tagName){e.splice(g,1);break}}a.addListener("mouseup",h);c=1}},queryCommandState:function(){return c},notNeedUndo:1}};
-UE.plugin.register("searchreplace",function(){function h(a,b,e){var k=0;a=a.firstChild;for(var l=0;a;){if(3==a.nodeType){if(l=a.nodeValue.replace(/(^[\t\r\n]+)|([\t\r\n]+$)/,"").length,k+=l,k>=b)return{node:a,index:l-(k-b)}}else if(!v.$empty[a.tagName]&&(l=a[q.ie?"innerText":"textContent"].replace(/(^[\t\r\n]+)|([\t\r\n]+$)/,"").length,k+=l,k>=b&&(l=h(a,l-(k-b),e))))return l;a=d.getNextDomNode(a)}}function a(a,b){var f=a.selection.getRange(),k,l=b.searchStr,m=a.document.createElement("span");m.innerHTML=
-"$$ueditor_searchreplace_key$$";if(!f.collapsed){f.select();var n=a.selection.getText();if(RegExp("^"+b.searchStr+"$",b.casesensitive?"":"i").test(n)){if(void 0!=b.replaceStr)return e(f,b.replaceStr),f.select(),!0;f.collapse(-1==b.dir)}}f.insertNode(m);f.enlargeToBlockElm(!0);k=f.startContainer;n=k[q.ie?"innerText":"textContent"].indexOf("$$ueditor_searchreplace_key$$");f.setStartBefore(m);d.remove(m);a:{var m=k,r;k=b.all||1==b.dir?"getNextDomNode":"getPreDomNode";d.isBody(m)&&(m=m.firstChild);for(;m;){r=
-3==m.nodeType?m.nodeValue:m[q.ie?"innerText":"textContent"];b:{var t=b,p=n,w=t.searchStr;-1==t.dir&&(r=r.split("").reverse().join(""),w=w.split("").reverse().join(""),p=r.length-p);for(var w=RegExp(w,"g"+(t.casesensitive?"":"i")),u=void 0;u=w.exec(r);)if(u.index>=p){r=-1==t.dir?r.length-u.index-t.searchStr.length:u.index;break b}r=-1}if(-1!=r){n={node:m,index:r};break a}(m=d[k](m))&&(n=-1==b.dir?(3==m.nodeType?m.nodeValue:m[q.ie?"innerText":"textContent"]).length:0)}n=void 0}if(n)return m=h(n.node,
-n.index,l),l=h(n.node,n.index+l.length,l),f.setStart(m.node,m.index).setEnd(l.node,l.index),void 0!==b.replaceStr&&e(f,b.replaceStr),f.select(),!0;f.setCursor()}function e(a,e){b.fireEvent("saveScene");e=b.document.createTextNode(e);a.deleteContents().insertNode(e);b.fireEvent("saveScene")}var b=this;return{commands:{searchreplace:{execCommand:function(c,e){p.extend(e,{all:!1,casesensitive:!1,dir:1},!0);var d=0;if(e.all){var k=b.selection.getRange(),l=b.body.firstChild;l&&1==l.nodeType?k.setStart(l,
-0):3==l.nodeType&&k.setStartBefore(l);for(k.collapse(!0).select(!0);a(this,e);)d++}else a(this,e)&&d++;return d},notNeedUndo:1}}}});UE.plugins.customstyle=function(){var h=this;h.setOpt({customstyle:[{tag:"h1",name:"tc",style:"font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:center;margin:0 0 20px 0;"},{tag:"h1",name:"tl",style:"font-size:32px;font-weight:bold;border-bottom:#ccc 2px solid;padding:0 4px 0 0;text-align:left;margin:0 0 10px 0;"},{tag:"span",name:"im",
-style:"font-size:16px;font-style:italic;font-weight:bold;line-height:18px;"},{tag:"span",name:"hi",style:"font-size:16px;font-style:italic;font-weight:bold;color:rgb(51, 153, 204);line-height:18px;"}]});h.commands.customstyle={execCommand:function(a,e){var b=e.tag,c=d.findParent(this.selection.getStart(),function(a){return a.getAttribute("label")},!0),g,f,k={};for(g in e)void 0!==e[g]&&(k[g]=e[g]);delete k.tag;if(c&&c.getAttribute("label")==e.label){g=this.selection.getRange();f=g.createBookmark();
-if(g.collapsed)if(v.$block[c.tagName]){var l=this.document.createElement("p");d.moveChild(c,l);c.parentNode.insertBefore(l,c);d.remove(c)}else d.remove(c,!0);else{c=d.getCommonAncestor(f.start,f.end);k=d.getElementsByTagName(c,b);RegExp(b,"i").test(c.tagName)&&k.push(c);for(var h=0,n;n=k[h++];)if(n.getAttribute("label")==e.label){var l=d.getPosition(n,f.start),r=d.getPosition(n,f.end);(l&d.POSITION_FOLLOWING||l&d.POSITION_CONTAINS)&&(r&d.POSITION_PRECEDING||r&d.POSITION_CONTAINS)&&v.$block[b]&&(l=
-this.document.createElement("p"),d.moveChild(n,l),n.parentNode.insertBefore(l,n));d.remove(n,!0)}(c=d.findParent(c,function(a){return a.getAttribute("label")==e.label},!0))&&d.remove(c,!0)}g.moveToBookmark(f).select()}else v.$block[b]?(this.execCommand("paragraph",b,k,"customstyle"),g=this.selection.getRange(),g.collapsed||(g.collapse(),c=d.findParent(this.selection.getStart(),function(a){return a.getAttribute("label")==e.label},!0),b=this.document.createElement("p"),d.insertAfter(c,b),d.fillNode(this.document,
-b),g.setStart(b,0).setCursor())):(g=this.selection.getRange(),g.collapsed?(c=this.document.createElement(b),d.setAttributes(c,k),g.insertNode(c).setStart(c,0).setCursor()):(f=g.createBookmark(),g.applyInlineStyle(b,k).moveToBookmark(f).select()))},queryCommandValue:function(){var a=d.filterNodeList(this.selection.getStartElementPath(),function(a){return a.getAttribute("label")});return a?a.getAttribute("label"):""}};h.addListener("keyup",function(a,e){var b=e.keyCode||e.which;if(32==b||13==b)if(b=
-h.selection.getRange(),b.collapsed){var c=d.findParent(h.selection.getStart(),function(a){return a.getAttribute("label")},!0);if(c&&v.$block[c.tagName]&&d.isEmptyNode(c)){var g=h.document.createElement("p");d.insertAfter(c,g);d.fillNode(h.document,g);d.remove(c);b.setStart(g,0).setCursor()}}})};UE.plugins.catchremoteimage=function(){function h(b,d){var l=b.join(g),h={timeout:6E4,onsuccess:d.success,onerror:d.error};h[a.options.catchFieldName]=l;e.request(c,h)}if(!1!==this.options.catchRemoteImageEnable){var a=
-this;this.setOpt({localDomain:["127.0.0.1","localhost","img.baidu.com"],separater:"ue_separate_ue",catchFieldName:"upfile",catchRemoteImageEnable:!0});var e=UE.ajax,b=a.options.localDomain,c=a.options.catcherUrl,g=a.options.separater;a.addListener("afterpaste",function(){a.fireEvent("catchRemoteImage")});a.addListener("catchRemoteImage",function(){for(var c=[],e=d.getElementsByTagName(a.document,"img"),l=function(a,b){for(var c=0,e;e=b[c++];)if(-1!==a.indexOf(e))return!0;return!1},m=0,n;n=e[m++];)n.getAttribute("word_img")||
-(n=n.getAttribute("_src")||n.src||"",/^(https?|ftp):/i.test(n)&&!l(n,b)&&c.push(n));c.length&&h(c,{success:function(b){try{var c=eval("("+b.responseText+")")}catch(f){return}b=c.srcUrl.split(g);for(var c=c.url.split(g),l=0,h;h=e[l++];)for(var n=h.getAttribute("_src")||h.src||"",m=0,p;p=b[m++];){var q=c[m-1];if(n==p&&"error"!=q){n=a.options.catcherPath+q;d.setAttributes(h,{src:n,_src:n});break}}a.fireEvent("catchremotesuccess")},error:function(){a.fireEvent("catchremoteerror")}})})}};UE.plugins.snapscreen=
-function(){var d,a;this.setOpt({snapscreenServerPort:location.port,snapscreenImgAlign:"",snapscreenHost:location.hostname});this.commands.snapscreen={execCommand:function(){var e=this,b=e.getLang("snapScreen_plugin");if(!a){var c=e.container;d=c.ownerDocument||c.document;a=d.createElement("object");try{a.type="application/x-pluginbaidusnap"}catch(g){return}a.style.cssText="position:absolute;left:-9999px;";a.setAttribute("width","0");a.setAttribute("height","0");c.appendChild(a)}var f=e.options,c=
-function(a){try{a=eval("("+a+")")}catch(c){alert(b.callBackErrorMsg);return}"SUCCESS"!=a.state?alert(a.state):e.execCommand("insertimage",{src:f.snapscreenPath+a.url,floatStyle:f.snapscreenImgAlign,_src:f.snapscreenPath+a.url})};try{var k=f.snapscreenServerPort+"";f.snapscreenServerUrl=f.snapscreenServerUrl.split(f.snapscreenHost);f.snapscreenServerUrl=f.snapscreenServerUrl[1]||f.snapscreenServerUrl[0];0===f.snapscreenServerUrl.indexOf(":"+k)&&(f.snapscreenServerUrl=f.snapscreenServerUrl.substring(k.length+
-1));var l=a.saveSnapshot(f.snapscreenHost,f.snapscreenServerUrl,k);c(l)}catch(m){e.ui._dialogs.snapscreenDialog.open()}}}};UE.commands.insertparagraph={execCommand:function(h,a){for(var e=this.selection.getRange(),b=e.startContainer,c;b&&!d.isBody(b);)c=b,b=b.parentNode;c&&(b=this.document.createElement("p"),a?c.parentNode.insertBefore(b,c):c.parentNode.insertBefore(b,c.nextSibling),d.fillNode(this.document,b),e.setStart(b,0).setCursor(!1,!0))}};UE.plugin.register("webapp",function(){function d(e,
-b){return b?'<iframe class="edui-faked-webapp" title="'+e.title+'" '+(e.align&&!e.cssfloat?'align="'+e.align+'"':"")+(e.cssfloat?'style="float:'+e.cssfloat+'"':"")+'width="'+e.width+'" height="'+e.height+'"  scrolling="no" frameborder="0" src="'+e.url+'" logo_url = "'+e.logo+'"></iframe>':'<img title="'+e.title+'" width="'+e.width+'" height="'+e.height+'" src="'+a.options.UEDITOR_HOME_URL+'themes/default/images/spacer.gif" _logo_url="'+e.logo+'" style="background:url('+e.logo+') no-repeat center center; border:1px solid gray;" class="edui-faked-webapp" _url="'+
-e.url+'" '+(e.align&&!e.cssfloat?'align="'+e.align+'"':"")+(e.cssfloat?'style="float:'+e.cssfloat+'"':"")+"/>"}var a=this;return{outputRule:function(a){p.each(a.getNodesByTagName("img"),function(a){var c;"edui-faked-webapp"==a.getAttr("class")&&(c=d({title:a.getAttr("title"),width:a.getAttr("width"),height:a.getAttr("height"),align:a.getAttr("align"),cssfloat:a.getStyle("float"),url:a.getAttr("_url"),logo:a.getAttr("_logo_url")},!0),c=UE.uNode.createElement(c),a.parentNode.replaceChild(c,a))})},inputRule:function(a){p.each(a.getNodesByTagName("iframe"),
-function(a){if("edui-faked-webapp"==a.getAttr("class")){var c=UE.uNode.createElement(d({title:a.getAttr("title"),width:a.getAttr("width"),height:a.getAttr("height"),align:a.getAttr("align"),cssfloat:a.getStyle("float"),url:a.getAttr("src"),logo:a.getAttr("logo_url")}));a.parentNode.replaceChild(c,a)}})},commands:{webapp:{execCommand:function(a,b){var c=d(p.extend(b,{align:"none"}),!1);this.execCommand("inserthtml",c)},queryCommandState:function(){var a=this.selection.getRange().getClosedNode();return a&&
-"edui-faked-webapp"==a.className?1:0}}}}});UE.plugins.template=function(){UE.commands.template={execCommand:function(d,a){a.html&&this.execCommand("inserthtml",a.html)}};this.addListener("click",function(h,a){var e=a.target||a.srcElement,b=this.selection.getRange();(e=d.findParent(e,function(a){if(a.className&&d.hasClass(a,"ue_t"))return a},!0))&&b.selectNode(e).shrinkBoundary().select()});this.addListener("keydown",function(h,a){var e=this.selection.getRange();e.collapsed||(a.ctrlKey||a.metaKey||
-a.shiftKey||a.altKey)||(e=d.findParent(e.startContainer,function(a){if(a.className&&d.hasClass(a,"ue_t"))return a},!0))&&d.removeClasses(e,["ue_t"])})};UE.plugin.register("music",function(){function d(e,b,c,g,f,k){return k?'<embed type="application/x-shockwave-flash" class="edui-faked-music" pluginspage="http://www.macromedia.com/go/getflashplayer" src="'+e+'" width="'+b+'" height="'+c+'" '+(g&&!f?'align="'+g+'"':"")+(f?'style="float:'+f+'"':"")+' wmode="transparent" play="true" loop="false" menu="false" allowscriptaccess="never" allowfullscreen="true" >':
-"<img "+(g&&!f?'align="'+g+'"':"")+(f?'style="float:'+f+'"':"")+' width="'+b+'" height="'+c+'" _url="'+e+'" class="edui-faked-music" src="'+a.options.langPath+a.options.lang+'/images/music.png" />'}var a=this;return{outputRule:function(a){p.each(a.getNodesByTagName("img"),function(a){var c;if("edui-faked-music"==a.getAttr("class")){c=a.getStyle("float");var e=a.getAttr("align");c=d(a.getAttr("_url"),a.getAttr("width"),a.getAttr("height"),e,c,!0);c=UE.uNode.createElement(c);a.parentNode.replaceChild(c,
-a)}})},inputRule:function(a){p.each(a.getNodesByTagName("embed"),function(a){if("edui-faked-music"==a.getAttr("class")){var c=a.getStyle("float"),e=a.getAttr("align");html=d(a.getAttr("src"),a.getAttr("width"),a.getAttr("height"),e,c,!1);c=UE.uNode.createElement(html);a.parentNode.replaceChild(c,a)}})},commands:{music:{execCommand:function(a,b){var c=d(b.url,b.width||400,b.height||95,"none",!1);this.execCommand("inserthtml",c)},queryCommandState:function(){var a=this.selection.getRange().getClosedNode();
-return a&&"edui-faked-music"==a.className?1:0}}}}});UE.plugin.register("autoupload",function(){var h=this,a=function(a,b){var c=new FormData;c.append(b.options.imageFieldName||"upfile",a,a.name||"blob."+a.type.substr(6));c.append("type","ajax");var d=new XMLHttpRequest;d.open("post",h.options.imageUrl,!0);d.setRequestHeader("X-Requested-With","XMLHttpRequest");d.addEventListener("load",function(a){try{var c=(new Function("return "+a.target.response))(),e=h.options.imagePath+c.url;b.execCommand("insertimage",
-{src:e,_src:e})}catch(d){}});d.send(c)};return{bindEvents:{ready:function(e){window.FormData&&window.FileReader&&(d.on(h.body,"paste drop",function(b){var c=!1,e;if(e="paste"==b.type?b.clipboardData&&b.clipboardData.items&&1==b.clipboardData.items.length&&/^image\//.test(b.clipboardData.items[0].type)?b.clipboardData.items:null:b.dataTransfer&&b.dataTransfer.files?b.dataTransfer.files:null){for(var d=e.length,k;d--;)k=e[d],k.getAsFile&&(k=k.getAsFile()),k&&(0<k.size&&/image\/\w+/i.test(k.type))&&
-(a(k,h),c=!0);c&&b.preventDefault()}}),d.on(h.body,"dragover",function(a){"Files"==a.dataTransfer.types[0]&&a.preventDefault()}))}}}});UE.plugin.register("autosave",function(){function d(f){var k=null;new Date-e<b||(f.hasContents()?(e=new Date,f._saveFlag=null,k=a.body.innerHTML,!1!==f.fireEvent("beforeautosave",{content:k})&&(g.saveLocalData(c,k),f.fireEvent("afterautosave",{content:k}))):c&&g.removeItem(c))}var a=this,e=new Date,b=20,c=null,g=UE.LocalStorage=function(){function a(){var b=document.createElement("div");
-b.style.display="none";if(!b.addBehavior)return null;b.addBehavior("#default#userdata");return{getItem:function(a){var e=null;try{document.body.appendChild(b),b.load(c),e=b.getAttribute(a),document.body.removeChild(b)}catch(d){}return e},setItem:function(a,e){document.body.appendChild(b);b.setAttribute(a,e);b.save(c);document.body.removeChild(b)},removeItem:function(a){document.body.appendChild(b);b.removeAttribute(a);b.save(c);document.body.removeChild(b)}}}var b=window.localStorage||a()||null,c=
-"localStorage";return{saveLocalData:function(a,c){return b&&c?(b.setItem(a,c),!0):!1},getLocalData:function(a){return b?b.getItem(a):null},removeItem:function(a){b&&b.removeItem(a)}}}();return{defaultOptions:{saveInterval:500},bindEvents:{ready:function(){var b=null,b=a.key?a.key+"-drafts-data":(a.container.parentNode.id||"ue-common")+"-drafts-data";c=(location.protocol+location.host+location.pathname).replace(/[.:\/]/g,"_")+b},contentchange:function(){c&&(a._saveFlag&&window.clearTimeout(a._saveFlag),
-0<a.options.saveInterval?a._saveFlag=window.setTimeout(function(){d(a)},a.options.saveInterval):d(a))}},commands:{clearlocaldata:{execCommand:function(a,b){c&&g.getLocalData(c)&&g.removeItem(c)},notNeedUndo:!0,ignoreContentChange:!0},getlocaldata:{execCommand:function(a,b){return c?g.getLocalData(c)||"":""},notNeedUndo:!0,ignoreContentChange:!0},drafts:{execCommand:function(b,e){c&&(a.body.innerHTML=g.getLocalData(c)||"<p>"+(q.ie?"&nbsp;":"<br/>")+"</p>",a.focus(!0))},queryCommandState:function(){return c?
-null===g.getLocalData(c)?-1:0:-1},notNeedUndo:!0,ignoreContentChange:!0}}}});UE.plugin.register("charts",function(){function h(a){var b=null,c=0;if(2>a.rows.length||2>a.rows[0].cells.length)return!1;for(var b=a.rows[0].cells,c=b.length,d=0,f;f=b[d];d++)if("th"!==f.tagName.toLowerCase())return!1;for(d=1;b=a.rows[d];d++){if(b.cells.length!=c||"th"!==b.cells[0].tagName.toLowerCase())return!1;for(var k=1;f=b.cells[k];k++)if(f=p.trim(f.innerText||f.textContent||""),f=f.replace(RegExp(UE.dom.domUtils.fillChar,
-"g"),"").replace(/^\s+|\s+$/g,""),!/^\d*\.?\d+$/.test(f))return!1}return!0}var a=this;return{bindEvents:{chartserror:function(){}},commands:{charts:{execCommand:function(e,b){var c=d.findParentByTagName(this.selection.getRange().startContainer,"table",!0),g=[],f={};if(!c)return!1;if(!h(c))return a.fireEvent("chartserror"),!1;f.title=b.title||"";f.subTitle=b.subTitle||"";f.xTitle=b.xTitle||"";f.yTitle=b.yTitle||"";f.suffix=b.suffix||"";f.tip=b.tip||"";f.dataFormat=b.tableDataFormat||"";f.chartType=
-b.chartType||0;for(var k in f)f.hasOwnProperty(k)&&g.push(k+":"+f[k]);c.setAttribute("data-chart",g.join(";"));d.addClass(c,"edui-charts-table")},queryCommandState:function(a,b){var c=d.findParentByTagName(this.selection.getRange().startContainer,"table",!0);return c&&h(c)?0:-1}}},inputRule:function(a){p.each(a.getNodesByTagName("table"),function(a){void 0!==a.getAttr("data-chart")&&a.setAttr("style")})},outputRule:function(a){p.each(a.getNodesByTagName("table"),function(a){void 0!==a.getAttr("data-chart")&&
-a.setAttr("style","display: none;")})}}});UE.plugin.register("section",function(){function h(a){this.tag="";this.level=-1;this.parentSection=this.previousSection=this.nextSection=this.dom=null;this.startAddress=[];this.endAddress=[];this.children=[]}function a(a){var b=new h;return p.extend(b,a)}function e(a,b){for(var e=b,d=0;d<a.length;d++){if(!e.childNodes)return null;e=e.childNodes[a[d]]}return e}var b=this;return{bindMultiEvents:{type:"aftersetcontent afterscencerestore",handler:function(){b.fireEvent("updateSections")}},
-bindEvents:{ready:function(){b.fireEvent("updateSections");d.on(b.body,"drop paste",function(){b.fireEvent("updateSections")})},afterexeccommand:function(a,e){"paragraph"==e&&b.fireEvent("updateSections")},keyup:function(a,b){if(!0!=this.selection.getRange().collapsed)this.fireEvent("updateSections");else{var e=b.keyCode||b.which;13!=e&&8!=e&&46!=e||this.fireEvent("updateSections")}}},commands:{getsections:{execCommand:function(b,e){function d(b,c){for(var e,l=null,g,q=b.childNodes,s=0,v=q.length;s<
-v;s++){g=q[s];a:{e=g;for(var L=0;L<k.length;L++)if(k[L](e)){e=L;break a}e=-1}if(0<=e){l=h.selection.getRange().selectNode(g).createAddress(!0).startAddress;l=a({tag:g.tagName,title:g.innerText||g.textContent||"",level:e,dom:g,startAddress:p.clone(l,[]),endAddress:p.clone(l,[]),children:[]});n.nextSection=l;for(g=l.previousSection=n;e<=g.level;)g=g.parentSection;l.parentSection=g;g.children.push(l);l=n=l}else 1===g.nodeType&&d(g,c),l&&l.endAddress[l.endAddress.length-1]++}}for(var k=e||"h1 h2 h3 h4 h5 h6".split(" "),
-l=0;l<k.length;l++)"string"==typeof k[l]?k[l]=function(a){return function(b){return b.tagName==a.toUpperCase()}}(k[l]):"function"!=typeof k[l]&&(k[l]=function(a){return null});var h=this,n=l=a({level:-1,title:"root"});d(h.body,l);return l},notNeedUndo:!0},movesection:{execCommand:function(a,b,f,k){if(b&&f&&-1!=f.level){f=k?f.endAddress:f.startAddress;a=e(f,this.body);var l;if(!(l=!f)&&!(l=!a)){l=b.startAddress;for(var h=!1,n=!1,r=0;r<l.length&&!(r>=f.length);r++)if(f[r]>l[r]){h=!0;break}else if(f[r]<
-l[r])break;for(r=0;r<b.endAddress.length&&!(r>=f.length);r++)if(f[r]<l[r]){n=!0;break}else if(f[r]>l[r])break;l=h&&n}if(!l){f=e(b.startAddress,this.body);b=e(b.endAddress,this.body);if(k)for(k=b;k&&!(d.getPosition(f,k)&d.POSITION_FOLLOWING);){l=k.previousSibling;d.insertAfter(a,k);if(k==f)break;k=l}else for(k=f;k&&!(d.getPosition(k,b)&d.POSITION_FOLLOWING);){l=k.nextSibling;a.parentNode.insertBefore(k,a);if(k==b)break;k=l}this.fireEvent("updateSections")}}}},deletesection:{execCommand:function(a,
-b,e){function k(a){for(var b=l.body,c=0;c<a.length;c++){if(!b.childNodes)return null;b=b.childNodes[a[c]]}return b}var l=this;if(b){a=k(b.startAddress);b=k(b.endAddress);if(e)d.remove(a);else for(;a&&d.inDoc(b,l.document)&&!(d.getPosition(a,b)&d.POSITION_FOLLOWING);)e=a.nextSibling,d.remove(a),a=e;l.fireEvent("updateSections")}}},selectsection:{execCommand:function(a,b){if(!b&&!b.dom)return!1;var e=this.selection.getRange(),d={startAddress:p.clone(b.startAddress,[]),endAddress:p.clone(b.endAddress,
-[])};d.endAddress[d.endAddress.length-1]++;e.moveToAddress(d).select().scrollToView();return!0},notNeedUndo:!0},scrolltosection:{execCommand:function(a,b){if(!b&&!b.dom)return!1;var e=this.selection.getRange(),d={startAddress:b.startAddress,endAddress:b.endAddress};d.endAddress[d.endAddress.length-1]++;e.moveToAddress(d).scrollToView();return!0},notNeedUndo:!0}}}});s=s||{};s.editor=s.editor||{};s.editor.ui={};(function(){function d(){var a=document.getElementById("edui_fixedlayer");g.setViewportOffset(a,
-{left:0,top:0})}var a=s.editor.browser,e=s.editor.dom.domUtils,b=window.$EDITORUI={},c=0,g=s.editor.ui.uiUtils={uid:function(a){return a?a.ID$EDITORUI||(a.ID$EDITORUI=++c):++c},hook:function(a,b){var c;a&&a._callbacks?c=a:(c=function(){var b;a&&(b=a.apply(this,arguments));for(var e=c._callbacks,d=e.length;d--;){var g=e[d].apply(this,arguments);void 0===b&&(b=g)}return b},c._callbacks=[]);c._callbacks.push(b);return c},createElementByHtml:function(a){var b=document.createElement("div");b.innerHTML=
-a;b=b.firstChild;b.parentNode.removeChild(b);return b},getViewportElement:function(){return a.ie&&a.quirks?document.body:document.documentElement},getClientRect:function(a){var b;try{b=a.getBoundingClientRect()}catch(c){b={left:0,top:0,height:0,width:0}}for(var d={left:Math.round(b.left),top:Math.round(b.top),height:Math.round(b.bottom-b.top),width:Math.round(b.right-b.left)},g;(g=a.ownerDocument)!==document&&(a=e.getWindow(g).frameElement);)b=a.getBoundingClientRect(),d.left+=b.left,d.top+=b.top;
-d.bottom=d.top+d.height;d.right=d.left+d.width;return d},getViewportRect:function(){var a=g.getViewportElement(),b=(window.innerWidth||a.clientWidth)|0,a=(window.innerHeight||a.clientHeight)|0;return{left:0,top:0,height:a,width:b,bottom:a,right:b}},setViewportOffset:function(a,b){var c=g.getFixedLayer();a.parentNode===c?(a.style.left=b.left+"px",a.style.top=b.top+"px"):e.setViewportOffset(a,b)},getEventOffset:function(a){var b=g.getClientRect(a.target||a.srcElement);a=g.getViewportOffsetByEvent(a);
-return{left:a.left-b.left,top:a.top-b.top}},getViewportOffsetByEvent:function(a){var b=a.target||a.srcElement,c=e.getWindow(b).frameElement;a={left:a.clientX,top:a.clientY};c&&b.ownerDocument!==document&&(b=g.getClientRect(c),a.left+=b.left,a.top+=b.top);return a},setGlobal:function(a,c){b[a]=c;return'$EDITORUI["'+a+'"]'},unsetGlobal:function(a){delete b[a]},copyAttributes:function(b,c){for(var d=c.attributes,g=d.length;g--;){var h=d[g];"style"==h.nodeName||("class"==h.nodeName||a.ie&&!h.specified)||
-b.setAttribute(h.nodeName,h.nodeValue)}c.className&&e.addClass(b,c.className);c.style.cssText&&(b.style.cssText+=";"+c.style.cssText)},removeStyle:function(a,b){if(a.style.removeProperty)a.style.removeProperty(b);else if(a.style.removeAttribute)a.style.removeAttribute(b);else throw"";},contains:function(a,b){return a&&b&&(a===b?!1:a.contains?a.contains(b):a.compareDocumentPosition(b)&16)},startDrag:function(a,b,c){function e(a){b.ondragmove(a.clientX-d,a.clientY-g,a);a.stopPropagation?a.stopPropagation():
-a.cancelBubble=!0}c=c||document;var d=a.clientX,g=a.clientY;if(c.addEventListener){var h=function(a){c.removeEventListener("mousemove",e,!0);c.removeEventListener("mouseup",h,!0);window.removeEventListener("mouseup",h,!0);b.ondragstop()};c.addEventListener("mousemove",e,!0);c.addEventListener("mouseup",h,!0);window.addEventListener("mouseup",h,!0);a.preventDefault()}else{var p=a.srcElement;p.setCapture();var q=function(){p.releaseCapture();p.detachEvent("onmousemove",e);p.detachEvent("onmouseup",
-q);p.detachEvent("onlosecaptrue",q);b.ondragstop()};p.attachEvent("onmousemove",e);p.attachEvent("onmouseup",q);p.attachEvent("onlosecaptrue",q);a.returnValue=!1}b.ondragstart()},getFixedLayer:function(){var b=document.getElementById("edui_fixedlayer");null==b&&(b=document.createElement("div"),b.id="edui_fixedlayer",document.body.appendChild(b),a.ie&&8>=a.version?(b.style.position="absolute",e.on(window,"scroll",d),e.on(window,"resize",s.editor.utils.defer(d,0,!0)),setTimeout(d)):b.style.position=
-"fixed",b.style.left="0",b.style.top="0",b.style.width="0",b.style.height="0");return b},makeUnselectable:function(b){if(a.opera||a.ie&&9>a.version){if(b.unselectable="on",b.hasChildNodes())for(var c=0;c<b.childNodes.length;c++)1==b.childNodes[c].nodeType&&g.makeUnselectable(b.childNodes[c])}else void 0!==b.style.MozUserSelect?b.style.MozUserSelect="none":void 0!==b.style.WebkitUserSelect?b.style.WebkitUserSelect="none":void 0!==b.style.KhtmlUserSelect&&(b.style.KhtmlUserSelect="none")}}})();(function(){var h=
-s.editor.utils,a=s.editor.ui.uiUtils,e=s.editor.EventBase,b=s.editor.ui.UIBase=function(){};b.prototype={className:"",uiName:"",initOptions:function(b){for(var e in b)this[e]=b[e];this.id=this.id||"edui"+a.uid()},initUIBase:function(){this._globalKey=h.unhtml(a.setGlobal(this.id,this))},render:function(b){for(var e=this.renderHtml(),e=a.createElementByHtml(e),f=d.getElementsByTagName(e,"*"),k="edui-"+(this.theme||this.editor.options.theme),l=document.getElementById("edui_fixedlayer"),h=0,n;n=f[h++];)d.addClass(n,
-k);d.addClass(e,k);l&&(l.className="",d.addClass(l,k));f=this.getDom();null!=f?(f.parentNode.replaceChild(e,f),a.copyAttributes(e,f)):("string"==typeof b&&(b=document.getElementById(b)),b=b||a.getFixedLayer(),d.addClass(b,k),b.appendChild(e));this.postRender()},getDom:function(a){return a?document.getElementById(this.id+"_"+a):document.getElementById(this.id)},postRender:function(){this.fireEvent("postrender")},getHtmlTpl:function(){return""},formatHtml:function(a){var b="edui-"+this.uiName;return a.replace(/##/g,
-this.id).replace(/%%-/g,this.uiName?b+"-":"").replace(/%%/g,(this.uiName?b:"")+" "+this.className).replace(/\$\$/g,this._globalKey)},renderHtml:function(){return this.formatHtml(this.getHtmlTpl())},dispose:function(){var b=this.getDom();b&&s.editor.dom.domUtils.remove(b);a.unsetGlobal(this.id)}};h.inherits(b,e)})();(function(){var d=s.editor.utils,a=s.editor.ui.UIBase,e=s.editor.ui.Separator=function(a){this.initOptions(a);this.initSeparator()};e.prototype={uiName:"separator",initSeparator:function(){this.initUIBase()},
-getHtmlTpl:function(){return'<div id="##" class="edui-box %%"></div>'}};d.inherits(e,a)})();(function(){var d=s.editor.utils,a=s.editor.dom.domUtils,e=s.editor.ui.UIBase,b=s.editor.ui.uiUtils,c=s.editor.ui.Mask=function(a){this.initOptions(a);this.initUIBase()};c.prototype={getHtmlTpl:function(){return'<div id="##" class="edui-mask %%" onmousedown="return $$._onMouseDown(event, this);"></div>'},postRender:function(){var b=this;a.on(window,"resize",function(){setTimeout(function(){b.isHidden()||b._fill()})})},
-show:function(a){this._fill();this.getDom().style.display="";this.getDom().style.zIndex=a},hide:function(){this.getDom().style.display="none";this.getDom().style.zIndex=""},isHidden:function(){return"none"==this.getDom().style.display},_onMouseDown:function(){return!1},_fill:function(){var a=this.getDom(),c=b.getViewportRect();a.style.width=c.width+"px";a.style.height=c.height+"px"}};d.inherits(c,e)})();(function(){function d(a,b){for(var c=0;c<f.length;c++){var e=f[c];if(!e.isHidden()&&!1!==e.queryAutoHide(b)){if(a&&
-/scroll/ig.test(a.type)&&"edui-wordpastepop"==e.className)return;e.hide()}}f.length&&e.editor.fireEvent("afterhidepop")}var a=s.editor.utils,e=s.editor.ui.uiUtils,b=s.editor.dom.domUtils,c=s.editor.ui.UIBase,g=s.editor.ui.Popup=function(a){this.initOptions(a);this.initPopup()},f=[];g.postHide=d;var k=["edui-anchor-topleft","edui-anchor-topright","edui-anchor-bottomleft","edui-anchor-bottomright"];g.prototype={SHADOW_RADIUS:5,content:null,_hidden:!1,autoRender:!0,canSideLeft:!0,canSideUp:!0,initPopup:function(){this.initUIBase();
-f.push(this)},getHtmlTpl:function(){return'<div id="##" class="edui-popup %%" onmousedown="return false;"> <div id="##_body" class="edui-popup-body"> <iframe style="position:absolute;z-index:-1;left:0;top:0;background-color: transparent;" frameborder="0" width="100%" height="100%" src="about:blank"></iframe> <div class="edui-shadow"></div> <div id="##_content" class="edui-popup-content">'+this.getContentHtmlTpl()+"  </div> </div></div>"},getContentHtmlTpl:function(){return this.content?"string"==
-typeof this.content?this.content:this.content.renderHtml():""},_UIBase_postRender:c.prototype.postRender,postRender:function(){this.content instanceof c&&this.content.postRender();if(this.captureWheel&&!this.captured){this.captured=!0;var a=(document.documentElement.clientHeight||document.body.clientHeight)-80,d=this.getDom().offsetHeight,f=e.getClientRect(this.combox.getDom()).top,g=this.getDom("content"),k=this.getDom("body").getElementsByTagName("iframe"),h=this;for(k.length&&(k=k[0]);f+d>a;)d-=
-30,g.style.height=d+"px",k&&(k.style.height=d+"px");if(window.XMLHttpRequest)b.on(g,"onmousewheel"in document.body?"mousewheel":"DOMMouseScroll",function(a){a.preventDefault?a.preventDefault():a.returnValue=!1;g.scrollTop=a.wheelDelta?g.scrollTop-60*(a.wheelDelta/120):g.scrollTop-60*(a.detail/-3)});else b.on(this.getDom(),"mousewheel",function(a){a.returnValue=!1;h.getDom("content").scrollTop-=60*(a.wheelDelta/120)})}this.fireEvent("postRenderAfter");this.hide(!0);this._UIBase_postRender()},_doAutoRender:function(){!this.getDom()&&
-this.autoRender&&this.render()},mesureSize:function(){var a=this.getDom("content");return e.getClientRect(a)},fitSize:function(){if(this.captureWheel&&this.sized)return this.__size;this.sized=!0;var a=this.getDom("body");a.style.width="";a.style.height="";var b=this.mesureSize();if(this.captureWheel){a.style.width=-(-20-b.width)+"px";var c=parseInt(this.getDom("content").style.height,10);!window.isNaN(c)&&(b.height=c)}else a.style.width=b.width+"px";a.style.height=b.height+"px";this.__size=b;this.captureWheel&&
-(this.getDom("content").style.overflow="auto");return b},showAnchor:function(a,b){this.showAnchorRect(e.getClientRect(a),b)},showAnchorRect:function(a,c,d){this._doAutoRender();var f=e.getViewportRect();this._show();d=this.fitSize();var g;c?(c=this.canSideLeft&&a.right+d.width>f.right&&a.left>d.width,f=this.canSideUp&&a.top+d.height>f.bottom&&a.bottom>d.height,g=c?a.left-d.width:a.right,a=f?a.bottom-d.height:a.top):(c=this.canSideLeft&&a.right+d.width>f.right&&a.left>d.width,f=this.canSideUp&&a.top+
-d.height>f.bottom&&a.bottom>d.height,g=c?a.right-d.width:a.left,a=f?a.top-d.height:a.bottom);d=this.getDom();e.setViewportOffset(d,{left:g,top:a});b.removeClasses(d,k);d.className+=" "+k[2*(f?1:0)+(c?1:0)];this.editor&&(d.style.zIndex=1*this.editor.container.style.zIndex+10,s.editor.ui.uiUtils.getFixedLayer().style.zIndex=d.style.zIndex-1)},showAt:function(a){var b=a.left;a=a.top;this.showAnchorRect({left:b,top:a,right:b,bottom:a,height:0,width:0},!1,!0)},_show:function(){this._hidden&&(this.getDom().style.display=
-"",this._hidden=!1,this.fireEvent("show"))},isHidden:function(){return this._hidden},show:function(){this._doAutoRender();this._show()},hide:function(a){!this._hidden&&this.getDom()&&(this.getDom().style.display="none",this._hidden=!0,a||this.fireEvent("hide"))},queryAutoHide:function(a){return!a||!e.contains(this.getDom(),a)}};a.inherits(g,c);b.on(document,"mousedown",function(a){d(a,a.target||a.srcElement)});b.on(window,"scroll",function(a,b){d(a,b)})})();(function(){var d=s.editor.utils,a=s.editor.ui.UIBase,
-e=s.editor.ui.ColorPicker=function(a){this.initOptions(a);this.noColorText=this.noColorText||this.editor.getLang("clearColor");this.initUIBase()};e.prototype={getHtmlTpl:function(){for(var a=this.editor,e='<div id="##" class="edui-colorpicker %%"><div class="edui-colorpicker-topbar edui-clearfix"><div unselectable="on" id="##_preview" class="edui-colorpicker-preview"></div><div unselectable="on" class="edui-colorpicker-nocolor" onclick="$$._onPickNoColor(event, this);">'+this.noColorText+'</div></div><table  class="edui-box" style="border-collapse: collapse;" onmouseover="$$._onTableOver(event, this);" onmouseout="$$._onTableOut(event, this);" onclick="return $$._onTableClick(event, this);" cellspacing="0" cellpadding="0"><tr style="border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;padding-top: 2px"><td colspan="10">'+
-a.getLang("themeColor")+'</td> </tr><tr class="edui-colorpicker-tablefirstrow" >',d=0;d<b.length;d++)d&&0===d%10&&(e+="</tr>"+(60==d?'<tr style="border-bottom: 1px solid #ddd;font-size: 13px;line-height: 25px;color:#39C;"><td colspan="10">'+a.getLang("standardColor")+"</td></tr>":"")+"<tr"+(60==d?' class="edui-colorpicker-tablefirstrow"':"")+">"),e+=70>d?'<td style="padding: 0 2px;"><a hidefocus title="'+b[d]+'" onclick="return false;" href="javascript:" unselectable="on" class="edui-box edui-colorpicker-colorcell" data-color="#'+
-b[d]+'" style="background-color:#'+b[d]+";border:solid #ccc;"+(10>d||60<=d?"border-width:1px;":10<=d&&20>d?"border-width:1px 1px 0 1px;":"border-width:0 1px 0 1px;")+'"></a></td>':"";return e+"</tr></table></div>"},_onTableClick:function(a){(a=(a.target||a.srcElement).getAttribute("data-color"))&&this.fireEvent("pickcolor",a)},_onTableOver:function(a){if(a=(a.target||a.srcElement).getAttribute("data-color"))this.getDom("preview").style.backgroundColor=a},_onTableOut:function(){this.getDom("preview").style.backgroundColor=
-""},_onPickNoColor:function(){this.fireEvent("picknocolor")}};d.inherits(e,a);var b="ffffff 000000 eeece1 1f497d 4f81bd c0504d 9bbb59 8064a2 4bacc6 f79646 f2f2f2 7f7f7f ddd9c3 c6d9f0 dbe5f1 f2dcdb ebf1dd e5e0ec dbeef3 fdeada d8d8d8 595959 c4bd97 8db3e2 b8cce4 e5b9b7 d7e3bc ccc1d9 b7dde8 fbd5b5 bfbfbf 3f3f3f 938953 548dd4 95b3d7 d99694 c3d69b b2a2c7 92cddc fac08f a5a5a5 262626 494429 17365d 366092 953734 76923c 5f497a 31859b e36c09 7f7f7f 0c0c0c 1d1b10 0f243e 244061 632423 4f6128 3f3151 205867 974806 c00000 ff0000 ffc000 ffff00 92d050 00b050 00b0f0 0070c0 002060 7030a0 ".split(" ")})();
-(function(){var d=s.editor.utils,a=s.editor.ui.uiUtils,e=s.editor.ui.UIBase,b=s.editor.ui.TablePicker=function(a){this.initOptions(a);this.initTablePicker()};b.prototype={defaultNumRows:10,defaultNumCols:10,maxNumRows:20,maxNumCols:20,numRows:10,numCols:10,lengthOfCellSide:22,initTablePicker:function(){this.initUIBase()},getHtmlTpl:function(){return'<div id="##" class="edui-tablepicker %%"><div class="edui-tablepicker-body"><div class="edui-infoarea"><span id="##_label" class="edui-label"></span></div><div class="edui-pickarea" onmousemove="$$._onMouseMove(event, this);" onmouseover="$$._onMouseOver(event, this);" onmouseout="$$._onMouseOut(event, this);" onclick="$$._onClick(event, this);"><div id="##_overlay" class="edui-overlay"></div></div></div></div>'},
-_UIBase_render:e.prototype.render,render:function(a){this._UIBase_render(a);this.getDom("label").innerHTML="0"+this.editor.getLang("t_row")+" x 0"+this.editor.getLang("t_col")},_track:function(a,b){var e=this.getDom("overlay").style,d=this.lengthOfCellSide;e.width=a*d+"px";e.height=b*d+"px";this.getDom("label").innerHTML=a+this.editor.getLang("t_col")+" x "+b+this.editor.getLang("t_row");this.numCols=a;this.numRows=b},_onMouseOver:function(b,e){var d=b.relatedTarget||b.fromElement;a.contains(e,d)||
-e===d||(this.getDom("label").innerHTML="0"+this.editor.getLang("t_col")+" x 0"+this.editor.getLang("t_row"),this.getDom("overlay").style.visibility="")},_onMouseOut:function(b,e){var d=b.relatedTarget||b.toElement;a.contains(e,d)||e===d||(this.getDom("label").innerHTML="0"+this.editor.getLang("t_col")+" x 0"+this.editor.getLang("t_row"),this.getDom("overlay").style.visibility="hidden")},_onMouseMove:function(b,e){this.getDom("overlay");var d=a.getEventOffset(b),k=this.lengthOfCellSide,l=Math.ceil(d.left/
-k),d=Math.ceil(d.top/k);this._track(l,d)},_onClick:function(){this.fireEvent("picktable",this.numCols,this.numRows)}};d.inherits(b,e)})();(function(){var d=s.editor.dom.domUtils,a=s.editor.ui.uiUtils,e='onmousedown="$$.Stateful_onMouseDown(event, this);" onmouseup="$$.Stateful_onMouseUp(event, this);"'+(s.editor.browser.ie?' onmouseenter="$$.Stateful_onMouseEnter(event, this);" onmouseleave="$$.Stateful_onMouseLeave(event, this);"':' onmouseover="$$.Stateful_onMouseOver(event, this);" onmouseout="$$.Stateful_onMouseOut(event, this);"');
-s.editor.ui.Stateful={alwalysHoverable:!1,target:null,Stateful_init:function(){this._Stateful_dGetHtmlTpl=this.getHtmlTpl;this.getHtmlTpl=this.Stateful_getHtmlTpl},Stateful_getHtmlTpl:function(){return this._Stateful_dGetHtmlTpl().replace(/stateful/g,function(){return e})},Stateful_onMouseEnter:function(a,c){this.target=c;if(!this.isDisabled()||this.alwalysHoverable)this.addState("hover"),this.fireEvent("over")},Stateful_onMouseLeave:function(a,c){if(!this.isDisabled()||this.alwalysHoverable)this.removeState("hover"),
-this.removeState("active"),this.fireEvent("out")},Stateful_onMouseOver:function(b,c){var e=b.relatedTarget;a.contains(c,e)||c===e||this.Stateful_onMouseEnter(b,c)},Stateful_onMouseOut:function(b,c){var e=b.relatedTarget;a.contains(c,e)||c===e||this.Stateful_onMouseLeave(b,c)},Stateful_onMouseDown:function(a,c){this.isDisabled()||this.addState("active")},Stateful_onMouseUp:function(a,c){this.isDisabled()||this.removeState("active")},Stateful_postRender:function(){this.disabled&&!this.hasState("disabled")&&
-this.addState("disabled")},hasState:function(a){return d.hasClass(this.getStateDom(),"edui-state-"+a)},addState:function(a){this.hasState(a)||(this.getStateDom().className+=" edui-state-"+a)},removeState:function(a){this.hasState(a)&&d.removeClasses(this.getStateDom(),["edui-state-"+a])},getStateDom:function(){return this.getDom("state")},isChecked:function(){return this.hasState("checked")},setChecked:function(a){!this.isDisabled()&&a?this.addState("checked"):this.removeState("checked")},isDisabled:function(){return this.hasState("disabled")},
-setDisabled:function(a){a?(this.removeState("hover"),this.removeState("checked"),this.removeState("active"),this.addState("disabled")):this.removeState("disabled")}}})();(function(){var d=s.editor.utils,a=s.editor.ui.UIBase,e=s.editor.ui.Stateful,b=s.editor.ui.Button=function(a){this.initOptions(a);this.initButton()};b.prototype={uiName:"button",label:"",title:"",showIcon:!0,showText:!0,initButton:function(){this.initUIBase();this.Stateful_init()},getHtmlTpl:function(){return'<div id="##" class="edui-box %%"><div id="##_state" stateful><div class="%%-wrap"><div id="##_body" unselectable="on" '+
-(this.title?'title="'+this.title+'"':"")+' class="%%-body" onmousedown="return false;" onclick="return $$._onClick();">'+(this.showIcon?'<div class="edui-box edui-icon"></div>':"")+(this.showText?'<div class="edui-box edui-label">'+this.label+"</div>":"")+"</div></div></div></div>"},postRender:function(){this.Stateful_postRender();this.setDisabled(this.disabled)},_onClick:function(){this.isDisabled()||this.fireEvent("click")}};d.inherits(b,a);d.extend(b.prototype,e)})();(function(){var d=s.editor.utils,
-a=s.editor.ui.uiUtils,e=s.editor.ui.UIBase,b=s.editor.ui.Stateful,c=s.editor.ui.SplitButton=function(a){this.initOptions(a);this.initSplitButton()};c.prototype={popup:null,uiName:"splitbutton",title:"",initSplitButton:function(){this.initUIBase();this.Stateful_init();if(null!=this.popup){var a=this.popup;this.popup=null;this.setPopup(a)}},_UIBase_postRender:e.prototype.postRender,postRender:function(){this.Stateful_postRender();this._UIBase_postRender()},setPopup:function(b){this.popup!==b&&(null!=
-this.popup&&this.popup.dispose(),b.addListener("show",d.bind(this._onPopupShow,this)),b.addListener("hide",d.bind(this._onPopupHide,this)),b.addListener("postrender",d.bind(function(){b.getDom("body").appendChild(a.createElementByHtml('<div id="'+this.popup.id+'_bordereraser" class="edui-bordereraser edui-background" style="width:'+(a.getClientRect(this.getDom()).width+20)+'px"></div>'));b.getDom().className+=" "+this.className},this)),this.popup=b)},_onPopupShow:function(){this.addState("opened")},
-_onPopupHide:function(){this.removeState("opened")},getHtmlTpl:function(){return'<div id="##" class="edui-box %%"><div '+(this.title?'title="'+this.title+'"':"")+' id="##_state" stateful><div class="%%-body"><div id="##_button_body" class="edui-box edui-button-body" onclick="$$._onButtonClick(event, this);"><div class="edui-box edui-icon"></div></div><div class="edui-box edui-splitborder"></div><div class="edui-box edui-arrow" onclick="$$._onArrowClick();"></div></div></div></div>'},showPopup:function(){var b=
-a.getClientRect(this.getDom());b.top-=this.popup.SHADOW_RADIUS;b.height+=this.popup.SHADOW_RADIUS;this.popup.showAnchorRect(b)},_onArrowClick:function(a,b){this.isDisabled()||this.showPopup()},_onButtonClick:function(){this.isDisabled()||this.fireEvent("buttonclick")}};d.inherits(c,e);d.extend(c.prototype,b,!0)})();(function(){var d=s.editor.utils,a=s.editor.ui.uiUtils,e=s.editor.ui.ColorPicker,b=s.editor.ui.Popup,c=s.editor.ui.SplitButton,g=s.editor.ui.ColorButton=function(a){this.initOptions(a);
-this.initColorButton()};g.prototype={initColorButton:function(){var a=this;this.popup=new b({content:new e({noColorText:a.editor.getLang("clearColor"),editor:a.editor,onpickcolor:function(b,c){a._onPickColor(c)},onpicknocolor:function(b,c){a._onPickNoColor(c)}}),editor:a.editor});this.initSplitButton()},_SplitButton_postRender:c.prototype.postRender,postRender:function(){this._SplitButton_postRender();this.getDom("button_body").appendChild(a.createElementByHtml('<div id="'+this.id+'_colorlump" class="edui-colorlump"></div>'));
-this.getDom().className+=" edui-colorbutton"},setColor:function(a){this.color=this.getDom("colorlump").style.backgroundColor=a},_onPickColor:function(a){!1!==this.fireEvent("pickcolor",a)&&(this.setColor(a),this.popup.hide())},_onPickNoColor:function(a){!1!==this.fireEvent("picknocolor")&&this.popup.hide()}};d.inherits(g,c)})();(function(){var d=s.editor.utils,a=s.editor.ui.Popup,e=s.editor.ui.TablePicker,b=s.editor.ui.SplitButton,c=s.editor.ui.TableButton=function(a){this.initOptions(a);this.initTableButton()};
-c.prototype={initTableButton:function(){var b=this;this.popup=new a({content:new e({editor:b.editor,onpicktable:function(a,c,d){b._onPickTable(c,d)}}),editor:b.editor});this.initSplitButton()},_onPickTable:function(a,b){!1!==this.fireEvent("picktable",a,b)&&this.popup.hide()}};d.inherits(c,b)})();(function(){var d=s.editor.utils,a=s.editor.ui.UIBase,e=s.editor.ui.AutoTypeSetPicker=function(a){this.initOptions(a);this.initAutoTypeSetPicker()};e.prototype={initAutoTypeSetPicker:function(){this.initUIBase()},
-getHtmlTpl:function(){var a=this.editor,c=a.options.autotypeset,d=a.getLang("autoTypeSet"),e="textAlignValue"+a.uid,k="imageBlockLineValue"+a.uid;return'<div id="##" class="edui-autotypesetpicker %%"><div class="edui-autotypesetpicker-body"><table ><tr><td nowrap colspan="2"><input type="checkbox" name="mergeEmptyline" '+(c.mergeEmptyline?"checked":"")+">"+d.mergeLine+'</td><td colspan="2"><input type="checkbox" name="removeEmptyline" '+(c.removeEmptyline?"checked":"")+">"+d.delLine+'</td></tr><tr><td nowrap colspan="2"><input type="checkbox" name="removeClass" '+
-(c.removeClass?"checked":"")+">"+d.removeFormat+'</td><td colspan="2"><input type="checkbox" name="indent" '+(c.indent?"checked":"")+">"+d.indent+'</td></tr><tr><td nowrap colspan="2"><input type="checkbox" name="textAlign" '+(c.textAlign?"checked":"")+">"+d.alignment+'</td><td colspan="2" id="'+e+'"><input type="radio" name="'+e+'" value="left" '+(c.textAlign&&"left"==c.textAlign?"checked":"")+">"+a.getLang("justifyleft")+'<input type="radio" name="'+e+'" value="center" '+(c.textAlign&&"center"==
-c.textAlign?"checked":"")+">"+a.getLang("justifycenter")+'<input type="radio" name="'+e+'" value="right" '+(c.textAlign&&"right"==c.textAlign?"checked":"")+">"+a.getLang("justifyright")+' </tr><tr><td nowrap colspan="2"><input type="checkbox" name="imageBlockLine" '+(c.imageBlockLine?"checked":"")+">"+d.imageFloat+'</td><td nowrap colspan="2" id="'+k+'"><input type="radio" name="'+k+'" value="none" '+(c.imageBlockLine&&"none"==c.imageBlockLine?"checked":"")+">"+a.getLang("default")+'<input type="radio" name="'+
-k+'" value="left" '+(c.imageBlockLine&&"left"==c.imageBlockLine?"checked":"")+">"+a.getLang("justifyleft")+'<input type="radio" name="'+k+'" value="center" '+(c.imageBlockLine&&"center"==c.imageBlockLine?"checked":"")+">"+a.getLang("justifycenter")+'<input type="radio" name="'+k+'" value="right" '+(c.imageBlockLine&&"right"==c.imageBlockLine?"checked":"")+">"+a.getLang("justifyright")+'</tr><tr><td nowrap colspan="2"><input type="checkbox" name="clearFontSize" '+(c.clearFontSize?"checked":"")+">"+
-d.removeFontsize+'</td><td colspan="2"><input type="checkbox" name="clearFontFamily" '+(c.clearFontFamily?"checked":"")+">"+d.removeFontFamily+'</td></tr><tr><td nowrap colspan="4"><input type="checkbox" name="removeEmptyNode" '+(c.removeEmptyNode?"checked":"")+">"+d.removeHtml+'</td></tr><tr><td nowrap colspan="4"><input type="checkbox" name="pasteFilter" '+(c.pasteFilter?"checked":"")+">"+d.pasteFilter+'</td></tr><tr><td nowrap colspan="4" align="right"><button >'+d.run+"</button></td></tr></table></div></div>"},
-_UIBase_render:a.prototype.render};d.inherits(e,a)})();(function(){function h(a){for(var b=a.editor.options.autotypeset,c=a.getDom(),e=a.editor.uid,g=null,g=null,h=d.getElementsByTagName(c,"input"),t=h.length-1,p;p=h[t--];)if(g=p.getAttribute("type"),"checkbox"==g&&(g=p.getAttribute("name"),b[g]&&delete b[g],p.checked))if(p=document.getElementById(g+"Value"+e))if(/input/ig.test(p.tagName))b[g]=p.value;else{p=p.getElementsByTagName("input");for(var q=p.length-1,u;u=p[q--];)if(u.checked){b[g]=u.value;
-break}}else b[g]=!0;c=d.getElementsByTagName(c,"select");for(t=0;e=c[t++];)h=e.getAttribute("name"),b[h]=b[h]?e.value:"";a.editor.options.autotypeset=b}var a=s.editor.utils,e=s.editor.ui.Popup,b=s.editor.ui.AutoTypeSetPicker,c=s.editor.ui.SplitButton,g=s.editor.ui.AutoTypeSetButton=function(a){this.initOptions(a);this.initAutoTypeSetButton()};g.prototype={initAutoTypeSetButton:function(){var a=this;this.popup=new e({content:new b({editor:a.editor}),editor:a.editor,hide:function(){!this._hidden&&this.getDom()&&
-(h(this),this.getDom().style.display="none",this._hidden=!0,this.fireEvent("hide"))}});var c=0;this.popup.addListener("postRenderAfter",function(){var b=this;c||(this.getDom().getElementsByTagName("button")[0].onclick=function(){h(b);a.editor.execCommand("autotypeset");b.hide()},c=1)});this.initSplitButton()}};a.inherits(g,c)})();(function(){var d=s.editor.utils,a=s.editor.ui.Popup,e=s.editor.ui.Stateful,b=s.editor.ui.UIBase,c=s.editor.ui.CellAlignPicker=function(a){this.initOptions(a);this.initSelected();
-this.initCellAlignPicker()};c.prototype={initSelected:function(){var a={top:0,middle:1,bottom:2},b={left:0,center:1,right:2};this.selected&&(this.selectedIndex=3*a[this.selected.valign]+b[this.selected.align])},initCellAlignPicker:function(){this.initUIBase();this.Stateful_init()},getHtmlTpl:function(){for(var a=["left","center","right"],b=null,c=-1,d=[],e=0;9>e;e++)b=this.selectedIndex===e?' class="edui-cellalign-selected" ':"",c=e%3,0===c&&d.push("<tr>"),d.push('<td index="'+e+'" '+b+' stateful><div class="edui-icon edui-'+
-a[c]+'"></div></td>'),2===c&&d.push("</tr>");return'<div id="##" class="edui-cellalignpicker %%"><div class="edui-cellalignpicker-body"><table onclick="$$._onClick(event);">'+d.join("")+"</table></div></div>"},getStateDom:function(){return this.target},_onClick:function(b){var c=b.target||b.srcElement;/icon/.test(c.className)&&(this.items[c.parentNode.getAttribute("index")].onclick(),a.postHide(b))},_UIBase_render:b.prototype.render};d.inherits(c,b);d.extend(c.prototype,e,!0)})();(function(){var h=
-s.editor.utils,a=s.editor.ui.Stateful,e=s.editor.ui.uiUtils,b=s.editor.ui.UIBase,c=s.editor.ui.PastePicker=function(a){this.initOptions(a);this.initPastePicker()};c.prototype={initPastePicker:function(){this.initUIBase();this.Stateful_init()},getHtmlTpl:function(){return'<div class="edui-pasteicon" onclick="$$._onClick(this)"></div><div class="edui-pastecontainer"><div class="edui-title">'+this.editor.getLang("pasteOpt")+'</div><div class="edui-button"><div title="'+this.editor.getLang("pasteSourceFormat")+
-'" onclick="$$.format(false)" stateful><div class="edui-richtxticon"></div></div><div title="'+this.editor.getLang("tagFormat")+'" onclick="$$.format(2)" stateful><div class="edui-tagicon"></div></div><div title="'+this.editor.getLang("pasteTextFormat")+'" onclick="$$.format(true)" stateful><div class="edui-plaintxticon"></div></div></div></div></div>'},getStateDom:function(){return this.target},format:function(a){this.editor.ui._isTransfer=!0;this.editor.fireEvent("pasteTransfer",a)},_onClick:function(a){var b=
-d.getNextDomNode(a),c=e.getViewportRect().height,l=e.getClientRect(b);b.style.top=l.top+l.height>c?-l.height-a.offsetHeight+"px":"";/hidden/ig.test(d.getComputedStyle(b,"visibility"))?(b.style.visibility="visible",d.addClass(a,"edui-state-opened")):(b.style.visibility="hidden",d.removeClasses(a,"edui-state-opened"))},_UIBase_render:b.prototype.render};h.inherits(c,b);h.extend(c.prototype,a,!0)})();(function(){var d=s.editor.utils,a=s.editor.ui.uiUtils,e=s.editor.ui.UIBase,b=s.editor.ui.Toolbar=function(a){this.initOptions(a);
-this.initToolbar()};b.prototype={items:null,initToolbar:function(){this.items=this.items||[];this.initUIBase()},add:function(a){this.items.push(a)},getHtmlTpl:function(){for(var a=[],b=0;b<this.items.length;b++)a[b]=this.items[b].renderHtml();return'<div id="##" class="edui-toolbar %%" onselectstart="return false;" onmousedown="return $$._onMouseDown(event, this);">'+a.join("")+"</div>"},postRender:function(){for(var b=this.getDom(),d=0;d<this.items.length;d++)this.items[d].postRender();a.makeUnselectable(b)},
-_onMouseDown:function(){return!1}};d.inherits(b,e)})();(function(){var d=s.editor.utils,a=s.editor.dom.domUtils,e=s.editor.ui.uiUtils,b=s.editor.ui.UIBase,c=s.editor.ui.Popup,g=s.editor.ui.Stateful,f=s.editor.ui.CellAlignPicker,k=s.editor.ui.Menu=function(a){this.initOptions(a);this.initMenu()},l={renderHtml:function(){return'<div class="edui-menuitem edui-menuseparator"><div class="edui-menuseparator-inner"></div></div>'},postRender:function(){},queryAutoHide:function(){return!0}};k.prototype={items:null,
-uiName:"menu",initMenu:function(){this.items=this.items||[];this.initPopup();this.initItems()},initItems:function(){for(var a=0;a<this.items.length;a++){var b=this.items[a];"-"==b?this.items[a]=this.getSeparator():b instanceof m||(b.editor=this.editor,b.theme=this.editor.options.theme,this.items[a]=this.createItem(b))}},getSeparator:function(){return l},createItem:function(a){a.menu=this;return new m(a)},_Popup_getContentHtmlTpl:c.prototype.getContentHtmlTpl,getContentHtmlTpl:function(){if(0==this.items.length)return this._Popup_getContentHtmlTpl();
-for(var a=[],b=0;b<this.items.length;b++)a[b]=this.items[b].renderHtml();return'<div class="%%-body">'+a.join("")+"</div>"},_Popup_postRender:c.prototype.postRender,postRender:function(){for(var b=this,c=0;c<this.items.length;c++){var d=this.items[c];d.ownerMenu=this;d.postRender()}a.on(this.getDom(),"mouseover",function(a){a=a||event;a=a.relatedTarget||a.fromElement;var c=b.getDom();e.contains(c,a)||c===a||b.fireEvent("over")});this._Popup_postRender()},queryAutoHide:function(a){if(a){if(e.contains(this.getDom(),
-a))return!1;for(var b=0;b<this.items.length;b++)if(!1===this.items[b].queryAutoHide(a))return!1}},clearItems:function(){for(var a=0;a<this.items.length;a++){var b=this.items[a];clearTimeout(b._showingTimer);clearTimeout(b._closingTimer);b.subMenu&&b.subMenu.destroy()}this.items=[]},destroy:function(){this.getDom()&&a.remove(this.getDom());this.clearItems()},dispose:function(){this.destroy()}};d.inherits(k,c);var m=s.editor.ui.MenuItem=function(b){this.initOptions(b);this.initUIBase();this.Stateful_init();
-if(this.subMenu&&!(this.subMenu instanceof k))if(b.className&&-1!=b.className.indexOf("aligntd")){var d=this;this.subMenu.selected=this.editor.queryCommandValue("cellalignment");this.subMenu=new c({content:new f(this.subMenu),parentMenu:d,editor:d.editor,destroy:function(){this.getDom()&&a.remove(this.getDom())}});this.subMenu.addListener("postRenderAfter",function(){a.on(this.getDom(),"mouseover",function(){d.addState("opened")})})}else this.subMenu=new k(this.subMenu)};m.prototype={label:"",subMenu:null,
-ownerMenu:null,uiName:"menuitem",alwalysHoverable:!0,getHtmlTpl:function(){return'<div id="##" class="%%" stateful onclick="$$._onClick(event, this);"><div class="%%-body">'+this.renderLabelHtml()+"</div></div>"},postRender:function(){var a=this;this.addListener("over",function(){a.ownerMenu.fireEvent("submenuover",a);a.subMenu&&a.delayShowSubMenu()});this.subMenu&&(this.getDom().className+=" edui-hassubmenu",this.subMenu.render(),this.addListener("out",function(){a.delayHideSubMenu()}),this.subMenu.addListener("over",
-function(){clearTimeout(a._closingTimer);a._closingTimer=null;a.addState("opened")}),this.ownerMenu.addListener("hide",function(){a.hideSubMenu()}),this.ownerMenu.addListener("submenuover",function(b,c){c!==a&&a.delayHideSubMenu()}),this.subMenu._bakQueryAutoHide=this.subMenu.queryAutoHide,this.subMenu.queryAutoHide=function(b){return b&&e.contains(a.getDom(),b)?!1:this._bakQueryAutoHide(b)});this.getDom().style.tabIndex="-1";e.makeUnselectable(this.getDom());this.Stateful_postRender()},delayShowSubMenu:function(){var a=
-this;a.isDisabled()||(a.addState("opened"),clearTimeout(a._showingTimer),clearTimeout(a._closingTimer),a._closingTimer=null,a._showingTimer=setTimeout(function(){a.showSubMenu()},250))},delayHideSubMenu:function(){var a=this;a.isDisabled()||(a.removeState("opened"),clearTimeout(a._showingTimer),a._closingTimer||(a._closingTimer=setTimeout(function(){a.hasState("opened")||a.hideSubMenu();a._closingTimer=null},400)))},renderLabelHtml:function(){return'<div class="edui-arrow"></div><div class="edui-box edui-icon"></div><div class="edui-box edui-label %%-label">'+
-(this.label||"")+"</div>"},getStateDom:function(){return this.getDom()},queryAutoHide:function(a){if(this.subMenu&&this.hasState("opened"))return this.subMenu.queryAutoHide(a)},_onClick:function(a,b){this.hasState("disabled")||!1!==this.fireEvent("click",a,b)&&(this.subMenu?this.showSubMenu():c.postHide(a))},showSubMenu:function(){var a=e.getClientRect(this.getDom());a.right-=5;a.left+=2;a.width-=7;a.top-=4;a.bottom+=4;a.height+=8;this.subMenu.showAnchorRect(a,!0,!0)},hideSubMenu:function(){this.subMenu.hide()}};
-d.inherits(m,b);d.extend(m.prototype,g,!0)})();(function(){var d=s.editor.utils,a=s.editor.ui.uiUtils,e=s.editor.ui.Menu,b=s.editor.ui.SplitButton,c=s.editor.ui.Combox=function(a){this.initOptions(a);this.initCombox()};c.prototype={uiName:"combox",initCombox:function(){var a=this;this.items=this.items||[];for(var b=0;b<this.items.length;b++){var c=this.items[b];c.uiName="listitem";c.index=b;c.onclick=function(){a.selectByIndex(this.index)}}this.popup=new e({items:this.items,uiName:"list",editor:this.editor,
-captureWheel:!0,combox:this});this.initSplitButton()},_SplitButton_postRender:b.prototype.postRender,postRender:function(){this._SplitButton_postRender();this.setLabel(this.label||"");this.setValue(this.initValue||"")},showPopup:function(){var b=a.getClientRect(this.getDom());b.top+=1;b.bottom-=1;b.height-=2;this.popup.showAnchorRect(b)},getValue:function(){return this.value},setValue:function(a){var b=this.indexByValue(a);-1!=b?(this.selectedIndex=b,this.setLabel(this.items[b].label),this.value=
-this.items[b].value):(this.selectedIndex=-1,this.setLabel(this.getLabelForUnknowValue(a)),this.value=a)},setLabel:function(a){this.label=this.getDom("button_body").innerHTML=a},getLabelForUnknowValue:function(a){return a},indexByValue:function(a){for(var b=0;b<this.items.length;b++)if(a==this.items[b].value)return b;return-1},getItem:function(a){return this.items[a]},selectByIndex:function(a){a<this.items.length&&!1!==this.fireEvent("select",a)&&(this.selectedIndex=a,this.value=this.items[a].value,
-this.setLabel(this.items[a].label))}};d.inherits(c,b)})();(function(){var d=s.editor.utils,a=s.editor.dom.domUtils,e=s.editor.ui.uiUtils,b=s.editor.ui.Mask,c=s.editor.ui.UIBase,g=s.editor.ui.Button,f=s.editor.ui.Dialog=function(a){this.initOptions(d.extend({autoReset:!0,draggable:!0,onok:function(){},oncancel:function(){},onclose:function(a,b){return b?this.onok():this.oncancel()},holdScroll:!1},a));this.initDialog()},k,l;f.prototype={draggable:!1,uiName:"dialog",initDialog:function(){var a=this,
-c=this.editor.options.theme;this.initUIBase();this.modalMask=k||(k=new b({className:"edui-dialog-modalmask",theme:c}));this.dragMask=l||(l=new b({className:"edui-dialog-dragmask",theme:c}));this.closeButton=new g({className:"edui-dialog-closebutton",title:a.closeDialog,theme:c,onclick:function(){a.close(!1)}});this.fullscreen&&this.initResizeEvent();if(this.buttons)for(c=0;c<this.buttons.length;c++)this.buttons[c]instanceof g||(this.buttons[c]=new g(this.buttons[c]))},initResizeEvent:function(){var b=
-this;a.on(window,"resize",function(){b._hidden||void 0===b._hidden||(b.__resizeTimer&&window.clearTimeout(b.__resizeTimer),b.__resizeTimer=window.setTimeout(function(){b.__resizeTimer=null;var a=b.getDom(),c=b.getDom("content"),d=UE.ui.uiUtils.getClientRect(a),f=UE.ui.uiUtils.getClientRect(c),l=e.getViewportRect();c.style.width=l.width-d.width+f.width+"px";c.style.height=l.height-d.height+f.height+"px";a.style.width=l.width+"px";a.style.height=l.height+"px";b.fireEvent("resize")},100))})},fitSize:function(){var a=
-this.getDom("body"),b=this.mesureSize();a.style.width=b.width+"px";a.style.height=b.height+"px";return b},safeSetOffset:function(a){var b=this.getDom(),c=e.getViewportRect(),d=e.getClientRect(b),f=a.left;f+d.width>c.right&&(f=c.right-d.width);a=a.top;a+d.height>c.bottom&&(a=c.bottom-d.height);b.style.left=Math.max(f,0)+"px";b.style.top=Math.max(a,0)+"px"},showAtCenter:function(){var b=e.getViewportRect();if(this.fullscreen){var c=this.getDom(),d=this.getDom("content");c.style.display="block";var f=
-UE.ui.uiUtils.getClientRect(c),l=UE.ui.uiUtils.getClientRect(d);c.style.left="-100000px";d.style.width=b.width-f.width+l.width+"px";d.style.height=b.height-f.height+l.height+"px";c.style.width=b.width+"px";c.style.height=b.height+"px";c.style.left=0;this._originalContext={html:{overflowX:document.documentElement.style.overflowX,overflowY:document.documentElement.style.overflowY},body:{overflowX:document.body.style.overflowX,overflowY:document.body.style.overflowY}};document.documentElement.style.overflowX=
-"hidden";document.documentElement.style.overflowY="hidden";document.body.style.overflowX="hidden";document.body.style.overflowY="hidden"}else this.getDom().style.display="",d=this.fitSize(),f=this.getDom("titlebar").offsetHeight|0,c=b.width/2-d.width/2,b=b.height/2-(d.height-f)/2-f,d=this.getDom(),this.safeSetOffset({left:Math.max(c|0,0),top:Math.max(b|0,0)}),a.hasClass(d,"edui-state-centered")||(d.className+=" edui-state-centered");this._show()},getContentHtml:function(){var a="";"string"==typeof this.content?
-a=this.content:this.iframeUrl&&(a='<span id="'+this.id+'_contmask" class="dialogcontmask"></span><iframe id="'+this.id+'_iframe" class="%%-iframe" height="100%" width="100%" frameborder="0" src="'+this.iframeUrl+'"></iframe>');return a},getHtmlTpl:function(){var a="";if(this.buttons){for(var a=[],b=0;b<this.buttons.length;b++)a[b]=this.buttons[b].renderHtml();a='<div class="%%-foot"><div id="##_buttons" class="%%-buttons">'+a.join("")+"</div></div>"}return'<div id="##" class="%%"><div '+(this.fullscreen?
-'class="%%-wrap edui-dialog-fullscreen-flag"':'class="%%"')+'><div id="##_body" class="%%-body"><div class="%%-shadow"></div><div id="##_titlebar" class="%%-titlebar"><div class="%%-draghandle" onmousedown="$$._onTitlebarMouseDown(event, this);"><span class="%%-caption">'+(this.title||"")+"</span></div>"+this.closeButton.renderHtml()+'</div><div id="##_content" class="%%-content">'+(this.autoReset?"":this.getContentHtml())+"</div>"+a+"</div></div></div>"},postRender:function(){this.modalMask.getDom()||
-(this.modalMask.render(),this.modalMask.hide());this.dragMask.getDom()||(this.dragMask.render(),this.dragMask.hide());var b=this;this.addListener("show",function(){b.modalMask.show(this.getDom().style.zIndex-2)});this.addListener("hide",function(){b.modalMask.hide()});if(this.buttons)for(var c=0;c<this.buttons.length;c++)this.buttons[c].postRender();a.on(window,"resize",function(){setTimeout(function(){b.isHidden()||b.safeSetOffset(e.getClientRect(b.getDom()))})});if(this.holdScroll)if(b.iframeUrl)b.addListener("dialogafterreset",
-function(){window.setTimeout(function(){var c=document.getElementById(b.id+"_iframe").contentWindow;if(q.ie)var d=window.setInterval(function(){c.document&&c.document.body&&(window.clearInterval(d),d=null,a.on(c.document.body,q.gecko?"DOMMouseScroll":"mousewheel",function(b){a.preventDefault(b)}))},100);else a.on(c,q.gecko?"DOMMouseScroll":"mousewheel",function(b){a.preventDefault(b)})},1)});else a.on(document.getElementById(b.id+"_iframe"),q.gecko?"DOMMouseScroll":"mousewheel",function(b){a.preventDefault(b)});
-this._hide()},mesureSize:function(){var a=this.getDom("body"),b=e.getClientRect(this.getDom("content")).width;a.style.width=b;return e.getClientRect(a)},_onTitlebarMouseDown:function(b,c){if(this.draggable){var d;e.getViewportRect();var f=this;e.startDrag(b,{ondragstart:function(){d=e.getClientRect(f.getDom());f.getDom("contmask").style.visibility="visible";f.dragMask.show(f.getDom().style.zIndex-1)},ondragmove:function(a,b){f.safeSetOffset({left:d.left+a,top:d.top+b})},ondragstop:function(){f.getDom("contmask").style.visibility=
-"hidden";a.removeClasses(f.getDom(),["edui-state-centered"]);f.dragMask.hide()}})}},reset:function(){this.getDom("content").innerHTML=this.getContentHtml();this.fireEvent("dialogafterreset")},_show:function(){this._hidden&&(this.getDom().style.display="",this.editor.container.style.zIndex&&(this.getDom().style.zIndex=1*this.editor.container.style.zIndex+10),this._hidden=!1,this.fireEvent("show"),s.editor.ui.uiUtils.getFixedLayer().style.zIndex=this.getDom().style.zIndex-4)},isHidden:function(){return this._hidden},
-_hide:function(){if(!this._hidden){var a=this.getDom();a.style.display="none";a.style.zIndex="";a.style.width="";a.style.height="";this._hidden=!0;this.fireEvent("hide")}},open:function(){if(this.autoReset)try{this.reset()}catch(a){this.render(),this.open()}this.showAtCenter();if(this.iframeUrl)try{this.getDom("iframe").focus()}catch(b){}},_onCloseButtonClick:function(a,b){this.close(!1)},close:function(a){!1!==this.fireEvent("close",a)&&(this.fullscreen&&(document.documentElement.style.overflowX=
-this._originalContext.html.overflowX,document.documentElement.style.overflowY=this._originalContext.html.overflowY,document.body.style.overflowX=this._originalContext.body.overflowX,document.body.style.overflowY=this._originalContext.body.overflowY,delete this._originalContext),this._hide())}};d.inherits(f,c)})();(function(){var d=s.editor.utils,a=s.editor.ui.Menu,e=s.editor.ui.SplitButton,b=s.editor.ui.MenuButton=function(a){this.initOptions(a);this.initMenuButton()};b.prototype={initMenuButton:function(){var b=
-this;this.uiName="menubutton";this.popup=new a({items:b.items,className:b.className,editor:b.editor});this.popup.addListener("show",function(){for(var a=0;a<this.items.length;a++)this.items[a].removeState("checked"),this.items[a].value==b._value&&(this.items[a].addState("checked"),this.value=b._value)});this.initSplitButton()},setValue:function(a){this._value=a}};d.inherits(b,e)})();(function(){var d=s.editor.utils,a=s.editor.ui,e=a.Dialog;a.buttons={};a.Dialog=function(a){var b=new e(a);b.addListener("hide",
-function(){if(b.editor){var a=b.editor;try{if(q.gecko){var c=a.window.scrollY,d=a.window.scrollX;a.body.focus();a.window.scrollTo(d,c)}else a.focus()}catch(e){}}});return b};for(var b={anchor:"~/dialogs/anchor/anchor.html",insertimage:"~/dialogs/image/image.html",link:"~/dialogs/link/link.html",spechars:"~/dialogs/spechars/spechars.html",searchreplace:"~/dialogs/searchreplace/searchreplace.html",map:"~/dialogs/map/map.html",gmap:"~/dialogs/gmap/gmap.html",insertvideo:"~/dialogs/video/video.html",
-help:"~/dialogs/help/help.html",preview:"~/dialogs/preview/preview.html",emotion:"~/dialogs/emotion/emotion.html",wordimage:"~/dialogs/wordimage/wordimage.html",attachment:"~/dialogs/attachment/attachment.html",insertframe:"~/dialogs/insertframe/insertframe.html",edittip:"~/dialogs/table/edittip.html",edittable:"~/dialogs/table/edittable.html",edittd:"~/dialogs/table/edittd.html",webapp:"~/dialogs/webapp/webapp.html",snapscreen:"~/dialogs/snapscreen/snapscreen.html",scrawl:"~/dialogs/scrawl/scrawl.html",
-music:"~/dialogs/music/music.html",template:"~/dialogs/template/template.html",background:"~/dialogs/background/background.html",charts:"~/dialogs/charts/charts.html"},c="undo redo formatmatch bold italic underline fontborder touppercase tolowercase strikethrough subscript superscript source indent outdent blockquote pasteplain pagebreak selectall print horizontal removeformat time date unlink insertparagraphbeforetable insertrow insertcol mergeright mergedown deleterow deletecol splittorows splittocols splittocells mergecells deletetable drafts".split(" "),
-g=0,f;f=c[g++];)f=f.toLowerCase(),a[f]=function(b){return function(c){var d=new a.Button({className:"edui-for-"+b,title:c.options.labelMap[b]||c.getLang("labelMap."+b)||"",onclick:function(){c.execCommand(b)},theme:c.options.theme,showText:!1});a.buttons[b]=d;c.addListener("selectionchange",function(a,e,f){a=c.queryCommandState(b);-1==a?(d.setDisabled(!0),d.setChecked(!1)):f||(d.setDisabled(!1),d.setChecked(a))});return d}}(f);a.cleardoc=function(b){var c=new a.Button({className:"edui-for-cleardoc",
-title:b.options.labelMap.cleardoc||b.getLang("labelMap.cleardoc")||"",theme:b.options.theme,onclick:function(){confirm(b.getLang("confirmClear"))&&b.execCommand("cleardoc")}});a.buttons.cleardoc=c;b.addListener("selectionchange",function(){c.setDisabled(-1==b.queryCommandState("cleardoc"))});return c};var c={justify:["left","right","center","justify"],imagefloat:["none","left","center","right"],directionality:["ltr","rtl"]},k;for(k in c)(function(b,c){for(var d=0,e;e=c[d++];)(function(c){a[b.replace("float",
-"")+c]=function(d){var e=new a.Button({className:"edui-for-"+b.replace("float","")+c,title:d.options.labelMap[b.replace("float","")+c]||d.getLang("labelMap."+b.replace("float","")+c)||"",theme:d.options.theme,onclick:function(){d.execCommand(b,c)}});a.buttons[b]=e;d.addListener("selectionchange",function(a,f,g){e.setDisabled(-1==d.queryCommandState(b));e.setChecked(d.queryCommandValue(b)==c&&!g)});return e}})(e)})(k,c[k]);for(g=0;f=["backcolor","forecolor"][g++];)a[f]=function(b){return function(c){var d=
-new a.ColorButton({className:"edui-for-"+b,color:"default",title:c.options.labelMap[b]||c.getLang("labelMap."+b)||"",editor:c,onpickcolor:function(a,d){c.execCommand(b,d)},onpicknocolor:function(){c.execCommand(b,"default");this.setColor("transparent");this.color="default"},onbuttonclick:function(){c.execCommand(b,this.color)}});a.buttons[b]=d;c.addListener("selectionchange",function(){d.setDisabled(-1==c.queryCommandState(b))});return d}}(f);c={noOk:["searchreplace","help","spechars","webapp","preview"],
-ok:"attachment anchor link insertimage map gmap insertframe wordimage insertvideo insertframe edittip edittable edittd scrawl template music background charts".split(" ")};for(k in c)(function(c,e){for(var f=0,g;g=e[f++];)q.opera&&"searchreplace"===g||function(e){a[e]=function(f,g,k){g=g||(f.options.iframeUrlMap||{})[e]||b[e];k=f.options.labelMap[e]||f.getLang("labelMap."+e)||"";var n;g&&(n=new a.Dialog(d.extend({iframeUrl:f.ui.mapUrl(g),editor:f,className:"edui-for-"+e,title:k,holdScroll:"insertimage"===
-e,fullscreen:/charts|preview/.test(e),closeDialog:f.getLang("closeDialog")},"ok"==c?{buttons:[{className:"edui-okbutton",label:f.getLang("ok"),editor:f,onclick:function(){n.close(!0)}},{className:"edui-cancelbutton",label:f.getLang("cancel"),editor:f,onclick:function(){n.close(!1)}}]}:{})),f.ui._dialogs[e+"Dialog"]=n);var m=new a.Button({className:"edui-for-"+e,title:k,onclick:function(){if(n)switch(e){case "wordimage":var a=f.execCommand("wordimage");a&&a.length&&(n.render(),n.open());break;case "scrawl":-1!=
-f.queryCommandState("scrawl")&&(n.render(),n.open());break;default:n.render(),n.open()}},theme:f.options.theme,disabled:"scrawl"==e&&-1==f.queryCommandState("scrawl")||"charts"==e});a.buttons[e]=m;f.addListener("selectionchange",function(){if(!(e in{edittable:1})){var a=f.queryCommandState(e);m.getDom()&&(m.setDisabled(-1==a),m.setChecked(a))}});return m}}(g.toLowerCase())})(k,c[k]);a.snapscreen=function(c,d,e){e=c.options.labelMap.snapscreen||c.getLang("labelMap.snapscreen")||"";var f=new a.Button({className:"edui-for-snapscreen",
-title:e,onclick:function(){c.execCommand("snapscreen")},theme:c.options.theme});a.buttons.snapscreen=f;if(d=d||(c.options.iframeUrlMap||{}).snapscreen||b.snapscreen){var g=new a.Dialog({iframeUrl:c.ui.mapUrl(d),editor:c,className:"edui-for-snapscreen",title:e,buttons:[{className:"edui-okbutton",label:c.getLang("ok"),editor:c,onclick:function(){g.close(!0)}},{className:"edui-cancelbutton",label:c.getLang("cancel"),editor:c,onclick:function(){g.close(!1)}}]});g.render();c.ui._dialogs.snapscreenDialog=
-g}c.addListener("selectionchange",function(){f.setDisabled(-1==c.queryCommandState("snapscreen"))});return f};a.insertcode=function(b,c,e){c=b.options.insertcode||[];e=b.options.labelMap.insertcode||b.getLang("labelMap.insertcode")||"";var f=[];d.each(c,function(a,c){f.push({label:a,value:c,theme:b.options.theme,renderLabelHtml:function(){return'<div class="edui-label %%-label" >'+(this.label||"")+"</div>"}})});var g=new a.Combox({editor:b,items:f,onselect:function(a,c){b.execCommand("insertcode",
-this.items[c].value)},onbuttonclick:function(){this.showPopup()},title:e,initValue:e,className:"edui-for-insertcode",indexByValue:function(a){if(a)for(var b=0,c;c=this.items[b];b++)if(-1!=c.value.indexOf(a))return b;return-1}});a.buttons.insertcode=g;b.addListener("selectionchange",function(a,c,d){d||(-1==b.queryCommandState("insertcode")?g.setDisabled(!0):(g.setDisabled(!1),(a=b.queryCommandValue("insertcode"))?(a&&(a=a.replace(/['"]/g,"").split(",")[0]),g.setValue(a)):g.setValue(e)))});return g};
-a.fontfamily=function(b,c,e){c=b.options.fontfamily||[];e=b.options.labelMap.fontfamily||b.getLang("labelMap.fontfamily")||"";if(c.length){for(var f=0,g,k=[];g=c[f];f++){var p=b.getLang("fontfamily")[g.name]||"";(function(a,c){k.push({label:a,value:c,theme:b.options.theme,renderLabelHtml:function(){return'<div class="edui-label %%-label" style="font-family:'+d.unhtml(this.value)+'">'+(this.label||"")+"</div>"}})})(g.label||p,g.val)}var q=new a.Combox({editor:b,items:k,onselect:function(a,c){b.execCommand("FontFamily",
-this.items[c].value)},onbuttonclick:function(){this.showPopup()},title:e,initValue:e,className:"edui-for-fontfamily",indexByValue:function(a){if(a)for(var b=0,c;c=this.items[b];b++)if(-1!=c.value.indexOf(a))return b;return-1}});a.buttons.fontfamily=q;b.addListener("selectionchange",function(a,c,d){d||(-1==b.queryCommandState("FontFamily")?q.setDisabled(!0):(q.setDisabled(!1),(a=b.queryCommandValue("FontFamily"))&&(a=a.replace(/['"]/g,"").split(",")[0]),q.setValue(a)))});return q}};a.fontsize=function(b,
-c,d){d=b.options.labelMap.fontsize||b.getLang("labelMap.fontsize")||"";c=c||b.options.fontsize||[];if(c.length){for(var e=[],f=0;f<c.length;f++){var g=c[f]+"px";e.push({label:g,value:g,theme:b.options.theme,renderLabelHtml:function(){return'<div class="edui-label %%-label" style="line-height:1;font-size:'+this.value+'">'+(this.label||"")+"</div>"}})}var k=new a.Combox({editor:b,items:e,title:d,initValue:d,onselect:function(a,c){b.execCommand("FontSize",this.items[c].value)},onbuttonclick:function(){this.showPopup()},
-className:"edui-for-fontsize"});a.buttons.fontsize=k;b.addListener("selectionchange",function(a,c,d){d||(-1==b.queryCommandState("FontSize")?k.setDisabled(!0):(k.setDisabled(!1),k.setValue(b.queryCommandValue("FontSize"))))});return k}};a.paragraph=function(b,c,e){e=b.options.labelMap.paragraph||b.getLang("labelMap.paragraph")||"";c=b.options.paragraph||[];if(!d.isEmptyObject(c)){var f=[],g;for(g in c)f.push({value:g,label:c[g]||b.getLang("paragraph")[g],theme:b.options.theme,renderLabelHtml:function(){return'<div class="edui-label %%-label"><span class="edui-for-'+
-this.value+'">'+(this.label||"")+"</span></div>"}});var k=new a.Combox({editor:b,items:f,title:e,initValue:e,className:"edui-for-paragraph",onselect:function(a,c){b.execCommand("Paragraph",this.items[c].value)},onbuttonclick:function(){this.showPopup()}});a.buttons.paragraph=k;b.addListener("selectionchange",function(a,c,d){d||(-1==b.queryCommandState("Paragraph")?k.setDisabled(!0):(k.setDisabled(!1),a=b.queryCommandValue("Paragraph"),-1!=k.indexByValue(a)?k.setValue(a):k.setValue(k.initValue)))});
-return k}};a.customstyle=function(b){var c=b.options.customstyle||[],d=b.options.labelMap.customstyle||b.getLang("labelMap.customstyle")||"";if(c.length){for(var e=b.getLang("customstyle"),f=0,g=[],k;k=c[f++];)(function(a){var c={};c.label=a.label?a.label:e[a.name];c.style=a.style;c.className=a.className;c.tag=a.tag;g.push({label:c.label,value:c,theme:b.options.theme,renderLabelHtml:function(){return'<div class="edui-label %%-label"><'+c.tag+" "+(c.className?' class="'+c.className+'"':"")+(c.style?
-' style="'+c.style+'"':"")+">"+c.label+"</"+c.tag+"></div>"}})})(k);var h=new a.Combox({editor:b,items:g,title:d,initValue:d,className:"edui-for-customstyle",onselect:function(a,c){b.execCommand("customstyle",this.items[c].value)},onbuttonclick:function(){this.showPopup()},indexByValue:function(a){for(var b=0,c;c=this.items[b++];)if(c.label==a)return b-1;return-1}});a.buttons.customstyle=h;b.addListener("selectionchange",function(a,c,d){d||(-1==b.queryCommandState("customstyle")?h.setDisabled(!0):
-(h.setDisabled(!1),a=b.queryCommandValue("customstyle"),-1!=h.indexByValue(a)?h.setValue(a):h.setValue(h.initValue)))});return h}};a.inserttable=function(b,c,d){d=b.options.labelMap.inserttable||b.getLang("labelMap.inserttable")||"";var e=new a.TableButton({editor:b,title:d,className:"edui-for-inserttable",onpicktable:function(a,c,d){b.execCommand("InsertTable",{numRows:d,numCols:c,border:1})},onbuttonclick:function(){this.showPopup()}});a.buttons.inserttable=e;b.addListener("selectionchange",function(){e.setDisabled(-1==
-b.queryCommandState("inserttable"))});return e};a.lineheight=function(b){var c=b.options.lineheight||[];if(c.length){for(var d=0,e,f=[];e=c[d++];)f.push({label:e,value:e,theme:b.options.theme,onclick:function(){b.execCommand("lineheight",this.value)}});var g=new a.MenuButton({editor:b,className:"edui-for-lineheight",title:b.options.labelMap.lineheight||b.getLang("labelMap.lineheight")||"",items:f,onbuttonclick:function(){var a=b.queryCommandValue("LineHeight")||this.value;b.execCommand("LineHeight",
-a)}});a.buttons.lineheight=g;b.addListener("selectionchange",function(){var a=b.queryCommandState("LineHeight");if(-1==a)g.setDisabled(!0);else{g.setDisabled(!1);var c=b.queryCommandValue("LineHeight");c&&g.setValue((c+"").replace(/cm/,""));g.setChecked(a)}});return g}};k=["top","bottom"];for(c=0;g=k[c++];)(function(b){a["rowspacing"+b]=function(c){var d=c.options["rowspacing"+b]||[];if(!d.length)return null;for(var e=0,f,g=[];f=d[e++];)g.push({label:f,value:f,theme:c.options.theme,onclick:function(){c.execCommand("rowspacing",
-this.value,b)}});var k=new a.MenuButton({editor:c,className:"edui-for-rowspacing"+b,title:c.options.labelMap["rowspacing"+b]||c.getLang("labelMap.rowspacing"+b)||"",items:g,onbuttonclick:function(){var a=c.queryCommandValue("rowspacing",b)||this.value;c.execCommand("rowspacing",a,b)}});a.buttons[b]=k;c.addListener("selectionchange",function(){var a=c.queryCommandState("rowspacing",b);if(-1==a)k.setDisabled(!0);else{k.setDisabled(!1);var d=c.queryCommandValue("rowspacing",b);d&&k.setValue((d+"").replace(/%/,
-""));k.setChecked(a)}});return k}})(g);k=["insertorderedlist","insertunorderedlist"];for(c=0;g=k[c++];)(function(b){a[b]=function(c){var d=c.options[b],e=function(){c.execCommand(b,this.value)},f=[],g;for(g in d)f.push({label:d[g]||c.getLang()[b][g]||"",value:g,theme:c.options.theme,onclick:e});var k=new a.MenuButton({editor:c,className:"edui-for-"+b,title:c.getLang("labelMap."+b)||"",items:f,onbuttonclick:function(){var a=c.queryCommandValue(b)||this.value;c.execCommand(b,a)}});a.buttons[b]=k;c.addListener("selectionchange",
-function(){var a=c.queryCommandState(b);if(-1==a)k.setDisabled(!0);else{k.setDisabled(!1);var d=c.queryCommandValue(b);k.setValue(d);k.setChecked(a)}});return k}})(g);a.fullscreen=function(b,c){c=b.options.labelMap.fullscreen||b.getLang("labelMap.fullscreen")||"";var d=new a.Button({className:"edui-for-fullscreen",title:c,theme:b.options.theme,onclick:function(){b.ui&&b.ui.setFullScreen(!b.ui.isFullScreen());this.setChecked(b.ui.isFullScreen())}});a.buttons.fullscreen=d;b.addListener("selectionchange",
-function(){var a=b.queryCommandState("fullscreen");d.setDisabled(-1==a);d.setChecked(b.ui.isFullScreen())});return d};a.emotion=function(c,d){var e=new a.MultiMenuPop({title:c.options.labelMap.emotion||c.getLang("labelMap.emotion")||"",editor:c,className:"edui-for-emotion",iframeUrl:c.ui.mapUrl(d||(c.options.iframeUrlMap||{}).emotion||b.emotion)});a.buttons.emotion=e;c.addListener("selectionchange",function(){e.setDisabled(-1==c.queryCommandState("emotion"))});return e};a.autotypeset=function(b){var c=
-new a.AutoTypeSetButton({editor:b,title:b.options.labelMap.autotypeset||b.getLang("labelMap.autotypeset")||"",className:"edui-for-autotypeset",onbuttonclick:function(){b.execCommand("autotypeset")}});a.buttons.autotypeset=c;b.addListener("selectionchange",function(){c.setDisabled(-1==b.queryCommandState("autotypeset"))});return c}})();(function(){function d(a){this.initOptions(a);this.initEditorUI()}var a=s.editor.utils,e=s.editor.ui.uiUtils,b=s.editor.ui.UIBase,c=s.editor.dom.domUtils,g=[];d.prototype=
-{uiName:"editor",initEditorUI:function(){function a(b,c){b.setOpt({wordCount:!0,maximumWords:1E4,wordCountMsg:b.options.wordCountMsg||b.getLang("wordCountMsg"),wordOverFlowMsg:b.options.wordOverFlowMsg||b.getLang("wordOverFlowMsg")});var d=b.options,e=d.maximumWords,f=d.wordCountMsg,g=d.wordOverFlowMsg,k=c.getDom("wordcount");d.wordCount&&(d=b.getContentLength(!0),d>e?(k.innerHTML=g,b.fireEvent("wordcountoverflow")):k.innerHTML=f.replace("{#leave}",e-d).replace("{#count}",d))}this.editor.ui=this;
-this._dialogs={};this.initUIBase();this._initToolbars();var b=this.editor,d=this;b.addListener("ready",function(){b.getDialog=function(a){return b.ui._dialogs[a+"Dialog"]};c.on(b.window,"scroll",function(a){s.editor.ui.Popup.postHide(a)});b.ui._actualFrameWidth=b.options.initialFrameWidth;UE.browser.ie&&6===UE.browser.version&&b.container.ownerDocument.execCommand("BackgroundImageCache",!1,!0);b.options.elementPathEnabled&&(b.ui.getDom("elementpath").innerHTML='<div class="edui-editor-breadcrumb">'+
-b.getLang("elementPathTip")+":</div>");b.options.wordCount&&(c.on(b.document,"click",function(){a(b,d);c.un(b.document,"click",arguments.callee)}),b.ui.getDom("wordcount").innerHTML=b.getLang("wordCountTip"));b.ui._scale();b.options.scaleEnabled?(b.autoHeightEnabled&&b.disableAutoHeight(),d.enableScale()):d.disableScale();b.options.elementPathEnabled||(b.options.wordCount||b.options.scaleEnabled)||(b.ui.getDom("elementpath").style.display="none",b.ui.getDom("wordcount").style.display="none",b.ui.getDom("scale").style.display=
-"none");b.selection.isFocus()&&b.fireEvent("selectionchange",!1,!0)});b.addListener("mousedown",function(a,b){s.editor.ui.Popup.postHide(b,b.target||b.srcElement);s.editor.ui.ShortCutMenu.postHide(b)});b.addListener("delcells",function(){UE.ui.edittip&&new UE.ui.edittip(b);b.getDialog("edittip").open()});var e,f=!1,g;b.addListener("afterpaste",function(){b.queryCommandState("pasteplain")||(s.editor.ui.PastePicker&&(e=new s.editor.ui.Popup({content:new s.editor.ui.PastePicker({editor:b}),editor:b,
-className:"edui-wordpastepop"}),e.render()),f=!0)});b.addListener("afterinserthtml",function(){clearTimeout(g);g=setTimeout(function(){if(e&&(f||b.ui._isTransfer)){if(e.isHidden()){var a=c.createElement(b.document,"span",{style:"line-height:0px;",innerHTML:"\ufeff"});b.selection.getRange().insertNode(a);var d=Y(a,"firstChild","previousSibling");e.showAnchor(3==d.nodeType?d.parentNode:d);c.remove(a)}else e.show();delete b.ui._isTransfer;f=!1}},200)});b.addListener("contextmenu",function(a,b){s.editor.ui.Popup.postHide(b)});
-b.addListener("keydown",function(a,b){e&&e.dispose(b);var c=b.keyCode||b.which;if(b.altKey&&90==c)UE.ui.buttons.fullscreen.onclick()});b.addListener("wordcount",function(b){a(this,d)});b.addListener("selectionchange",function(){if(b.options.elementPathEnabled)d[(-1==b.queryCommandState("elementpath")?"dis":"en")+"ableElementPath"]();if(b.options.scaleEnabled)d[(-1==b.queryCommandState("scale")?"dis":"en")+"ableScale"]()});var h=new s.editor.ui.Popup({editor:b,content:"",className:"edui-bubble",_onEditButtonClick:function(){this.hide();
-b.ui._dialogs.linkDialog.open()},_onImgEditButtonClick:function(a){this.hide();b.ui._dialogs[a]&&b.ui._dialogs[a].open()},_onImgSetFloat:function(a){this.hide();b.execCommand("imagefloat",a)},_setIframeAlign:function(a){var b=h.anchorEl,d=b.cloneNode(!0);switch(a){case -2:d.setAttribute("align","");break;case -1:d.setAttribute("align","left");break;case 1:d.setAttribute("align","right")}b.parentNode.insertBefore(d,b);c.remove(b);h.anchorEl=d;h.showAnchor(h.anchorEl)},_updateIframe:function(){var a=
-b._iframe=h.anchorEl;c.hasClass(a,"ueditor_baidumap")?(b.selection.getRange().selectNode(a).select(),b.ui._dialogs.mapDialog.open()):b.ui._dialogs.insertframeDialog.open();h.hide()},_onRemoveButtonClick:function(a){b.execCommand(a);this.hide()},queryAutoHide:function(a){return a&&a.ownerDocument==b.document&&("img"==a.tagName.toLowerCase()||c.findParentByTagName(a,"a",!0))?a!==h.anchorEl:s.editor.ui.Popup.prototype.queryAutoHide.call(this,a)}});h.render();b.options.imagePopup&&(b.addListener("mouseover",
-function(a,c){c=c||window.event;var d=c.target||c.srcElement;if(b.ui._dialogs.insertframeDialog&&/iframe/ig.test(d.tagName)){var e=h.formatHtml("<nobr>"+b.getLang("property")+': <span onclick=$$._setIframeAlign(-2) class="edui-clickable">'+b.getLang("default")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(-1) class="edui-clickable">'+b.getLang("justifyleft")+'</span>&nbsp;&nbsp;<span onclick=$$._setIframeAlign(1) class="edui-clickable">'+b.getLang("justifyright")+'</span>&nbsp;&nbsp; <span onclick="$$._updateIframe( this);" class="edui-clickable">'+
-b.getLang("modify")+"</span></nobr>");e?(h.getDom("content").innerHTML=e,h.anchorEl=d,h.showAnchor(h.anchorEl)):h.hide()}}),b.addListener("selectionchange",function(a,c){if(c){var d="",e="",f=b.selection.getRange().getClosedNode(),e=b.ui._dialogs;if(f&&"IMG"==f.tagName){var g="insertimageDialog";if(-1!=f.className.indexOf("edui-faked-video")||-1!=f.className.indexOf("edui-upload-video"))g="insertvideoDialog";-1!=f.className.indexOf("edui-faked-webapp")&&(g="webappDialog");-1!=f.src.indexOf("http://api.map.baidu.com")&&
-(g="mapDialog");-1!=f.className.indexOf("edui-faked-music")&&(g="musicDialog");-1!=f.src.indexOf("http://maps.google.com/maps/api/staticmap")&&(g="gmapDialog");f.getAttribute("anchorname")&&(g="anchorDialog",d=h.formatHtml("<nobr>"+b.getLang("property")+': <span onclick=$$._onImgEditButtonClick("anchorDialog") class="edui-clickable">'+b.getLang("modify")+"</span>&nbsp;&nbsp;<span onclick=$$._onRemoveButtonClick('anchor') class=\"edui-clickable\">"+b.getLang("delete")+"</span></nobr>"));f.getAttribute("word_img")&&
-(b.word_img=[f.getAttribute("word_img")],g="wordimageDialog");if(!e[g])return;e="<nobr>"+b.getLang("property")+': <span onclick=$$._onImgSetFloat("none") class="edui-clickable">'+b.getLang("default")+'</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat("left") class="edui-clickable">'+b.getLang("justifyleft")+'</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat("right") class="edui-clickable">'+b.getLang("justifyright")+'</span>&nbsp;&nbsp;<span onclick=$$._onImgSetFloat("center") class="edui-clickable">'+
-b.getLang("justifycenter")+"</span>&nbsp;&nbsp;<span onclick=\"$$._onImgEditButtonClick('"+g+'\');" class="edui-clickable">'+b.getLang("modify")+"</span></nobr>";!d&&(d=h.formatHtml(e))}if(b.ui._dialogs.linkDialog){var k=b.queryCommandValue("link"),n;k&&(n=k.getAttribute("_href")||k.getAttribute("href",2))&&(e=n,30<n.length&&(e=n.substring(0,20)+"..."),d&&(d+='<div style="height:5px;"></div>'),d+=h.formatHtml("<nobr>"+b.getLang("anthorMsg")+': <a target="_blank" href="'+n+'" title="'+n+'" >'+e+'</a> <span class="edui-clickable" onclick="$$._onEditButtonClick();">'+
-b.getLang("modify")+'</span> <span class="edui-clickable" onclick="$$._onRemoveButtonClick(\'unlink\');"> '+b.getLang("clear")+"</span></nobr>"),h.showAnchor(k))}d?(h.getDom("content").innerHTML=d,h.anchorEl=f||k,h.showAnchor(h.anchorEl)):h.hide()}}))},_initToolbars:function(){for(var a=this.editor,b=this.toolbars||[],c=[],d=0;d<b.length;d++){for(var e=b[d],f=new s.editor.ui.Toolbar({theme:a.options.theme}),g=0;g<e.length;g++){var h=e[g],p=null;if("string"==typeof h){if(h=h.toLowerCase(),"|"==h&&
-(h="Separator"),"||"==h&&(h="Breakline"),s.editor.ui[h]&&(p=new s.editor.ui[h](a)),"fullscreen"==h){c&&c[0]?c[0].items.splice(0,0,p):p&&f.items.splice(0,0,p);continue}}else p=h;p&&p.id&&f.add(p)}c[d]=f}this.toolbars=c},getHtmlTpl:function(){return'<div id="##" class="%%"><div id="##_toolbarbox" class="%%-toolbarbox">'+(this.toolbars.length?'<div id="##_toolbarboxouter" class="%%-toolbarboxouter"><div class="%%-toolbarboxinner">'+this.renderToolbarBoxHtml()+"</div></div>":"")+'<div id="##_toolbarmsg" class="%%-toolbarmsg" style="display:none;"><div id = "##_upload_dialog" class="%%-toolbarmsg-upload" onclick="$$.showWordImageDialog();">'+
-this.editor.getLang("clickToUpload")+'</div><div class="%%-toolbarmsg-close" onclick="$$.hideToolbarMsg();">x</div><div id="##_toolbarmsg_label" class="%%-toolbarmsg-label"></div><div style="height:0;overflow:hidden;clear:both;"></div></div></div><div id="##_iframeholder" class="%%-iframeholder"></div><div id="##_bottombar" class="%%-bottomContainer"><table><tr><td id="##_elementpath" class="%%-bottombar"></td><td id="##_wordcount" class="%%-wordcount"></td><td id="##_scale" class="%%-scale"><div class="%%-icon"></div></td></tr></table></div><div id="##_scalelayer"></div></div>'},
-showWordImageDialog:function(){this._dialogs.wordimageDialog.open()},renderToolbarBoxHtml:function(){for(var a=[],b=0;b<this.toolbars.length;b++)a.push(this.toolbars[b].renderHtml());return a.join("")},setFullScreen:function(a){var b=this.editor,c=b.container.parentNode.parentNode;if(this._fullscreen!=a){this._fullscreen=a;this.editor.fireEvent("beforefullscreenchange",a);if(s.editor.browser.gecko)var d=b.selection.getRange().createBookmark();if(a){for(;"BODY"!=c.tagName;){var e=s.editor.dom.domUtils.getComputedStyle(c,
-"position");g.push(e);c.style.position="static";c=c.parentNode}this._bakHtmlOverflow=document.documentElement.style.overflow;this._bakBodyOverflow=document.body.style.overflow;this._bakAutoHeight=this.editor.autoHeightEnabled;this._bakScrollTop=Math.max(document.documentElement.scrollTop,document.body.scrollTop);this._bakEditorContaninerWidth=b.iframe.parentNode.offsetWidth;this._bakAutoHeight&&(b.autoHeightEnabled=!1,this.editor.disableAutoHeight());document.documentElement.style.overflow="hidden";
-window.scrollTo(0,window.scrollY);this._bakCssText=this.getDom().style.cssText;this._bakCssText1=this.getDom("iframeholder").style.cssText;b.iframe.parentNode.style.width="";this._updateFullScreen()}else{for(;"BODY"!=c.tagName;)c.style.position=g.shift(),c=c.parentNode;this.getDom().style.cssText=this._bakCssText;this.getDom("iframeholder").style.cssText=this._bakCssText1;this._bakAutoHeight&&(b.autoHeightEnabled=!0,this.editor.enableAutoHeight());document.documentElement.style.overflow=this._bakHtmlOverflow;
-document.body.style.overflow=this._bakBodyOverflow;b.iframe.parentNode.style.width=this._bakEditorContaninerWidth+"px";window.scrollTo(0,this._bakScrollTop)}if(q.gecko&&"true"===b.body.contentEditable){var f=document.createElement("input");document.body.appendChild(f);b.body.contentEditable=!1;setTimeout(function(){f.focus();setTimeout(function(){b.body.contentEditable=!0;b.fireEvent("fullscreenchanged",a);b.selection.getRange().moveToBookmark(d).select(!0);s.editor.dom.domUtils.remove(f);a&&window.scroll(0,
-0)},0)},0)}"true"===b.body.contentEditable&&(this.editor.fireEvent("fullscreenchanged",a),this.triggerLayout())}},_updateFullScreen:function(){if(this._fullscreen){var a=e.getViewportRect();this.getDom().style.cssText="border:0;position:absolute;left:0;top:"+(this.editor.options.topOffset||0)+"px;width:"+a.width+"px;height:"+a.height+"px;z-index:"+(1*this.getDom().style.zIndex+100);e.setViewportOffset(this.getDom(),{left:0,top:this.editor.options.topOffset||0});this.editor.setHeight(a.height-this.getDom("toolbarbox").offsetHeight-
-this.getDom("bottombar").offsetHeight-(this.editor.options.topOffset||0));if(q.gecko)try{window.onresize()}catch(b){}}},_updateElementPath:function(){var a=this.getDom("elementpath"),b;if(this.elementPathEnabled&&(b=this.editor.queryCommandValue("elementpath"))){for(var c=[],d=0,e;e=b[d];d++)c[d]=this.formatHtml('<span unselectable="on" onclick="$$.editor.execCommand(&quot;elementpath&quot;, &quot;'+d+'&quot;);">'+e+"</span>");a.innerHTML='<div class="edui-editor-breadcrumb" onmousedown="return false;">'+
-this.editor.getLang("elementPathTip")+": "+c.join(" &gt; ")+"</div>"}else a.style.display="none"},disableElementPath:function(){var a=this.getDom("elementpath");a.innerHTML="";a.style.display="none";this.elementPathEnabled=!1},enableElementPath:function(){this.getDom("elementpath").style.display="";this.elementPathEnabled=!0;this._updateElementPath()},_scale:function(){function a(){H=c.getXY(h);I||(I=g.options.minFrameHeight+s.offsetHeight+v.offsetHeight);D.style.cssText="position:absolute;left:0;display:;top:0;background-color:#41ABFF;opacity:0.4;filter: Alpha(opacity=40);width:"+
-h.offsetWidth+"px;height:"+h.offsetHeight+"px;z-index:"+(g.options.zIndex+1);c.on(f,"mousemove",b);c.on(p,"mouseup",d);c.on(f,"mouseup",d)}function b(a){e();a=a||window.event;O=a.pageX||f.documentElement.scrollLeft+a.clientX;z=a.pageY||f.documentElement.scrollTop+a.clientY;E=O-H.x;B=z-H.y;E>=J&&(L=!0,D.style.width=E+"px");B>=I&&(L=!0,D.style.height=B+"px")}function d(){L&&(L=!1,g.ui._actualFrameWidth=D.offsetWidth-2,h.style.width=g.ui._actualFrameWidth+"px",g.setHeight(D.offsetHeight-v.offsetHeight-
-s.offsetHeight-2));D&&(D.style.display="none");e();c.un(f,"mousemove",b);c.un(p,"mouseup",d);c.un(f,"mouseup",d)}function e(){q.ie?f.selection.clear():window.getSelection().removeAllRanges()}var f=document,g=this.editor,h=g.container,p=g.document,s=this.getDom("toolbarbox"),v=this.getDom("bottombar"),F=this.getDom("scale"),D=this.getDom("scalelayer"),L=!1,H=null,I=0,J=g.options.minFrameWidth,O=0,z=0,E=0,B=0,A=this;this.editor.addListener("fullscreenchanged",function(a,b){if(b)A.disableScale();else if(A.editor.options.scaleEnabled){A.enableScale();
-var d=A.editor.document.createElement("span");A.editor.body.appendChild(d);A.editor.body.style.height=Math.max(c.getXY(d).y,A.editor.iframe.offsetHeight-20)+"px";c.remove(d)}});this.enableScale=function(){1!=g.queryCommandState("source")&&(F.style.display="",this.scaleEnabled=!0,c.on(F,"mousedown",a))};this.disableScale=function(){F.style.display="none";this.scaleEnabled=!1;c.un(F,"mousedown",a)}},isFullScreen:function(){return this._fullscreen},postRender:function(){b.prototype.postRender.call(this);
-for(var a=0;a<this.toolbars.length;a++)this.toolbars[a].postRender();var c=this,d,e=s.editor.dom.domUtils,f=function(){clearTimeout(d);d=setTimeout(function(){c._updateFullScreen()})};e.on(window,"resize",f);c.addListener("destroy",function(){e.un(window,"resize",f);clearTimeout(d)})},showToolbarMsg:function(a,b){this.getDom("toolbarmsg_label").innerHTML=a;this.getDom("toolbarmsg").style.display="";b||(this.getDom("upload_dialog").style.display="none")},hideToolbarMsg:function(){this.getDom("toolbarmsg").style.display=
-"none"},mapUrl:function(a){return a?a.replace("~/",this.editor.options.UEDITOR_HOME_URL||""):""},triggerLayout:function(){var a=this.getDom();a.style.zoom="1"==a.style.zoom?"100%":"1"}};a.inherits(d,s.editor.ui.UIBase);var f={};UE.ui.Editor=function(b){var e=new UE.Editor(b);e.options.editor=e;a.loadFile(document,{href:e.options.themePath+e.options.theme+"/css/ueditor.css",tag:"link",type:"text/css",rel:"stylesheet"});var g=e.render;e.render=function(b){b.constructor===String&&(e.key=b,f[b]=e);a.domReady(function(){function a(){e.setOpt({labelMap:e.options.labelMap||
-e.getLang("labelMap")});new d(e.options);if(b&&(b.constructor===String&&(b=document.getElementById(b)),b&&b.getAttribute("name")&&(e.options.textarea=b.getAttribute("name")),b&&/script|textarea/ig.test(b.tagName))){var f=document.createElement("div");b.parentNode.insertBefore(f,b);var k=b.value||b.innerHTML;e.options.initialContent=/^[\t\r\n ]*$/.test(k)?e.options.initialContent:k.replace(/>[\n\r\t]+([ ]{4})+/g,">").replace(/[\n\r\t]+([ ]{4})+</g,"<").replace(/>[\n\r\t]+</g,"><");b.className&&(f.className=
-b.className);b.style.cssText&&(f.style.cssText=b.style.cssText);/textarea/i.test(b.tagName)?(e.textarea=b,e.textarea.style.display="none"):(b.parentNode.removeChild(b),b.id&&(f.id=b.id));b=f;b.innerHTML=""}c.addClass(b,"edui-"+e.options.theme);e.ui.render(b);f=e.options;e.container=e.ui.getDom();for(var k=c.findParents(b,!0),p=[],r=0,q;q=k[r];r++)p[r]=q.style.display,q.style.display="block";f.minFrameWidth=f.initialFrameWidth?f.initialFrameWidth:f.initialFrameWidth=b.offsetWidth;f.initialFrameHeight?
-f.minFrameHeight=f.initialFrameHeight:f.initialFrameHeight=f.minFrameHeight=b.offsetHeight;for(r=0;q=k[r];r++)q.style.display=p[r];b.style.height&&(b.style.height="");e.container.style.width=f.initialFrameWidth+(/%$/.test(f.initialFrameWidth)?"":"px");e.container.style.zIndex=f.zIndex;g.call(e,e.ui.getDom("iframeholder"));e.fireEvent("afteruiready")}e.langIsReady?a():e.addListener("langReady",a)})};return e};UE.getEditor=function(a,b){var c=f[a];c||(c=f[a]=new UE.ui.Editor(b),c.render(a));return c};
-UE.delEditor=function(a){var b;if(b=f[a])b.key&&b.destroy(),delete f[a]}})();(function(){var d=s.editor.utils,a=s.editor.ui.Popup,e=s.editor.ui.SplitButton,b=s.editor.ui.MultiMenuPop=function(a){this.initOptions(a);this.initMultiMenu()};b.prototype={initMultiMenu:function(){var b=this;this.popup=new a({content:"",editor:b.editor,iframe_rendered:!1,onshow:function(){this.iframe_rendered||(this.iframe_rendered=!0,this.getDom("content").innerHTML='<iframe id="'+b.id+'_iframe" src="'+b.iframeUrl+'" frameborder="0"></iframe>',
-b.editor.container.style.zIndex&&(this.getDom().style.zIndex=1*b.editor.container.style.zIndex+1))}});this.onbuttonclick=function(){this.showPopup()};this.initSplitButton()}};d.inherits(b,e)})();(function(){function d(a){if(!g.findParent(a.target||a.srcElement,function(a){return g.hasClass(a,"edui-shortcutmenu")||g.hasClass(a,"edui-popup")},!0)){a=0;for(var b;b=f[a++];)b.hide()}}var a=s.editor.ui,e=a.UIBase,b=a.uiUtils,c=s.editor.utils,g=s.editor.dom.domUtils,f=[],k,l=!1,m=a.ShortCutMenu=function(a){this.initOptions(a);
-this.initShortCutMenu()};m.postHide=d;m.prototype={isHidden:!0,SPACE:5,initShortCutMenu:function(){this.items=this.items||[];this.initUIBase();this.initItems();this.initEvent();f.push(this)},initEvent:function(){var a=this,b=a.editor.document;g.on(b,"mousemove",function(b){if(!1===a.isHidden&&!a.getSubMenuMark()&&"contextmenu"!=a.eventType){var c=!0,d=a.getDom(),e=d.offsetWidth/2+a.SPACE,f=d.offsetHeight/2,g=Math.abs(b.screenX-a.left),h=Math.abs(b.screenY-a.top);clearTimeout(k);k=setTimeout(function(){0<
-h&&h<f?a.setOpacity(d,"1"):h>f&&h<f+70?(a.setOpacity(d,"0.5"),c=!1):h>f+70&&h<f+140&&a.hide();c&&0<g&&g<e?a.setOpacity(d,"1"):g>e&&g<e+70?a.setOpacity(d,"0.5"):g>e+70&&g<e+140&&a.hide()})}});if(q.chrome)g.on(b,"mouseout",function(b){b=b.relatedTarget||b.toElement;null!=b&&"HTML"!=b.tagName||a.hide()});a.editor.addListener("afterhidepop",function(){a.isHidden||(l=!0)})},initItems:function(){if(c.isArray(this.items))for(var b=0,d=this.items.length;b<d;b++){var e=this.items[b].toLowerCase();a[e]&&(this.items[b]=
-new a[e](this.editor),this.items[b].className+=" edui-shortcutsubmenu ")}},setOpacity:function(a,b){q.ie&&9>q.version?a.style.filter="alpha(opacity = "+100*parseFloat(b)+");":a.style.opacity=b},getSubMenuMark:function(){l=!1;for(var a=b.getFixedLayer(),a=g.getElementsByTagName(a,"div",function(a){return g.hasClass(a,"edui-shortcutsubmenu edui-popup")}),c=0,d;d=a[c++];)"none"!=d.style.display&&(l=!0);return l},show:function(a,c){function d(a){0>a.left&&(a.left=0);0>a.top&&(a.top=0);h.style.cssText=
-"position:absolute;left:"+a.left+"px;top:"+a.top+"px;"}function e(a){a.tagName||(a=a.getDom());f.left=parseInt(a.style.left);f.top=parseInt(a.style.top);f.top-=h.offsetHeight+15;d(f)}var f={},h=this.getDom(),k=b.getFixedLayer();this.eventType=a.type;h.style.cssText="display:block;left:-9999px";if("contextmenu"==a.type&&c){var l=g.getElementsByTagName(k,"div","edui-contextmenu")[0];l?e(l):this.editor.addListener("aftershowcontextmenu",function(a,b){e(b)})}else f=b.getViewportOffsetByEvent(a),f.top-=
-h.offsetHeight+this.SPACE,f.left+=this.SPACE+20,d(f),this.setOpacity(h,0.2);this.isHidden=!1;this.left=a.screenX+h.offsetWidth/2-this.SPACE;this.top=a.screenY-h.offsetHeight/2-this.SPACE;this.editor&&(h.style.zIndex=1*this.editor.container.style.zIndex+10,k.style.zIndex=h.style.zIndex-1)},hide:function(){this.getDom()&&(this.getDom().style.display="none");this.isHidden=!0},postRender:function(){if(c.isArray(this.items))for(var a=0,b;b=this.items[a++];)b.postRender()},getHtmlTpl:function(){var a;if(c.isArray(this.items)){a=
-[];for(var b=0;b<this.items.length;b++)a[b]=this.items[b].renderHtml();a=a.join("")}else a=this.items;return'<div id="##" class="%% edui-toolbar" data-src="shortcutmenu" onmousedown="return false;" onselectstart="return false;" >'+a+"</div>"}};c.inherits(m,e);g.on(document,"mousedown",function(a){d(a)});g.on(window,"scroll",function(a){d(a)})})();(function(){var d=s.editor.utils,a=s.editor.ui.UIBase,e=s.editor.ui.Breakline=function(a){this.initOptions(a);this.initSeparator()};e.prototype={uiName:"Breakline",
-initSeparator:function(){this.initUIBase()},getHtmlTpl:function(){return"<br/>"}};d.inherits(e,a)})()})();

+ 16 - 12
DjangoUeditor/views.py

@@ -7,6 +7,16 @@ from django.views.decorators.csrf import csrf_exempt
 import datetime,random
 import urllib
 
+def get_path_format_vars():
+    return {
+        "year":datetime.datetime.now().strftime("%Y"),
+        "month":datetime.datetime.now().strftime("%m"),
+        "day":datetime.datetime.now().strftime("%d"),
+        "time":datetime.datetime.now().strftime("%H%M%S"),
+        "datetime":datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
+        "rnd":random.randrange(100,999)
+    }
+
 #保存上传的文件
 def save_upload_file(PostFile,FilePath):
     try:
@@ -23,7 +33,7 @@ def save_upload_file(PostFile,FilePath):
 @csrf_exempt
 def get_ueditor_settings(request):
     return HttpResponse(json.dumps(USettings.UEditorUploadSettings,ensure_ascii=False), content_type="application/javascript")
-
+@csrf_exempt
 def get_ueditor_controller(request):
     """获取ueditor的后端URL地址    """
 
@@ -170,14 +180,12 @@ def UploadFile(request):
         "uploadvideo":"videoPathFormat"
     }
 
-    path_format_var={
+    path_format_var=get_path_format_vars()
+    path_format_var.update({
         "basename":upload_original_name,
         "extname":upload_original_ext[1:],
         "filename":upload_file_name,
-        "time":datetime.datetime.now().strftime("%H%M%S"),
-        "datetime":datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
-        "rnd":random.randrange(100,999)
-    }
+    })
     #取得输出文件的路径
     OutputPathFormat,OutputPath,OutputFile=get_output_path(request,upload_path_format[action],path_format_var)
 
@@ -214,12 +222,8 @@ def catcher_remote_image(request):
 
     remote_urls=request.POST.getlist("source[]",[])
     catcher_infos=[]
-    path_format_var={
-        "time":datetime.datetime.now().strftime("%H%M%S"),
-        "date":datetime.datetime.now().strftime("%Y%m%d"),
-        "datetime":datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
-        "rnd":random.randrange(100,999)
-    }
+    path_format_var=get_path_format_vars()
+
     for remote_url in remote_urls:
         #取得上传的文件的原始名称
         remote_file_name=os.path.basename(remote_url)

+ 0 - 0
build/lib/DjangoUeditor/__init__.py


+ 182 - 0
build/lib/DjangoUeditor/commands.py

@@ -0,0 +1,182 @@
+# coding:utf-8
+import urllib
+import settings as USettings
+
+
+class UEditorEventHandler(object):
+    """用来处理UEditor的事件侦听"""
+    def on_selectionchange(self):
+        return ""
+    def on_contentchange(self):
+        return ""
+    def render(self,editorID):
+        jscode="""
+            %(editor)s.addListener('%(event)s', function () {
+                %(event_code)s
+        });"""
+        event_codes=[]
+        #列出所有on_打头的方法,然后在ueditor中进行侦听
+        events=filter(lambda x: x[0:3]=="on_", dir(self))
+        for event in events:
+            try:
+                event_code=getattr(self,event)()
+                if event_code:
+                    event_code=event_code % {"editor":editorID}
+                    event_codes.append(jscode % {"editor":editorID,"event":event[3:],"event_code":event_code})
+            except:
+                pass
+
+        if len(event_codes)==0:
+            return ""
+        else:
+            return "\n".join(event_codes)
+
+class UEditorCommand(object):
+    """
+    为前端增加按钮,下拉等扩展,
+    """
+    def __init__(self,**kwargs):
+        self.uiName=kwargs.pop("uiName","")
+        self.index=kwargs.pop("index",0)
+        self.title=kwargs.pop("title",self.uiName)
+        self.ajax_url=kwargs.pop("ajax_url","")
+
+    def render_ui(self,editor):
+        """" 创建ueditor的ui扩展对象的js代码,如button,combo等  """
+        raise NotImplementedError
+
+
+
+    def render_ajax_command(self):
+        """"生成通过ajax调用后端命令的前端ajax代码"""
+        if not self.ajax_url: return ""
+
+        return u"""
+            UE.ajax.request( '%(ajax_url)s', {
+                 data: {
+                     name: 'ueditor'
+                 },
+                 onsuccess: function ( xhr ) {%(ajax_success)s},
+                 onerror: function ( xhr ){ %(ajax_error)s }
+            });
+        """ % {
+            "ajax_url":self.ajax_url,
+            "ajax_success":self.onExecuteAjaxCommand("success"),
+            "ajax_error":self.onExecuteAjaxCommand("error")
+        }
+
+    def render_command(self):
+        """" 返回注册命令的js定义  """
+        cmd=self.onExecuteCommand()
+        ajax_cmd=self.render_ajax_command()
+        queryvalue_command=self.onExecuteQueryvalueCommand()
+        cmds=[]
+        if cmd or ajax_cmd:
+            cmds.append( u"""execCommand: function() {
+                    %(exec_cmd)s
+                    %(exec_ajax_cmd)s
+                }
+            """ % {"exec_cmd":cmd,"exec_ajax_cmd":ajax_cmd},)
+
+        if queryvalue_command:
+            cmds.append(u"""queryCommandValue:function(){
+                    %s
+                }""" % queryvalue_command)
+        if len(cmds)>0:
+            return u"""
+            editor.registerCommand(uiName, {
+                    %s
+                });
+            """ % ",".join(cmds)
+        else:
+            return ""
+
+    def render(self,editorID):
+        return u"""
+        UE.registerUI("%(uiName)s", function(editor, uiName) {
+            %(registerCommand)s
+            %(uiObject)s
+        },%(index)s,"%(editor)s");
+        """ % {
+                "registerCommand":self.render_command(),
+                "uiName":self.uiName,
+                "uiObject":self.render_ui(editorID),
+                "index":self.index,
+                "editor":editorID
+            }
+
+    def onExecuteCommand(self):
+        """ 返回执行Command时的js代码 """
+        return ""
+    def onExecuteAjaxCommand(self,state):
+        """ 返回执行Command时发起Ajax调用成功与失败的js代码 """
+        return ""
+    def onExecuteQueryvalueCommand(self):
+        """" 返回执行QueryvalueCommand时的js代码 """
+        return ""
+
+class UEditorButtonCommand(UEditorCommand):
+    def __init__(self,**kwargs):
+        self.icon = kwargs.pop("icon", "")
+        super(UEditorButtonCommand, self).__init__(**kwargs)
+
+    def onClick(self):
+        """"按钮单击js代码,默认执行uiName命令,默认会调用Command """
+        return """
+            editor.execCommand(uiName);
+        """
+    def render_ui(self,editorID):
+        """         创建button的js代码:        """
+        return """
+            var btn = new UE.ui.Button({
+                name: uiName,
+                title: "%(title)s",
+                cssRules: "background-image:url('%(icon)s')!important;",
+                onclick: function() {
+                    %(onclick)s
+                }
+            });
+            return btn
+        """ % {
+                "icon": urllib.basejoin(USettings.gSettings.MEDIA_URL , self.icon),
+                "onclick": self.onClick(),
+                "title": self.title
+            }
+
+
+class UEditorComboCommand(UEditorCommand):
+    def __init__(self,**kwargs):
+        self.items = kwargs.pop("items", [])
+        self.initValue=kwargs.pop("initValue","")
+
+        super(UEditorComboCommand, self).__init__(**kwargs)
+
+    def get_items(self):
+        return self.items
+
+    def onSelect(self):
+        return ""
+
+    def render_ui(self,editorID):
+        """         创建combo的js代码:        """
+        return """
+        var combox = new UE.ui.Combox({
+            editor:editor,
+            items:%(items)s,
+            onselect:function (t, index) {
+                %(onselect)s
+            },
+            title:'%(title)s',
+            initValue:'%(initValue)s'
+        });
+        return combox;
+        """ % {
+                "title":self.title,
+                "items":str(self.get_items()),
+                "onselect": self.onSelect(),
+                "initValue":self.initValue
+        }
+
+
+class UEditorDialogCommand(UEditorCommand):
+    pass

+ 34 - 0
build/lib/DjangoUeditor/forms.py

@@ -0,0 +1,34 @@
+#coding: utf-8
+
+from django import forms
+from widgets import UEditorWidget
+from DjangoUeditor.models import UEditorField as ModelUEditorField
+
+class UEditorField(forms.CharField):
+    def __init__(self,label,width=600, height=300, toolbars="full",imagePath="", filePath="",upload_settings={},settings={},command=None ,event_handler=None,*args,**kwargs):
+        uSettings=locals().copy()
+        del uSettings["self"],uSettings["label"],uSettings["args"],uSettings["kwargs"]
+        kwargs["widget"]=UEditorWidget(attrs=uSettings)
+        kwargs["label"]=label
+        super(UEditorField,self).__init__( *args, **kwargs)
+
+def UpdateUploadPath(model_form,model_inst=None):
+    """ 遍历model字段,如果是UEditorField则需要重新计算路径 """
+    if model_inst is not  None:
+        try:
+            for field in model_inst._meta.fields:
+                if isinstance(field, ModelUEditorField):
+                    model_form.__getitem__(field.name).field.widget.recalc_path(model_inst)
+        except:
+            pass
+
+class UEditorModelForm(forms.ModelForm):
+    def __init__(self,*args,**kwargs):
+        super(UEditorModelForm,self).__init__(*args,**kwargs)
+        try:
+            if kwargs.has_key("instance"):
+                UpdateUploadPath(self,kwargs["instance"])
+            else:
+                UpdateUploadPath(self,None)
+        except Exception:
+            pass

+ 33 - 0
build/lib/DjangoUeditor/models.py

@@ -0,0 +1,33 @@
+#coding: utf-8
+from django.db import models
+from django.contrib.admin import widgets as admin_widgets
+from widgets import UEditorWidget,AdminUEditorWidget
+
+
+class UEditorField(models.TextField):
+    """
+    百度HTML编辑器字段,初始化时,可以提供以下参数
+        initial:初始内容
+        toolbars:提供工具按钮列表,取值为列表,如['bold', 'italic'],取值为:mini,normal,full,代表小,一般,全部
+        imagePath:图片上传的路径,如"images/",实现上传到"{{MEDIA_ROOT}}/images"文件夹
+        filePath:附件上传的路径,如"files/",实现上传到"{{MEDIA_ROOT}}/files"文件夹
+    """
+    def __init__(self,verbose_name=None, width=600, height=300, toolbars="full",imagePath="", filePath="",upload_settings={},settings={},command=None,event_handler=None ,**kwargs):
+        self.ueditor_settings=locals().copy()
+        kwargs["verbose_name"]=verbose_name
+        del self.ueditor_settings["self"],self.ueditor_settings["kwargs"],self.ueditor_settings["verbose_name"]
+        super(UEditorField,self).__init__(**kwargs)
+
+    def formfield(self,**kwargs):
+        defaults = {'widget': UEditorWidget(attrs=self.ueditor_settings)}
+        defaults.update(kwargs)
+        if defaults['widget'] == admin_widgets.AdminTextareaWidget:
+            defaults['widget'] = AdminUEditorWidget(attrs=self.ueditor_settings)
+        return super(UEditorField, self).formfield(**defaults)
+
+#以下支持south
+try:
+    from south.modelsinspector import add_introspection_rules
+    add_introspection_rules([], ["^DjangoUeditor\.models\.UEditorField"])
+except:
+    pass

+ 112 - 0
build/lib/DjangoUeditor/settings.py

@@ -0,0 +1,112 @@
+#coding:utf-8
+from django.conf import settings as gSettings   #全局设置
+
+#工具栏样式,可以添加任意多的模式
+TOOLBARS_SETTINGS={
+    "besttome":[['source','undo', 'redo','bold', 'italic', 'underline','forecolor', 'backcolor','superscript','subscript',"justifyleft","justifycenter","justifyright","insertorderedlist","insertunorderedlist","blockquote",'formatmatch',"removeformat",'autotypeset','inserttable',"pasteplain","wordimage","searchreplace","map","preview","fullscreen"], ['insertcode','paragraph',"fontfamily","fontsize",'link', 'unlink','insertimage','insertvideo','attachment','emotion',"date","time"]],
+    "mini":[['source','|','undo', 'redo', '|','bold', 'italic', 'underline','formatmatch','autotypeset', '|', 'forecolor', 'backcolor','|', 'link', 'unlink','|','simpleupload','attachment']],
+    "normal":[['source','|','undo', 'redo', '|','bold', 'italic', 'underline','removeformat', 'formatmatch','autotypeset', '|', 'forecolor', 'backcolor','|', 'link', 'unlink','|','simpleupload', 'emotion','attachment', '|','inserttable', 'deletetable', 'insertparagraphbeforetable', 'insertrow', 'deleterow', 'insertcol', 'deletecol', 'mergecells', 'mergeright', 'mergedown', 'splittocells', 'splittorows', 'splittocols']]
+}
+
+#默认的Ueditor设置,请参见ueditor.config.js
+UEditorSettings={
+    "toolbars":TOOLBARS_SETTINGS["normal"],
+    "autoFloatEnabled":False,
+    "defaultPathFormat":"%(basename)s_%(datetime)s_%(rnd)s.%(extname)s"   #默认保存上传文件的命名方式
+}
+#请参阅php文件夹里面的config.json进行配置
+UEditorUploadSettings={
+   #上传图片配置项
+    "imageActionName": "uploadimage", #执行上传图片的action名称
+    "imageMaxSize": 10485760, #上传大小限制,单位B,10M
+    "imageFieldName": "upfile", #* 提交的图片表单名称 */
+    "imageUrlPrefix":"",
+    "imagePathFormat":"",
+    "imageAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], #上传图片格式显示
+
+    #涂鸦图片上传配置项 */
+    "scrawlActionName": "uploadscrawl", #执行上传涂鸦的action名称 */
+    "scrawlFieldName": "upfile", #提交的图片表单名称 */
+    "scrawlMaxSize": 10485760, #上传大小限制,单位B  10M
+    "scrawlUrlPrefix":"",
+    "scrawlPathFormat":"",
+
+    #截图工具上传 */
+    "snapscreenActionName": "uploadimage", #执行上传截图的action名称 */
+    "snapscreenPathFormat":"",
+    "snapscreenUrlPrefix":"",
+
+    #抓取远程图片配置 */
+    "catcherLocalDomain": ["127.0.0.1", "localhost", "img.baidu.com"],
+    "catcherPathFormat":"",
+    "catcherActionName": "catchimage", #执行抓取远程图片的action名称 */
+    "catcherFieldName": "source", #提交的图片列表表单名称 */
+    "catcherMaxSize": 10485760, #上传大小限制,单位B */
+    "catcherAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], #抓取图片格式显示 */
+    "catcherUrlPrefix":"",
+    #上传视频配置 */
+    "videoActionName": "uploadvideo", #执行上传视频的action名称 */
+    "videoPathFormat":"",
+    "videoFieldName": "upfile", # 提交的视频表单名称 */
+    "videoMaxSize": 102400000, #上传大小限制,单位B,默认100MB */
+    "videoUrlPrefix":"",
+    "videoAllowFiles": [
+        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
+        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid"], #上传视频格式显示 */
+
+    #上传文件配置 */
+    "fileActionName": "uploadfile", #controller里,执行上传视频的action名称 */
+    "filePathFormat":"",
+    "fileFieldName": "upfile",#提交的文件表单名称 */
+    "fileMaxSize": 204800000, #上传大小限制,单位B,200MB */
+    "fileUrlPrefix": "",#文件访问路径前缀 */
+    "fileAllowFiles": [
+        ".png", ".jpg", ".jpeg", ".gif", ".bmp",
+        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
+        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
+        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
+        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml"
+    ], #上传文件格式显示 */
+
+    #列出指定目录下的图片 */
+    "imageManagerActionName": "listimage", #执行图片管理的action名称 */
+    "imageManagerListPath":"",
+    "imageManagerListSize": 30, #每次列出文件数量 */
+    "imageManagerAllowFiles": [".png", ".jpg", ".jpeg", ".gif", ".bmp"], #列出的文件类型 */
+    "imageManagerUrlPrefix": "",#图片访问路径前缀 */
+
+    #列出指定目录下的文件 */
+    "fileManagerActionName": "listfile", #执行文件管理的action名称 */
+    "fileManagerListPath":"",
+    "fileManagerUrlPrefix": "",
+    "fileManagerListSize": 30, #每次列出文件数量 */
+    "fileManagerAllowFiles": [
+        ".png", ".jpg", ".jpeg", ".gif", ".bmp",".tif",".psd"
+        ".flv", ".swf", ".mkv", ".avi", ".rm", ".rmvb", ".mpeg", ".mpg",
+        ".ogg", ".ogv", ".mov", ".wmv", ".mp4", ".webm", ".mp3", ".wav", ".mid",
+        ".rar", ".zip", ".tar", ".gz", ".7z", ".bz2", ".cab", ".iso",
+        ".doc", ".docx", ".xls", ".xlsx", ".ppt", ".pptx", ".pdf", ".txt", ".md", ".xml",
+        ".exe",".com",".dll",".msi"
+    ] #列出的文件类型 */
+}
+
+
+#更新配置:从用户配置文件settings.py重新读入配置UEDITOR_SETTINGS,覆盖默认
+def UpdateUserSettings():
+    UserSettings=getattr(gSettings,"UEDITOR_SETTINGS",{}).copy()
+    if UserSettings.has_key("config"):UEditorSettings.update(UserSettings["config"])
+    if UserSettings.has_key("upload"):UEditorUploadSettings.update(UserSettings["upload"])
+
+#读取用户Settings文件并覆盖默认配置
+UpdateUserSettings()
+
+
+#取得配置项参数
+def GetUeditorSettings(key,default=None):
+    if UEditorSettings.has_key(key):
+        return UEditorSettings[key]
+    else:
+        return default
+
+
+

+ 12 - 0
build/lib/DjangoUeditor/urls.py

@@ -0,0 +1,12 @@
+#coding:utf-8
+from django import VERSION
+if VERSION[0:2]>(1,3):
+    from django.conf.urls import patterns, url
+else:
+    from django.conf.urls.defaults import patterns, url
+
+from views import get_ueditor_controller
+
+urlpatterns = patterns('',
+    url(r'^controller/$',get_ueditor_controller)
+)

+ 122 - 0
build/lib/DjangoUeditor/utils.py

@@ -0,0 +1,122 @@
+#coding: utf-8
+
+#文件大小类
+class FileSize():
+    SIZE_UNIT={"Byte":1,"KB":1024,"MB":1048576,"GB":1073741824,"TB":1099511627776L}
+    def __init__(self,size):
+        self.size=long(FileSize.Format(size))
+
+    @staticmethod
+    def Format(size):
+        import re
+        if isinstance(size,int) or isinstance(size,long):
+            return size
+        else:
+            if not isinstance(size,str):
+                return 0
+            else:
+                oSize=size.lstrip().upper().replace(" ","")
+                pattern=re.compile(r"(\d*\.?(?=\d)\d*)(byte|kb|mb|gb|tb)",re.I)
+                match=pattern.match(oSize)
+                if match:
+                    m_size, m_unit=match.groups()
+                    if m_size.find(".")==-1:
+                        m_size=long(m_size)
+                    else:
+                        m_size=float(m_size)
+                    if m_unit!="BYTE":
+                        return m_size*FileSize.SIZE_UNIT[m_unit]
+                    else:
+                        return m_size
+                else:
+                    return 0
+
+    #返回字节为单位的值
+    @property
+    def size(self):
+        return self.size
+    @size.setter
+    def size(self,newsize):
+        try:
+            self.size=long(newsize)
+        except:
+            self.size=0
+
+    #返回带单位的自动值
+    @property
+    def FriendValue(self):
+        if self.size<FileSize.SIZE_UNIT["KB"]:
+            unit="Byte"
+        elif self.size<FileSize.SIZE_UNIT["MB"]:
+            unit="KB"
+        elif self.size<FileSize.SIZE_UNIT["GB"]:
+            unit="MB"
+        elif self.size<FileSize.SIZE_UNIT["TB"]:
+            unit="GB"
+        else:
+            unit="TB"
+
+        if (self.size % FileSize.SIZE_UNIT[unit])==0:
+            return "%s%s" % ((self.size / FileSize.SIZE_UNIT[unit]),unit)
+        else:
+            return "%0.2f%s" % (round(float(self.size) /float(FileSize.SIZE_UNIT[unit]) ,2),unit)
+
+    def __str__(self):
+        return self.FriendValue
+
+    #相加
+    def __add__(self, other):
+        if isinstance(other,FileSize):
+            return FileSize(other.size+self.size)
+        else:
+            return FileSize(FileSize(other).size+self.size)
+    def __sub__(self, other):
+        if isinstance(other,FileSize):
+            return FileSize(self.size-other.size)
+        else:
+            return FileSize(self.size-FileSize(other).size)
+    def __gt__(self, other):
+        if isinstance(other,FileSize):
+            if self.size>other.size:
+                return True
+            else:
+                return False
+        else:
+            if self.size>FileSize(other).size:
+                return True
+            else:
+                return False
+    def __lt__(self, other):
+        if isinstance(other,FileSize):
+            if other.size>self.size:
+                return True
+            else:
+                return False
+        else:
+            if FileSize(other).size > self.size:
+                return True
+            else:
+                return False
+    def __ge__(self, other):
+        if isinstance(other,FileSize):
+            if self.size>=other.size:
+                return True
+            else:
+                return False
+        else:
+            if self.size>=FileSize(other).size:
+                return True
+            else:
+                return False
+    def __le__(self, other):
+        if isinstance(other,FileSize):
+            if other.size>=self.size:
+                return True
+            else:
+                return False
+        else:
+            if FileSize(other).size >= self.size:
+                return True
+            else:
+                return False
+

+ 295 - 0
build/lib/DjangoUeditor/views.py

@@ -0,0 +1,295 @@
+#coding:utf-8
+from django.http import HttpResponse
+import settings as USettings
+import os
+import json
+from django.views.decorators.csrf import csrf_exempt
+import datetime,random
+import urllib
+
+#保存上传的文件
+def save_upload_file(PostFile,FilePath):
+    try:
+        f = open(FilePath, 'wb')
+        for chunk in PostFile.chunks():
+            f.write(chunk)
+    except Exception,E:
+        f.close()
+        return u"写入文件错误:"+ E.message
+    f.close()
+    return u"SUCCESS"
+
+
+@csrf_exempt
+def get_ueditor_settings(request):
+    return HttpResponse(json.dumps(USettings.UEditorUploadSettings,ensure_ascii=False), content_type="application/javascript")
+
+def get_ueditor_controller(request):
+    """获取ueditor的后端URL地址    """
+
+    action=request.GET.get("action","")
+    reponseAction={
+        "config":get_ueditor_settings,
+        "uploadimage":UploadFile,
+        "uploadscrawl":UploadFile,
+        "uploadvideo":UploadFile,
+        "uploadfile":UploadFile,
+        "catchimage":catcher_remote_image,
+        "listimage":list_files,
+        "listfile":list_files
+    }
+    return reponseAction[action](request)
+
+
+@csrf_exempt
+def list_files(request):
+    """列出文件"""
+    if request.method!="GET":
+        return  HttpResponse(json.dumps(u"{'state:'ERROR'}") ,content_type="application/javascript")
+    #取得动作
+    action=request.GET.get("action","listimage")
+
+    allowFiles={
+        "listfile":USettings.UEditorUploadSettings.get("fileManagerAllowFiles",[]),
+        "listimage":USettings.UEditorUploadSettings.get("imageManagerAllowFiles",[])
+    }
+    listSize={
+        "listfile":USettings.UEditorUploadSettings.get("fileManagerListSize",""),
+        "listimage":USettings.UEditorUploadSettings.get("imageManagerListSize","")
+    }
+    listpath={
+        "listfile":USettings.UEditorUploadSettings.get("fileManagerListPath",""),
+        "listimage":USettings.UEditorUploadSettings.get("imageManagerListPath","")
+    }
+    #取得参数
+    list_size=long(request.GET.get("size",listSize[action]))
+    list_start=long(request.GET.get("start",0))
+
+    files=[]
+    root_path=os.path.join(USettings.gSettings.MEDIA_ROOT,listpath[action]).replace("\\","/")
+    files=get_files(root_path,root_path,allowFiles[action])
+
+    if (len(files)==0):
+        return_info={
+            "state":u"未找到匹配文件!",
+            "list":[],
+            "start":list_start,
+            "total":0
+        }
+    else:
+        return_info={
+            "state":"SUCCESS",
+            "list":files[list_start:list_start+list_size],
+            "start":list_start,
+            "total":len(files)
+        }
+
+    return HttpResponse(json.dumps(return_info),content_type="application/javascript")
+
+
+def get_files(root_path,cur_path, allow_types=[]):
+    files = []
+    items = os.listdir(cur_path)
+    for item in items:
+        item=unicode(item)
+        item_fullname = os.path.join(root_path,cur_path, item).replace("\\", "/")
+        if os.path.isdir(item_fullname):
+            files.extend(get_files(root_path,item_fullname, allow_types))
+        else:
+            ext = os.path.splitext(item_fullname)[1]
+            is_allow_list= (len(allow_types)==0) or (ext in allow_types)
+            if is_allow_list:
+                files.append({
+                    "url":urllib.basejoin(USettings.gSettings.MEDIA_URL ,os.path.join(os.path.relpath(cur_path,root_path),item).replace("\\","/" )),
+                    "mtime":os.path.getmtime(item_fullname)
+                })
+
+    return files
+
+
+@csrf_exempt
+def UploadFile(request):
+    """上传文件"""
+    if not request.method=="POST":
+        return  HttpResponse(json.dumps(u"{'state:'ERROR'}"),content_type="application/javascript")
+
+    state="SUCCESS"
+    action=request.GET.get("action")
+    #上传文件
+    upload_field_name={
+        "uploadfile":"fileFieldName","uploadimage":"imageFieldName",
+        "uploadscrawl":"scrawlFieldName","catchimage":"catcherFieldName",
+        "uploadvideo":"videoFieldName",
+    }
+    UploadFieldName=request.GET.get(upload_field_name[action],USettings.UEditorUploadSettings.get(action,"upfile"))
+
+    #上传涂鸦,涂鸦是采用base64编码上传的,需要单独处理
+    if action=="uploadscrawl":
+        upload_file_name="scrawl.png"
+        upload_file_size=0
+    else:
+        #取得上传的文件
+        file=request.FILES.get(UploadFieldName,None)
+        if file is None:return  HttpResponse(json.dumps(u"{'state:'ERROR'}") ,content_type="application/javascript")
+        upload_file_name=file.name
+        upload_file_size=file.size
+
+    #取得上传的文件的原始名称
+    upload_original_name,upload_original_ext=os.path.splitext(upload_file_name)
+
+    #文件类型检验
+    upload_allow_type={
+        "uploadfile":"fileAllowFiles",
+        "uploadimage":"imageAllowFiles",
+        "uploadvideo":"videoAllowFiles"
+    }
+    if upload_allow_type.has_key(action):
+        allow_type= list(request.GET.get(upload_allow_type[action],USettings.UEditorUploadSettings.get(upload_allow_type[action],"")))
+        if not upload_original_ext  in allow_type:
+            state=u"服务器不允许上传%s类型的文件。" % upload_original_ext
+
+    #大小检验
+    upload_max_size={
+        "uploadfile":"filwMaxSize",
+        "uploadimage":"imageMaxSize",
+        "uploadscrawl":"scrawlMaxSize",
+        "uploadvideo":"videoMaxSize"
+    }
+    max_size=long(request.GET.get(upload_max_size[action],USettings.UEditorUploadSettings.get(upload_max_size[action],0)))
+    if  max_size!=0:
+        from utils import FileSize
+        MF=FileSize(max_size)
+        if upload_file_size>MF.size:
+            state=u"上传文件大小不允许超过%s。" % MF.FriendValue
+
+    #检测保存路径是否存在,如果不存在则需要创建
+    upload_path_format={
+        "uploadfile":"filePathFormat",
+        "uploadimage":"imagePathFormat",
+        "uploadscrawl":"scrawlPathFormat",
+        "uploadvideo":"videoPathFormat"
+    }
+
+    path_format_var={
+        "basename":upload_original_name,
+        "extname":upload_original_ext[1:],
+        "filename":upload_file_name,
+        "time":datetime.datetime.now().strftime("%H%M%S"),
+        "datetime":datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
+        "rnd":random.randrange(100,999)
+    }
+    #取得输出文件的路径
+    OutputPathFormat,OutputPath,OutputFile=get_output_path(request,upload_path_format[action],path_format_var)
+
+    #所有检测完成后写入文件
+    if state=="SUCCESS":
+        if action=="uploadscrawl":
+            state=save_scrawl_file(request,os.path.join(OutputPath,OutputFile))
+        else:
+            #保存到文件中,如果保存错误,需要返回ERROR
+            state=save_upload_file(file,os.path.join(OutputPath,OutputFile))
+
+    #返回数据
+    return_info = {
+        'url': urllib.basejoin(USettings.gSettings.MEDIA_URL , OutputPathFormat) ,                # 保存后的文件名称
+        'original': upload_file_name,                  #原始文件名
+        'type': upload_original_ext,
+        'state': state,                         #上传状态,成功时返回SUCCESS,其他任何值将原样返回至图片上传框中
+        'size': upload_file_size
+    }
+    return HttpResponse(json.dumps(return_info,ensure_ascii=False),content_type="application/javascript")
+
+@csrf_exempt
+def catcher_remote_image(request):
+    """远程抓图,当catchRemoteImageEnable:true时,
+        如果前端插入图片地址与当前web不在同一个域,则由本函数从远程下载图片到本地
+    """
+    if not request.method=="POST":
+        return  HttpResponse(json.dumps( u"{'state:'ERROR'}"),content_type="application/javascript")
+
+    state="SUCCESS"
+
+    allow_type= list(request.GET.get("catcherAllowFiles",USettings.UEditorUploadSettings.get("catcherAllowFiles","")))
+    max_size=long(request.GET.get("catcherMaxSize",USettings.UEditorUploadSettings.get("catcherMaxSize",0)))
+
+    remote_urls=request.POST.getlist("source[]",[])
+    catcher_infos=[]
+    path_format_var={
+        "time":datetime.datetime.now().strftime("%H%M%S"),
+        "date":datetime.datetime.now().strftime("%Y%m%d"),
+        "datetime":datetime.datetime.now().strftime("%Y%m%d%H%M%S"),
+        "rnd":random.randrange(100,999)
+    }
+    for remote_url in remote_urls:
+        #取得上传的文件的原始名称
+        remote_file_name=os.path.basename(remote_url)
+        remote_original_name,remote_original_ext=os.path.splitext(remote_file_name)
+        #文件类型检验
+        if remote_original_ext  in allow_type:
+            path_format_var.update({
+                "basename":remote_original_name,
+                "extname":remote_original_ext[1:],
+                "filename":remote_original_name
+            })
+            #计算保存的文件名
+            o_path_format,o_path,o_file=get_output_path(request,"catcherPathFormat",path_format_var)
+            o_filename=os.path.join(o_path,o_file).replace("\\","/")
+            #读取远程图片文件
+            try:
+                remote_image=urllib.urlopen(remote_url)
+                 #将抓取到的文件写入文件
+                try:
+                    f = open(o_filename, 'wb')
+                    f.write(remote_image.read())
+                    f.close()
+                    state="SUCCESS"
+                except Exception,E:
+                    state=u"写入抓取图片文件错误:%s" % E.message
+            except Exception,E:
+                state=u"抓取图片错误:%s" % E.message
+
+            catcher_infos.append({
+                "state":state,
+                "url":urllib.basejoin(USettings.gSettings.MEDIA_URL , o_path_format),
+                "size":os.path.getsize(o_filename),
+                "title":os.path.basename(o_file),
+                "original":remote_file_name,
+                "source":remote_url
+            })
+
+    return_info={
+        "state":"SUCCESS" if len(catcher_infos) >0 else "ERROR",
+        "list":catcher_infos
+    }
+
+    return HttpResponse(json.dumps(return_info,ensure_ascii=False),content_type="application/javascript")
+
+
+def get_output_path(request,path_format,path_format_var):
+    #取得输出文件的路径
+    OutputPathFormat=(request.GET.get(path_format,USettings.UEditorSettings["defaultPathFormat"]) % path_format_var).replace("\\","/")
+    #分解OutputPathFormat
+    OutputPath,OutputFile=os.path.split(OutputPathFormat)
+    OutputPath=os.path.join(USettings.gSettings.MEDIA_ROOT,OutputPath)
+    if not OutputFile:#如果OutputFile为空说明传入的OutputPathFormat没有包含文件名,因此需要用默认的文件名
+        OutputFile=USettings.UEditorSettings["defaultPathFormat"] % path_format_var
+        OutputPathFormat=os.path.join(OutputPathFormat,OutputFile)
+    if not os.path.exists(OutputPath):
+        os.makedirs(OutputPath)
+    return ( OutputPathFormat,OutputPath,OutputFile)
+
+#涂鸦功能上传处理
+@csrf_exempt
+def save_scrawl_file(request,filename):
+    import base64
+    try:
+        content=request.POST.get(USettings.UEditorUploadSettings.get("scrawlFieldName","upfile"))
+        f = open(filename, 'wb')
+        f.write(base64.decodestring(content))
+        f.close()
+        state="SUCCESS"
+    except Exception,E:
+        state="写入图片文件错误:%s" % E.message
+    return state
+
+

+ 151 - 0
build/lib/DjangoUeditor/widgets.py

@@ -0,0 +1,151 @@
+# coding:utf-8
+from django import forms
+from django.conf import settings
+from django.contrib.admin.widgets import AdminTextareaWidget
+from django.template.loader import render_to_string
+from django.utils.safestring import mark_safe
+from django.utils.http import urlencode
+import settings as USettings
+from  commands import *
+
+# 修正输入的文件路径,输入路径的标准格式:abc,不需要前后置的路径符号
+#如果输入的路径参数是一个函数则执行,否则可以拉接受时间格式化,用来生成如file20121208.bmp的重命名格式
+def calc_path(OutputPath, instance=None):
+    if callable(OutputPath):
+        try:
+            OutputPath = OutputPath(instance)
+        except:
+            OutputPath = ""
+    else:
+        try:
+            import datetime
+            OutputPath = datetime.datetime.now().strftime(OutputPath)
+        except:
+            pass
+
+    return OutputPath
+
+#width=600, height=300, toolbars="full", imagePath="", filePath="", upload_settings={},
+                # settings={},command=None,event_handler=None
+class UEditorWidget(forms.Textarea):
+    def __init__(self,attrs=None):
+
+        params=attrs.copy()
+
+        width=params.pop("width")
+        height=params.pop("height")
+        toolbars=params.pop("toolbars","full")
+        imagePath=params.pop("imagePath","")
+        filePath=params.pop("filePath","")
+        upload_settings=params.pop("upload_settings",{})
+        settings=params.pop("settings",{})
+        command=params.pop("command",None)
+        event_handler=params.pop("event_handler",None)
+
+        #扩展命令
+        self.command=command
+        self.event_handler=event_handler
+        #上传路径
+        self.upload_settings = upload_settings.copy()
+        self.upload_settings.update({
+            "imagePathFormat": imagePath,
+            "filePathFormat": filePath
+        })
+        #保存
+        self._upload_settings =self.upload_settings.copy()
+        self.recalc_path(None)
+
+        self.ueditor_settings ={
+            'toolbars':toolbars,
+            'initialFrameWidth':width,
+            'initialFrameHeight':height
+        }
+        #以下处理工具栏设置,将normal,mini等模式名称转化为工具栏配置值
+        try:
+            if type(toolbars)==str:
+                if toolbars =="full":
+                    del self.ueditor_settings['toolbars']
+                else:
+                    self.ueditor_settings["toolbars"]=USettings.TOOLBARS_SETTINGS[toolbars]
+        except:
+            pass
+        self.ueditor_settings.update(settings)
+        super(UEditorWidget, self).__init__(attrs)
+
+    def recalc_path(self, model_inst):
+        """计算上传路径,允许是function"""
+        try:
+            uSettings = self.upload_settings
+            if self._upload_settings.has_key("filePathFormat"):
+                uSettings['filePathFormat'] = calc_path(self._upload_settings['filePathFormat'], model_inst)
+            if self._upload_settings.has_key("imagePathFormat"):
+                uSettings['imagePathFormat'] = calc_path(self._upload_settings['imagePathFormat'], model_inst)
+            if self._upload_settings.has_key("scrawlPathFormat"):
+                uSettings['scrawlPathFormat'] = calc_path(self._upload_settings['scrawlPathFormat'], model_inst)
+            if self._upload_settings.has_key("videoPathFormat"):
+                uSettings['videoPathFormat'] = calc_path(self._upload_settings['videoPathFormat'], model_inst),
+            if self._upload_settings.has_key("snapscreenPathFormat"):
+                uSettings['snapscreenPathFormat'] = calc_path(self._upload_settings['snapscreenPathFormat'], model_inst)
+            if self._upload_settings.has_key("catcherPathFormat"):
+                uSettings['catcherPathFormat'] = calc_path(self._upload_settings['catcherPathFormat'], model_inst)
+            if self._upload_settings.has_key("imageManagerListPath"):
+                uSettings['imageManagerListPath'] = calc_path(self._upload_settings['imageManagerListPath'], model_inst)
+            if self._upload_settings.has_key("fileManagerListPath"):
+                uSettings['fileManagerListPath'] = calc_path(self._upload_settings['fileManagerListPath'], model_inst)
+            #设置默认值,未指定涂鸦、截图、远程抓图、图片目录时,默认均等于imagePath
+            if uSettings['imagePathFormat']!="":
+                uSettings['scrawlPathFormat']=uSettings['scrawlPathFormat'] if self._upload_settings.has_key("scrawlPathFormat") else uSettings['imagePathFormat']
+                uSettings['videoPathFormat']=uSettings['videoPathFormat'] if self._upload_settings.has_key("videoPathFormat") else uSettings['imagePathFormat']
+                uSettings['snapscreenPathFormat']=uSettings['snapscreenPathFormat'] if self._upload_settings.has_key("snapscreenPathFormat") else uSettings['imagePathFormat']
+                uSettings['catcherPathFormat']=uSettings['catcherPathFormat'] if self._upload_settings.has_key("catcherPathFormat") else uSettings['imagePathFormat']
+                uSettings['imageManagerListPath']=uSettings['imageManagerListPath'] if self._upload_settings.has_key("imageManagerListPath") else uSettings['imagePathFormat']
+            if uSettings['filePathFormat']!="":
+                uSettings['fileManagerListPath']=uSettings['fileManagerListPath'] if self._upload_settings.has_key("fileManagerListPath") else uSettings['filePathFormat']
+        except:
+            pass
+
+
+    def render(self, name, value, attrs=None):
+        if value is None: value = ''
+        #传入模板的参数
+        editor_id="id_%s" % name.replace("-", "_")
+        uSettings={
+            "name": name.replace("-", "_"),
+            "id": editor_id,
+            "value":value
+        }
+        if isinstance(self.command,list):
+            cmdjs=""
+            if isinstance(self.command,list):
+                for cmd in self.command:
+                    cmdjs=cmdjs+cmd.render(editor_id)
+            else:
+                cmdis=self.command.render(editor_id)
+            uSettings["commands"]=cmdjs
+
+
+        uSettings["settings"] = self.ueditor_settings.copy()
+        uSettings["settings"].update({
+            "serverUrl": "/ueditor/controller/?%s" % urlencode(self._upload_settings)
+        })
+        #生成事件侦听
+        if self.event_handler:
+            uSettings["bindEvents"]=self.event_handler.render(editor_id)
+
+        context = {
+            'UEditor': uSettings,
+            'STATIC_URL': settings.STATIC_URL,
+            'STATIC_ROOT': settings.STATIC_ROOT,
+            'MEDIA_URL': settings.MEDIA_URL,
+            'MEDIA_ROOT': settings.MEDIA_ROOT
+        }
+        return mark_safe(render_to_string('ueditor.html', context))
+
+    class Media:
+        js = ("ueditor/ueditor.config.js",
+              "ueditor/ueditor.all.min.js")
+
+
+class AdminUEditorWidget(AdminTextareaWidget,UEditorWidget ):
+    def __init__(self, **kwargs):
+        super(AdminUEditorWidget, self).__init__(**kwargs)

+ 5 - 0
readme.md

@@ -6,6 +6,7 @@ Ueditor HTML编辑器是百度开源的在线HTML编辑器,功能非常强大,
 ###[2014-6-27]
 
 * Fix:解决在admin管理后台的使用问题。
+* 增加year,month,day的上传路径变量
 
 ###[2014-6-25]
 
@@ -75,12 +76,16 @@ UEditorField的参数如下:
 * *width,height* :编辑器的宽度和高度,以像素为单位。
 * *toolbars* :配置你想显示的工具栏,取值为mini,normal,full,代表小,一般,全部。如果默认的工具栏的按钮数量不符合您的要求,您可以在settings里面配置自己的显示按钮。参见后面介绍。
 * *imagePath* :图片上传后保存的路径,如"images/",实现上传到"{{MEDIA_ROOT}}/images"文件夹。
+    注意:如果imagePath值只设置文件夹,则未尾要有"/"
     imagePath可以按python字符串格式化:如"images/%(basename)s_%(datetime)s.%(extname)"。这样如果上传test.png,则文件会
     被保存为"{{MEDIA_ROOT}}/images/test_20140625122399.png"。
     imagePath中可以使用的变量有:
     * time :上传时的时间,datetime.datetime.now().strftime("%H%M%S")
     * date :上传时的日期,datetime.datetime.now().strftime("%Y%m%d%")
     * datetime :上传时的时间和日期,datetime.datetime.now().strftime("%Y%m%d%H%M%S")
+    * year : 年
+    * month : 月
+    * day : 日
     * rnd : 三位随机数,random.randrange(100,999)
     * basename : 上传的文件名称,不包括扩展名
     * extname : 上传的文件扩展名

Algúns arquivos non se mostraron porque demasiados arquivos cambiaron neste cambio