[ Index ]

PHP Cross Reference of Wordpress 2.9.1

title

Body

[close]

/wp-includes/js/tinymce/plugins/wordpress/ -> editor_plugin.dev.js (source)

   1  /**
   2   * WordPress plugin.
   3   */
   4  
   5  (function() {
   6      var DOM = tinymce.DOM;
   7  
   8      tinymce.create('tinymce.plugins.WordPress', {
   9          mceTout : 0,
  10  
  11          init : function(ed, url) {
  12              var t = this, tbId = ed.getParam('wordpress_adv_toolbar', 'toolbar2'), last = 0, moreHTML, nextpageHTML;
  13              moreHTML = '<img src="' + url + '/img/trans.gif" class="mceWPmore mceItemNoResize" title="'+ed.getLang('wordpress.wp_more_alt')+'" />';
  14              nextpageHTML = '<img src="' + url + '/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+ed.getLang('wordpress.wp_page_alt')+'" />';
  15  
  16              if ( getUserSetting('hidetb', '0') == '1' )
  17                  ed.settings.wordpress_adv_hidden = 0;
  18  
  19              // Hides the specified toolbar and resizes the iframe
  20              ed.onPostRender.add(function() {
  21                  var adv_toolbar = ed.controlManager.get(tbId);
  22                  if ( ed.getParam('wordpress_adv_hidden', 1) && adv_toolbar ) {
  23                      DOM.hide(adv_toolbar.id);
  24                      t._resizeIframe(ed, tbId, 28);
  25                  }
  26              });
  27  
  28              // Register commands
  29              ed.addCommand('WP_More', function() {
  30                  ed.execCommand('mceInsertContent', 0, moreHTML);
  31              });
  32  
  33              ed.addCommand('WP_Page', function() {
  34                  ed.execCommand('mceInsertContent', 0, nextpageHTML);
  35              });
  36  
  37              ed.addCommand('WP_Help', function() {
  38                      ed.windowManager.open({
  39                          url : tinymce.baseURL + '/wp-mce-help.php',
  40                          width : 450,
  41                          height : 420,
  42                          inline : 1
  43                      });
  44                  });
  45  
  46              ed.addCommand('WP_Adv', function() {
  47                  var cm = ed.controlManager, id = cm.get(tbId).id;
  48  
  49                  if ( 'undefined' == id )
  50                      return;
  51  
  52                  if ( DOM.isHidden(id) ) {
  53                      cm.setActive('wp_adv', 1);
  54                      DOM.show(id);
  55                      t._resizeIframe(ed, tbId, -28);
  56                      ed.settings.wordpress_adv_hidden = 0;
  57                      setUserSetting('hidetb', '1');
  58                  } else {
  59                      cm.setActive('wp_adv', 0);
  60                      DOM.hide(id);
  61                      t._resizeIframe(ed, tbId, 28);
  62                      ed.settings.wordpress_adv_hidden = 1;
  63                      setUserSetting('hidetb', '0');
  64                  }
  65              });
  66  
  67              // Register buttons
  68              ed.addButton('wp_more', {
  69                  title : 'wordpress.wp_more_desc',
  70                  image : url + '/img/more.gif',
  71                  cmd : 'WP_More'
  72              });
  73  
  74              ed.addButton('wp_page', {
  75                  title : 'wordpress.wp_page_desc',
  76                  image : url + '/img/page.gif',
  77                  cmd : 'WP_Page'
  78              });
  79  
  80              ed.addButton('wp_help', {
  81                  title : 'wordpress.wp_help_desc',
  82                  image : url + '/img/help.gif',
  83                  cmd : 'WP_Help'
  84              });
  85  
  86              ed.addButton('wp_adv', {
  87                  title : 'wordpress.wp_adv_desc',
  88                  image : url + '/img/toolbars.gif',
  89                  cmd : 'WP_Adv'
  90              });
  91  
  92              // Add Media buttons
  93              ed.addButton('add_media', {
  94                  title : 'wordpress.add_media',
  95                  image : url + '/img/media.gif',
  96                  onclick : function() {
  97                      tb_show('', tinymce.DOM.get('add_media').href);
  98                      tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' );
  99                  }
 100              });
 101  
 102              ed.addButton('add_image', {
 103                  title : 'wordpress.add_image',
 104                  image : url + '/img/image.gif',
 105                  onclick : function() {
 106                      tb_show('', tinymce.DOM.get('add_image').href);
 107                      tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' );
 108                  }
 109              });
 110  
 111              ed.addButton('add_video', {
 112                  title : 'wordpress.add_video',
 113                  image : url + '/img/video.gif',
 114                  onclick : function() {
 115                      tb_show('', tinymce.DOM.get('add_video').href);
 116                      tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' );
 117                  }
 118              });
 119  
 120              ed.addButton('add_audio', {
 121                  title : 'wordpress.add_audio',
 122                  image : url + '/img/audio.gif',
 123                  onclick : function() {
 124                      tb_show('', tinymce.DOM.get('add_audio').href);
 125                      tinymce.DOM.setStyle( ['TB_overlay','TB_window','TB_load'], 'z-index', '999999' );
 126                  }
 127              });
 128  
 129              // Add Media buttons to fullscreen
 130              ed.onBeforeExecCommand.add(function(ed, cmd, ui, val) {
 131                  var DOM = tinymce.DOM;
 132                  if ( 'mceFullScreen' != cmd ) return;
 133                  if ( 'mce_fullscreen' != ed.id && DOM.get('add_audio') && DOM.get('add_video') && DOM.get('add_image') && DOM.get('add_media') )
 134                      ed.settings.theme_advanced_buttons1 += ',|,add_image,add_video,add_audio,add_media';
 135              });
 136  
 137              // Add class "alignleft", "alignright" and "aligncenter" when selecting align for images.
 138              ed.addCommand('JustifyLeft', function() {
 139                  var n = ed.selection.getNode();
 140  
 141                  if ( n.nodeName != 'IMG' )
 142                      ed.editorCommands.mceJustify('JustifyLeft', 'left');
 143                  else ed.plugins.wordpress.do_align(n, 'alignleft');
 144              });
 145  
 146              ed.addCommand('JustifyRight', function() {
 147                  var n = ed.selection.getNode();
 148  
 149                  if ( n.nodeName != 'IMG' )
 150                      ed.editorCommands.mceJustify('JustifyRight', 'right');
 151                  else ed.plugins.wordpress.do_align(n, 'alignright');
 152              });
 153  
 154              ed.addCommand('JustifyCenter', function() {
 155                  var n = ed.selection.getNode(), P = ed.dom.getParent(n, 'p'), DL = ed.dom.getParent(n, 'dl');
 156  
 157                  if ( n.nodeName == 'IMG' && ( P || DL ) )
 158                      ed.plugins.wordpress.do_align(n, 'aligncenter');
 159                  else ed.editorCommands.mceJustify('JustifyCenter', 'center');
 160              });
 161  
 162              // Word count if script is loaded
 163              if ( 'undefined' != typeof wpWordCount ) {
 164                  ed.onKeyUp.add(function(ed, e) {
 165                      if ( e.keyCode == last ) return;
 166                      if ( 13 == e.keyCode || 8 == last || 46 == last ) wpWordCount.wc( ed.getContent({format : 'raw'}) );
 167                      last = e.keyCode;
 168                  });
 169              };
 170  
 171              ed.onSaveContent.add(function(ed, o) {
 172                  if ( typeof(switchEditors) == 'object' ) {
 173                      if ( ed.isHidden() )
 174                          o.content = o.element.value;
 175                      else
 176                          o.content = switchEditors.pre_wpautop(o.content);
 177                  }
 178              });
 179  
 180              /* disable for now
 181              ed.onBeforeSetContent.add(function(ed, o) {
 182                  o.content = t._setEmbed(o.content);
 183              });
 184  
 185              ed.onPostProcess.add(function(ed, o) {
 186                  if ( o.get )
 187                      o.content = t._getEmbed(o.content);
 188              });
 189              */
 190  
 191              // Add listeners to handle more break
 192              t._handleMoreBreak(ed, url);
 193  
 194              // Add custom shortcuts
 195              ed.addShortcut('alt+shift+c', ed.getLang('justifycenter_desc'), 'JustifyCenter');
 196              ed.addShortcut('alt+shift+r', ed.getLang('justifyright_desc'), 'JustifyRight');
 197              ed.addShortcut('alt+shift+l', ed.getLang('justifyleft_desc'), 'JustifyLeft');
 198              ed.addShortcut('alt+shift+j', ed.getLang('justifyfull_desc'), 'JustifyFull');
 199              ed.addShortcut('alt+shift+q', ed.getLang('blockquote_desc'), 'mceBlockQuote');
 200              ed.addShortcut('alt+shift+u', ed.getLang('bullist_desc'), 'InsertUnorderedList');
 201              ed.addShortcut('alt+shift+o', ed.getLang('numlist_desc'), 'InsertOrderedList');
 202              ed.addShortcut('alt+shift+d', ed.getLang('striketrough_desc'), 'Strikethrough');
 203              ed.addShortcut('alt+shift+n', ed.getLang('spellchecker.desc'), 'mceSpellCheck');
 204              ed.addShortcut('alt+shift+a', ed.getLang('link_desc'), 'mceLink');
 205              ed.addShortcut('alt+shift+s', ed.getLang('unlink_desc'), 'unlink');
 206              ed.addShortcut('alt+shift+m', ed.getLang('image_desc'), 'mceImage');
 207              ed.addShortcut('alt+shift+g', ed.getLang('fullscreen.desc'), 'mceFullScreen');
 208              ed.addShortcut('alt+shift+z', ed.getLang('wp_adv_desc'), 'WP_Adv');
 209              ed.addShortcut('alt+shift+h', ed.getLang('help_desc'), 'WP_Help');
 210              ed.addShortcut('alt+shift+t', ed.getLang('wp_more_desc'), 'WP_More');
 211              ed.addShortcut('alt+shift+p', ed.getLang('wp_page_desc'), 'WP_Page');
 212              ed.addShortcut('ctrl+s', ed.getLang('save_desc'), function(){if('function'==typeof autosave)autosave();});
 213  
 214              if ( tinymce.isWebKit ) {
 215                  ed.addShortcut('alt+shift+b', ed.getLang('bold_desc'), 'Bold');
 216                  ed.addShortcut('alt+shift+i', ed.getLang('italic_desc'), 'Italic');
 217              }
 218  
 219              ed.onInit.add(function(ed) {
 220                  tinymce.dom.Event.add(ed.getWin(), 'scroll', function(e) {
 221                      ed.plugins.wordpress._hideButtons();
 222                  });
 223                  tinymce.dom.Event.add(ed.getBody(), 'dragstart', function(e) {
 224                      ed.plugins.wordpress._hideButtons();
 225                  });
 226              });
 227  
 228              ed.onBeforeExecCommand.add(function(ed, cmd, ui, val) {
 229                  ed.plugins.wordpress._hideButtons();
 230              });
 231  
 232              ed.onSaveContent.add(function(ed, o) {
 233                  ed.plugins.wordpress._hideButtons();
 234              });
 235  
 236              ed.onMouseDown.add(function(ed, e) {
 237                  if ( e.target.nodeName != 'IMG' )
 238                      ed.plugins.wordpress._hideButtons();
 239              });
 240          },
 241  
 242          getInfo : function() {
 243              return {
 244                  longname : 'WordPress Plugin',
 245                  author : 'WordPress', // add Moxiecode?
 246                  authorurl : 'http://wordpress.org',
 247                  infourl : 'http://wordpress.org',
 248                  version : '3.0'
 249              };
 250          },
 251  
 252          // Internal functions
 253          _setEmbed : function(c) {
 254              return c.replace(/\[embed\]([\s\S]+?)\[\/embed\][\s\u00a0]*/g, function(a,b){
 255                  return '<img width="300" height="200" src="' + tinymce.baseURL + '/plugins/wordpress/img/trans.gif" class="wp-oembed mceItemNoResize" alt="'+b+'" title="'+b+'" />';
 256              });
 257          },
 258  
 259          _getEmbed : function(c) {
 260              return c.replace(/<img[^>]+>/g, function(a) {
 261                  if ( a.indexOf('class="wp-oembed') != -1 ) {
 262                      var u = a.match(/alt="([^\"]+)"/);
 263                      if ( u[1] )
 264                          a = '[embed]' + u[1] + '[/embed]';
 265                  }
 266                  return a;
 267              });
 268          },
 269  
 270          _showButtons : function(n, id) {
 271              var ed = tinyMCE.activeEditor, p1, p2, vp, DOM = tinymce.DOM, X, Y;
 272  
 273              vp = ed.dom.getViewPort(ed.getWin());
 274              p1 = DOM.getPos(ed.getContentAreaContainer());
 275              p2 = ed.dom.getPos(n);
 276  
 277              X = Math.max(p2.x - vp.x, 0) + p1.x;
 278              Y = Math.max(p2.y - vp.y, 0) + p1.y;
 279  
 280              DOM.setStyles(id, {
 281                  'top' : Y+5+'px',
 282                  'left' : X+5+'px',
 283                  'display' : 'block'
 284              });
 285  
 286              if ( this.mceTout )
 287                  clearTimeout(this.mceTout);
 288  
 289              this.mceTout = setTimeout( function(){ed.plugins.wordpress._hideButtons();}, 5000 );
 290          },
 291  
 292          _hideButtons : function() {
 293              if ( !this.mceTout )
 294                  return;
 295  
 296              if ( document.getElementById('wp_editbtns') )
 297                  tinymce.DOM.hide('wp_editbtns');
 298  
 299              if ( document.getElementById('wp_gallerybtns') )
 300                  tinymce.DOM.hide('wp_gallerybtns');
 301  
 302              clearTimeout(this.mceTout);
 303              this.mceTout = 0;
 304          },
 305  
 306          do_align : function(n, a) {
 307              var P, DL, DIV, cls, c, ed = tinyMCE.activeEditor;
 308  
 309              if ( /^(mceItemFlash|mceItemShockWave|mceItemWindowsMedia|mceItemQuickTime|mceItemRealMedia)$/.test(n.className) )
 310                  return;
 311  
 312              P = ed.dom.getParent(n, 'p');
 313              DL = ed.dom.getParent(n, 'dl');
 314              DIV = ed.dom.getParent(n, 'div');
 315  
 316              if ( DL && DIV ) {
 317                  cls = ed.dom.hasClass(DL, a) ? 'alignnone' : a;
 318                  DL.className = DL.className.replace(/align[^ '"]+\s?/g, '');
 319                  ed.dom.addClass(DL, cls);
 320                  c = (cls == 'aligncenter') ? ed.dom.addClass(DIV, 'mceIEcenter') : ed.dom.removeClass(DIV, 'mceIEcenter');
 321              } else if ( P ) {
 322                  cls = ed.dom.hasClass(n, a) ? 'alignnone' : a;
 323                  n.className = n.className.replace(/align[^ '"]+\s?/g, '');
 324                  ed.dom.addClass(n, cls);
 325                  if ( cls == 'aligncenter' )
 326                      ed.dom.setStyle(P, 'textAlign', 'center');
 327                  else if (P.style && P.style.textAlign == 'center')
 328                      ed.dom.setStyle(P, 'textAlign', '');
 329              }
 330  
 331              ed.execCommand('mceRepaint');
 332          },
 333  
 334          // Resizes the iframe by a relative height value
 335          _resizeIframe : function(ed, tb_id, dy) {
 336              var ifr = ed.getContentAreaContainer().firstChild;
 337  
 338              DOM.setStyle(ifr, 'height', ifr.clientHeight + dy); // Resize iframe
 339              ed.theme.deltaHeight += dy; // For resize cookie
 340          },
 341  
 342          _handleMoreBreak : function(ed, url) {
 343              var moreHTML, nextpageHTML;
 344  
 345              moreHTML = '<img src="' + url + '/img/trans.gif" alt="$1" class="mceWPmore mceItemNoResize" title="'+ed.getLang('wordpress.wp_more_alt')+'" />';
 346              nextpageHTML = '<img src="' + url + '/img/trans.gif" class="mceWPnextpage mceItemNoResize" title="'+ed.getLang('wordpress.wp_page_alt')+'" />';
 347  
 348              // Load plugin specific CSS into editor
 349              ed.onInit.add(function() {
 350                  ed.dom.loadCSS(url + '/css/content.css');
 351              });
 352  
 353              // Display morebreak instead if img in element path
 354              ed.onPostRender.add(function() {
 355                  if (ed.theme.onResolveName) {
 356                      ed.theme.onResolveName.add(function(th, o) {
 357                          if (o.node.nodeName == 'IMG') {
 358                              if ( ed.dom.hasClass(o.node, 'mceWPmore') )
 359                                  o.name = 'wpmore';
 360                              if ( ed.dom.hasClass(o.node, 'mceWPnextpage') )
 361                                  o.name = 'wppage';
 362                          }
 363  
 364                      });
 365                  }
 366              });
 367  
 368              // Replace morebreak with images
 369              ed.onBeforeSetContent.add(function(ed, o) {
 370                  o.content = o.content.replace(/<!--more(.*?)-->/g, moreHTML);
 371                  o.content = o.content.replace(/<!--nextpage-->/g, nextpageHTML);
 372              });
 373  
 374              // Replace images with morebreak
 375              ed.onPostProcess.add(function(ed, o) {
 376                  if (o.get)
 377                      o.content = o.content.replace(/<img[^>]+>/g, function(im) {
 378                          if (im.indexOf('class="mceWPmore') !== -1) {
 379                              var m, moretext = (m = im.match(/alt="(.*?)"/)) ? m[1] : '';
 380                              im = '<!--more'+moretext+'-->';
 381                          }
 382                          if (im.indexOf('class="mceWPnextpage') !== -1)
 383                              im = '<!--nextpage-->';
 384  
 385                          return im;
 386                      });
 387              });
 388  
 389              // Set active buttons if user selected pagebreak or more break
 390              ed.onNodeChange.add(function(ed, cm, n) {
 391                  cm.setActive('wp_page', n.nodeName === 'IMG' && ed.dom.hasClass(n, 'mceWPnextpage'));
 392                  cm.setActive('wp_more', n.nodeName === 'IMG' && ed.dom.hasClass(n, 'mceWPmore'));
 393              });
 394          }
 395      });
 396  
 397      // Register plugin
 398      tinymce.PluginManager.add('wordpress', tinymce.plugins.WordPress);
 399  })();


Generated: Fri Jan 8 00:19:48 2010 Cross-referenced by PHPXref 0.7