zhangfisher 12 rokov pred
rodič
commit
d9ecfca05e

+ 139 - 241
.idea/workspace.xml

@@ -2,84 +2,6 @@
 <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/www/1.png" />
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/DUSite/data/d.png" />
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/DjangoUeditor/commands.py" />
-      <change type="NEW" beforePath="" afterPath="$PROJECT_DIR$/DjangoUeditor/templates/ueditor_old.html" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\.idea\inspectionProfiles\profiles_settings.xml" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\css\base.css" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\css\changelists.css" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\css\dashboard.css" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\css\forms.css" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\css\ie.css" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\css\login.css" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\css\rtl.css" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\css\widgets.css" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\changelist-bg.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\changelist-bg_rtl.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\chooser-bg.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\chooser_stacked-bg.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\default-bg-reverse.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\default-bg.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\deleted-overlay.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\gis\move_vertex_off.png" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\gis\move_vertex_on.png" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon-no.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon-unknown.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon-yes.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon_addlink.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon_alert.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon_calendar.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon_changelink.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon_clock.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon_deletelink.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon_error.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon_searchbox.png" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\icon_success.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\inline-delete-8bit.png" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\inline-delete.png" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\inline-restore-8bit.png" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\inline-restore.png" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\inline-splitter-bg.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\nav-bg-grabber.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\nav-bg-reverse.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\nav-bg-selected.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\nav-bg.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\selector-icons.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\selector-search.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\sorting-icons.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\tool-left.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\tool-left_over.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\tool-right.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\tool-right_over.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\tooltag-add.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\tooltag-add_over.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\tooltag-arrowright.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\img\tooltag-arrowright_over.gif" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\LICENSE-JQUERY.txt" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\SelectBox.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\SelectFilter2.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\actions.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\actions.min.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\admin\DateTimeShortcuts.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\admin\RelatedObjectLookups.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\admin\ordering.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\calendar.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\collapse.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\collapse.min.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\compress.py" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\core.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\getElementsBySelector.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\inlines.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\inlines.min.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\jquery.init.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\jquery.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\jquery.min.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\prepopulate.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\prepopulate.min.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\timeparse.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DUSite\www\admin\js\urlify.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\fields.py" afterPath="" />
       <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,7 +11,6 @@
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\dialogs\image\images\right_focus.jpg" afterPath="" />
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\dialogs\tangram.js" afterPath="" />
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\dialogs\video\callbacks.js" afterPath="" />
-      <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\index.html" afterPath="" />
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\lang\en\images\imglabel.png" afterPath="" />
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\lang\zh-cn\images\imglabel.png" afterPath="" />
       <change type="DELETED" beforePath="C:\work\Code\workspace\DjangoUeditor\DjangoUeditor\static\ueditor\themes\gorgeous\css\ueditor.css" afterPath="" />
@@ -167,27 +88,11 @@
       <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="MOVED" beforePath="C:\work\Code\workspace\DjangoUeditor\readme.txt" afterPath="$PROJECT_DIR$/readme.md" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DUSite/test.db" afterPath="$PROJECT_DIR$/DUSite/test.db" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/DjangoUeditor.iml" afterPath="$PROJECT_DIR$/.idea/DjangoUeditor.iml" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/MANIFEST" afterPath="$PROJECT_DIR$/MANIFEST" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/.idea/encodings.xml" afterPath="$PROJECT_DIR$/.idea/encodings.xml" />
-      <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$/manage.py" afterPath="$PROJECT_DIR$/manage.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DjangoUeditor/models.py" afterPath="$PROJECT_DIR$/DjangoUeditor/models.py" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DjangoUeditor/commands.py" afterPath="$PROJECT_DIR$/DjangoUeditor/commands.py" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/TestApp/models.py" afterPath="$PROJECT_DIR$/TestApp/models.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DUSite/settings.py" afterPath="$PROJECT_DIR$/DUSite/settings.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DjangoUeditor/settings.py" afterPath="$PROJECT_DIR$/DjangoUeditor/settings.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/setup.py" afterPath="$PROJECT_DIR$/setup.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DUSite/templates/test.html" afterPath="$PROJECT_DIR$/DUSite/templates/test.html" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DjangoUeditor/static/ueditor/ueditor.config.js" afterPath="$PROJECT_DIR$/DjangoUeditor/static/ueditor/ueditor.config.js" />
+      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/readme.md" afterPath="$PROJECT_DIR$/readme.md" />
       <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$/DjangoUeditor/urls.py" afterPath="$PROJECT_DIR$/DjangoUeditor/urls.py" />
-      <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DjangoUeditor/utils.py" afterPath="$PROJECT_DIR$/DjangoUeditor/utils.py" />
       <change type="MODIFICATION" beforePath="$PROJECT_DIR$/DjangoUeditor/views.py" afterPath="$PROJECT_DIR$/DjangoUeditor/views.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$/.idea/workspace.xml" afterPath="$PROJECT_DIR$/.idea/workspace.xml" />
     </list>
@@ -215,11 +120,19 @@
       <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="2389" max-vertical-offset="3212">
-              <caret line="117" column="9" selection-start-line="117" selection-start-column="9" selection-end-line="117" selection-end-column="9" />
-              <folding>
-                <element signature="e#15#39#0" expanded="true" />
-              </folding>
+            <state vertical-scroll-proportion="0.0" vertical-offset="2350" max-vertical-offset="3036">
+              <caret line="120" column="0" selection-start-line="120" selection-start-column="0" selection-end-line="120" selection-end-column="0" />
+              <folding />
+            </state>
+          </provider>
+        </entry>
+      </file>
+      <file leaf-file-name="settings.py" pinned="false" current="false" current-in-tab="false">
+        <entry file="file://$PROJECT_DIR$/DjangoUeditor/settings.py">
+          <provider selected="true" editor-type-id="text-editor">
+            <state vertical-scroll-proportion="0.0" vertical-offset="1917" max-vertical-offset="2596">
+              <caret line="96" column="35" selection-start-line="96" selection-start-column="29" selection-end-line="96" selection-end-column="35" />
+              <folding />
             </state>
           </provider>
         </entry>
