]> git.andy128k.dev Git - ipf.git/commitdiff
unify html editor config
authorAndrey Kutejko <andy128k@gmail.com>
Sun, 14 Dec 2014 14:13:36 +0000 (16:13 +0200)
committerAndrey Kutejko <andy128k@gmail.com>
Sun, 14 Dec 2014 14:13:36 +0000 (16:13 +0200)
ipf/admin/assets/js/admin.js
ipf/admin/form/widgets/htmlinput.php
ipf/admin/templates/admin/base.html

index 9a2605782aa448a7c95183350fcff6a4f7f9f967..84f3a168d423dfa2c40829d533974d78bc6cb3df 100644 (file)
@@ -62,5 +62,58 @@ $(function(){
             return false;
         });
     });
+
+    // html
+    function ipf_filebrowser(filebrowser_url, field_name, url, type, win) {
+        tinyMCE.activeEditor.windowManager.open({
+            file: filebrowser_url,
+            title: "IPF File Browser",
+            width: 800,
+            height: 600,
+            resizable: "yes",
+            inline: "yes",
+            close_previous: "no"
+        }, {
+            onSelect: function(value) {
+                var input = win.document.getElementById(field_name);
+
+                input.value = value;
+                if ("createEvent" in document) {
+                    var evt = document.createEvent("HTMLEvents");
+                    evt.initEvent("change", false, true);
+                    input.dispatchEvent(evt);
+                } else {
+                    input.fireEvent("onchange");
+                }
+            }
+        });
+        return false;
+    }
+
+    var tinyMCEDefaults = {
+        plugins: "anchor, charmap, code, colorpicker, contextmenu, fullscreen, hr, image, insertdatetime, link, lists, media, nonbreaking, paste, preview, print, searchreplace, tabfocus, table, textcolor, visualchars, wordcount",
+        toolbar: [
+            "undo redo | styleselect | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | forecolor backcolor sub sup | preview fullscreen",
+            "code link unlink image charmap | table | pastetext removeformat | formatselect fontselect fontsizeselect"
+        ],
+        extended_valid_elements: "span[class|style],code[class],iframe[src|width|height|name|align|frameborder|scrolling]",
+        fix_list_elements: true,
+        browser_spellcheck: true,
+        width: "80%",
+        height: "300",
+        document_base_url: "/",
+
+        convert_urls: false,
+        relative_urls: false,
+        remove_script_host: true
+    };
+
+    $('.htmlEditor').each(function(){
+        var filebrowser_url = $(this).data('filebrowser');
+        tinyMCE.init($.extend({}, tinyMCEDefaults, $(this).data('config'), {
+            target: this,
+            file_browser_callback: ipf_filebrowser.bind(null, filebrowser_url)
+        }));
+    });
 });
 
index 30d17b88d959f6e0441056f0def734706054b284..87a772de7d280c3c23d8b2123331225da7d1c5d6 100644 (file)
@@ -7,6 +7,7 @@ class IPF_Admin_Form_Widget_HTMLInput extends IPF_Form_Widget
     public $tinymce_url;
     public $force_absolute_urls;
     public $editor_config;
+    public $filebrowser_url;
 
     public function __construct($attrs=array())
     {
@@ -17,6 +18,8 @@ class IPF_Admin_Form_Widget_HTMLInput extends IPF_Form_Widget
         $this->force_absolute_urls  = \PFF\Arr::pop($attrs, 'force_absolute_urls',  false);
         $this->editor_config        = \PFF\Arr::pop($attrs, 'editor_config',        array());
 
+        $this->filebrowser_url = IPF_HTTP_URL::urlForView('IPF_Admin_Views_FileBrowser', array('/')).'/';
+
         parent::__construct($attrs);
     }
 
