| [ Index ] |
PHP Cross Reference of Joomla 1.5.26 DE |
[Summary view] [Print] [Text view]
1 /** 2 * $Id: editor_template_src.js 1045 2009-03-04 20:03:18Z spocke $ 3 * 4 * @author Moxiecode 5 * @copyright Copyright © 2004-2008, Moxiecode Systems AB, All rights reserved. 6 */ 7 8 (function(tinymce) { 9 var DOM = tinymce.DOM, Event = tinymce.dom.Event, extend = tinymce.extend, each = tinymce.each, Cookie = tinymce.util.Cookie, lastExtID, explode = tinymce.explode; 10 11 // Tell it to load theme specific language pack(s) 12 tinymce.ThemeManager.requireLangPack('advanced'); 13 14 tinymce.create('tinymce.themes.AdvancedTheme', { 15 sizes : [8, 10, 12, 14, 18, 24, 36], 16 17 // Control name lookup, format: title, command 18 controls : { 19 bold : ['bold_desc', 'Bold'], 20 italic : ['italic_desc', 'Italic'], 21 underline : ['underline_desc', 'Underline'], 22 strikethrough : ['striketrough_desc', 'Strikethrough'], 23 justifyleft : ['justifyleft_desc', 'JustifyLeft'], 24 justifycenter : ['justifycenter_desc', 'JustifyCenter'], 25 justifyright : ['justifyright_desc', 'JustifyRight'], 26 justifyfull : ['justifyfull_desc', 'JustifyFull'], 27 bullist : ['bullist_desc', 'InsertUnorderedList'], 28 numlist : ['numlist_desc', 'InsertOrderedList'], 29 outdent : ['outdent_desc', 'Outdent'], 30 indent : ['indent_desc', 'Indent'], 31 cut : ['cut_desc', 'Cut'], 32 copy : ['copy_desc', 'Copy'], 33 paste : ['paste_desc', 'Paste'], 34 undo : ['undo_desc', 'Undo'], 35 redo : ['redo_desc', 'Redo'], 36 link : ['link_desc', 'mceLink'], 37 unlink : ['unlink_desc', 'unlink'], 38 image : ['image_desc', 'mceImage'], 39 cleanup : ['cleanup_desc', 'mceCleanup'], 40 help : ['help_desc', 'mceHelp'], 41 code : ['code_desc', 'mceCodeEditor'], 42 hr : ['hr_desc', 'InsertHorizontalRule'], 43 removeformat : ['removeformat_desc', 'RemoveFormat'], 44 sub : ['sub_desc', 'subscript'], 45 sup : ['sup_desc', 'superscript'], 46 forecolor : ['forecolor_desc', 'ForeColor'], 47 forecolorpicker : ['forecolor_desc', 'mceForeColor'], 48 backcolor : ['backcolor_desc', 'HiliteColor'], 49 backcolorpicker : ['backcolor_desc', 'mceBackColor'], 50 charmap : ['charmap_desc', 'mceCharMap'], 51 visualaid : ['visualaid_desc', 'mceToggleVisualAid'], 52 anchor : ['anchor_desc', 'mceInsertAnchor'], 53 newdocument : ['newdocument_desc', 'mceNewDocument'], 54 blockquote : ['blockquote_desc', 'mceBlockQuote'] 55 }, 56 57 stateControls : ['bold', 'italic', 'underline', 'strikethrough', 'bullist', 'numlist', 'justifyleft', 'justifycenter', 'justifyright', 'justifyfull', 'sub', 'sup', 'blockquote'], 58 59 init : function(ed, url) { 60 var t = this, s, v, o; 61 62 t.editor = ed; 63 t.url = url; 64 t.onResolveName = new tinymce.util.Dispatcher(this); 65 66 // Default settings 67 t.settings = s = extend({ 68 theme_advanced_path : true, 69 theme_advanced_toolbar_location : 'bottom', 70 theme_advanced_buttons1 : "bold,italic,underline,strikethrough,|,justifyleft,justifycenter,justifyright,justifyfull,|,styleselect,formatselect", 71 theme_advanced_buttons2 : "bullist,numlist,|,outdent,indent,|,undo,redo,|,link,unlink,anchor,image,cleanup,help,code", 72 theme_advanced_buttons3 : "hr,removeformat,visualaid,|,sub,sup,|,charmap", 73 theme_advanced_blockformats : "p,address,pre,h1,h2,h3,h4,h5,h6", 74 theme_advanced_toolbar_align : "center", 75 theme_advanced_fonts : "Andale Mono=andale mono,times;Arial=arial,helvetica,sans-serif;Arial Black=arial black,avant garde;Book Antiqua=book antiqua,palatino;Comic Sans MS=comic sans ms,sans-serif;Courier New=courier new,courier;Georgia=georgia,palatino;Helvetica=helvetica;Impact=impact,chicago;Symbol=symbol;Tahoma=tahoma,arial,helvetica,sans-serif;Terminal=terminal,monaco;Times New Roman=times new roman,times;Trebuchet MS=trebuchet ms,geneva;Verdana=verdana,geneva;Webdings=webdings;Wingdings=wingdings,zapf dingbats", 76 theme_advanced_more_colors : 1, 77 theme_advanced_row_height : 23, 78 theme_advanced_resize_horizontal : 1, 79 theme_advanced_resizing_use_cookie : 1, 80 theme_advanced_font_sizes : "1,2,3,4,5,6,7", 81 readonly : ed.settings.readonly 82 }, ed.settings); 83 84 // Setup default font_size_style_values 85 if (!s.font_size_style_values) 86 s.font_size_style_values = "8pt,10pt,12pt,14pt,18pt,24pt,36pt"; 87 88 if (tinymce.is(s.theme_advanced_font_sizes, 'string')) { 89 s.font_size_style_values = tinymce.explode(s.font_size_style_values); 90 s.font_size_classes = tinymce.explode(s.font_size_classes || ''); 91 92 // Parse string value 93 o = {}; 94 ed.settings.theme_advanced_font_sizes = s.theme_advanced_font_sizes; 95 each(ed.getParam('theme_advanced_font_sizes', '', 'hash'), function(v, k) { 96 var cl; 97 98 if (k == v && v >= 1 && v <= 7) { 99 k = v + ' (' + t.sizes[v - 1] + 'pt)'; 100 101 if (ed.settings.convert_fonts_to_spans) { 102 cl = s.font_size_classes[v - 1]; 103 v = s.font_size_style_values[v - 1] || (t.sizes[v - 1] + 'pt'); 104 } 105 } 106 107 if (/^\s*\./.test(v)) 108 cl = v.replace(/\./g, ''); 109 110 o[k] = cl ? {'class' : cl} : {fontSize : v}; 111 }); 112 113 s.theme_advanced_font_sizes = o; 114 } 115 116 if ((v = s.theme_advanced_path_location) && v != 'none') 117 s.theme_advanced_statusbar_location = s.theme_advanced_path_location; 118 119 if (s.theme_advanced_statusbar_location == 'none') 120 s.theme_advanced_statusbar_location = 0; 121 122 // Init editor 123 ed.onInit.add(function() { 124 ed.onNodeChange.add(t._nodeChanged, t); 125 126 if (ed.settings.content_css !== false) 127 ed.dom.loadCSS(ed.baseURI.toAbsolute("themes/advanced/skins/" + ed.settings.skin + "/content.css")); 128 }); 129 130 ed.onSetProgressState.add(function(ed, b, ti) { 131 var co, id = ed.id, tb; 132 133 if (b) { 134 t.progressTimer = setTimeout(function() { 135 co = ed.getContainer(); 136 co = co.insertBefore(DOM.create('DIV', {style : 'position:relative'}), co.firstChild); 137 tb = DOM.get(ed.id + '_tbl'); 138 139 DOM.add(co, 'div', {id : id + '_blocker', 'class' : 'mceBlocker', style : {width : tb.clientWidth + 2, height : tb.clientHeight + 2}}); 140 DOM.add(co, 'div', {id : id + '_progress', 'class' : 'mceProgress', style : {left : tb.clientWidth / 2, top : tb.clientHeight / 2}}); 141 }, ti || 0); 142 } else { 143 DOM.remove(id + '_blocker'); 144 DOM.remove(id + '_progress'); 145 clearTimeout(t.progressTimer); 146 } 147 }); 148 149 DOM.loadCSS(s.editor_css ? ed.documentBaseURI.toAbsolute(s.editor_css) : url + "/skins/" + ed.settings.skin + "/ui.css"); 150 151 if (s.skin_variant) 152 DOM.loadCSS(url + "/skins/" + ed.settings.skin + "/ui_" + s.skin_variant + ".css"); 153 }, 154 155 createControl : function(n, cf) { 156 var cd, c; 157 158 if (c = cf.createControl(n)) 159 return c; 160 161 switch (n) { 162 case "styleselect": 163 return this._createStyleSelect(); 164 165 case "formatselect": 166 return this._createBlockFormats(); 167 168 case "fontselect": 169 return this._createFontSelect(); 170 171 case "fontsizeselect": 172 return this._createFontSizeSelect(); 173 174 case "forecolor": 175 return this._createForeColorMenu(); 176 177 case "backcolor": 178 return this._createBackColorMenu(); 179 } 180 181 if ((cd = this.controls[n])) 182 return cf.createButton(n, {title : "advanced." + cd[0], cmd : cd[1], ui : cd[2], value : cd[3]}); 183 }, 184 185 execCommand : function(cmd, ui, val) { 186 var f = this['_' + cmd]; 187 188 if (f) { 189 f.call(this, ui, val); 190 return true; 191 } 192 193 return false; 194 }, 195 196 _importClasses : function(e) { 197 var ed = this.editor, c = ed.controlManager.get('styleselect'); 198 199 if (c.getLength() == 0) { 200 each(ed.dom.getClasses(), function(o) { 201 c.add(o['class'], o['class']); 202 }); 203 } 204 }, 205 206 _createStyleSelect : function(n) { 207 var t = this, ed = t.editor, cf = ed.controlManager, c = cf.createListBox('styleselect', { 208 title : 'advanced.style_select', 209 onselect : function(v) { 210 if (c.selectedValue === v) { 211 ed.execCommand('mceSetStyleInfo', 0, {command : 'removeformat'}); 212 c.select(); 213 return false; 214 } else 215 ed.execCommand('mceSetCSSClass', 0, v); 216 } 217 }); 218 219 if (c) { 220 each(ed.getParam('theme_advanced_styles', '', 'hash'), function(v, k) { 221 if (v) 222 c.add(t.editor.translate(k), v); 223 }); 224 225 c.onPostRender.add(function(ed, n) { 226 if (!c.NativeListBox) { 227 Event.add(n.id + '_text', 'focus', t._importClasses, t); 228 Event.add(n.id + '_text', 'mousedown', t._importClasses, t); 229 Event.add(n.id + '_open', 'focus', t._importClasses, t); 230 Event.add(n.id + '_open', 'mousedown', t._importClasses, t); 231 } else 232 Event.add(n.id, 'focus', t._importClasses, t); 233 }); 234 } 235 236 return c; 237 }, 238 239 _createFontSelect : function() { 240 var c, t = this, ed = t.editor; 241 242 c = ed.controlManager.createListBox('fontselect', {title : 'advanced.fontdefault', cmd : 'FontName'}); 243 if (c) { 244 each(ed.getParam('theme_advanced_fonts', t.settings.theme_advanced_fonts, 'hash'), function(v, k) { 245 c.add(ed.translate(k), v, {style : v.indexOf('dings') == -1 ? 'font-family:' + v : ''}); 246 }); 247 } 248 249 return c; 250 }, 251 252 _createFontSizeSelect : function() { 253 var t = this, ed = t.editor, c, i = 0, cl = []; 254 255 c = ed.controlManager.createListBox('fontsizeselect', {title : 'advanced.font_size', onselect : function(v) { 256 if (v.fontSize) 257 ed.execCommand('FontSize', false, v.fontSize); 258 else { 259 each(t.settings.theme_advanced_font_sizes, function(v, k) { 260 if (v['class']) 261 cl.push(v['class']); 262 }); 263 264 ed.editorCommands._applyInlineStyle('span', {'class' : v['class']}, {check_classes : cl}); 265 } 266 }}); 267 268 if (c) { 269 each(t.settings.theme_advanced_font_sizes, function(v, k) { 270 var fz = v.fontSize; 271 272 if (fz >= 1 && fz <= 7) 273 fz = t.sizes[parseInt(fz) - 1] + 'pt'; 274 275 c.add(k, v, {'style' : 'font-size:' + fz, 'class' : 'mceFontSize' + (i++) + (' ' + (v['class'] || ''))}); 276 }); 277 } 278 279 return c; 280 }, 281 282 _createBlockFormats : function() { 283 var c, fmts = { 284 p : 'advanced.paragraph', 285 address : 'advanced.address', 286 pre : 'advanced.pre', 287 h1 : 'advanced.h1', 288 h2 : 'advanced.h2', 289 h3 : 'advanced.h3', 290 h4 : 'advanced.h4', 291 h5 : 'advanced.h5', 292 h6 : 'advanced.h6', 293 div : 'advanced.div', 294 blockquote : 'advanced.blockquote', 295 code : 'advanced.code', 296 dt : 'advanced.dt', 297 dd : 'advanced.dd', 298 samp : 'advanced.samp' 299 }, t = this; 300 301 c = t.editor.controlManager.createListBox('formatselect', {title : 'advanced.block', cmd : 'FormatBlock'}); 302 if (c) { 303 each(t.editor.getParam('theme_advanced_blockformats', t.settings.theme_advanced_blockformats, 'hash'), function(v, k) { 304 c.add(t.editor.translate(k != v ? k : fmts[v]), v, {'class' : 'mce_formatPreview mce_' + v}); 305 }); 306 } 307 308 return c; 309 }, 310 311 _createForeColorMenu : function() { 312 var c, t = this, s = t.settings, o = {}, v; 313 314 if (s.theme_advanced_more_colors) { 315 o.more_colors_func = function() { 316 t._mceColorPicker(0, { 317 color : c.value, 318 func : function(co) { 319 c.setColor(co); 320 } 321 }); 322 }; 323 } 324 325 if (v = s.theme_advanced_text_colors) 326 o.colors = v; 327 328 if (s.theme_advanced_default_foreground_color) 329 o.default_color = s.theme_advanced_default_foreground_color; 330 331 o.title = 'advanced.forecolor_desc'; 332 o.cmd = 'ForeColor'; 333 o.scope = this; 334 335 c = t.editor.controlManager.createColorSplitButton('forecolor', o); 336 337 return c; 338 }, 339 340 _createBackColorMenu : function() { 341 var c, t = this, s = t.settings, o = {}, v; 342 343 if (s.theme_advanced_more_colors) { 344 o.more_colors_func = function() { 345 t._mceColorPicker(0, { 346 color : c.value, 347 func : function(co) { 348 c.setColor(co); 349 } 350 }); 351 }; 352 } 353 354 if (v = s.theme_advanced_background_colors) 355 o.colors = v; 356 357 if (s.theme_advanced_default_background_color) 358 o.default_color = s.theme_advanced_default_background_color; 359 360 o.title = 'advanced.backcolor_desc'; 361 o.cmd = 'HiliteColor'; 362 o.scope = this; 363 364 c = t.editor.controlManager.createColorSplitButton('backcolor', o); 365 366 return c; 367 }, 368 369 renderUI : function(o) { 370 var n, ic, tb, t = this, ed = t.editor, s = t.settings, sc, p, nl; 371 372 n = p = DOM.create('span', {id : ed.id + '_parent', 'class' : 'mceEditor ' + ed.settings.skin + 'Skin' + (s.skin_variant ? ' ' + ed.settings.skin + 'Skin' + t._ufirst(s.skin_variant) : '')}); 373 374 if (!DOM.boxModel) 375 n = DOM.add(n, 'div', {'class' : 'mceOldBoxModel'}); 376 377 n = sc = DOM.add(n, 'table', {id : ed.id + '_tbl', 'class' : 'mceLayout', cellSpacing : 0, cellPadding : 0}); 378 n = tb = DOM.add(n, 'tbody'); 379 380 switch ((s.theme_advanced_layout_manager || '').toLowerCase()) { 381 case "rowlayout": 382 ic = t._rowLayout(s, tb, o); 383 break; 384 385 case "customlayout": 386 ic = ed.execCallback("theme_advanced_custom_layout", s, tb, o, p); 387 break; 388 389 default: 390 ic = t._simpleLayout(s, tb, o, p); 391 } 392 393 n = o.targetNode; 394 395 // Add classes to first and last TRs 396 nl = DOM.stdMode ? sc.getElementsByTagName('tr') : sc.rows; // Quick fix for IE 8 397 DOM.addClass(nl[0], 'mceFirst'); 398 DOM.addClass(nl[nl.length - 1], 'mceLast'); 399 400 // Add classes to first and last TDs 401 each(DOM.select('tr', tb), function(n) { 402 DOM.addClass(n.firstChild, 'mceFirst'); 403 DOM.addClass(n.childNodes[n.childNodes.length - 1], 'mceLast'); 404 }); 405 406 if (DOM.get(s.theme_advanced_toolbar_container)) 407 DOM.get(s.theme_advanced_toolbar_container).appendChild(p); 408 else 409 DOM.insertAfter(p, n); 410 411 Event.add(ed.id + '_path_row', 'click', function(e) { 412 e = e.target; 413 414 if (e.nodeName == 'A') { 415 t._sel(e.className.replace(/^.*mcePath_([0-9]+).*$/, '$1')); 416 417 return Event.cancel(e); 418 } 419 }); 420 /* 421 if (DOM.get(ed.id + '_path_row')) { 422 Event.add(ed.id + '_tbl', 'mouseover', function(e) { 423 var re; 424 425 e = e.target; 426 427 if (e.nodeName == 'SPAN' && DOM.hasClass(e.parentNode, 'mceButton')) { 428 re = DOM.get(ed.id + '_path_row'); 429 t.lastPath = re.innerHTML; 430 DOM.setHTML(re, e.parentNode.title); 431 } 432 }); 433 434 Event.add(ed.id + '_tbl', 'mouseout', function(e) { 435 if (t.lastPath) { 436 DOM.setHTML(ed.id + '_path_row', t.lastPath); 437 t.lastPath = 0; 438 } 439 }); 440 } 441 */ 442 443 if (!ed.getParam('accessibility_focus')) 444 Event.add(DOM.add(p, 'a', {href : '#'}, '<!-- IE -->'), 'focus', function() {tinyMCE.get(ed.id).focus();}); 445 446 if (s.theme_advanced_toolbar_location == 'external') 447 o.deltaHeight = 0; 448 449 t.deltaHeight = o.deltaHeight; 450 o.targetNode = null; 451 452 return { 453 iframeContainer : ic, 454 editorContainer : ed.id + '_parent', 455 sizeContainer : sc, 456 deltaHeight : o.deltaHeight 457 }; 458 }, 459 460 getInfo : function() { 461 return { 462 longname : 'Advanced theme', 463 author : 'Moxiecode Systems AB', 464 authorurl : 'http://tinymce.moxiecode.com', 465 version : tinymce.majorVersion + "." + tinymce.minorVersion 466 } 467 }, 468 469 resizeBy : function(dw, dh) { 470 var e = DOM.get(this.editor.id + '_tbl'); 471 472 this.resizeTo(e.clientWidth + dw, e.clientHeight + dh); 473 }, 474 475 resizeTo : function(w, h) { 476 var ed = this.editor, s = ed.settings, e = DOM.get(ed.id + '_tbl'), ifr = DOM.get(ed.id + '_ifr'), dh; 477 478 // Boundery fix box 479 w = Math.max(s.theme_advanced_resizing_min_width || 100, w); 480 h = Math.max(s.theme_advanced_resizing_min_height || 100, h); 481 w = Math.min(s.theme_advanced_resizing_max_width || 0xFFFF, w); 482 h = Math.min(s.theme_advanced_resizing_max_height || 0xFFFF, h); 483 484 // Calc difference between iframe and container 485 dh = e.clientHeight - ifr.clientHeight; 486 487 // Resize iframe and container 488 DOM.setStyle(ifr, 'height', h - dh); 489 DOM.setStyles(e, {width : w, height : h}); 490 }, 491 492 destroy : function() { 493 var id = this.editor.id; 494 495 Event.clear(id + '_resize'); 496 Event.clear(id + '_path_row'); 497 Event.clear(id + '_external_close'); 498 }, 499 500 // Internal functions 501 502 _simpleLayout : function(s, tb, o, p) { 503 var t = this, ed = t.editor, lo = s.theme_advanced_toolbar_location, sl = s.theme_advanced_statusbar_location, n, ic, etb, c; 504 505 if (s.readonly) { 506 n = DOM.add(tb, 'tr'); 507 n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); 508 return ic; 509 } 510 511 // Create toolbar container at top 512 if (lo == 'top') 513 t._addToolbars(tb, o); 514 515 // Create external toolbar 516 if (lo == 'external') { 517 n = c = DOM.create('div', {style : 'position:relative'}); 518 n = DOM.add(n, 'div', {id : ed.id + '_external', 'class' : 'mceExternalToolbar'}); 519 DOM.add(n, 'a', {id : ed.id + '_external_close', href : 'javascript:;', 'class' : 'mceExternalClose'}); 520 n = DOM.add(n, 'table', {id : ed.id + '_tblext', cellSpacing : 0, cellPadding : 0}); 521 etb = DOM.add(n, 'tbody'); 522 523 if (p.firstChild.className == 'mceOldBoxModel') 524 p.firstChild.appendChild(c); 525 else 526 p.insertBefore(c, p.firstChild); 527 528 t._addToolbars(etb, o); 529 530 ed.onMouseUp.add(function() { 531 var e = DOM.get(ed.id + '_external'); 532 DOM.show(e); 533 534 DOM.hide(lastExtID); 535 536 var f = Event.add(ed.id + '_external_close', 'click', function() { 537 DOM.hide(ed.id + '_external'); 538 Event.remove(ed.id + '_external_close', 'click', f); 539 }); 540 541 DOM.show(e); 542 DOM.setStyle(e, 'top', 0 - DOM.getRect(ed.id + '_tblext').h - 1); 543 544 // Fixes IE rendering bug 545 DOM.hide(e); 546 DOM.show(e); 547 e.style.filter = ''; 548 549 lastExtID = ed.id + '_external'; 550 551 e = null; 552 }); 553 } 554 555 if (sl == 'top') 556 t._addStatusBar(tb, o); 557 558 // Create iframe container 559 if (!s.theme_advanced_toolbar_container) { 560 n = DOM.add(tb, 'tr'); 561 n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); 562 } 563 564 // Create toolbar container at bottom 565 if (lo == 'bottom') 566 t._addToolbars(tb, o); 567 568 if (sl == 'bottom') 569 t._addStatusBar(tb, o); 570 571 return ic; 572 }, 573 574 _rowLayout : function(s, tb, o) { 575 var t = this, ed = t.editor, dc, da, cf = ed.controlManager, n, ic, to, a; 576 577 dc = s.theme_advanced_containers_default_class || ''; 578 da = s.theme_advanced_containers_default_align || 'center'; 579 580 each(explode(s.theme_advanced_containers || ''), function(c, i) { 581 var v = s['theme_advanced_container_' + c] || ''; 582 583 switch (v.toLowerCase()) { 584 case 'mceeditor': 585 n = DOM.add(tb, 'tr'); 586 n = ic = DOM.add(n, 'td', {'class' : 'mceIframeContainer'}); 587 break; 588 589 case 'mceelementpath': 590 t._addStatusBar(tb, o); 591 break; 592 593 default: 594 a = (s['theme_advanced_container_' + c + '_align'] || da).toLowerCase(); 595 a = 'mce' + t._ufirst(a); 596 597 n = DOM.add(DOM.add(tb, 'tr'), 'td', { 598 'class' : 'mceToolbar ' + (s['theme_advanced_container_' + c + '_class'] || dc) + ' ' + a || da 599 }); 600 601 to = cf.createToolbar("toolbar" + i); 602 t._addControls(v, to); 603 DOM.setHTML(n, to.renderHTML()); 604 o.deltaHeight -= s.theme_advanced_row_height; 605 } 606 }); 607 608 return ic; 609 }, 610 611 _addControls : function(v, tb) { 612 var t = this, s = t.settings, di, cf = t.editor.controlManager; 613 614 if (s.theme_advanced_disable && !t._disabled) { 615 di = {}; 616 617 each(explode(s.theme_advanced_disable), function(v) { 618 di[v] = 1; 619 }); 620 621 t._disabled = di; 622 } else 623 di = t._disabled; 624 625 each(explode(v), function(n) { 626 var c; 627 628 if (di && di[n]) 629 return; 630 631 // Compatiblity with 2.x 632 if (n == 'tablecontrols') { 633 each(["table","|","row_props","cell_props","|","row_before","row_after","delete_row","|","col_before","col_after","delete_col","|","split_cells","merge_cells"], function(n) { 634 n = t.createControl(n, cf); 635 636 if (n) 637 tb.add(n); 638 }); 639 640 return; 641 } 642 643 c = t.createControl(n, cf); 644 645 if (c) 646 tb.add(c); 647 }); 648 }, 649 650 _addToolbars : function(c, o) { 651 var t = this, i, tb, ed = t.editor, s = t.settings, v, cf = ed.controlManager, di, n, h = [], a; 652 653 a = s.theme_advanced_toolbar_align.toLowerCase(); 654 a = 'mce' + t._ufirst(a); 655 656 n = DOM.add(DOM.add(c, 'tr'), 'td', {'class' : 'mceToolbar ' + a}); 657 658 if (!ed.getParam('accessibility_focus')) 659 h.push(DOM.createHTML('a', {href : '#', onfocus : 'tinyMCE.get(\'' + ed.id + '\').focus();'}, '<!-- IE -->')); 660 661 h.push(DOM.createHTML('a', {href : '#', accesskey : 'q', title : ed.getLang("advanced.toolbar_focus")}, '<!-- IE -->')); 662 663 // Create toolbar and add the controls 664 for (i=1; (v = s['theme_advanced_buttons' + i]); i++) { 665 tb = cf.createToolbar("toolbar" + i, {'class' : 'mceToolbarRow' + i}); 666 667 if (s['theme_advanced_buttons' + i + '_add']) 668 v += ',' + s['theme_advanced_buttons' + i + '_add']; 669 670 if (s['theme_advanced_buttons' + i + '_add_before']) 671 v = s['theme_advanced_buttons' + i + '_add_before'] + ',' + v; 672 673 t._addControls(v, tb); 674 675 //n.appendChild(n = tb.render()); 676 h.push(tb.renderHTML()); 677 678 o.deltaHeight -= s.theme_advanced_row_height; 679 } 680 681 h.push(DOM.createHTML('a', {href : '#', accesskey : 'z', title : ed.getLang("advanced.toolbar_focus"), onfocus : 'tinyMCE.getInstanceById(\'' + ed.id + '\').focus();'}, '<!-- IE -->')); 682 DOM.setHTML(n, h.join('')); 683 }, 684 685 _addStatusBar : function(tb, o) { 686 var n, t = this, ed = t.editor, s = t.settings, r, mf, me, td; 687 688 n = DOM.add(tb, 'tr'); 689 n = td = DOM.add(n, 'td', {'class' : 'mceStatusbar'}); 690 n = DOM.add(n, 'div', {id : ed.id + '_path_row'}, s.theme_advanced_path ? ed.translate('advanced.path') + ': ' : ' '); 691 DOM.add(n, 'a', {href : '#', accesskey : 'x'}); 692 693 if (s.theme_advanced_resizing) { 694 DOM.add(td, 'a', {id : ed.id + '_resize', href : 'javascript:;', onclick : "return false;", 'class' : 'mceResize'}); 695 696 if (s.theme_advanced_resizing_use_cookie) { 697 ed.onPostRender.add(function() { 698 var o = Cookie.getHash("TinyMCE_" + ed.id + "_size"), c = DOM.get(ed.id + '_tbl'); 699 700 if (!o) 701 return; 702 703 if (s.theme_advanced_resize_horizontal) 704 c.style.width = Math.max(10, o.cw) + 'px'; 705 706 c.style.height = Math.max(10, o.ch) + 'px'; 707 DOM.get(ed.id + '_ifr').style.height = Math.max(10, parseInt(o.ch) + t.deltaHeight) + 'px'; 708 }); 709 } 710 711 ed.onPostRender.add(function() { 712 Event.add(ed.id + '_resize', 'mousedown', function(e) { 713 var c, p, w, h, n, pa; 714 715 // Measure container 716 c = DOM.get(ed.id + '_tbl'); 717 w = c.clientWidth; 718 h = c.clientHeight; 719 720 miw = s.theme_advanced_resizing_min_width || 100; 721 mih = s.theme_advanced_resizing_min_height || 100; 722 maw = s.theme_advanced_resizing_max_width || 0xFFFF; 723 mah = s.theme_advanced_resizing_max_height || 0xFFFF; 724 725 // Setup placeholder 726 p = DOM.add(DOM.get(ed.id + '_parent'), 'div', {'class' : 'mcePlaceHolder'}); 727 DOM.setStyles(p, {width : w, height : h}); 728 729 // Replace with placeholder 730 DOM.hide(c); 731 DOM.show(p); 732 733 // Create internal resize obj 734 r = { 735 x : e.screenX, 736 y : e.screenY, 737 w : w, 738 h : h, 739 dx : null, 740 dy : null 741 }; 742 743 // Start listening 744 mf = Event.add(DOM.doc, 'mousemove', function(e) { 745 var w, h; 746 747 // Calc delta values 748 r.dx = e.screenX - r.x; 749 r.dy = e.screenY - r.y; 750 751 // Boundery fix box 752 w = Math.max(miw, r.w + r.dx); 753 h = Math.max(mih, r.h + r.dy); 754 w = Math.min(maw, w); 755 h = Math.min(mah, h); 756 757 // Resize placeholder 758 if (s.theme_advanced_resize_horizontal) 759 p.style.width = w + 'px'; 760 761 p.style.height = h + 'px'; 762 763 return Event.cancel(e); 764 }); 765 766 me = Event.add(DOM.doc, 'mouseup', function(e) { 767 var ifr; 768 769 // Stop listening 770 Event.remove(DOM.doc, 'mousemove', mf); 771 Event.remove(DOM.doc, 'mouseup', me); 772 773 c.style.display = ''; 774 DOM.remove(p); 775 776 if (r.dx === null) 777 return; 778 779 ifr = DOM.get(ed.id + '_ifr'); 780 781 if (s.theme_advanced_resize_horizontal) 782 c.style.width = Math.max(10, r.w + r.dx) + 'px'; 783 784 c.style.height = Math.max(10, r.h + r.dy) + 'px'; 785 ifr.style.height = Math.max(10, ifr.clientHeight + r.dy) + 'px'; 786 787 if (s.theme_advanced_resizing_use_cookie) { 788 Cookie.setHash("TinyMCE_" + ed.id + "_size", { 789 cw : r.w + r.dx, 790 ch : r.h + r.dy 791 }); 792 } 793 }); 794 795 return Event.cancel(e); 796 }); 797 }); 798 } 799 800 o.deltaHeight -= 21; 801 n = tb = null; 802 }, 803 804 _nodeChanged : function(ed, cm, n, co) { 805 var t = this, p, de = 0, v, c, s = t.settings, cl, fz, fn; 806 807 if (s.readonly) 808 return; 809 810 tinymce.each(t.stateControls, function(c) { 811 cm.setActive(c, ed.queryCommandState(t.controls[c][1])); 812 }); 813 814 cm.setActive('visualaid', ed.hasVisual); 815 cm.setDisabled('undo', !ed.undoManager.hasUndo() && !ed.typing); 816 cm.setDisabled('redo', !ed.undoManager.hasRedo()); 817 cm.setDisabled('outdent', !ed.queryCommandState('Outdent')); 818 819 p = DOM.getParent(n, 'A'); 820 if (c = cm.get('link')) { 821 if (!p || !p.name) { 822 c.setDisabled(!p && co); 823 c.setActive(!!p); 824 } 825 } 826 827 if (c = cm.get('unlink')) { 828 c.setDisabled(!p && co); 829 c.setActive(!!p && !p.name); 830 } 831 832 if (c = cm.get('anchor')) { 833 c.setActive(!!p && p.name); 834 835 if (tinymce.isWebKit) { 836 p = DOM.getParent(n, 'IMG'); 837 c.setActive(!!p && DOM.getAttrib(p, 'mce_name') == 'a'); 838 } 839 } 840 841 p = DOM.getParent(n, 'IMG'); 842 if (c = cm.get('image')) 843 c.setActive(!!p && n.className.indexOf('mceItem') == -1); 844 845 if (c = cm.get('styleselect')) { 846 if (n.className) { 847 t._importClasses(); 848 c.select(n.className); 849 } else 850 c.select(); 851 } 852 853 if (c = cm.get('formatselect')) { 854 p = DOM.getParent(n, DOM.isBlock); 855 856 if (p) 857 c.select(p.nodeName.toLowerCase()); 858 } 859 860 if (ed.settings.convert_fonts_to_spans) { 861 ed.dom.getParent(n, function(n) { 862 if (n.nodeName === 'SPAN') { 863 if (!cl && n.className) 864 cl = n.className; 865 866 if (!fz && n.style.fontSize) 867 fz = n.style.fontSize; 868 869 if (!fn && n.style.fontFamily) 870 fn = n.style.fontFamily.replace(/[\"\']+/g, '').replace(/^([^,]+).*/, '$1').toLowerCase(); 871 } 872 873 return false; 874 }); 875 876 if (c = cm.get('fontselect')) { 877 c.select(function(v) { 878 return v.replace(/^([^,]+).*/, '$1').toLowerCase() == fn; 879 }); 880 } 881 882 if (c = cm.get('fontsizeselect')) { 883 c.select(function(v) { 884 if (v.fontSize && v.fontSize === fz) 885 return true; 886 887 if (v['class'] && v['class'] === cl) 888 return true; 889 }); 890 } 891 } else { 892 if (c = cm.get('fontselect')) 893 c.select(ed.queryCommandValue('FontName')); 894 895 if (c = cm.get('fontsizeselect')) { 896 v = ed.queryCommandValue('FontSize'); 897 c.select(function(iv) { 898 return iv.fontSize == v; 899 }); 900 } 901 } 902 903 if (s.theme_advanced_path && s.theme_advanced_statusbar_location) { 904 p = DOM.get(ed.id + '_path') || DOM.add(ed.id + '_path_row', 'span', {id : ed.id + '_path'}); 905 DOM.setHTML(p, ''); 906 907 ed.dom.getParent(n, function(n) { 908 var na = n.nodeName.toLowerCase(), u, pi, ti = ''; 909 910 // Ignore non element and hidden elements 911 if (n.nodeType != 1 || n.nodeName === 'BR' || (DOM.hasClass(n, 'mceItemHidden') || DOM.hasClass(n, 'mceItemRemoved'))) 912 return; 913 914 // Fake name 915 if (v = DOM.getAttrib(n, 'mce_name')) 916 na = v; 917 918 // Handle prefix 919 if (tinymce.isIE && n.scopeName !== 'HTML') 920 na = n.scopeName + ':' + na; 921 922 // Remove internal prefix 923 na = na.replace(/mce\:/g, ''); 924 925 // Handle node name 926 switch (na) { 927 case 'b': 928 na = 'strong'; 929 break; 930 931 case 'i': 932 na = 'em'; 933 break; 934 935 case 'img': 936 if (v = DOM.getAttrib(n, 'src')) 937 ti += 'src: ' + v + ' '; 938 939 break; 940 941 case 'a': 942 if (v = DOM.getAttrib(n, 'name')) { 943 ti += 'name: ' + v + ' '; 944 na += '#' + v; 945 } 946 947 if (v = DOM.getAttrib(n, 'href')) 948 ti += 'href: ' + v + ' '; 949 950 break; 951 952 case 'font': 953 if (s.convert_fonts_to_spans) 954 na = 'span'; 955 956 if (v = DOM.getAttrib(n, 'face')) 957 ti += 'font: ' + v + ' '; 958 959 if (v = DOM.getAttrib(n, 'size')) 960 ti += 'size: ' + v + ' '; 961 962 if (v = DOM.getAttrib(n, 'color')) 963 ti += 'color: ' + v + ' '; 964 965 break; 966 967 case 'span': 968 if (v = DOM.getAttrib(n, 'style')) 969 ti += 'style: ' + v + ' '; 970 971 break; 972 } 973 974 if (v = DOM.getAttrib(n, 'id')) 975 ti += 'id: ' + v + ' '; 976 977 if (v = n.className) { 978 v = v.replace(/(webkit-[\w\-]+|Apple-[\w\-]+|mceItem\w+|mceVisualAid)/g, ''); 979 980 if (v && v.indexOf('mceItem') == -1) { 981 ti += 'class: ' + v + ' '; 982 983 if (DOM.isBlock(n) || na == 'img' || na == 'span') 984 na += '.' + v; 985 } 986 } 987 988 na = na.replace(/(html:)/g, ''); 989 na = {name : na, node : n, title : ti}; 990 t.onResolveName.dispatch(t, na); 991 ti = na.title; 992 na = na.name; 993 994 //u = "javascript:tinymce.EditorManager.get('" + ed.id + "').theme._sel('" + (de++) + "');"; 995 pi = DOM.create('a', {'href' : "javascript:;", onmousedown : "return false;", title : ti, 'class' : 'mcePath_' + (de++)}, na); 996 997 if (p.hasChildNodes()) { 998 p.insertBefore(DOM.doc.createTextNode(' \u00bb '), p.firstChild); 999 p.insertBefore(pi, p.firstChild); 1000 } else 1001 p.appendChild(pi); 1002 }, ed.getBody()); 1003 } 1004 }, 1005 1006 // Commands gets called by execCommand 1007 1008 _sel : function(v) { 1009 this.editor.execCommand('mceSelectNodeDepth', false, v); 1010 }, 1011 1012 _mceInsertAnchor : function(ui, v) { 1013 var ed = this.editor; 1014 1015 ed.windowManager.open({ 1016 url : tinymce.baseURL + '/themes/advanced/anchor.htm', 1017 width : 320 + parseInt(ed.getLang('advanced.anchor_delta_width', 0)), 1018 height : 90 + parseInt(ed.getLang('advanced.anchor_delta_height', 0)), 1019 inline : true 1020 }, { 1021 theme_url : this.url 1022 }); 1023 }, 1024 1025 _mceCharMap : function() { 1026 var ed = this.editor; 1027 1028 ed.windowManager.open({ 1029 url : tinymce.baseURL + '/themes/advanced/charmap.htm', 1030 width : 550 + parseInt(ed.getLang('advanced.charmap_delta_width', 0)), 1031 height : 250 + parseInt(ed.getLang('advanced.charmap_delta_height', 0)), 1032 inline : true 1033 }, { 1034 theme_url : this.url 1035 }); 1036 }, 1037 1038 _mceHelp : function() { 1039 var ed = this.editor; 1040 1041 ed.windowManager.open({ 1042 url : tinymce.baseURL + '/themes/advanced/about.htm', 1043 width : 480, 1044 height : 380, 1045 inline : true 1046 }, { 1047 theme_url : this.url 1048 }); 1049 }, 1050 1051 _mceColorPicker : function(u, v) { 1052 var ed = this.editor; 1053 1054 v = v || {}; 1055 1056 ed.windowManager.open({ 1057 url : tinymce.baseURL + '/themes/advanced/color_picker.htm', 1058 width : 375 + parseInt(ed.getLang('advanced.colorpicker_delta_width', 0)), 1059 height : 250 + parseInt(ed.getLang('advanced.colorpicker_delta_height', 0)), 1060 close_previous : false, 1061 inline : true 1062 }, { 1063 input_color : v.color, 1064 func : v.func, 1065 theme_url : this.url 1066 }); 1067 }, 1068 1069 _mceCodeEditor : function(ui, val) { 1070 var ed = this.editor; 1071 1072 ed.windowManager.open({ 1073 url : tinymce.baseURL + '/themes/advanced/source_editor.htm', 1074 width : parseInt(ed.getParam("theme_advanced_source_editor_width", 720)), 1075 height : parseInt(ed.getParam("theme_advanced_source_editor_height", 580)), 1076 inline : true, 1077 resizable : true, 1078 maximizable : true 1079 }, { 1080 theme_url : this.url 1081 }); 1082 }, 1083 1084 _mceImage : function(ui, val) { 1085 var ed = this.editor; 1086 1087 // Internal image object like a flash placeholder 1088 if (ed.dom.getAttrib(ed.selection.getNode(), 'class').indexOf('mceItem') != -1) 1089 return; 1090 1091 ed.windowManager.open({ 1092 url : tinymce.baseURL + '/themes/advanced/image.htm', 1093 width : 355 + parseInt(ed.getLang('advanced.image_delta_width', 0)), 1094 height : 275 + parseInt(ed.getLang('advanced.image_delta_height', 0)), 1095 inline : true 1096 }, { 1097 theme_url : this.url 1098 }); 1099 }, 1100 1101 _mceLink : function(ui, val) { 1102 var ed = this.editor; 1103 1104 ed.windowManager.open({ 1105 url : tinymce.baseURL + '/themes/advanced/link.htm', 1106 width : 310 + parseInt(ed.getLang('advanced.link_delta_width', 0)), 1107 height : 200 + parseInt(ed.getLang('advanced.link_delta_height', 0)), 1108 inline : true 1109 }, { 1110 theme_url : this.url 1111 }); 1112 }, 1113 1114 _mceNewDocument : function() { 1115 var ed = this.editor; 1116 1117 ed.windowManager.confirm('advanced.newdocument', function(s) { 1118 if (s) 1119 ed.execCommand('mceSetContent', false, ''); 1120 }); 1121 }, 1122 1123 _mceForeColor : function() { 1124 var t = this; 1125 1126 this._mceColorPicker(0, { 1127 color: t.fgColor, 1128 func : function(co) { 1129 t.fgColor = co; 1130 t.editor.execCommand('ForeColor', false, co); 1131 } 1132 }); 1133 }, 1134 1135 _mceBackColor : function() { 1136 var t = this; 1137 1138 this._mceColorPicker(0, { 1139 color: t.bgColor, 1140 func : function(co) { 1141 t.bgColor = co; 1142 t.editor.execCommand('HiliteColor', false, co); 1143 } 1144 }); 1145 }, 1146 1147 _ufirst : function(s) { 1148 return s.substring(0, 1).toUpperCase() + s.substring(1); 1149 } 1150 }); 1151 1152 tinymce.ThemeManager.add('advanced', tinymce.themes.AdvancedTheme); 1153 }(tinymce));
title
Description
Body
title
Description
Body
title
Description
Body
title
Body
| Generated: Wed Mar 28 15:54:07 2012 | Cross-referenced by PHPXref 0.7.1 |