@@ -227,11 +140,9 @@
       <file leaf-file-name="commands.py" pinned="false" current="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/DjangoUeditor/commands.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0" vertical-offset="44" max-vertical-offset="3718">
-              <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#15#28#0" expanded="true" />
-              </folding>
+            <state vertical-scroll-proportion="0.0" vertical-offset="2009" max-vertical-offset="4114">
+              <caret line="111" column="17" selection-start-line="111" selection-start-column="17" selection-end-line="111" selection-end-column="17" />
+              <folding />
             </state>
           </provider>
         </entry>
@@ -239,20 +150,21 @@
       <file leaf-file-name="views.py" pinned="false" current="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/TestApp/views.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="946">
-              <caret line="37" column="45" selection-start-line="37" selection-start-column="45" selection-end-line="37" selection-end-column="45" />
-              <folding>
-                <element signature="e#14#60#0" expanded="true" />
-              </folding>
+            <state vertical-scroll-proportion="0.0" vertical-offset="300" max-vertical-offset="858">
+              <caret line="28" column="43" selection-start-line="28" selection-start-column="43" selection-end-line="28" selection-end-column="43" />
+              <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="readme.md" pinned="false" current="false" current-in-tab="false">
+      <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.0" vertical-offset="1892" max-vertical-offset="3938">
-              <caret line="90" column="25" selection-start-line="90" selection-start-column="25" selection-end-line="90" selection-end-column="25" />
+          <provider selected="true" editor-type-id="MarkdownPreviewEditor">
+            <state />
+          </provider>
+          <provider editor-type-id="text-editor">
+            <state vertical-scroll-proportion="0.0" vertical-offset="5456" max-vertical-offset="5808">
+              <caret line="257" column="3" selection-start-line="257" selection-start-column="3" selection-end-line="257" selection-end-column="3" />
               <folding />
             </state>
           </provider>
@@ -261,18 +173,18 @@
       <file leaf-file-name="models.py" pinned="false" current="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/DjangoUeditor/models.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0" vertical-offset="227" max-vertical-offset="814">
+            <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="814">
               <caret line="14" column="168" selection-start-line="14" selection-start-column="168" selection-end-line="14" selection-end-column="168" />
               <folding />
             </state>
           </provider>
         </entry>
       </file>
-      <file leaf-file-name="ueditor.html" pinned="false" current="true" current-in-tab="true">
+      <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.36164382" vertical-offset="0" max-vertical-offset="365">
-              <caret line="6" column="9" selection-start-line="6" selection-start-column="9" selection-end-line="6" selection-end-column="9" />
+            <state vertical-scroll-proportion="-4.967742" vertical-offset="0" max-vertical-offset="330">
+              <caret line="7" column="35" selection-start-line="7" selection-start-column="35" selection-end-line="7" selection-end-column="35" />
               <folding />
             </state>
           </provider>
@@ -281,8 +193,8 @@
       <file leaf-file-name="models.py" pinned="false" current="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/TestApp/models.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0" vertical-offset="748" max-vertical-offset="1342">
-              <caret line="40" column="25" selection-start-line="40" selection-start-column="25" selection-end-line="40" selection-end-column="25" />
+            <state vertical-scroll-proportion="0.0" vertical-offset="132" max-vertical-offset="1694">
+              <caret line="15" column="0" selection-start-line="15" selection-start-column="0" selection-end-line="30" selection-end-column="11" />
               <folding>
                 <element signature="e#16#44#0" expanded="true" />
               </folding>
@@ -293,11 +205,9 @@
       <file leaf-file-name="views.py" pinned="false" current="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/DjangoUeditor/views.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0" vertical-offset="396" max-vertical-offset="6622">
-              <caret line="32" column="38" selection-start-line="32" selection-start-column="38" selection-end-line="32" selection-end-column="38" />
-              <folding>
-                <element signature="e#14#50#0" expanded="true" />
-              </folding>
+            <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>
@@ -305,7 +215,7 @@
       <file leaf-file-name="forms.py" pinned="false" current="false" current-in-tab="false">
         <entry file="file://$PROJECT_DIR$/DjangoUeditor/forms.py">
           <provider selected="true" editor-type-id="text-editor">
-            <state vertical-scroll-proportion="0.0" vertical-offset="12" max-vertical-offset="836">
+            <state vertical-scroll-proportion="0.0" vertical-offset="242" max-vertical-offset="880">
               <caret line="11" column="29" selection-start-line="11" selection-start-column="29" selection-end-line="11" selection-end-column="29" />
               <folding />
             </state>
@@ -332,8 +242,6 @@
         <option value="$PROJECT_DIR$/DjangoUeditor/fields.py" />
         <option value="$PROJECT_DIR$/TestApp/forms.py" />
         <option value="$PROJECT_DIR$/DjangoUeditor/static/ueditor/php/config.json" />
-        <option value="$PROJECT_DIR$/DjangoUeditor/settings.py" />
-        <option value="$PROJECT_DIR$/DjangoUeditor/views.py" />
         <option value="$PROJECT_DIR$/DjangoUeditor/urls.py" />
         <option value="$PROJECT_DIR$/DUSite/templates/test.html" />
         <option value="$PROJECT_DIR$/DjangoUeditor/static/ueditor/ueditor.config.js" />
@@ -342,10 +250,13 @@
         <option value="$PROJECT_DIR$/TestApp/views.py" />
         <option value="$PROJECT_DIR$/DjangoUeditor/forms.py" />
         <option value="$PROJECT_DIR$/DjangoUeditor/models.py" />
-        <option value="$PROJECT_DIR$/TestApp/models.py" />
+        <option value="$PROJECT_DIR$/DjangoUeditor/views.py" />
         <option value="$PROJECT_DIR$/DjangoUeditor/commands.py" />
         <option value="$PROJECT_DIR$/DjangoUeditor/widgets.py" />
         <option value="$PROJECT_DIR$/DjangoUeditor/templates/ueditor.html" />