@@ -24,14 +27,11 @@ class IPF_Admin_Form_Widget_HTMLInput extends IPF_Form_Widget
     {
         if ($value === null) $value = '';
 
-        $extra_config = '';
-        foreach ($this->editor_config as $key => $val) {
-            $extra_config .= ",\n{$key} : ";
-            if (is_bool($val)) {
-                $extra_config .= $val ? 'true' : 'false';
-            } else {
-                $extra_config .= '"'.$val.'"';
-            }
+        $config = $this->editor_config;
+        if ($this->force_absolute_urls) {
+            $config['convert_urls'] = true;
+            $config['relative_urls'] = false;
+            $config['remove_script_host'] = false;
         }
 
         return Tag::textarea()
@@ -40,74 +40,11 @@ class IPF_Admin_Form_Widget_HTMLInput extends IPF_Form_Widget
             ->attrs($this->attrs)
             ->attrs($extra_attrs)
             ->attr('name', $name)
-            ->addClass($this->force_absolute_urls ? 'htmlEditorAbs' : 'htmlEditor')
+            ->attr('data-config', json_encode($config))
+            ->attr('data-filebrowser', $this->filebrowser_url)
+            ->addClass('htmlEditor')
             ->append($value)
             ->html();
     }
-
-    public function extra_js()
-    {
-        $filebrowser_url = IPF_HTTP_URL::urlForView('IPF_Admin_Views_FileBrowser', array('/'));
-        return array(
-            '<script type="text/javascript" src="'.$this->tinymce_url.'tinymce.min.js"></script>',
-            '<script type="text/javascript">(function(){
-function ipf_filebrowser(field_name, url, type, win) {
-  tinyMCE.activeEditor.windowManager.open({
-    file: "'.$filebrowser_url.'/",
-    title: "IPF File Browser",
-    width: 800,
-    height: 600,
-    resizable: "yes",
-    inline: "yes",
-    close_previous: "no"
-  }, {
-    onSelect: function(value) {
-      var input = win.document.getElementById(field_name);
-
-      input.value = value;
-      if ("createEvent" in document) {
-        var evt = document.createEvent("HTMLEvents");
-        evt.initEvent("change", false, true);
-        input.dispatchEvent(evt);
-      } else {
-        input.fireEvent("onchange");
-      }
-    }
-  });
-  return false;
-}
-
-var defaults = {
-  plugins: "anchor, charmap, code, colorpicker, contextmenu, fullscreen, hr, image, insertdatetime, link, lists, media, nonbreaking, paste, preview, print, searchreplace, tabfocus, table, textcolor, visualchars, wordcount",
-  toolbar: [
-    "undo redo | styleselect | bold italic underline | alignleft aligncenter alignright alignjustify | bullist numlist outdent indent | forecolor backcolor sub sup | preview fullscreen",
-    "code link unlink image charmap | table | pastetext removeformat | formatselect fontselect fontsizeselect"
-  ],
-  extended_valid_elements: "span[class|style],code[class],iframe[src|width|height|name|align|frameborder|scrolling]",
-  fix_list_elements: true,
-  browser_spellcheck: true,
-  width: "80%",
-  height: "300",
-  document_base_url: "/",
-  file_browser_callback: ipf_filebrowser
-};
-
-tinyMCE.init($.extend({}, defaults, {
-  selector: ".htmlEditor",
-  convert_urls: false,
-  relative_urls: false,
-  remove_script_host: true
-}));
-
-tinyMCE.init($.extend({}, defaults, {
-  selector: ".htmlEditorAbs",
-  convert_urls: true,
-  relative_urls: false,
-  remove_script_host: false
-}));
-
-})();</script>',
-        );
-    }
 }
 
index 8edd033d463fee565a5e2e5255fb7b6a58b023de..89011eb5194ad04375694099ebb2802841cd67f8 100644 (file)
@@ -59,6 +59,7 @@
 
 {block commonjs}
   <script src="{$STATIC_URL}js/admin.js"></script>
+  <script src="{$STATIC_URL}admin/tinymce/tinymce.min.js"></script>
 {/block}
 {block scripts}{/block}
 </body>