Dotclear

Changeset 317:1997218a39ba


Ignore:
Timestamp:
05/25/11 17:50:34 (14 years ago)
Author:
Tomtom33 <tbouron@…>
Branch:
wysiwyg
Message:

Improvements of dcToolBarManager object:

  • Added events manager
  • Improved JS scripts loading
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • admin/js/_post.js

    r310 r317  
    8686          // Init toolbars 
    8787          $('#post_excerpt,#post_content').dctoolbarmanager({ 
     88               id: 'tinymce', 
    8889               mode: $(formatField).val(), 
    8990               context: 'post' 
     
    131132               hide: $('#post_excerpt').val() == '' 
    132133          }); 
    133            
    134           $('#post_content').dctoolbarmanager('draw'); 
    135134           
    136135          // Replace attachment remove links by a POST form submit 
  • admin/js/dcToolBarManager.js

    r310 r317  
    33          init: function(options) { 
    44               var settings = { 
    5                     mode: 'xhtml', 
    6                     context: null 
    7                }; 
     5                    id: null, 
     6                    mode: null, 
     7               }; 
     8               $.extend(settings,options); 
     9                
    810               return this.each(function(){ 
    911                    var _this = this; 
    10                     if (options) { 
    11                          $.extend(settings,options); 
    12                     } 
    1312                    $.each(settings, function(k,v) { 
    1413                         $.data(_this,k,v); 
    1514                    }); 
    16                     dcToolBarManager._load(settings.mode,this); 
     15                    dcToolBarManager._init(settings.mode,_this); 
    1716               }); 
    1817           
     
    2019          draw: function() { 
    2120               return this.each(function(){ 
     21                    if ($(this).data('toolbar') == null) { 
     22                         throw 'Toolbar should be initialize before render it'; 
     23                    } 
    2224                    dcToolBarManager._draw($(this).data('mode'),this); 
    2325               }); 
     
    3032                         $.data(this,'mode',mode); 
    3133                         dcToolBarManager._destroy($(this).data('mode'),this); 
    32                          dcToolBarManager._load(mode,this); 
    33                          dcToolBarManager._draw(mode,this); 
     34                         dcToolBarManager._init(mode,this); 
    3435                    } 
    3536               }); 
     
    3839      
    3940     $.fn.dctoolbarmanager = function(method) { 
    40           if (methods[method]) { 
    41                return methods[method].apply(this,Array.prototype.slice.call(arguments,1)); 
    42           } else if (typeof method === 'object' || !method) { 
    43                return methods.init.apply(this,arguments); 
    44           } else { 
    45                $.error('Method ' + method + ' does not exist on jQuery.dctoolbar'); 
    46           } 
     41          //try { 
     42               if (methods[method]) { 
     43                    return methods[method].apply(this,Array.prototype.slice.call(arguments,1)); 
     44               } else if (typeof method === 'object' || !method) { 
     45                    return methods.init.apply(this,arguments); 
     46               } else { 
     47                    throw 'Method ' + method + ' does not exist on jQuery.dctoolbarmanager'; 
     48               } 
     49          /*} catch (e) { 
     50               $.error('Error happend on jQuery.dctoolbarmanager: ' + e); 
     51          }*/ 
    4752     }; 
    4853})(jQuery); 
     
    5055function dcToolBarManager() { 
    5156     this.setToolBar = function(options) { 
    52           var settings = { 
    53                id: 'generic', 
    54                js_urls: [], 
    55                css_urls: [], 
    56                preinit: function() {}, 
    57                init: function() {}, 
    58                load: function() {}, 
    59                draw: function() {}, 
    60                destroy: function() {} 
    61           }; 
    62            
    63           $.extend(settings,options); 
    64            
    65           this.toolbars[settings.id] = { 
    66                id: settings.id, 
    67                js_urls: settings.js_urls, 
    68                css_urls: settings.css_urls, 
    69                preinit: settings.preinit, 
    70                init: settings.init, 
    71                load: settings.load, 
    72                draw: settings.draw, 
    73                destroy: settings.destroy, 
    74                loaded: false 
    75           }; 
    76            
    77           this.fn[settings.id] = new Array(); 
    78            
    79           this._init(settings.id); 
     57          try { 
     58               var toolbar = { 
     59                    id: null, 
     60                    mode: null, 
     61                    js: [], 
     62                    css: [], 
     63                    onPreInit: function() {}, 
     64                    onInit: function() {}, 
     65                    onDraw: function() {}, 
     66                    onDestroy: function() {} 
     67               }; 
     68                
     69               $.extend(toolbar,options); 
     70                
     71               if (toolbar.id == null || toolbar.id == '') { 
     72                    throw 'Invalid toolbar id'; 
     73               } 
     74                
     75               if (toolbar.mode == null || toolbar.mode == '') { 
     76                    throw 'Invalid toolbar mode'; 
     77               } 
     78                
     79               //var js = $.makeArray(toolbar.js); 
     80               if (!$.isArray(toolbar.js)) { 
     81                    throw 'Invalid format for JS scripts'; 
     82               } 
     83               //var css = $.makeArray(toolbar.css); 
     84               if (!$.isArray(toolbar.css)) { 
     85                    throw 'Invalid format for CSS scripts'; 
     86               } 
     87                
     88               // Add toolbar 
     89               this.toolbars[toolbar.mode] = { 
     90                    id: toolbar.id, 
     91                    js: toolbar.js, 
     92                    css: toolbar.css, 
     93                    loaded: false, 
     94                    init: false 
     95               }; 
     96                
     97               // Add events 
     98               this.events[toolbar.mode] = { 
     99                    onPreInit: [], 
     100                    onInit: [], 
     101                    onDraw: [], 
     102                    onDestroy: [] 
     103               }; 
     104               this.bind('onPreInit',toolbar.mode,toolbar.onPreInit); 
     105               this.bind('onInit',toolbar.mode,toolbar.onInit); 
     106               this.bind('onDraw',toolbar.mode,toolbar.onDraw); 
     107               this.bind('onDestroy',toolbar.mode,toolbar.onDestroy); 
     108                
     109               // Pre-init toolbar 
     110               this._preInit(toolbar.mode); 
     111          } catch (e) { 
     112               $.error('Toolbar signature error: ' + e.message); 
     113          } 
    80114     }; 
    81 }; 
     115      
     116     this.bind = function(event,mode,callback) { 
     117          if (!this.events.hasOwnProperty(mode)) { 
     118               throw 'No event available for toolbar [%s]'.replace('%s',id); 
     119          } 
     120           
     121          var events = this.events[mode]; 
     122           
     123          if (!events.hasOwnProperty(event)) { 
     124               throw 'Event [%1$s] does not exist for toolbar [%2$s]'.replace('%1$s',event).replace('%2$s',mode); 
     125          } 
     126           
     127          if (typeof(callback) === 'function') { 
     128               events[event].push(callback); 
     129          } 
     130     }, 
     131      
     132     this.call = function(event,mode) { 
     133          if (!this.events.hasOwnProperty(mode)) { 
     134               return; 
     135          } 
     136           
     137          var events = this.events[mode]; 
     138           
     139          if (!events.hasOwnProperty(event)) { 
     140               return; 
     141          } 
     142           
     143          var _arguments = arguments; 
     144           
     145          $.each(events[event],function(i,fn) { 
     146               fn.apply(this,Array.prototype.slice.call(_arguments,2)); 
     147          }); 
     148     } 
     149} 
    82150 
    83151dcToolBarManager.prototype = { 
    84152     toolbars: {}, 
    85      fn: {}, 
    86      msg: { 
    87           toolbar_does_not_exists: 'Toolbar [%s] does not exists' 
    88      }, 
    89       
    90      _init: function(mode) { 
    91           try { 
    92                var _this = this; 
    93                var results = []; 
    94                 
    95                var t = this.toolbars[mode]; 
    96                 
    97                if (t.loaded) { 
    98                     return; 
    99                } 
    100                 
    101                var n = t.js_urls.length; 
    102                 
    103                // Pre-initialization 
    104                t.preinit(); 
    105                 
    106                // Loading JS scripts 
    107                $.each(t.js_urls, function(i,url) { 
    108                     $('head').append($('<script>').attr({ 
    109                          type: 'text/javascript', 
    110                          src: url 
    111                     })); 
    112                     if(! --n) { 
    113                          t.loaded = true; 
    114                          t.init(); 
    115                     } 
    116                }); 
    117                 
    118                // Loading CSS scripts 
    119                $.each(t.css_urls, function(j,css) { 
    120                     $('head').append($('<link/>').attr({ 
    121                          rel: 'stylesheet', 
    122                          type: 'text/css', 
    123                          href: css 
    124                     })); 
    125                }); 
    126           } catch (e) { 
    127                $.error('Error during toolbar [' + id + '] initialization: ' + e.message); 
    128           } 
    129      }, 
    130       
    131      _load: function(mode,elm) { 
    132           if (!this.toolbars[mode]) { 
    133                throw this.msg.toolbar_does_not_exists.replace('%s',mode); 
    134           } 
    135           var t = this.toolbars[mode]; 
    136            
    137           $.each(this.fn[mode],function(i,callback) { 
    138                callback(); 
     153     events: {}, 
     154     msg: {}, 
     155      
     156     _preInit: function(mode) { 
     157          if (!this.toolbars.hasOwnProperty(mode)) { 
     158               throw 'Toolbar [%s] does not exist'.replace('%s',mode); 
     159          } 
     160           
     161          this.call('onPreInit',mode); 
     162           
     163          var t = this.toolbars[mode]; 
     164          var n = t.js.length; 
     165           
     166          // Loading JS scripts 
     167          $.each(t.js, function(i,url) { 
     168               $.ajax({ 
     169                    async: false, 
     170                    url: url, 
     171                    dataType: 'script' 
     172               }); 
    139173          }); 
    140           t.load(elm); 
     174           
     175          // Loading CSS scripts 
     176          $.each(t.css, function(j,css) { 
     177               $('head').append($('<link/>').attr({ 
     178                    rel: 'stylesheet', 
     179                    type: 'text/css', 
     180                    href: css 
     181               })); 
     182          }); 
     183           
     184          t.loaded = true; 
     185     }, 
     186      
     187     _init: function(mode,elm) { 
     188          if (!this.toolbars.hasOwnProperty(mode)) { 
     189               throw 'Toolbar [%s] does not exist'.replace('%s',mode); 
     190          } 
     191           
     192          var _this = this; 
     193          var t = this.toolbars[mode]; 
     194           
     195          var _this = this; 
     196          var t = this.toolbars[mode]; 
     197           
     198          if (t.loaded) { 
     199               if (!t.init) { 
     200                    // Init toolbar 
     201                    this.call('onInit',mode,elm); 
     202                    t.init = true; 
     203               } 
     204               // Draw toolbar 
     205               this._draw(mode,elm); 
     206               return; 
     207          } 
     208           
     209          setTimeout(function() { _this._init.apply(_this,[mode,elm]); },1); 
    141210     }, 
    142211      
    143212     _draw: function(mode,elm) { 
    144           var t = this.toolbars[mode]; 
    145           t.draw(elm); 
     213          if (!this.toolbars.hasOwnProperty(mode)) { 
     214               throw 'Toolbar [%s] does not exist'.replace('%s',mode); 
     215          } 
     216           
     217          var t = this.toolbars[mode]; 
     218           
     219          // Draw toolbar 
     220          this.call('onDraw',mode,elm); 
    146221     }, 
    147222      
    148223     _destroy: function(mode,elm) { 
    149           var t = this.toolbars[mode]; 
    150           t.destroy(elm); 
     224          if (!this.toolbars.hasOwnProperty(mode)) { 
     225               throw 'Toolbar [%s] does not exist'.replace('%s',mode); 
     226          } 
     227           
     228          var t = this.toolbars[mode]; 
     229           
     230          // Destroy toolbar 
     231          this.call('onDestroy',mode,elm); 
    151232     } 
    152233} 
  • inc/admin/lib.dc.page.php

    r311 r317  
    550550     { 
    551551          $params_wiki = array( 
    552                'init' => array( 
     552               'onInit' => array( 
    553553                    "jsToolBar.prototype.dialog_url = 'popup.php';", 
    554554                    "jsToolBar.prototype.base_url = '".html::escapeJS($GLOBALS['core']->blog->host)."';", 
     
    582582                    "jsToolBar.prototype.elements.post_link.title = '".html::escapeJS(__('Link to an entry'))."';" 
    583583               ), 
    584                'load' => array( 
     584               'onDraw' => array( 
    585585                    "$.data(elm,'toolbar',new jsToolBar(document.getElementById($(elm).attr('id'))));", 
    586                     "$(elm).data('toolbar').context = $(elm).data('context');" 
    587                ), 
    588                'draw' => array( 
     586                    "$(elm).data('toolbar').context = $(elm).data('context');", 
    589587                    "$(elm).data('toolbar').switchMode('wiki');" 
    590588               ), 
    591                'destroy' => array( 
     589               'onDestroy' => array( 
    592590                    "$(elm).data('toolbar').remove();" 
    593591               ) 
    594592          ); 
    595593          if (!$GLOBALS['core']->auth->check('media,media_admin',$GLOBALS['core']->blog->id)) { 
    596                $params_wiki['init'][] = "jsToolBar.prototype.elements.img_select.disabled = true;"; 
     594               $params_wiki['onInit'][] = "jsToolBar.prototype.elements.img_select.disabled = true;"; 
    597595          } 
    598596           
    599597          $params_xhtml = array( 
    600                'preinit' => array( 
    601                     "if (!window.tinyMCE) {", 
    602                     "window.tinyMCEPreInit = {base : 'js/tiny_mce', suffix : '', query : ''};", 
    603                     "}" 
     598               'onPreInit' => array( 
     599                    "window.tinyMCEPreInit = {base : 'js/tiny_mce', suffix : '', query : ''};" 
    604600               ), 
    605                'init' => array( 
    606                     "tinyMCE.dom.Event.domLoaded = true;", 
    607                     "tinyMCE.settings = {};", 
    608                     "tinyMCE.settings.mode = 'textareas';", 
    609                     "tinyMCE.settings.relative_urls = false;", 
    610                     "tinyMCE.settings.theme = '".html::escapeJS('advanced')."';", 
    611                     "tinyMCE.settings.plugins = '".html::escapeJS('fullscreen,paste,searchreplace')."'; ", 
    612                     "tinyMCE.settings.theme_advanced_buttons1 = '".html::escapeJS('justifyleft,justifycenter,justifyright,separator,bold,italic,underline,strikethrough,sub,sup,separator,blockquote,bullist,numlist,outdent,indent,separator,undo,redo,separator,visualaid,separator,fullscreen,separator,code')."';", 
    613                     "tinyMCE.settings.theme_advanced_buttons2 = '".html::escapeJS('formatselect,removeformat,cleanup,seperator,cut,copy,paste,pastetext,pasteword,search,replace')."';", 
    614                     "tinyMCE.settings.theme_advanced_buttons3 = '".html::escapeJS('link,unlink,hr,charmap')."';", 
    615                     "tinyMCE.settings.theme_advanced_toolbar_location = '".html::escapeJS('top')."';", 
    616                     "tinyMCE.settings.theme_advanced_toolbar_align = '".html::escapeJS('left')."';", 
    617                     "tinyMCE.settings.theme_advanced_statusbar_location = '".html::escapeJS('bottom')."';", 
    618                     "tinyMCE.settings.theme_advanced_resizing = true;", 
    619                     "tinyMCE.settings.theme_advanced_resize_horizontal = false;", 
    620                     "tinyMCE.settings.entity_encoding = '".html::escapeJS('raw')."';", 
    621                     "tinyMCE.settings.add_unload_trigger = false;", 
    622                     "tinyMCE.settings.remove_linebreaks = false;", 
    623                     "tinyMCE.settings.paste_auto_cleanup_on_paste = true;" 
     601               'onInit' => array( 
     602                    "tinymce.dom.Event.domLoaded = true;", 
     603                    "tinymce.settings = {};", 
     604                    "tinymce.settings.mode = 'textareas';", 
     605                    "tinymce.settings.relative_urls = false;", 
     606                    "tinymce.settings.theme = '".html::escapeJS('advanced')."';", 
     607                    "tinymce.settings.plugins = '".html::escapeJS('fullscreen,paste,searchreplace')."'; ", 
     608                    "tinymce.settings.theme_advanced_buttons1 = '".html::escapeJS('justifyleft,justifycenter,justifyright,separator,bold,italic,underline,strikethrough,sub,sup,separator,blockquote,bullist,numlist,outdent,indent,separator,undo,redo,separator,visualaid,separator,fullscreen,separator,code')."';", 
     609                    "tinymce.settings.theme_advanced_buttons2 = '".html::escapeJS('formatselect,removeformat,cleanup,seperator,cut,copy,paste,pastetext,pasteword,search,replace')."';", 
     610                    "tinymce.settings.theme_advanced_buttons3 = '".html::escapeJS('link,unlink,hr,charmap')."';", 
     611                    "tinymce.settings.theme_advanced_toolbar_location = '".html::escapeJS('top')."';", 
     612                    "tinymce.settings.theme_advanced_toolbar_align = '".html::escapeJS('left')."';", 
     613                    "tinymce.settings.theme_advanced_statusbar_location = '".html::escapeJS('bottom')."';", 
     614                    "tinymce.settings.theme_advanced_resizing = true;", 
     615                    "tinymce.settings.theme_advanced_resize_horizontal = false;", 
     616                    "tinymce.settings.entity_encoding = '".html::escapeJS('raw')."';", 
     617                    "tinymce.settings.add_unload_trigger = false;", 
     618                    "tinymce.settings.remove_linebreaks = false;", 
     619                    "tinymce.settings.paste_auto_cleanup_on_paste = true;" 
    624620               ), 
    625                'load' => array( 
    626                     "$.data(elm,'toolbar',new tinyMCE.Editor($(elm).attr('id'),tinyMCE.settings));" 
    627                ), 
    628                'draw' => array( 
     621               'onDraw' => array( 
     622                    "$.data(elm,'toolbar',new tinymce.Editor($(elm).attr('id'),tinyMCE.settings));", 
    629623                    "$(elm).data('toolbar').render();" 
    630624               ), 
    631                'destroy' => array( 
     625               'onDestroy' => array( 
    632626                    "$(elm).data('toolbar').remove();" 
    633627               ) 
     
    641635          "dcToolBarManager.msg.toolbar_does_not_exists = '".html::escapeJS(__('Toolbar [%s] does not exists'))."';\n". 
    642636          "dcToolBarManager.setToolBar({\n". 
    643                "id: 'xhtml',\n". 
    644                "js_urls: ['js/tiny_mce/tiny_mce.js'],\n". 
    645                "css_urls: [],\n". 
    646                "preinit: function() {".implode(' ',$params_xhtml['preinit'])."},\n". 
    647                "init: function() {".implode(' ',$params_xhtml['init'])."},\n". 
    648                "load: function(elm) {".implode(' ',$params_xhtml['load'])."},\n". 
    649                "draw: function(elm) {".implode(' ',$params_xhtml['draw'])."},\n". 
    650                "destroy: function(elm) {".implode(' ',$params_xhtml['destroy'])."}\n". 
     637               "id: 'tinymce',\n". 
     638               "mode: 'xhtml',\n". 
     639               "js: ['js/tiny_mce/tiny_mce.js'],\n". 
     640               "css: [],\n". 
     641               "onPreInit: function() {".implode(' ',$params_xhtml['onPreInit'])."},\n". 
     642               "onInit: function() {".implode(' ',$params_xhtml['onInit'])."},\n". 
     643               "onDraw: function(elm) {".implode(' ',$params_xhtml['onDraw'])."},\n". 
     644               "onDestroy: function(elm) {".implode(' ',$params_xhtml['onDestroy'])."}\n". 
    651645          "});\n". 
    652646          "dcToolBarManager.setToolBar({\n". 
    653                "id: 'wiki',\n". 
    654                "js_urls: ['js/jsToolBar/jsToolBar.js','js/jsToolBar/jsToolBar.dotclear.js'],\n". 
    655                "css_urls: ['style/jsToolBar/jsToolBar.css'],\n". 
    656                "init: function() {".implode("\n",$params_wiki['init'])."},\n". 
    657                "load: function(elm) {".implode(' ',$params_wiki['load'])."},\n". 
    658                "draw: function(elm) {".implode(' ',$params_wiki['draw'])."},\n". 
    659                "destroy: function(elm) {".implode(' ',$params_wiki['destroy'])."}\n". 
     647               "id: 'jstoolbar',\n". 
     648               "mode: 'wiki',\n". 
     649               "js: ['js/jsToolBar/jsToolBar.js','js/jsToolBar/jsToolBar.dotclear.js'],\n". 
     650               "css: ['style/jsToolBar/jsToolBar.css'],\n". 
     651               "onInit: function() {".implode("\n",$params_wiki['onInit'])."},\n". 
     652               "onDraw: function(elm) {".implode(' ',$params_wiki['onDraw'])."},\n". 
     653               "onDestroy: function(elm) {".implode(' ',$params_wiki['onDestroy'])."}\n". 
    660654          "});\n". 
    661655          "\n//]]>\n". 
  • plugins/tags/_admin.php

    r311 r317  
    122122          "dotclear.msg.entry = '".html::escapeJS(__('entry'))."';\n". 
    123123          "dotclear.msg.entries = '".html::escapeJS(__('entries'))."';\n". 
    124           "dcToolBarManager.fn.wiki.push(function() {\n". 
     124          "dcToolBarManager.bind('onInit','wiki',function() {\n". 
    125125               "jsToolBar.prototype.elements.tag.title = '".html::escapeJS(__('Tag'))."';\n". 
    126126               "jsToolBar.prototype.elements.tag.url = '".html::escapeJS($tag_url)."';\n". 
    127127          "});\n". 
    128           "dcToolBarManager.fn.xhtml.push(function() {\n". 
    129                "tinyMCE.plugins.dcTagPlugin.title = '".html::escapeJS(__('Tag'))."';\n". 
    130                "tinyMCE.plugins.dcTagPlugin.url = '".html::escapeJS($tag_url)."';\n". 
     128          "dcToolBarManager.bind('onInit','xhtml',function() {\n". 
     129               "tinymce.plugins.dcTag.title = '".html::escapeJS(__('Tag'))."';\n". 
     130               "tinymce.plugins.dcTag.url = '".html::escapeJS($tag_url)."';\n". 
    131131          "});\n". 
    132132          "\n//]]>\n". 
  • plugins/tags/js/post.js

    r311 r317  
    6060 
    6161// Toolbar button for tags 
    62 dcToolBarManager.fn.wiki.push(function() { 
     62dcToolBarManager.bind('onInit','wiki',function() { 
    6363     jsToolBar.prototype.elements.tagSpace = {type: 'space'}; 
    6464      
     
    104104}); 
    105105 
    106 dcToolBarManager.fn.xhtml.push(function() { 
    107      tinymce.create('tinymce.plugins.dcTagPlugin', { 
     106dcToolBarManager.bind('onInit','xhtml',function() { 
     107     tinymce.create('tinymce.plugins.dcTag', { 
    108108          init : function(ed, url) { 
    109109               this.editor = ed; 
    110110                
    111                ed.addCommand('mceDcTag', function() { 
     111               ed.addCommand('dcTag', function() { 
    112112                    var se = ed.selection; 
    113113                     
     
    115115                          return; 
    116116                    } 
    117                     tinymce.execCommand("mceInsertLink", false, tinymce.plugins.dcTagPlugin.url+'/'+se.getContent(), {skip_undo : 1}); 
     117                    tinymce.execCommand("mceInsertLink", false, tinymce.plugins.dcTag.url+'/'+se.getContent(), {skip_undo : 1}); 
    118118                    window.dc_tag_editor.addMeta(se.getContent()); 
    119119               }); 
    120120                
    121121               ed.addButton('tag', { 
    122                     title : tinymce.plugins.dcTagPlugin.title, 
    123                     cmd : 'mceDcTag', 
     122                    title : tinymce.plugins.dcTag.title, 
     123                    cmd : 'dcTag', 
    124124                    image :'index.php?pf=tags/img/tag-add.png' 
    125125               }); 
    126126                
    127                ed.addShortcut('ctrl+m', 'advlink.advlink_desc', 'mceDcTag'); 
     127               ed.addShortcut('ctrl+alt+t', 'advlink.advlink_desc', 'dcTag'); 
    128128                
    129129               ed.onNodeChange.add(function(ed, cm, n, co) { 
     
    138138                    author : 'Tomtom for dotclear', 
    139139                    authorurl : 'http://dotclear.org', 
    140                     infourl : 'http://dotclear.org', 
     140                    infourl : '', 
    141141                    version : tinymce.majorVersion + "." + tinymce.minorVersion 
    142142               }; 
     
    144144     }); 
    145145      
    146      tinymce.PluginManager.add('dcTag', tinymce.plugins.dcTagPlugin); 
     146     tinymce.PluginManager.add('dcTag', tinymce.plugins.dcTag); 
    147147      
    148148     tinymce.settings.plugins += ",-dcTag"; 
Note: See TracChangeset for help on using the changeset viewer.

Sites map