+        <option value="$PROJECT_DIR$/TestApp/models.py" />
+        <option value="$PROJECT_DIR$/DjangoUeditor/settings.py" />
+        <option value="$PROJECT_DIR$/readme.md" />
       </list>
     </option>
   </component>
@@ -622,27 +533,7 @@
       <option name="PARAMETERS" value="" />
       <method />
     </configuration>
-    <configuration default="true" type="tests" factoryName="Unittests">
-      <option name="INTERPRETER_OPTIONS" value="" />
-      <option name="PARENT_ENVS" value="true" />
-      <envs />
-      <option name="SDK_HOME" value="" />
-      <option name="WORKING_DIRECTORY" value="" />
-      <option name="IS_MODULE_SDK" value="false" />
-      <option name="ADD_CONTENT_ROOTS" value="true" />
-      <option name="ADD_SOURCE_ROOTS" value="true" />
-      <module name="DjangoUeditor" />
-      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
-      <option name="SCRIPT_NAME" value="" />
-      <option name="CLASS_NAME" value="" />
-      <option name="METHOD_NAME" value="" />
-      <option name="FOLDER_NAME" value="" />
-      <option name="TEST_TYPE" value="TEST_SCRIPT" />
-      <option name="PATTERN" value="" />
-      <option name="USE_PATTERN" value="false" />
-      <option name="PUREUNITTEST" value="true" />
-      <option name="PARAMS" value="" />
-      <option name="USE_PARAM" value="false" />
+    <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
       <method />
     </configuration>
     <configuration default="true" type="Python.DjangoServer" factoryName="Django server">
@@ -668,7 +559,27 @@
       <option name="customRunCommand" value="" />
       <method />
     </configuration>
-    <configuration default="true" type="JavascriptDebugType" factoryName="JavaScript Debug">
+    <configuration default="true" type="tests" factoryName="Unittests">
+      <option name="INTERPRETER_OPTIONS" value="" />
+      <option name="PARENT_ENVS" value="true" />
+      <envs />
+      <option name="SDK_HOME" value="" />
+      <option name="WORKING_DIRECTORY" value="" />
+      <option name="IS_MODULE_SDK" value="false" />
+      <option name="ADD_CONTENT_ROOTS" value="true" />
+      <option name="ADD_SOURCE_ROOTS" value="true" />
+      <module name="DjangoUeditor" />
+      <EXTENSION ID="PythonCoverageRunConfigurationExtension" enabled="false" sample_coverage="true" runner="coverage.py" />
+      <option name="SCRIPT_NAME" value="" />
+      <option name="CLASS_NAME" value="" />
+      <option name="METHOD_NAME" value="" />
+      <option name="FOLDER_NAME" value="" />
+      <option name="TEST_TYPE" value="TEST_SCRIPT" />
+      <option name="PATTERN" value="" />
+      <option name="USE_PATTERN" value="false" />
+      <option name="PUREUNITTEST" value="true" />
+      <option name="PARAMS" value="" />
+      <option name="USE_PARAM" value="false" />
       <method />
     </configuration>
     <configuration default="true" type="tests" factoryName="Doctests">
@@ -755,16 +666,15 @@
   </component>
   <component name="ToolWindowManager">
     <frame x="-8" y="-8" width="1382" height="744" extended-state="6" />
-    <editor active="false" />
+    <editor active="true" />
     <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="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32879046" sideWeight="0.5" order="1" 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="true" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.1918429" 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.2793867" sideWeight="0.5" order="3" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.19486405" 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.31282052" 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" />
@@ -773,10 +683,32 @@
       <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
       <window_info id="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
       <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32879046" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
       <window_info id="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
-      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
       <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
     </layout>
+    <layout-to-restore>
+      <window_info id="Cvs" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Data Sources" 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="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="Message" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="0" 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="10" side_tool="false" content_ui="tabs" />
+      <window_info id="Find" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.32879046" sideWeight="0.5" order="1" side_tool="false" content_ui="tabs" />
+      <window_info id="Ant Build" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="1" 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="4" side_tool="false" content_ui="tabs" />
+      <window_info id="Debug" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.2793867" 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="8" side_tool="true" content_ui="tabs" />
+      <window_info id="Version Control" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.33" sideWeight="0.5" order="9" 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="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="Commander" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="0" side_tool="false" content_ui="tabs" />
+      <window_info id="Project" active="false" anchor="left" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="true" weight="0.19724771" sideWeight="0.36784142" order="0" side_tool="false" content_ui="combo" />
+      <window_info id="Inspection" active="false" anchor="bottom" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.4" sideWeight="0.5" order="5" side_tool="false" content_ui="tabs" />
+      <window_info id="Hierarchy" active="false" anchor="right" auto_hide="false" internal_type="DOCKED" type="DOCKED" visible="false" weight="0.25" sideWeight="0.5" order="2" side_tool="false" content_ui="combo" />
+      <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" />
+    </layout-to-restore>
   </component>
   <component name="Vcs.Log.UiProperties">
     <option name="RECENTLY_FILTERED_USER_GROUPS">
@@ -797,7 +729,7 @@
   </component>
   <component name="XDebuggerManager">
     <breakpoint-manager>
-      <option name="time" value="180" />
+      <option name="time" value="190" />
     </breakpoint-manager>
   </component>
   <component name="editorHistoryManager">
@@ -805,9 +737,7 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="2834" max-vertical-offset="4356">
           <caret line="39" column="9" selection-start-line="39" selection-start-column="9" selection-end-line="39" selection-end-column="9" />
-          <folding>
-            <element signature="e#14#50#0" expanded="true" />
-          </folding>
+          <folding />
         </state>
       </provider>
     </entry>
@@ -815,7 +745,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="6998" max-vertical-offset="9218">
           <caret line="340" column="35" selection-start-line="340" selection-start-column="35" selection-end-line="340" selection-end-column="35" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -830,9 +759,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.28387097" vertical-offset="0" max-vertical-offset="396">
           <caret line="4" column="18" selection-start-line="4" selection-start-column="4" selection-end-line="4" selection-end-column="22" />
