[ Index ]

PHP Cross Reference of Wordpress 2.9.1

title

Body

[close]

/wp-includes/js/ -> quicktags.dev.js (source)

   1  // new edit toolbar used with permission
   2  // by Alex King
   3  // http://www.alexking.org/
   4  
   5  var edButtons = new Array(), edLinks = new Array(), edOpenTags = new Array(), now = new Date(), datetime;
   6  
   7  function edButton(id, display, tagStart, tagEnd, access, open) {
   8      this.id = id;                // used to name the toolbar button
   9      this.display = display;        // label on button
  10      this.tagStart = tagStart;     // open tag
  11      this.tagEnd = tagEnd;        // close tag
  12      this.access = access;        // access key
  13      this.open = open;            // set to -1 if tag does not need to be closed
  14  }
  15  
  16  function zeroise(number, threshold) {
  17      // FIXME: or we could use an implementation of printf in js here
  18      var str = number.toString();
  19      if (number < 0) { str = str.substr(1, str.length) }
  20      while (str.length < threshold) { str = "0" + str }
  21      if (number < 0) { str = '-' + str }
  22      return str;
  23  }
  24  
  25  datetime = now.getUTCFullYear() + '-' +
  26  zeroise(now.getUTCMonth() + 1, 2) + '-' +
  27  zeroise(now.getUTCDate(), 2) + 'T' +
  28  zeroise(now.getUTCHours(), 2) + ':' +
  29  zeroise(now.getUTCMinutes(), 2) + ':' +
  30  zeroise(now.getUTCSeconds() ,2) +
  31  '+00:00';
  32  
  33  edButtons[edButtons.length] =
  34  new edButton('ed_strong'
  35  ,'b'
  36  ,'<strong>'
  37  ,'</strong>'
  38  ,'b'
  39  );
  40  
  41  edButtons[edButtons.length] =
  42  new edButton('ed_em'
  43  ,'i'
  44  ,'<em>'
  45  ,'</em>'
  46  ,'i'
  47  );
  48  
  49  edButtons[edButtons.length] =
  50  new edButton('ed_link'
  51  ,'link'
  52  ,''
  53  ,'</a>'
  54  ,'a'
  55  ); // special case
  56  
  57  edButtons[edButtons.length] =
  58  new edButton('ed_block'
  59  ,'b-quote'
  60  ,'\n\n<blockquote>'
  61  ,'</blockquote>\n\n'
  62  ,'q'
  63  );
  64  
  65  
  66  edButtons[edButtons.length] =
  67  new edButton('ed_del'
  68  ,'del'
  69  ,'<del datetime="' + datetime + '">'
  70  ,'</del>'
  71  ,'d'
  72  );
  73  
  74  edButtons[edButtons.length] =
  75  new edButton('ed_ins'
  76  ,'ins'
  77  ,'<ins datetime="' + datetime + '">'
  78  ,'</ins>'
  79  ,'s'
  80  );
  81  
  82  edButtons[edButtons.length] =
  83  new edButton('ed_img'
  84  ,'img'
  85  ,''
  86  ,''
  87  ,'m'
  88  ,-1
  89  ); // special case
  90  
  91  edButtons[edButtons.length] =
  92  new edButton('ed_ul'
  93  ,'ul'
  94  ,'<ul>\n'
  95  ,'</ul>\n\n'
  96  ,'u'
  97  );
  98  
  99  edButtons[edButtons.length] =
 100  new edButton('ed_ol'
 101  ,'ol'
 102  ,'<ol>\n'
 103  ,'</ol>\n\n'
 104  ,'o'
 105  );
 106  
 107  edButtons[edButtons.length] =
 108  new edButton('ed_li'
 109  ,'li'
 110  ,'\t<li>'
 111  ,'</li>\n'
 112  ,'l'
 113  );
 114  
 115  edButtons[edButtons.length] =
 116  new edButton('ed_code'
 117  ,'code'
 118  ,'<code>'
 119  ,'</code>'
 120  ,'c'
 121  );
 122  
 123  edButtons[edButtons.length] =
 124  new edButton('ed_more'
 125  ,'more'
 126  ,'<!--more-->'
 127  ,''
 128  ,'t'
 129  ,-1
 130  );
 131  /*
 132  edButtons[edButtons.length] =
 133  new edButton('ed_next'
 134  ,'page'
 135  ,'<!--nextpage-->'
 136  ,''
 137  ,'p'
 138  ,-1
 139  );
 140  */
 141  function edLink() {
 142      this.display = '';
 143      this.URL = '';
 144      this.newWin = 0;
 145  }
 146  
 147  edLinks[edLinks.length] = new edLink('WordPress'
 148                                      ,'http://wordpress.org/'
 149                                      );
 150  
 151  edLinks[edLinks.length] = new edLink('alexking.org'
 152                                      ,'http://www.alexking.org/'
 153                                      );
 154  
 155  function edShowButton(button, i) {
 156      if (button.id == 'ed_img') {
 157          document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertImage(edCanvas);" value="' + button.display + '" />');
 158      }
 159      else if (button.id == 'ed_link') {
 160          document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertLink(edCanvas, ' + i + ');" value="' + button.display + '" />');
 161      }
 162      else {
 163          document.write('<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertTag(edCanvas, ' + i + ');" value="' + button.display + '"  />');
 164      }
 165  }
 166  
 167  function edShowLinks() {
 168      var tempStr = '<select onchange="edQuickLink(this.options[this.selectedIndex].value, this);"><option value="-1" selected>' + quicktagsL10n.quickLinks + '</option>', i;
 169      for (i = 0; i < edLinks.length; i++) {
 170          tempStr += '<option value="' + i + '">' + edLinks[i].display + '</option>';
 171      }
 172      tempStr += '</select>';
 173      document.write(tempStr);
 174  }
 175  
 176  function edAddTag(button) {
 177      if (edButtons[button].tagEnd != '') {
 178          edOpenTags[edOpenTags.length] = button;
 179          document.getElementById(edButtons[button].id).value = '/' + document.getElementById(edButtons[button].id).value;
 180      }
 181  }
 182  
 183  function edRemoveTag(button) {
 184      for (var i = 0; i < edOpenTags.length; i++) {
 185          if (edOpenTags[i] == button) {
 186              edOpenTags.splice(i, 1);
 187              document.getElementById(edButtons[button].id).value =         document.getElementById(edButtons[button].id).value.replace('/', '');
 188          }
 189      }
 190  }
 191  
 192  function edCheckOpenTags(button) {
 193      var tag = 0, i;
 194      for (i = 0; i < edOpenTags.length; i++) {
 195          if (edOpenTags[i] == button) {
 196              tag++;
 197          }
 198      }
 199      if (tag > 0) {
 200          return true; // tag found
 201      }
 202      else {
 203          return false; // tag not found
 204      }
 205  }
 206  
 207  function edCloseAllTags() {
 208      var count = edOpenTags.length, o;
 209      for (o = 0; o < count; o++) {
 210          edInsertTag(edCanvas, edOpenTags[edOpenTags.length - 1]);
 211      }
 212  }
 213  
 214  function edQuickLink(i, thisSelect) {
 215      if (i > -1) {
 216          var newWin = '', tempStr;
 217          if (edLinks[i].newWin == 1) {
 218              newWin = ' target="_blank"';
 219          }
 220          tempStr = '<a href="' + edLinks[i].URL + '"' + newWin + '>'
 221                      + edLinks[i].display
 222                      + '</a>';
 223          thisSelect.selectedIndex = 0;
 224          edInsertContent(edCanvas, tempStr);
 225      }
 226      else {
 227          thisSelect.selectedIndex = 0;
 228      }
 229  }
 230  
 231  function edSpell(myField) {
 232      var word = '', sel, startPos, endPos;
 233      if (document.selection) {
 234          myField.focus();
 235          sel = document.selection.createRange();
 236          if (sel.text.length > 0) {
 237              word = sel.text;
 238          }
 239      }
 240      else if (myField.selectionStart || myField.selectionStart == '0') {
 241          startPos = myField.selectionStart;
 242          endPos = myField.selectionEnd;
 243          if (startPos != endPos) {
 244              word = myField.value.substring(startPos, endPos);
 245          }
 246      }
 247      if (word == '') {
 248          word = prompt(quicktagsL10n.wordLookup, '');
 249      }
 250      if (word !== null && /^\w[\w ]*$/.test(word)) {
 251          window.open('http://www.answers.com/' + escape(word));
 252      }
 253  }
 254  
 255  function edToolbar() {
 256      document.write('<div id="ed_toolbar">');
 257      for (var i = 0; i < edButtons.length; i++) {
 258          edShowButton(edButtons[i], i);
 259      }
 260      document.write('<input type="button" id="ed_spell" class="ed_button" onclick="edSpell(edCanvas);" title="' + quicktagsL10n.dictionaryLookup + '" value="' + quicktagsL10n.lookup + '" />');
 261      document.write('<input type="button" id="ed_close" class="ed_button" onclick="edCloseAllTags();" title="' + quicktagsL10n.closeAllOpenTags + '" value="' + quicktagsL10n.closeTags + '" />');
 262  //    edShowLinks(); // disabled by default
 263      document.write('</div>');
 264  }
 265  
 266  // insertion code
 267  
 268  function edInsertTag(myField, i) {
 269      //IE support
 270      if (document.selection) {
 271          myField.focus();
 272          var sel = document.selection.createRange();
 273          if (sel.text.length > 0) {
 274              sel.text = edButtons[i].tagStart + sel.text + edButtons[i].tagEnd;
 275          }
 276          else {
 277              if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
 278                  sel.text = edButtons[i].tagStart;
 279                  edAddTag(i);
 280              }
 281              else {
 282                  sel.text = edButtons[i].tagEnd;
 283                  edRemoveTag(i);
 284              }
 285          }
 286          myField.focus();
 287      }
 288      //MOZILLA/NETSCAPE support
 289      else if (myField.selectionStart || myField.selectionStart == '0') {
 290          var startPos = myField.selectionStart, endPos = myField.selectionEnd, cursorPos = endPos, scrollTop = myField.scrollTop;
 291  
 292          if (startPos != endPos) {
 293              myField.value = myField.value.substring(0, startPos)
 294                            + edButtons[i].tagStart
 295                            + myField.value.substring(startPos, endPos)
 296                            + edButtons[i].tagEnd
 297                            + myField.value.substring(endPos, myField.value.length);
 298              cursorPos += edButtons[i].tagStart.length + edButtons[i].tagEnd.length;
 299          }
 300          else {
 301              if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
 302                  myField.value = myField.value.substring(0, startPos)
 303                                + edButtons[i].tagStart
 304                                + myField.value.substring(endPos, myField.value.length);
 305                  edAddTag(i);
 306                  cursorPos = startPos + edButtons[i].tagStart.length;
 307              }
 308              else {
 309                  myField.value = myField.value.substring(0, startPos)
 310                                + edButtons[i].tagEnd
 311                                + myField.value.substring(endPos, myField.value.length);
 312                  edRemoveTag(i);
 313                  cursorPos = startPos + edButtons[i].tagEnd.length;
 314              }
 315          }
 316          myField.focus();
 317          myField.selectionStart = cursorPos;
 318          myField.selectionEnd = cursorPos;
 319          myField.scrollTop = scrollTop;
 320      }
 321      else {
 322          if (!edCheckOpenTags(i) || edButtons[i].tagEnd == '') {
 323              myField.value += edButtons[i].tagStart;
 324              edAddTag(i);
 325          }
 326          else {
 327              myField.value += edButtons[i].tagEnd;
 328              edRemoveTag(i);
 329          }
 330          myField.focus();
 331      }
 332  }
 333  
 334  function edInsertContent(myField, myValue) {
 335      var sel, startPos, endPos, scrollTop;
 336      
 337      //IE support
 338      if (document.selection) {
 339          myField.focus();
 340          sel = document.selection.createRange();
 341          sel.text = myValue;
 342          myField.focus();
 343      }
 344      //MOZILLA/NETSCAPE support
 345      else if (myField.selectionStart || myField.selectionStart == '0') {
 346          startPos = myField.selectionStart;
 347          endPos = myField.selectionEnd;
 348          scrollTop = myField.scrollTop;
 349          myField.value = myField.value.substring(0, startPos)
 350                        + myValue
 351                        + myField.value.substring(endPos, myField.value.length);
 352          myField.focus();
 353          myField.selectionStart = startPos + myValue.length;
 354          myField.selectionEnd = startPos + myValue.length;
 355          myField.scrollTop = scrollTop;
 356      } else {
 357          myField.value += myValue;
 358          myField.focus();
 359      }
 360  }
 361  
 362  function edInsertLink(myField, i, defaultValue) {
 363      if (!defaultValue) {
 364          defaultValue = 'http://';
 365      }
 366      if (!edCheckOpenTags(i)) {
 367          var URL = prompt(quicktagsL10n.enterURL, defaultValue);
 368          if (URL) {
 369              edButtons[i].tagStart = '<a href="' + URL + '">';
 370              edInsertTag(myField, i);
 371          }
 372      }
 373      else {
 374          edInsertTag(myField, i);
 375      }
 376  }
 377  
 378  function edInsertImage(myField) {
 379      var myValue = prompt(quicktagsL10n.enterImageURL, 'http://');
 380      if (myValue) {
 381          myValue = '<img src="'
 382                  + myValue
 383                  + '" alt="' + prompt(quicktagsL10n.enterImageDescription, '')
 384                  + '" />';
 385          edInsertContent(myField, myValue);
 386      }
 387  }
 388  
 389  
 390  // Allow multiple instances.
 391  // Name = unique value, id = textarea id, container = container div.
 392  // Can disable some buttons by passing comma delimited string as 4th param.
 393  var QTags = function(name, id, container, disabled) {
 394      var t = this, cont = document.getElementById(container), i, tag, tb, html, sel;
 395  
 396      t.Buttons = [];
 397      t.Links = [];
 398      t.OpenTags = [];
 399      t.Canvas = document.getElementById(id);
 400  
 401      if ( ! t.Canvas || ! cont )
 402          return;
 403  
 404      disabled = ( typeof disabled != 'undefined' ) ? ','+disabled+',' : '';
 405  
 406      t.edShowButton = function(button, i) {
 407          if ( disabled && (disabled.indexOf(','+button.display+',') != -1) )
 408              return '';
 409          else if ( button.id == name+'_img' )
 410              return '<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="edInsertImage('+name+'.Canvas);" value="' + button.display + '" />';
 411          else if (button.id == name+'_link')
 412              return '<input type="button" id="' + button.id + '" accesskey="' + button.access + '" class="ed_button" onclick="'+name+'.edInsertLink('+i+');" value="'+button.display+'" />';
 413          else
 414              return '<input type="button" id="' + button.id + '" accesskey="'+button.access+'" class="ed_button" onclick="'+name+'.edInsertTag('+i+');" value="'+button.display+'" />';
 415      };
 416  
 417      t.edAddTag = function(button) {
 418          if ( t.Buttons[button].tagEnd != '' ) {
 419              t.OpenTags[t.OpenTags.length] = button;
 420              document.getElementById(t.Buttons[button].id).value = '/' + document.getElementById(t.Buttons[button].id).value;
 421          }
 422      };
 423  
 424      t.edRemoveTag = function(button) {
 425          for ( i = 0; i < t.OpenTags.length; i++ ) {
 426              if ( t.OpenTags[i] == button ) {
 427                  t.OpenTags.splice(i, 1);
 428                  document.getElementById(t.Buttons[button].id).value = document.getElementById(t.Buttons[button].id).value.replace('/', '');
 429              }
 430          }
 431      };
 432  
 433      t.edCheckOpenTags = function(button) {
 434          tag = 0;
 435          for ( var i = 0; i < t.OpenTags.length; i++ ) {
 436              if ( t.OpenTags[i] == button )
 437                  tag++;
 438          }
 439          if ( tag > 0 ) return true; // tag found
 440          else return false; // tag not found
 441      };
 442  
 443      this.edCloseAllTags = function() {
 444          var count = t.OpenTags.length;
 445          for ( var o = 0; o < count; o++ )
 446              t.edInsertTag(t.OpenTags[t.OpenTags.length - 1]);
 447      };
 448  
 449      this.edQuickLink = function(i, thisSelect) {
 450          if ( i > -1 ) {
 451              var newWin = '', tempStr;
 452              if ( Links[i].newWin == 1 ) {
 453                  newWin = ' target="_blank"';
 454              }
 455              tempStr = '<a href="' + Links[i].URL + '"' + newWin + '>'
 456                          + Links[i].display
 457                          + '</a>';
 458              thisSelect.selectedIndex = 0;
 459              edInsertContent(t.Canvas, tempStr);
 460          } else {
 461              thisSelect.selectedIndex = 0;
 462          }
 463      };
 464  
 465      // insertion code
 466      t.edInsertTag = function(i) {
 467          //IE support
 468          if ( document.selection ) {
 469              t.Canvas.focus();
 470              sel = document.selection.createRange();
 471              if ( sel.text.length > 0 ) {
 472                  sel.text = t.Buttons[i].tagStart + sel.text + t.Buttons[i].tagEnd;
 473              } else {
 474                  if ( ! t.edCheckOpenTags(i) || t.Buttons[i].tagEnd == '' ) {
 475                      sel.text = t.Buttons[i].tagStart;
 476                      t.edAddTag(i);
 477                  } else {
 478                      sel.text = t.Buttons[i].tagEnd;
 479                      t.edRemoveTag(i);
 480                  }
 481              }
 482              t.Canvas.focus();
 483          } else if ( t.Canvas.selectionStart || t.Canvas.selectionStart == '0' ) { //MOZILLA/NETSCAPE support
 484              var startPos = t.Canvas.selectionStart, endPos = t.Canvas.selectionEnd, cursorPos = endPos, scrollTop = t.Canvas.scrollTop;
 485  
 486              if ( startPos != endPos ) {
 487                  t.Canvas.value = t.Canvas.value.substring(0, startPos)
 488                                + t.Buttons[i].tagStart
 489                                + t.Canvas.value.substring(startPos, endPos)
 490                                + t.Buttons[i].tagEnd
 491                                + t.Canvas.value.substring(endPos, t.Canvas.value.length);
 492                  cursorPos += t.Buttons[i].tagStart.length + t.Buttons[i].tagEnd.length;
 493              } else {
 494                  if ( !t.edCheckOpenTags(i) || t.Buttons[i].tagEnd == '' ) {
 495                      t.Canvas.value = t.Canvas.value.substring(0, startPos)
 496                                    + t.Buttons[i].tagStart
 497                                    + t.Canvas.value.substring(endPos, t.Canvas.value.length);
 498                      t.edAddTag(i);
 499                      cursorPos = startPos + t.Buttons[i].tagStart.length;
 500                  } else {
 501                      t.Canvas.value = t.Canvas.value.substring(0, startPos)
 502                                    + t.Buttons[i].tagEnd
 503                                    + t.Canvas.value.substring(endPos, t.Canvas.value.length);
 504                      t.edRemoveTag(i);
 505                      cursorPos = startPos + t.Buttons[i].tagEnd.length;
 506                  }
 507              }
 508              t.Canvas.focus();
 509              t.Canvas.selectionStart = cursorPos;
 510              t.Canvas.selectionEnd = cursorPos;
 511              t.Canvas.scrollTop = scrollTop;
 512          } else {
 513              if ( ! t.edCheckOpenTags(i) || t.Buttons[i].tagEnd == '' ) {
 514                  t.Canvas.value += Buttons[i].tagStart;
 515                  t.edAddTag(i);
 516              } else {
 517                  t.Canvas.value += Buttons[i].tagEnd;
 518                  t.edRemoveTag(i);
 519              }
 520              t.Canvas.focus();
 521          }
 522      };
 523  
 524      this.edInsertLink = function(i, defaultValue) {
 525          if ( ! defaultValue )
 526              defaultValue = 'http://';
 527  
 528          if ( ! t.edCheckOpenTags(i) ) {
 529              var URL = prompt(quicktagsL10n.enterURL, defaultValue);
 530              if ( URL ) {
 531                  t.Buttons[i].tagStart = '<a href="' + URL + '">';
 532                  t.edInsertTag(i);
 533              }
 534          } else {
 535              t.edInsertTag(i);
 536          }
 537      };
 538  
 539      this.edInsertImage = function() {
 540          var myValue = prompt(quicktagsL10n.enterImageURL, 'http://');
 541          if ( myValue ) {
 542              myValue = '<img src="'
 543                      + myValue
 544                      + '" alt="' + prompt(quicktagsL10n.enterImageDescription, '')
 545                      + '" />';
 546              edInsertContent(t.Canvas, myValue);
 547          }
 548      };
 549  
 550      t.Buttons[t.Buttons.length] = new edButton(name+'_strong','b','<strong>','</strong>','b');
 551      t.Buttons[t.Buttons.length] = new edButton(name+'_em','i','<em>','</em>','i');
 552      t.Buttons[t.Buttons.length] = new edButton(name+'_link','link','','</a>','a'); // special case
 553      t.Buttons[t.Buttons.length] = new edButton(name+'_block','b-quote','\n\n<blockquote>','</blockquote>\n\n','q');
 554      t.Buttons[t.Buttons.length] = new edButton(name+'_del','del','<del datetime="' + datetime + '">','</del>','d');
 555      t.Buttons[t.Buttons.length] = new edButton(name+'_ins','ins','<ins datetime="' + datetime + '">','</ins>','s');
 556      t.Buttons[t.Buttons.length] = new edButton(name+'_img','img','','','m',-1); // special case
 557      t.Buttons[t.Buttons.length] = new edButton(name+'_ul','ul','<ul>\n','</ul>\n\n','u');
 558      t.Buttons[t.Buttons.length] = new edButton(name+'_ol','ol','<ol>\n','</ol>\n\n','o');
 559      t.Buttons[t.Buttons.length] = new edButton(name+'_li','li','\t<li>','</li>\n','l');
 560      t.Buttons[t.Buttons.length] = new edButton(name+'_code','code','<code>','</code>','c');
 561      t.Buttons[t.Buttons.length] = new edButton(name+'_more','more','<!--more-->','','t',-1);
 562  //    t.Buttons[t.Buttons.length] = new edButton(name+'_next','page','<!--nextpage-->','','p',-1);
 563  
 564      tb = document.createElement('div');
 565      tb.id = name+'_qtags';
 566  
 567      html = '<div id="'+name+'_toolbar">';
 568      for (i = 0; i < t.Buttons.length; i++)
 569          html += t.edShowButton(t.Buttons[i], i);
 570  
 571      html += '<input type="button" id="'+name+'_ed_spell" class="ed_button" onclick="edSpell('+name+'.Canvas);" title="' + quicktagsL10n.dictionaryLookup + '" value="' + quicktagsL10n.lookup + '" />';
 572      html += '<input type="button" id="'+name+'_ed_close" class="ed_button" onclick="'+name+'.edCloseAllTags();" title="' + quicktagsL10n.closeAllOpenTags + '" value="' + quicktagsL10n.closeTags + '" /></div>';
 573  
 574      tb.innerHTML = html;
 575      cont.parentNode.insertBefore(tb, cont);
 576  
 577  };


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