[ Index ]

PHP Cross Reference of Wordpress 2.9.1

title

Body

[close]

/wp-includes/js/tinymce/plugins/wpeditimage/js/ -> editimage.js (source)

   1  
   2  var tinymce = null, tinyMCEPopup, tinyMCE;
   3  
   4  tinyMCEPopup = {
   5      init: function() {
   6          var t = this, w, ti, li, q, i, it;
   7  
   8          li = ('' + document.location.search).replace(/^\?/, '').split('&');
   9          q = {};
  10          for (i=0; i<li.length; i++) {
  11              it = li[i].split('=');
  12              q[unescape(it[0])] = unescape(it[1]);
  13          }
  14  
  15          if (q.mce_rdomain)
  16              document.domain = q.mce_rdomain;
  17  
  18          // Find window & API
  19          w = t.getWin();
  20          tinymce = w.tinymce;
  21          tinyMCE = w.tinyMCE;
  22          t.editor = tinymce.EditorManager.activeEditor;
  23          t.params = t.editor.windowManager.params;
  24  
  25          // Setup local DOM
  26          t.dom = t.editor.windowManager.createInstance('tinymce.dom.DOMUtils', document);
  27          t.editor.windowManager.onOpen.dispatch(t.editor.windowManager, window);
  28      },
  29  
  30      getWin : function() {
  31          return window.dialogArguments || opener || parent || top;
  32      },
  33  
  34      getParam : function(n, dv) {
  35          return this.editor.getParam(n, dv);
  36      },
  37  
  38      close : function() {
  39          var t = this, win = t.getWin();
  40  
  41          // To avoid domain relaxing issue in Opera
  42  		function close() {
  43              win.tb_remove();
  44              tinymce = tinyMCE = t.editor = t.dom = t.dom.doc = null; // Cleanup
  45          };
  46  
  47          if (tinymce.isOpera)
  48              win.setTimeout(close, 0);
  49          else
  50              close();
  51      },
  52  
  53      execCommand : function(cmd, ui, val, a) {
  54          a = a || {};
  55          a.skip_focus = 1;
  56  
  57          this.restoreSelection();
  58          return this.editor.execCommand(cmd, ui, val, a);
  59      },
  60  
  61      storeSelection : function() {
  62          this.editor.windowManager.bookmark = tinyMCEPopup.editor.selection.getBookmark('simple');
  63      },
  64  
  65      restoreSelection : function() {
  66          var t = tinyMCEPopup;
  67  
  68          if (tinymce.isIE)
  69              t.editor.selection.moveToBookmark(t.editor.windowManager.bookmark);
  70      }
  71  }
  72  tinyMCEPopup.init();
  73  
  74  var wpImage = {
  75      preInit : function() {
  76          // import colors stylesheet from parent
  77          var win = tinyMCEPopup.getWin();
  78          var styles = win.document.styleSheets;
  79  
  80          for ( i = 0; i < styles.length; i++ ) {
  81              var url = styles.item(i).href;
  82              if ( url && url.indexOf('colors') != -1 )
  83                  document.write( '<link rel="stylesheet" href="'+url+'" type="text/css" media="all" />' );
  84          }
  85      },
  86  
  87      I : function(e) {
  88          return document.getElementById(e);
  89      },
  90  
  91      current : '',
  92      link : '',
  93      link_rel : '',
  94      target_value : '',
  95      current_size_sel : 's100',
  96      width : '',
  97      height : '',
  98      align : '',
  99      img_alt : '',
 100  
 101      setTabs : function(tab) {
 102          var t = this;
 103  
 104          if ( 'current' == tab.className ) return false;
 105          t.I('div_advanced').style.display = ( 'tab_advanced' == tab.id ) ? 'block' : 'none';
 106          t.I('div_basic').style.display = ( 'tab_basic' == tab.id ) ? 'block' : 'none';
 107          t.I('tab_basic').className = t.I('tab_advanced').className = '';
 108          tab.className = 'current';
 109          return false;
 110      },
 111  
 112      img_seturl : function(u) {
 113          var t = this, rel = t.I('link_rel').value;
 114  
 115          if ( 'current' == u ) {
 116              t.I('link_href').value = t.current;
 117              t.I('link_rel').value = t.link_rel;
 118          } else {
 119              t.I('link_href').value = t.link;
 120              if ( rel ) {
 121                  rel = rel.replace( /attachment|wp-att-[0-9]+/gi, '' );
 122                  t.I('link_rel').value = tinymce.trim(rel);
 123              }
 124          }
 125      },
 126  
 127      imgAlignCls : function(v) {
 128          var t = this, cls = t.I('img_classes').value;
 129  
 130          t.I('img_demo').className = t.align = v;
 131  
 132          cls = cls.replace( /align[^ "']+/gi, '' );
 133          cls += (' ' + v);
 134          cls = cls.replace( /\s+/g, ' ' ).replace( /^\s/, '' );
 135  
 136          if ( 'aligncenter' == v ) {
 137              t.I('hspace').value = '';
 138              t.updateStyle('hspace');
 139          }
 140  
 141          t.I('img_classes').value = cls;
 142      },
 143  
 144      showSize : function(el) {
 145          var t = this, demo = t.I('img_demo'), w = t.width, h = t.height, id = el.id || 's100', size;
 146  
 147          size = parseInt(id.substring(1)) / 200;
 148          demo.width = Math.round(w * size);
 149          demo.height = Math.round(h * size);
 150  
 151          t.showSizeClear();
 152          el.style.borderColor = '#A3A3A3';
 153          el.style.backgroundColor = '#E5E5E5';
 154      },
 155  
 156      showSizeSet : function() {
 157          var t = this;
 158  
 159          if ( (t.width * 1.3) > parseInt(t.preloadImg.width) ) {
 160              var s130 = t.I('s130'), s120 = t.I('s120'), s110 = t.I('s110');
 161  
 162              s130.onclick = s120.onclick = s110.onclick = null;
 163              s130.onmouseover = s120.onmouseover = s110.onmouseover = null;
 164              s130.style.color = s120.style.color = s110.style.color = '#aaa';
 165          }
 166      },
 167  
 168      showSizeRem : function() {
 169          var t = this, demo = t.I('img_demo'), f = document.forms[0];
 170  
 171          demo.width = Math.round(f.width.value * 0.5);
 172          demo.height = Math.round(f.height.value * 0.5);
 173          t.showSizeClear();
 174          t.I(t.current_size_sel).style.borderColor = '#A3A3A3';
 175          t.I(t.current_size_sel).style.backgroundColor = '#E5E5E5';
 176  
 177          return false;
 178      },
 179  
 180      showSizeClear : function() {
 181          var divs = this.I('img_size').getElementsByTagName('div');
 182  
 183          for ( i = 0; i < divs.length; i++ ) {
 184              divs[i].style.borderColor = '#f1f1f1';
 185              divs[i].style.backgroundColor = '#f1f1f1';
 186          }
 187      },
 188  
 189      imgEditSize : function(el) {
 190          var t = this, f = document.forms[0];
 191  
 192          if ( ! t.preloadImg || ! t.preloadImg.width || ! t.preloadImg.height )    return;
 193          var W = parseInt(t.preloadImg.width), H = parseInt(t.preloadImg.height), w = t.width || W, h = t.height || H, id = el.id || 's100';
 194  
 195          size = parseInt(id.substring(1)) / 100;
 196  
 197          w = Math.round(w * size);
 198          h = Math.round(h * size);
 199  
 200          f.width.value = Math.min(W, w);
 201          f.height.value = Math.min(H, h);
 202  
 203          t.current_size_sel = id;
 204          t.demoSetSize();
 205      },
 206  
 207      demoSetSize : function(img) {
 208          var demo = this.I('img_demo'), f = document.forms[0];
 209  
 210          demo.width = f.width.value ? Math.round(f.width.value * 0.5) : '';
 211          demo.height = f.height.value ? Math.round(f.height.value * 0.5) : '';
 212      },
 213  
 214      demoSetStyle : function() {
 215          var f = document.forms[0], demo = this.I('img_demo'), dom = tinyMCEPopup.editor.dom;
 216  
 217          if (demo) {
 218              dom.setAttrib(demo, 'style', f.img_style.value);
 219              dom.setStyle(demo, 'width', '');
 220              dom.setStyle(demo, 'height', '');
 221          }
 222      },
 223  
 224      origSize : function() {
 225          var t = this, f = document.forms[0], el = t.I('s100');
 226  
 227          f.width.value = t.width = t.preloadImg.width;
 228          f.height.value = t.height = t.preloadImg.height;
 229          t.showSizeSet();
 230          t.demoSetSize();
 231          t.showSize(el);
 232      },
 233  
 234      init : function() {
 235          var ed = tinyMCEPopup.editor, h;
 236  
 237          h = document.body.innerHTML;
 238  
 239          // Replace a=x with a="x" in IE
 240          if (tinymce.isIE)
 241              h = h.replace(/ (value|title|alt)=([^"][^\s>]+)/gi, ' $1="$2"')
 242  
 243          document.body.innerHTML = ed.translate(h);
 244          window.setTimeout( function(){wpImage.setup();}, 100 );
 245      },
 246  
 247      setup : function() {
 248          var t = this, h, c, el, id, link, fname, f = document.forms[0], ed = tinyMCEPopup.editor, d = t.I('img_demo'), dom = tinyMCEPopup.dom, DL, caption = '';
 249          document.dir = tinyMCEPopup.editor.getParam('directionality','');
 250  
 251          if ( tinyMCEPopup.editor.getParam('wpeditimage_disable_captions', false) )
 252              t.I('cap_field').style.display = 'none';
 253  
 254          tinyMCEPopup.restoreSelection();
 255          el = ed.selection.getNode();
 256          if (el.nodeName != 'IMG') return;
 257  
 258          f.img_src.value = d.src = link = ed.dom.getAttrib(el, 'src');
 259          ed.dom.setStyle(el, 'float', '');
 260          t.getImageData();
 261          c = ed.dom.getAttrib(el, 'class');
 262  
 263          if ( DL = dom.getParent(el, 'dl') ) {
 264              var dlc = ed.dom.getAttrib(DL, 'class');
 265              dlc = dlc.match(/align[^ "']+/i);
 266              if ( dlc && ! dom.hasClass(el, dlc) ) {
 267                  c += ' '+dlc;
 268                  tinymce.trim(c);
 269              }
 270  
 271              tinymce.each(DL.childNodes, function(e) {
 272                  if ( e.nodeName == 'DD' && dom.hasClass(e, 'wp-caption-dd') ) {
 273                      caption = e.innerHTML;
 274                      return;
 275                  }
 276              });
 277          }
 278  
 279          f.img_cap.value = caption;
 280          f.img_title.value = ed.dom.getAttrib(el, 'title');
 281          f.img_alt.value = ed.dom.getAttrib(el, 'alt');
 282          f.border.value = ed.dom.getAttrib(el, 'border');
 283          f.vspace.value = ed.dom.getAttrib(el, 'vspace');
 284          f.hspace.value = ed.dom.getAttrib(el, 'hspace');
 285          f.align.value = ed.dom.getAttrib(el, 'align');
 286          f.width.value = t.width = ed.dom.getAttrib(el, 'width');
 287          f.height.value = t.height = ed.dom.getAttrib(el, 'height');
 288          f.img_classes.value = c;
 289          f.img_style.value = ed.dom.getAttrib(el, 'style');
 290  
 291          // Move attribs to styles
 292          if (dom.getAttrib(el, 'hspace'))
 293              t.updateStyle('hspace');
 294  
 295          if (dom.getAttrib(el, 'border'))
 296              t.updateStyle('border');
 297  
 298          if (dom.getAttrib(el, 'vspace'))
 299              t.updateStyle('vspace');
 300  
 301          if (pa = ed.dom.getParent(el, 'A')) {
 302              f.link_href.value = t.current = ed.dom.getAttrib(pa, 'href');
 303              f.link_title.value = ed.dom.getAttrib(pa, 'title');
 304              f.link_rel.value = t.link_rel = ed.dom.getAttrib(pa, 'rel');
 305              f.link_style.value = ed.dom.getAttrib(pa, 'style');
 306              t.target_value = ed.dom.getAttrib(pa, 'target');
 307              f.link_classes.value = ed.dom.getAttrib(pa, 'class');
 308          }
 309  
 310          f.link_target.checked = ( t.target_value && t.target_value == '_blank' ) ? 'checked' : '';
 311  
 312          fname = link.substring( link.lastIndexOf('/') );
 313          fname = fname.replace(/-[0-9]{2,4}x[0-9]{2,4}/, '' );
 314          t.link = link.substring( 0, link.lastIndexOf('/') ) + fname;
 315  
 316          if ( c.indexOf('alignleft') != -1 ) {
 317              t.I('alignleft').checked = "checked";
 318              d.className = t.align = "alignleft";
 319          } else if ( c.indexOf('aligncenter') != -1 ) {
 320              t.I('aligncenter').checked = "checked";
 321              d.className = t.align = "aligncenter";
 322          } else if ( c.indexOf('alignright') != -1 ) {
 323              t.I('alignright').checked = "checked";
 324              d.className = t.align = "alignright";
 325          } else if ( c.indexOf('alignnone') != -1 ) {
 326              t.I('alignnone').checked = "checked";
 327              d.className = t.align = "alignnone";
 328          }
 329  
 330          if ( t.width && t.preloadImg.width ) t.showSizeSet();
 331          document.body.style.display = '';
 332      },
 333  
 334      remove : function() {
 335          var ed = tinyMCEPopup.editor, p, el;
 336  
 337          tinyMCEPopup.restoreSelection();
 338          el = ed.selection.getNode();
 339          if (el.nodeName != 'IMG') return;
 340  
 341          if ( (p = ed.dom.getParent(el, 'div')) && ed.dom.hasClass(p, 'mceTemp') )
 342              ed.dom.remove(p);
 343          else if ( (p = ed.dom.getParent(el, 'A')) && p.childNodes.length == 1 )
 344              ed.dom.remove(p);
 345          else ed.dom.remove(el);
 346  
 347          ed.execCommand('mceRepaint');
 348          tinyMCEPopup.close();
 349          return;
 350      },
 351  
 352      update : function() {
 353          var t = this, f = document.forms[0], ed = tinyMCEPopup.editor, el, b, fixSafari = null, DL, P, A, DIV, do_caption = null, img_class = f.img_classes.value, html;
 354  
 355          tinyMCEPopup.restoreSelection();
 356          el = ed.selection.getNode();
 357  
 358          if (el.nodeName != 'IMG') return;
 359          if (f.img_src.value === '') {
 360              t.remove();
 361              return;
 362          }
 363  
 364          if ( f.img_cap.value != '' && f.width.value != '' ) {
 365              do_caption = 1;
 366              img_class = img_class.replace( /align[^ "']+\s?/gi, '' );
 367          }
 368  
 369          A = ed.dom.getParent(el, 'a');
 370          P = ed.dom.getParent(el, 'p');
 371          DL = ed.dom.getParent(el, 'dl');
 372          DIV = ed.dom.getParent(el, 'div');
 373  
 374          tinyMCEPopup.execCommand("mceBeginUndoLevel");
 375  
 376          ed.dom.setAttribs(el, {
 377              src : f.img_src.value,
 378              title : f.img_title.value,
 379              alt : f.img_alt.value,
 380              width : f.width.value,
 381              height : f.height.value,
 382              style : f.img_style.value,
 383              'class' : img_class
 384          });
 385  
 386          if ( f.link_href.value ) {
 387              // Create new anchor elements
 388              if ( A == null ) {
 389                  if ( ! f.link_href.value.match(/https?:\/\//i) )
 390                      f.link_href.value = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.link_href.value);
 391  
 392                  if ( tinymce.isWebKit && ed.dom.hasClass(el, 'aligncenter') ) {
 393                      ed.dom.removeClass(el, 'aligncenter');
 394                      fixSafari = 1;
 395                  }
 396  
 397                  tinyMCEPopup.execCommand("CreateLink", false, "#mce_temp_url#", {skip_undo : 1});
 398                  if ( fixSafari ) ed.dom.addClass(el, 'aligncenter');
 399  
 400                  tinymce.each(ed.dom.select("a"), function(n) {
 401                      if (ed.dom.getAttrib(n, 'href') == '#mce_temp_url#') {
 402  
 403                          ed.dom.setAttribs(n, {
 404                              href : f.link_href.value,
 405                              title : f.link_title.value,
 406                              rel : f.link_rel.value,
 407                              target : (f.link_target.checked == true) ? '_blank' : '',
 408                              'class' : f.link_classes.value,
 409                              style : f.link_style.value
 410                          });
 411                      }
 412                  });
 413              } else {
 414                  ed.dom.setAttribs(A, {
 415                      href : f.link_href.value,
 416                      title : f.link_title.value,
 417                      rel : f.link_rel.value,
 418                      target : (f.link_target.checked == true) ? '_blank' : '',
 419                      'class' : f.link_classes.value,
 420                      style : f.link_style.value
 421                  });
 422              }
 423          }
 424  
 425          if ( do_caption ) {
 426              var id, cap_id = '', cap, DT, DD, cap_width = 10 + parseInt(f.width.value), align = t.align.substring(5), div_cls = (t.align == 'aligncenter') ? 'mceTemp mceIEcenter' : 'mceTemp';
 427  
 428              if ( DL ) {
 429                  ed.dom.setAttribs(DL, {
 430                      'class' : 'wp-caption '+t.align,
 431                      style : 'width: '+cap_width+'px;'
 432                  });
 433  
 434                  if ( DIV )
 435                      ed.dom.setAttrib(DIV, 'class', div_cls);
 436  
 437                  if ( (DT = ed.dom.getParent(el, 'dt')) && (DD = DT.nextSibling) && ed.dom.hasClass(DD, 'wp-caption-dd') )
 438                      ed.dom.setHTML(DD, f.img_cap.value);
 439  
 440              } else {
 441                  var lnk = '', pa;
 442                  if ( (id = f.img_classes.value.match( /wp-image-([0-9]{1,6})/ )) && id[1] )
 443                      cap_id = 'attachment_'+id[1];
 444  
 445                  if ( f.link_href.value && (lnk = ed.dom.getParent(el, 'a')) ) {
 446                      if ( lnk.childNodes.length == 1 )
 447                          html = ed.dom.getOuterHTML(lnk);
 448                      else {
 449                          html = ed.dom.getOuterHTML(lnk);
 450                          html = html.match(/<a[^>]+>/i);
 451                          html = html+ed.dom.getOuterHTML(el)+'</a>';
 452                      }
 453                  } else html = ed.dom.getOuterHTML(el);
 454  
 455                  html = '<dl id="'+cap_id+'" class="wp-caption '+t.align+'" style="width: '+cap_width+
 456                  'px"><dt class="wp-caption-dt">'+html+'</dt><dd class="wp-caption-dd">'+f.img_cap.value+'</dd></dl>';
 457  
 458                  cap = ed.dom.create('div', {'class': div_cls}, html);
 459  
 460                  if ( P ) {
 461                      P.parentNode.insertBefore(cap, P);
 462                      if ( P.childNodes.length == 1 )
 463                          ed.dom.remove(P);
 464                      else if ( lnk && lnk.childNodes.length == 1 )
 465                          ed.dom.remove(lnk);
 466                      else ed.dom.remove(el);
 467                  } else if ( pa = ed.dom.getParent(el, 'TD,TH,LI') ) {
 468                      pa.appendChild(cap);
 469                      if ( lnk && lnk.childNodes.length == 1 )
 470                          ed.dom.remove(lnk);
 471                      else ed.dom.remove(el);
 472                  }
 473              }
 474  
 475          } else {
 476              if ( DL && DIV ) {
 477                  var aa;
 478                  if ( f.link_href.value && (aa = ed.dom.getParent(el, 'a')) ) html = ed.dom.getOuterHTML(aa);
 479                  else html = ed.dom.getOuterHTML(el);
 480  
 481                  P = ed.dom.create('p', {}, html);
 482                  DIV.parentNode.insertBefore(P, DIV);
 483                  ed.dom.remove(DIV);
 484              }
 485          }
 486  
 487          if ( f.img_classes.value.indexOf('aligncenter') != -1 ) {
 488              if ( P && ( ! P.style || P.style.textAlign != 'center' ) )
 489                  ed.dom.setStyle(P, 'textAlign', 'center');
 490          } else {
 491              if ( P && P.style && P.style.textAlign == 'center' )
 492                  ed.dom.setStyle(P, 'textAlign', '');
 493          }
 494  
 495          if ( ! f.link_href.value && A ) {
 496              b = ed.selection.getBookmark();
 497              ed.dom.remove(A, 1);
 498              ed.selection.moveToBookmark(b);
 499          }
 500  
 501          tinyMCEPopup.execCommand("mceEndUndoLevel");
 502          ed.execCommand('mceRepaint');
 503          tinyMCEPopup.close();
 504      },
 505  
 506      updateStyle : function(ty) {
 507          var dom = tinyMCEPopup.dom, st, v, f = document.forms[0], img = dom.create('img', {style : f.img_style.value});
 508  
 509          if (tinyMCEPopup.editor.settings.inline_styles) {
 510              // Handle align
 511              if (ty == 'align') {
 512                  dom.setStyle(img, 'float', '');
 513                  dom.setStyle(img, 'vertical-align', '');
 514  
 515                  v = f.align.value;
 516                  if (v) {
 517                      if (v == 'left' || v == 'right')
 518                          dom.setStyle(img, 'float', v);
 519                      else
 520                          img.style.verticalAlign = v;
 521                  }
 522              }
 523  
 524              // Handle border
 525              if (ty == 'border') {
 526                  dom.setStyle(img, 'border', '');
 527  
 528                  v = f.border.value;
 529                  if (v || v == '0') {
 530                      if (v == '0')
 531                          img.style.border = '0';
 532                      else
 533                          img.style.border = v + 'px solid black';
 534                  }
 535              }
 536  
 537              // Handle hspace
 538              if (ty == 'hspace') {
 539                  dom.setStyle(img, 'marginLeft', '');
 540                  dom.setStyle(img, 'marginRight', '');
 541  
 542                  v = f.hspace.value;
 543                  if (v) {
 544                      img.style.marginLeft = v + 'px';
 545                      img.style.marginRight = v + 'px';
 546                  }
 547              }
 548  
 549              // Handle vspace
 550              if (ty == 'vspace') {
 551                  dom.setStyle(img, 'marginTop', '');
 552                  dom.setStyle(img, 'marginBottom', '');
 553  
 554                  v = f.vspace.value;
 555                  if (v) {
 556                      img.style.marginTop = v + 'px';
 557                      img.style.marginBottom = v + 'px';
 558                  }
 559              }
 560  
 561              // Merge
 562              f.img_style.value = dom.serializeStyle(dom.parseStyle(img.style.cssText));
 563              this.demoSetStyle();
 564          }
 565      },
 566  
 567      checkVal : function(f) {
 568  
 569          if ( f.value == '' ) {
 570      //        if ( f.id == 'width' ) f.value = this.width || this.preloadImg.width;
 571      //        if ( f.id == 'height' ) f.value = this.height || this.preloadImg.height;
 572              if ( f.id == 'img_src' ) f.value = this.I('img_demo').src || this.preloadImg.src;
 573          }
 574      },
 575  
 576      resetImageData : function() {
 577          var f = document.forms[0];
 578  
 579          f.width.value = f.height.value = '';
 580      },
 581  
 582      updateImageData : function() {
 583          var f = document.forms[0], t = wpImage;
 584  
 585          if ( f.width.value == '' || f.height.value == '' ) {
 586              f.width.value = t.width = t.preloadImg.width;
 587              f.height.value = t.height = t.preloadImg.height;
 588          }
 589  
 590          t.showSizeSet();
 591          t.demoSetSize();
 592          if ( f.img_style.value )
 593              t.demoSetStyle();
 594      },
 595  
 596      getImageData : function() {
 597          var t = wpImage, f = document.forms[0];
 598  
 599          t.preloadImg = new Image();
 600          t.preloadImg.onload = t.updateImageData;
 601          t.preloadImg.onerror = t.resetImageData;
 602          t.preloadImg.src = tinyMCEPopup.editor.documentBaseURI.toAbsolute(f.img_src.value);
 603      }
 604  };
 605  
 606  window.onload = function(){wpImage.init();}
 607  wpImage.preInit();


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