-          <folding>
-            <element signature="e#22#31#0" expanded="false" />
-          </folding>
         </state>
       </provider>
     </entry>
@@ -879,7 +805,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="1.2704626" vertical-offset="1909" max-vertical-offset="8162">
           <caret line="110" column="0" selection-start-line="110" selection-start-column="0" selection-end-line="110" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -887,7 +812,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.33333334" vertical-offset="8042" max-vertical-offset="18942">
           <caret line="384" column="8" selection-start-line="384" selection-start-column="8" selection-end-line="384" selection-end-column="8" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -895,7 +819,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.3323077" vertical-offset="3654" max-vertical-offset="24816">
           <caret line="195" column="8" selection-start-line="195" selection-start-column="8" selection-end-line="195" selection-end-column="8" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -903,7 +826,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.3323077" vertical-offset="10826" max-vertical-offset="31218">
           <caret line="522" column="0" selection-start-line="522" selection-start-column="0" selection-end-line="522" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -942,7 +864,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="-11.060551" vertical-offset="6600" max-vertical-offset="7150">
           <caret line="37" column="7" selection-start-line="37" selection-start-column="7" selection-end-line="37" selection-end-column="7" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -958,9 +879,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.68817204" vertical-offset="1310" max-vertical-offset="6138">
           <caret line="77" column="29" selection-start-line="77" selection-start-column="29" selection-end-line="77" selection-end-column="29" />
-          <folding>
-            <element signature="e#0#39#0" expanded="true" />
-          </folding>
         </state>
       </provider>
     </entry>
@@ -975,7 +893,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.33211678" vertical-offset="7235" max-vertical-offset="12958">
           <caret line="349" column="0" selection-start-line="349" selection-start-column="0" selection-end-line="349" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -983,7 +900,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.1702509" vertical-offset="6153" max-vertical-offset="26884">
           <caret line="299" column="0" selection-start-line="299" selection-start-column="0" selection-end-line="299" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -994,7 +910,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="-11.615385" vertical-offset="2558" max-vertical-offset="3520">
           <caret line="130" column="39" selection-start-line="130" selection-start-column="39" selection-end-line="130" selection-end-column="39" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1017,9 +932,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.6339286" vertical-offset="755" max-vertical-offset="2178">
           <caret line="44" column="28" selection-start-line="44" selection-start-column="28" selection-end-line="44" selection-end-column="28" />
-          <folding>
-            <element signature="n#!!doc" expanded="true" />
-          </folding>
         </state>
       </provider>
     </entry>
@@ -1027,7 +939,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="560">
           <caret line="0" column="0" selection-start-line="0" selection-start-column="0" selection-end-line="0" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1035,7 +946,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.37931034" vertical-offset="1067" max-vertical-offset="1386">
           <caret line="56" column="0" selection-start-line="56" selection-start-column="0" selection-end-line="56" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1061,7 +971,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.3322884" vertical-offset="5812" max-vertical-offset="9988">
           <caret line="269" column="0" selection-start-line="269" selection-start-column="0" selection-end-line="269" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1069,7 +978,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="-2.1504703" vertical-offset="2468" max-vertical-offset="11176">
           <caret line="97" column="8" selection-start-line="97" selection-start-column="8" selection-end-line="97" selection-end-column="8" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1085,7 +993,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="-9.935484" vertical-offset="0" max-vertical-offset="462">
           <caret line="14" column="0" selection-start-line="14" selection-start-column="0" selection-end-line="14" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1093,7 +1000,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="1452" max-vertical-offset="9152">
           <caret line="76" column="25" selection-start-line="76" selection-start-column="11" selection-end-line="76" selection-end-column="25" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1101,7 +1007,6 @@
       <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>
@@ -1109,15 +1014,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="528">
           <caret line="7" column="36" selection-start-line="7" selection-start-column="36" selection-end-line="7" selection-end-column="36" />
-          <folding />
-        </state>
-      </provider>
-    </entry>
-    <entry file="file://$PROJECT_DIR$/DjangoUeditor/settings.py">
-      <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="1719" max-vertical-offset="2596">
-          <caret line="83" column="33" selection-start-line="83" selection-start-column="31" selection-end-line="83" selection-end-column="33" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1133,15 +1029,6 @@
       <provider selected="true" editor-type-id="text-editor">
         <state vertical-scroll-proportion="0.33333334" vertical-offset="1434" max-vertical-offset="7106">
           <caret line="80" column="0" selection-start-line="80" selection-start-column="0" selection-end-line="80" selection-end-column="0" />
-          <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.3325527" vertical-offset="9978" max-vertical-offset="12672">
-          <caret line="474" column="0" selection-start-line="474" selection-start-column="0" selection-end-line="474" selection-end-column="0" />
-          <folding />
         </state>
       </provider>
     </entry>
@@ -1165,74 +1052,85 @@
     </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="396" max-vertical-offset="6622">
-          <caret line="32" column="38" selection-start-line="32" selection-start-column="38" selection-end-line="32" selection-end-column="38" />
-          <folding>
-            <element signature="e#14#50#0" expanded="true" />
-          </folding>
+        <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://$PROJECT_DIR$/TestApp/models.py">
+    <entry file="file://$PROJECT_DIR$/DjangoUeditor/models.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="748" max-vertical-offset="1342">
-          <caret line="40" column="25" selection-start-line="40" selection-start-column="25" selection-end-line="40" selection-end-column="25" />
-          <folding>
-            <element signature="e#16#44#0" expanded="true" />
-          </folding>
+        <state vertical-scroll-proportion="0.0" vertical-offset="227" max-vertical-offset="814">
+          <caret line="14" column="168" selection-start-line="14" selection-start-column="168" selection-end-line="14" selection-end-column="168" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/readme.md">
+    <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.0" vertical-offset="1892" max-vertical-offset="3938">
-          <caret line="90" column="25" selection-start-line="90" selection-start-column="25" selection-end-line="90" selection-end-column="25" />
+        <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>
-    <entry file="file://$PROJECT_DIR$/DjangoUeditor/models.py">
+    <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="227" max-vertical-offset="814">
-          <caret line="14" column="168" selection-start-line="14" selection-start-column="168" selection-end-line="14" selection-end-column="168" />
+        <state vertical-scroll-proportion="-4.967742" vertical-offset="0" max-vertical-offset="330">
+          <caret line="7" column="35" selection-start-line="7" selection-start-column="35" selection-end-line="7" selection-end-column="35" />
           <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/TestApp/views.py">
+    <entry file="file://$PROJECT_DIR$/TestApp/models.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="0" max-vertical-offset="946">
-          <caret line="37" column="45" selection-start-line="37" selection-start-column="45" selection-end-line="37" selection-end-column="45" />
+        <state vertical-scroll-proportion="0.0" vertical-offset="132" max-vertical-offset="1694">
+          <caret line="15" column="0" selection-start-line="15" selection-start-column="0" selection-end-line="30" selection-end-column="11" />
           <folding>
-            <element signature="e#14#60#0" expanded="true" />
+            <element signature="e#16#44#0" expanded="true" />
           </folding>
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/DjangoUeditor/commands.py">
+    <entry file="file://$PROJECT_DIR$/DjangoUeditor/widgets.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="44" max-vertical-offset="3718">
-          <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#15#28#0" expanded="true" />
-          </folding>
+        <state vertical-scroll-proportion="0.0" vertical-offset="2350" max-vertical-offset="3036">
+          <caret line="120" column="0" selection-start-line="120" selection-start-column="0" selection-end-line="120" selection-end-column="0" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/DjangoUeditor/widgets.py">
+    <entry file="file://$PROJECT_DIR$/DjangoUeditor/settings.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.0" vertical-offset="2389" max-vertical-offset="3212">
-          <caret line="117" column="9" selection-start-line="117" selection-start-column="9" selection-end-line="117" selection-end-column="9" />
-          <folding>
-            <element signature="e#15#39#0" expanded="true" />
-          </folding>
+        <state vertical-scroll-proportion="0.0" vertical-offset="1917" max-vertical-offset="2596">
+          <caret line="96" column="35" selection-start-line="96" selection-start-column="29" selection-end-line="96" selection-end-column="35" />
+          <folding />
         </state>
       </provider>
     </entry>
-    <entry file="file://$PROJECT_DIR$/DjangoUeditor/templates/ueditor.html">
+    <entry file="file://$PROJECT_DIR$/DjangoUeditor/commands.py">
       <provider selected="true" editor-type-id="text-editor">
-        <state vertical-scroll-proportion="0.36164382" vertical-offset="0" max-vertical-offset="365">
-          <caret line="6" column="9" selection-start-line="6" selection-start-column="9" selection-end-line="6" selection-end-column="9" />
+        <state vertical-scroll-proportion="0.0" vertical-offset="2009" max-vertical-offset="4114">
+          <caret line="111" column="17" selection-start-line="111" selection-start-column="17" selection-end-line="111" selection-end-column="17" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/TestApp/views.py">
+      <provider selected="true" editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0" vertical-offset="212" max-vertical-offset="858">
+          <caret line="28" column="43" selection-start-line="28" selection-start-column="43" selection-end-line="28" selection-end-column="43" />
+          <folding />
+        </state>
+      </provider>
+    </entry>
+    <entry file="file://$PROJECT_DIR$/readme.md">
+      <provider selected="true" editor-type-id="MarkdownPreviewEditor">
+        <state />
+      </provider>
+      <provider editor-type-id="text-editor">
+        <state vertical-scroll-proportion="0.0" vertical-offset="5456" max-vertical-offset="5808">
+          <caret line="257" column="3" selection-start-line="257" selection-start-column="3" selection-end-line="257" selection-end-column="3" />
           <folding />
         </state>
       </provider>

+ 22 - 3
DjangoUeditor/commands.py

@@ -5,12 +5,31 @@ import settings as USettings
 
 class UEditorEventHandler(object):
     """用来处理UEditor的事件侦听"""
-    def onSelectionChange(self):
+    def on_selectionchange(self):
         return ""
-    def onContentChange(self):
+    def on_contentchange(self):
         return ""
     def render(self,editorID):
-        events=filter(lambda x: x[0:2]=="on", dir(self))
+        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):
     """

BIN
DjangoUeditor/commands.pyc


+ 5 - 2
DjangoUeditor/templates/ueditor.html

@@ -1,7 +1,10 @@
- <script id="id_{{ UEditor.id }}" name="{{ UEditor.name }}" type="text/plain">
+ <script id="{{ UEditor.id }}" name="{{ UEditor.name }}" type="text/plain">
      {{ UEditor.value|safe }}
  </script>
 <script type="text/javascript">
     {{ UEditor.commands|safe }}
-    var id_{{ UEditor.id  }} = UE.getEditor('id_{{ UEditor.id  }}',{{ UEditor.settings|safe }});
+    var {{ UEditor.id  }} = UE.getEditor('{{ UEditor.id  }}',{{ UEditor.settings|safe }});
+     {{ UEditor.id  }}.ready(function(){
+         {{ UEditor.bindEvents|safe }}
+     });
 </script>

+ 1 - 1
DjangoUeditor/views.py

@@ -29,7 +29,6 @@ def get_ueditor_controller(request):
 
     action=request.GET.get("action","")
     reponseAction={
-        #返回ueditor的上传功能的后端配置,由于我们采用通过前端配置传入,此处默认传回一个空配置即可
         "config":get_ueditor_settings,
         "uploadimage":UploadFile,
         "uploadscrawl":UploadFile,
@@ -217,6 +216,7 @@ def catcher_remote_image(request):
     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)
     }

BIN
DjangoUeditor/views.pyc


+ 7 - 8
DjangoUeditor/widgets.py

@@ -19,7 +19,6 @@ def calc_path(OutputPath, instance=None):
     else:
         try:
             import datetime
-
             OutputPath = datetime.datetime.now().strftime(OutputPath)
         except:
             pass
@@ -96,18 +95,19 @@ class UEditorWidget(forms.Textarea):
     def render(self, name, value, attrs=None):
         if value is None: value = ''
         #传入模板的参数
+        editor_id="id_%s" % name.replace("-", "_")
         uSettings={
             "name": name.replace("-", "_"),
-            "id": name,
+            "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("id_%s" % name.replace("-", "_"))
+                    cmdjs=cmdjs+cmd.render(editor_id)
             else:
-                cmdis=self.command.render("id_%s" % name.replace("-", "_"))
+                cmdis=self.command.render(editor_id)
             uSettings["commands"]=cmdjs
 
 
@@ -115,7 +115,9 @@ class UEditorWidget(forms.Textarea):
         uSettings["settings"].update({
             "serverUrl": "/ueditor/controller/?%s" % urlencode(self.upload_settings)
         })
-        #uSettings["settings"]["bindEvents"]=self.event_handler.render()
+        #生成事件侦听
+        if self.event_handler:
+            uSettings["bindEvents"]=self.event_handler.render(editor_id)
 
         context = {
             'UEditor': uSettings,
@@ -127,9 +129,6 @@ class UEditorWidget(forms.Textarea):
         return mark_safe(render_to_string('ueditor.html', context))
 
     class Media:
-        # css = {"all": ("ueditor/themes/default/css/ueditor.css",
-        #                "ueditor/themes/iframe.css",
-        # )}
         js = ("ueditor/ueditor.config.js",
               "ueditor/ueditor.all.min.js")
 

BIN
DjangoUeditor/widgets.pyc


+ 19 - 3
TestApp/models.py

@@ -13,6 +13,23 @@ def getImagePath(model_instance=None):
 def getDescImagePath(model_instance=None):
         return "aaa/"
 
+class myEventHander(UEditorEventHandler):
+    def on_selectionchange(self):
+        return """
+            function getButton(btnName){
+                var items=%(editor)s.ui.toolbars[0].items;
+                for(item in items){
+                    if(items[item].name==btnName){
+                        return items[item];
+                    }
+                }
+            }
+            var btn=getButton("mybtn1");
+            var selRanage=id_Description.selection.getRange()
+            btn.setDisabled(selRanage.startOffset == selRanage.endOffset);
+
+        """
+
 class myBtn(UEditorButtonCommand):
     def onClick(self):
         return u"""
@@ -46,9 +63,8 @@ class Blog(models.Model):
     Name = models.CharField(u'姓名', max_length=100, blank=True)
     Description = UEditorField(u'描述', blank=True, toolbars="full", imagePath="cool/", settings={"a": 1},
                                command=[myBtn(uiName="mybtn1", icon="d.png", title=u"1摸我", ajax_url="/ajaxcmd/"),
-                                        myBtn(uiName="mybtn2",index=22, icon="d.png", title=u"2摸我", ajax_url="/ajaxcmd/"),
-                                        myCombo(uiName="myCombo3",title=u"ccc",initValue="aaa")
-                                        ])
+                                       myCombo(uiName="myCombo3",title=u"ccc",initValue="aaa")],
+                               event_handler=myEventHander())
     ImagePath = models.CharField(u'图片目录', max_length=100, blank=True)
     Content = UEditorField(u'内容', height=200, width=500, default='test', imagePath=getImagePath, toolbars="mini",
                            filePath='bb/', blank=True, settings={"a": 2})

BIN
TestApp/models.pyc


+ 163 - 78
readme.md

@@ -1,70 +1,172 @@
-本模块帮助在Django应用中集成百度Ueditor HTML编辑器,Ueditor HTML编辑器是百度开源的HTML编辑器,
+本模块帮助在Django应用中集成百度Ueditor HTML编辑器,Django是Python世界最有影响力的web框架。
+Ueditor HTML编辑器是百度开源的在线HTML编辑器,功能非常强大,像表格可以直接拖动调整单元格大小等。
 
-*2014-6-16*
---更新到Ueditor 1.4.3
+更新历史
+============
+###[2014-6-25]
 
-*2014-5-15*
---增加不过滤 script,style ,不自动转div为p的脚本
---修复在django 1.6和python2.7下的警告
---使用 json 代替 django 中的 simplejson
---用content_type 代替原来的 mime_type
+由于Ueditor从1.4版本开始,API发生了非常大的改动和不兼容,导致DjangoUeditor上一个版本的升级后上传功能不能用等,因此
+本次重新设计了API,后端上传的代码几乎完全重写了。
 
-*2014-5-7* 
---更新到Ueditor 1.3.6
---BUGfix:更新UEditor文件夹名字,避免在linux出现找不到静态文件问题
---添加一种样式,besttome, 希望大家喜欢
+* 更新到1.5.143,即版本号为1.5,使用了Ueditor 1.4.3版本。
+* 重新设计了UeditorWidget、UeditorField。
+* 新增了自定义Ueditor按钮的功能
+* 注意:本次升级与之前版本不兼容,但是在使用体验上差别不大。
 
+###[2014-6-16]
+* 更新到Ueditor 1.4.3
 
-*2013-2-22*
---更新到Ueditor 1.2.5
---BUGfix:更新UEditor文件夹名字,避免在linux出现找不到静态文件问题
---BUGfix:现在支持south更新了
---针对csrf导致上传图片失败的问题,现在默认上传视图开启了csrf_exempt装饰
+###[2014-5-15]
+* 增加不过滤 script,style ,不自动转div为p的脚本
+* 修复在django 1.6和python2.7下的警告
+* 使用 json 代替 django 中的 simplejson
+* 用content_type 代替原来的 mime_type
 
-使用Django-Ueditor非常简单,方法如下:
+###[2014-5-7]
+* 更新到Ueditor 1.3.6
+* BUGfix:更新UEditor文件夹名字,避免在linux出现找不到静态文件问题
+* 添加一种样式,besttome, 希望大家喜欢
 
-#1、安装方法
-============================
-	
-	**方法一:下载安装包,在命令行运行:
-		python setup.py install
-	**方法二:使用pip工具在命令行运行(推荐):
-   		pip install DjangoUeditor
+###[2013-2-22]
+* 更新到Ueditor 1.2.5
+* BUGfix:更新UEditor文件夹名字,避免在linux出现找不到静态文件问题
+* BUGfix:现在支持south更新了
+* 针对csrf导致上传图片失败的问题,现在默认上传视图开启了csrf_exempt装饰
+
+---------------------------------------
 
-2、在INSTALL_APPS里面增加DjangoUeditor app,如下:
-============================
-     
+使用方法
+============
+##1、安装方法
+
+	* 方法一:将github整个源码包下载回家,在命令行运行:
+		python setup.py install
+	* 方法二:使用pip工具在命令行运行(推荐):
+	    pip install DjangoUeditor
+   		
+##2、在Django中安装DjangoUeditor
+     在INSTALL_APPS里面增加DjangoUeditor app,如下:
 		INSTALLED_APPS = (
 			#........
     		'DjangoUeditor',
 		)
-
-
-3、在urls.py中增加:
-============================
+##3、配置urls
 	url(r'^ueditor/',include('DjangoUeditor.urls' )),
 
-4、在models中这样定义:
-============================
+##4、在models中的使用
+
 	from DjangoUeditor.models import UEditorField
 	class Blog(models.Model):
     	Name=models.CharField(,max_length=100,blank=True)
-    	Content=UEditorField(u'内容	',height=100,width=500,default='test',imagePath="uploadimg/",imageManagerPath="imglib",toolbars='mini',options={"elementPathEnabled":True},filePath='upload',blank=True)
-
-	说明:
-	UEditorField继承自models.TextField,因此你可以直接将model里面定义的models.TextField直接改成UEditorField即可。
-	UEditorField提供了额外的参数:
-        toolbars:配置你想显示的工具栏,取值为mini,normal,full,代表小,一般,全部。如果默认的工具栏不符合您的要求,您可以在settings里面配置自己的显示按钮。参见后面介绍。
-        imagePath:图片上传的路径,如"images/",实现上传到"{{MEDIA_ROOT}}/images"文件夹
-        filePath:附件上传的路径,如"files/",实现上传到"{{MEDIA_ROOT}}/files"文件夹
-        scrawlPath:涂鸦文件上传的路径,如"scrawls/",实现上传到"{{MEDIA_ROOT}}/scrawls"文件夹,如果不指定则默认=imagepath
-        imageManagerPath:图片管理器显示的路径,如"imglib/",实现上传到"{{MEDIA_ROOT}}/imglib",如果不指定则默认=imagepath。
-        options:其他UEditor参数,字典类型。参见Ueditor的文档ueditor_config.js里面的说明。
-        css:编辑器textarea的CSS样式
-        width,height:编辑器的宽度和高度,以像素为单位。
-
-5、在表单中使用非常简单,与常规的form字段没什么差别,如下:
-============================	
+    	Content=UEditorField(u'内容	',width=600, height=300, toolbars="full", imagePath="", filePath="", upload_settings={"imageMaxSize":1204000},
+                 settings={},command=None,event_handler=myEventHander(),blank=True)
+
+*说明*
+	
+ UEditorField继承自models.TextField,因此你可以直接将model里面定义的models.TextField直接改成UEditorField即可。
+定义UEditorField时除了可以直接传入models.TextFieldUEditorField提供的参数外,还可以传入UEditorField提供的额外的参数
+来控制UEditorField的外观、上传路径等。
+UEditorField的参数如下:
+
+* *width,height* :编辑器的宽度和高度,以像素为单位。
+* *toolbars* :配置你想显示的工具栏,取值为mini,normal,full,代表小,一般,全部。如果默认的工具栏的按钮数量不符合您的要求,您可以在settings里面配置自己的显示按钮。参见后面介绍。
+* *imagePath* :图片上传后保存的路径,如"images/",实现上传到"{{MEDIA_ROOT}}/images"文件夹。
+    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")
+    * rnd : 三位随机数,random.randrange(100,999)
+    * basename : 上传的文件名称,不包括扩展名
+    * extname : 上传的文件扩展名
+    * filename : 上传的文件名全称
+* *filePath* : 附件上传后保存的路径,设置规则与imagePath一样。
+* *upload_settings* : 字典值,
+ 例:upload_settings={
+        imagePathFormat:"images/%(basename)s_%(datetime)s.%(extname)",
+        imageMaxSize:323232
+        fileManagerListPath:"files"
+   } 
+     *  upload_settings的内容就是ueditor/php/config.json里面的配置内容,因此,你可以去看config.json或者官方文档内容来决定
+            该如何配置upload_settings,基本上就是用来配置上传的路径、允许上传的文件扩展名、最大上传的文件大小之类的。
+     *  上面的imagePath和filePath被单独提取出来配置,原因是因为这两个参数是最常使用到的,imagePath就相当于upload_settings里面的
+                imagePathFormat,filePath就相当于upload_settings里面的filePathFormat。
+     *  您upload_settings里面设置了imagePathFormat,也可以在UeditorField里面设置imagePath,效果是一样的。但是如果两者均设置,
+   则imagePath优先级更高。
+     *   涂鸦文件、截图、远程抓图、图片库的xxxxPathFormat如果没有配置,默认等于imagePath.
+     *   远程文件库的xxxxPathFormat如果没有配置,默认等于filePath.
+   
+   
+* *settings* : 字典值,配置项与ueditor/ueditor.config.js里面的配置项一致。
+* *command* :  可以为Ueditor新增一个按钮、下拉框、对话框,例:
+
+        Description = UEditorField(u'描述', blank=True, toolbars="full", imagePath="cool/", settings={"a": 1},
+                               command=[myBtn(uiName="mybtn1", icon="d.png", title=u"1摸我", ajax_url="/ajaxcmd/"),
+                                       myCombo(uiName="myCombo3",title=u"ccc",initValue="aaa")
+                                        ])
+        
+
+以上代码可以会Ueditor增加一个按钮和一个下拉框。command是一个UEditorCommand的实例列表。如果你要在Ueditor的工具栏上增加一个
+自定义按钮,方法如下:
+        
+        from DjangoUeditor.commands import UEditorButtonCommand,UEditorComboCommand
+        #定义自己的按钮命令类
+        class myBtn(UEditorButtonCommand):
+            def onClick(self):
+                return u"""
+                    alert("爽!");       //这里可以写自己的js代码
+                    editor.execCommand(uiName);
+                """
+            def onExecuteAjaxCommand(self,state):
+            """  默认在command代码里面加入一段ajax代码,如果指定了ajax_url和重载本方法,则在单点按钮后
+             会调用ajax_url.本方法重载是可选的。
+             """
+                if state=="success":
+                    return u"""
+                        alert("后面比较爽!"+xhr.responseText);//这里可以写ajax成功调用的js代码
+                    """
+                if state=="error":
+                    return u"""
+                        alert("讨厌,摸哪里去了!"+xhr.responseText);//这里可以写ajax错误调用的js代码
+                    """
+        
+        UEditorButtonCommand有初始化参数:
+                uiName:按钮名称
+                title:按钮提示信息
+                index:按钮显示的位置索引
+                ajax_url:单击时调用的ajax url
+                
+        UEditorComboCommand可以在Ueditor上增加一个下拉框
+        UEditorDialogCommand可以在Ueditor上增加一个对话框,一般与UEditorButtonCommand配合使用。暂未实现
+        
+* *event_handler* : 用来为Ueditor实例绑定事件侦听,比较当选择区改变时将按钮状态置为禁止。
+
+        from DjangoUeditor.commands import UEditorEventHandler
+        class myEventHander(UEditorEventHandler):
+            def on_selectionchange(self):
+                return """
+                    function getButton(btnName){
+                        var items=%(editor)s.ui.toolbars[0].items;
+                        for(item in items){
+                            if(items[item].name==btnName){
+                                return items[item];
+                            }
+                        }
+                    }
+                    var btn=getButton("mybtn1");
+                    var selRanage=id_Description.selection.getRange()
+                    btn.setDisabled(selRanage.startOffset == selRanage.endOffset);
+        
+                """
+        
+        我们可以继承UEditorEventHandler创建自己的事件侦听类,例如上面myEventHander,然后在myEventHander中
+        增加on_eventname的方法,在里面返回侦听该event的js代码。例如上例on_selectionchange,就会在前端js中
+        生成id_Description.addListener('selectionchange', function () {.......});
+        如果要侦听contentchange事件,就在myEventHander中增加一个on_contentchange方法,然后在该方法中返回js代码。
+        
+
+##5、在表单中使用非常简单,与常规的form字段没什么差别,如下:
 	class TestUeditorModelForm(forms.ModelForm):
     	class Meta:
         	model=Blog
@@ -85,33 +187,17 @@
 	
 	widgets.UEditorWidget和forms.UEditorField的输入参数与上述models.UEditorField一样。
 
-6、Settings配置
-============================     
+##6、Settings配置
       在Django的Settings可以配置以下参数:
             UEDITOR_SETTINGS={
-                "toolbars":{           #定义多个工具栏显示的按钮,允行定义多个
-                    "name1":[[ 'source', '|','bold', 'italic', 'underline']],
-                    "name2",[]
-                },
-                "images_upload":{
-                    "allow_type":"jpg,png",    #定义允许的上传的图片类型
-                    "path":"",                   #定义默认的上传路径
-                    "max_size":"2222kb"        #定义允许上传的图片大小,0代表不限制
+                "config":{
+                   #这里放ueditor.config.js里面的配置项.......
                 },
-                "files_upload":{
-                     "allow_type":"zip,rar",   #定义允许的上传的文件类型
-                     "path":""                   #定义默认的上传路径
-                     "max_size":"2222kb"       #定义允许上传的文件大小,0代表不限制
-                 },,
-                "image_manager":{
-                     "path":""         #图片管理器的位置,如果没有指定,默认跟图片路径上传一样
-                },
-                "scrawl_upload":{
-                    "path":""           #涂鸦图片默认的上传路径
+                "upload":{
+                   #这里放php/config.json里面的配置项.......
                 }
             }
-7、在模板里面:
-============================
+##7、在模板里面:
     <head>
         ......
         {{ form.media }}        #这一句会将所需要的CSS和JS加进来。
@@ -119,10 +205,9 @@
     </head>
     注:运行collectstatic命令,将所依赖的css,js之类的文件复制到{{STATIC_ROOT}}文件夹里面。
 
-8、高级运用:
-============================
+##8、高级运用:
      ****************
-     动态指定imagePath、filePath、scrawlPath、imageManagerPath
+     动态指定imagePathFormat等文件路径
      ****************
      这几个路径文件用于保存上传的图片或附件,您可以直接指定路径,如:
           UEditorField('内容',imagePath="uploadimg/")
@@ -133,7 +218,7 @@
       UEditorField('内容',imagePath=getImagePath)
       则图片会被上传到"{{MEDIA_ROOT}}/abc"文件夹。
      ****************
-     使上传路径(imagePath、filePath、scrawlPath、imageManagerPath)与Model实例字段值相关
+     使上传路径(如imagePathFormat)与Model实例字段值相关
      ****************
         在有些情况下,我们可能想让上传的文件路径是由当前Model实例字值组名而成,比如:
         class Blog(Models.Model):
@@ -163,8 +248,8 @@
          **在新建表单中,model_instance由于还没有保存到数据库,所以如果访问model_instance.pk可能是空的。因为您需要在getUploadPath处理这种情况
 
 
-8、其他事项:
-============================
+##9、其他事项:
+
     **本程序版本号采用a.b.ccc,其中a.b是本程序的号,ccc是ueditor的版本号,如1.2.122,1.2是DjangoUeditor的版本号,122指Ueditor 1.2.2.
     **本程序安装包里面已经包括了Ueditor,不需要再额外安装。
     **目前暂时不支持ueditor的插件