Make WordPress Core

Changeset 5256


Ignore:
Timestamp:
04/12/2007 05:04:03 PM (20 years ago)
Author:
rob1n
Message:

Upgrade TinyMCE to 2.1.0. Props andy. fixes #3788

Location:
trunk
Files:
12 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-admin/wp-admin.css

    r5254 r5256  
    555555
    556556#postdivrich #content {
    557         padding: .7em;
     557        padding: 5px;
    558558        line-height: 140%;
    559559}
    … …  
    630630#title {
    631631        font-size: 1.7em;
    632         padding: 4px;
     632        padding: 4px 3px;
    633633}
    634634
  • trunk/wp-includes/js/tinymce/plugins/autosave/editor_plugin.js

    r4799 r5256  
    11/**
    2  * $Id: editor_plugin_src.js 162 2007-01-03 16:16:52Z spocke $
     2 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
    33 *
    44 * @author Moxiecode
    … …  
    1515                        author : 'Moxiecode Systems AB',
    1616                        authorurl : 'http://tinymce.moxiecode.com',
    17                         infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_autosave.html',
     17                        infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/autosave',
    1818                        version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
    1919                };
  • trunk/wp-includes/js/tinymce/plugins/directionality/editor_plugin.js

    r4799 r5256  
    11/**
    2  * $Id: editor_plugin_src.js 162 2007-01-03 16:16:52Z spocke $
     2 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
    33 *
    44 * @author Moxiecode
    … …  
    1515                        author : 'Moxiecode Systems AB',
    1616                        authorurl : 'http://tinymce.moxiecode.com',
    17                         infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_directionality.html',
     17                        infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/directionality',
    1818                        version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
    1919                };
  • trunk/wp-includes/js/tinymce/plugins/inlinepopups/editor_plugin.js

    r4799 r5256  
    11/**
    2  * $Id: editor_plugin_src.js 172 2007-01-09 11:37:11Z spocke $
     2 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
    33 *
    44 * Moxiecode DHTML Windows script.
    … …  
    1616                        author : 'Moxiecode Systems AB',
    1717                        authorurl : 'http://tinymce.moxiecode.com',
    18                         infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_inlinepopups.html',
     18                        infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/inlinepopups',
    1919                        version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
    2020                };
    … …  
    2727
    2828TinyMCE_Engine.prototype.orgOpenWindow = TinyMCE_Engine.prototype.openWindow;
     29TinyMCE_Engine.prototype.orgCloseWindow = TinyMCE_Engine.prototype.closeWindow;
    2930
    3031TinyMCE_Engine.prototype.openWindow = function(template, args) {
    … …  
    5354                height = 200;
    5455
     56        if (!(minWidth = parseInt(template['minWidth'])))
     57                minWidth = 100;
     58
     59        if (!(minHeight = parseInt(template['minHeight'])))
     60                minHeight = 100;
     61
    5562        resizable = (args && args['resizable']) ? args['resizable'] : "no";
    5663        scrollbars = (args && args['scrollbars']) ? args['scrollbars'] : "no";
    … …  
    7986        url += tinyMCE.settings['imp_version'] ? (url.indexOf('?')==-1?'?':'&') + 'ver=' + tinyMCE.settings['imp_version'] : ''; // WordPress cache buster
    8087
    81         mcWindows.open(url, mcWindows.idCounter++, "modal=yes,width=" + width+ ",height=" + height + ",resizable=" + resizable + ",scrollbars=" + scrollbars + ",statusbar=" + resizable + ",left=" + pos.absLeft + ",top=" + pos.absTop);
    82 };
    83 
    84 TinyMCE_Engine.prototype.orgCloseWindow = TinyMCE_Engine.prototype.closeWindow;
     88        mcWindows.open(url, mcWindows.idCounter++, "modal=yes,width=" + width+ ",height=" + height + ",resizable=" + resizable + ",scrollbars=" + scrollbars + ",statusbar=" + resizable + ",left=" + pos.absLeft + ",top=" + pos.absTop + ",minWidth=" + minWidth + ",minHeight=" + minHeight );
     89};
    8590
    8691TinyMCE_Engine.prototype.closeWindow = function(win) {
    87         if (mcWindows.selectedWindow != null)
    88                 mcWindows.selectedWindow.close();
    89         else
     92        var gotit = false, n, w;
     93        for (n in mcWindows.windows) {
     94                w = mcWindows.windows[n];
     95                if (typeof(w) == 'function') continue;
     96                if (win.name == w.id + '_iframe') {
     97                        w.close();
     98                        gotit = true;
     99                }
     100        }
     101        if (!gotit)
    90102                this.orgCloseWindow(win);
     103
     104        tinyMCE.selectedInstance.getWin().focus();
    91105};
    92106
    … …  
    136150        this.addEvent(document, "mouseup", mcWindows.eventDispatcher);
    137151
     152        this.addEvent(window, "resize", mcWindows.eventDispatcher);
     153        this.addEvent(document, "scroll", mcWindows.eventDispatcher);
     154
    138155        this.doc = document;
     156};
     157
     158TinyMCE_Windows.prototype.getBounds = function() {
     159        if (!this.bounds) {
     160                var vp = tinyMCE.getViewPort(window);
     161                var top, left, bottom, right, docEl = this.doc.documentElement;
     162
     163                top    = vp.top;
     164                left   = vp.left;
     165                bottom = vp.height + top - 2;
     166                right  = vp.width  + left - 22; // TODO this number is platform dependant
     167                // x1, y1, x2, y2
     168                this.bounds = [left, top, right, bottom];
     169        }
     170        return this.bounds;
     171};
     172
     173TinyMCE_Windows.prototype.clampBoxPosition = function(x, y, w, h, minW, minH) {
     174        var bounds = this.getBounds();
     175
     176        x = Math.max(bounds[0], Math.min(bounds[2], x + w) - w);
     177        y = Math.max(bounds[1], Math.min(bounds[3], y + h) - h);
     178
     179        return this.clampBoxSize(x, y, w, h, minW, minH);
     180};
     181
     182TinyMCE_Windows.prototype.clampBoxSize = function(x, y, w, h, minW, minH) {
     183        var bounds = this.getBounds();
     184
     185        return [
     186                x, y,
     187                Math.max(minW, Math.min(bounds[2], x + w) - x),
     188                Math.max(minH, Math.min(bounds[3], y + h) - y)
     189        ];
    139190};
    140191
    … …  
    187238                        mcWindows.selectedWindow.onFocus(e);
    188239                        break;
     240                case "scroll":
     241                case "resize":
     242                        if (mcWindows.clampUpdateTimeout)
     243                                clearTimeout(mcWindows.clampUpdateTimeout);
     244                        mcWindows.clampEventType = e.type;
     245                        mcWindows.clampUpdateTimeout =
     246                                setTimeout(function () {mcWindows.updateClamping()}, 100);
     247                        break;
     248        }
     249};
     250
     251TinyMCE_Windows.prototype.updateClamping = function () {
     252        var clamp, oversize, etype = mcWindows.clampEventType;
     253
     254        this.bounds = null; // Recalc window bounds on resize/scroll
     255        this.clampUpdateTimeout = null;
     256
     257        for (var n in this.windows) {
     258                win = this.windows[n];
     259                if (typeof(win) == 'function' || ! win.winElement) continue;
     260
     261                clamp = mcWindows.clampBoxPosition(
     262                        win.left, win.top,
     263                        win.winElement.scrollWidth,
     264                        win.winElement.scrollHeight,
     265                        win.features.minWidth,
     266                        win.features.minHeight
     267                );
     268                oversize = (
     269                        clamp[2] != win.winElement.scrollWidth ||
     270                        clamp[3] != win.winElement.scrollHeight
     271                ) ? true : false;
     272
     273                if (!oversize || win.features.resizable == "yes" || etype != "scroll")
     274                        win.moveTo(clamp[0], clamp[1]);
     275                if (oversize && win.features.resizable == "yes")
     276                        win.resizeTo(clamp[2], clamp[3]);
    189277        }
    190278};
    … …  
    194282                obj.attachEvent("on" + name, handler);
    195283        else
    196                 obj.addEventListener(name, handler, true);
     284                obj.addEventListener(name, handler, false);
    197285};
    198286
    … …  
    218306        options['width'] = "300";
    219307        options['height'] = "300";
     308        options['minwidth'] = "100";
     309        options['minheight'] = "100";
    220310        options['resizable'] = "yes";
    221311        options['minimizable'] = "yes";
    … …  
    241331        options['width'] = parseInt(options['width']);
    242332        options['height'] = parseInt(options['height']);
     333        options['minWidth'] = parseInt(options['minwidth']);
     334        options['minHeight'] = parseInt(options['minheight']);
    243335
    244336        return options;
    … …  
    253345
    254346        features = this.parseFeatures(features);
     347
     348        // Clamp specified dimensions
     349        var clamp = mcWindows.clampBoxPosition(
     350                features['left'], features['top'],
     351                features['width'], features['height'],
     352                features['minWidth'], features['minHeight']
     353        );
     354
     355        features['left'] = clamp[0];
     356        features['top'] = clamp[1];
     357
     358        if (features['resizable'] == "yes") {
     359                features['width'] = clamp[2];
     360                features['height'] = clamp[3];
     361        }
    255362
    256363        // Create div
    … …  
    286393        html += '<head>';
    287394        html += '<title>Wrapper iframe</title>';
     395        if (this.isMac) html += '<style type="text/css">.mceWindowTitle{float:none;margin:0;width:100%;text-align:center;}.mceWindowClose{float:none;position:absolute;left:0px;top:0px;}</style>';
    288396        html += '<meta http-equiv="Content-Type" content="text/html; charset=UTF-8">';
    289397        html += '<link href="' + this.getParam("css_file") + '" rel="stylesheet" type="text/css" />';
    290         if ( this.isMac ) html += '<style type="text/css">.mceWindowTitle{float:none;margin:0;text-align:center;}.mceWindowClose{float:none;position:absolute;left:0px;top:0px;}</style>';
    291398        html += '</head>';
    292399        html += '<body onload="parent.mcWindows.onLoad(\'' + name + '\');">';
    … …  
    298405        html += '    <div class="mceWindowHeadTools">';
    299406        html += '      <a href="javascript:parent.mcWindows.windows[\'' + name + '\'].close();" target="_self" onmousedown="return false;" class="mceWindowClose"><img border="0" src="' + imgPath + '/window_close.gif" /></a>';
    300 //      html += '      <a href="javascript:mcWindows.windows[\'' + name + '\'].maximize();" target="_self" onmousedown="return false;" class="mceWindowMaximize"></a>';
    301 //      html += '      <a href="javascript:mcWindows.windows[\'' + name + '\'].minimize();" target="_self" onmousedown="return false;" class="mceWindowMinimize"></a>';
     407        if (features['resizable'] == "yes" && features['maximizable'] == "yes")
     408                html += '      <a href="javascript:parent.mcWindows.windows[\'' + name + '\'].maximize();" target="_self" onmousedown="return false;" class="mceWindowMaximize"><img border="0" src="' + imgPath + '/window_maximize.gif" /></a>';
     409        // html += '      <a href="javascript:mcWindows.windows[\'' + name + '\'].minimize();" target="_self" onmousedown="return false;" class="mceWindowMinimize"></a>';
    302410        html += '    </div>';
    303411        html += '</div><div id="' + id + '_body" class="mceWindowBody" style="width: ' + width + 'px; height: ' + height + 'px;">';
    … …  
    448556        div.setAttribute("height", (height));
    449557        div.style.position = "absolute";
     558
    450559        div.style.left = left + "px";
    451560        div.style.top = top + "px";
    … …  
    474583        iframe.setAttribute("width", iframeWidth);
    475584        iframe.setAttribute("height", iframeHeight);
    476 //      iframe.setAttribute("src", "../jscripts/tiny_mce/blank.htm");
     585        // iframe.setAttribute("src", "../jscripts/tiny_mce/blank.htm");
    477586        // iframe.setAttribute("allowtransparency", "false");
    478587        iframe.setAttribute("scrolling", "no");
    … …  
    523632
    524633TinyMCE_Window.prototype.maximize = function() {
    525        
     634        if (this.restoreSize) {
     635                this.moveTo(this.restoreSize[0], this.restoreSize[1]);
     636                this.resizeTo(this.restoreSize[2], this.restoreSize[3]);
     637                this.updateClamping();
     638                this.restoreSize = null;
     639        } else {
     640                var bounds = mcWindows.getBounds();
     641                this.restoreSize = [
     642                        this.left, this.top,
     643                        this.winElement.scrollWidth,
     644                        this.winElement.scrollHeight
     645                ];
     646                this.moveTo(bounds[0], bounds[1]);
     647                this.resizeTo(
     648                        bounds[2] - bounds[0],
     649                        bounds[3] - bounds[1]
     650                );
     651        }
    526652};
    527653
    … …  
    553679        mcWindows.windows = mcWindowsNew;
    554680
    555 //      alert(mcWindows.doc.getElementById(this.id + "_iframe"));
     681        // alert(mcWindows.doc.getElementById(this.id + "_iframe"));
    556682
    557683        var e = mcWindows.doc.getElementById(this.id + "_iframe");
    … …  
    562688
    563689        mcWindows.setDocumentLock(false);
    564 
    565         tinyMCE.selectedInstance.getWin().focus(); // WordPress: focus on the editor after closing a popup
    566690};
    567691
    568692TinyMCE_Window.prototype.onMouseMove = function(e) {
    569         var scrollX = 0;//this.doc.body.scrollLeft;
    570         var scrollY = 0;//this.doc.body.scrollTop;
    571 
     693        var clamp;
    572694        // Calculate real X, Y
    573695        var dx = e.screenX - mcWindows.mouseDownScreenX;
    … …  
    576698        switch (mcWindows.action) {
    577699                case "resize":
    578                         width = mcWindows.mouseDownWidth + (e.screenX - mcWindows.mouseDownScreenX);
    579                         height = mcWindows.mouseDownHeight + (e.screenY - mcWindows.mouseDownScreenY);
    580 
    581                         width = width < 100 ? 100 : width;
    582                         height = height < 100 ? 100 : height;
    583 
    584                         this.wrapperIFrameElement.style.width = (width+2) + 'px';
    585                         this.wrapperIFrameElement.style.height = (height+2) + 'px';
    586                         this.wrapperIFrameElement.width = width+2;
    587                         this.wrapperIFrameElement.height = height+2;
    588                         this.winElement.style.width = width + 'px';
    589                         this.winElement.style.height = height + 'px';
    590 
    591                         height = height - this.deltaHeight;
    592 
    593                         this.containerElement.style.width = width + 'px';
    594                         this.iframeElement.style.width = width + 'px';
    595                         this.iframeElement.style.height = height + 'px';
    596                         this.bodyElement.style.width = width + 'px';
    597                         this.bodyElement.style.height = height + 'px';
    598                         this.headElement.style.width = width + 'px';
    599                         //this.statusElement.style.width = width + 'px';
     700                        clamp = mcWindows.clampBoxSize(
     701                                this.left, this.top,
     702                                mcWindows.mouseDownWidth + (e.screenX - mcWindows.mouseDownScreenX),
     703                                mcWindows.mouseDownHeight + (e.screenY - mcWindows.mouseDownScreenY),
     704                                this.features.minWidth, this.features.minHeight
     705                        );
     706
     707                        this.resizeTo(clamp[2], clamp[3]);
    600708
    601709                        mcWindows.cancelEvent(e);
    … …  
    605713                        this.left = mcWindows.mouseDownLayerX + (e.screenX - mcWindows.mouseDownScreenX);
    606714                        this.top = mcWindows.mouseDownLayerY + (e.screenY - mcWindows.mouseDownScreenY);
    607                         this.winElement.style.left = this.left + "px";
    608                         this.winElement.style.top = this.top + "px";
     715                        this.updateClamping();
    609716
    610717                        mcWindows.cancelEvent(e);
    611718                        break;
    612719        }
     720};
     721
     722TinyMCE_Window.prototype.moveTo = function (x, y) {
     723        this.left = x;
     724        this.top = y;
     725
     726        this.winElement.style.left = this.left + "px";
     727        this.winElement.style.top = this.top + "px";
     728};
     729
     730TinyMCE_Window.prototype.resizeTo = function (width, height) {
     731        this.wrapperIFrameElement.style.width = (width+2) + 'px';
     732        this.wrapperIFrameElement.style.height = (height+2) + 'px';
     733        this.wrapperIFrameElement.width = width+2;
     734        this.wrapperIFrameElement.height = height+2;
     735        this.winElement.style.width = width + 'px';
     736        this.winElement.style.height = height + 'px';
     737
     738        height = height - this.deltaHeight;
     739
     740        this.containerElement.style.width = width + 'px';
     741        this.iframeElement.style.width = width + 'px';
     742        this.iframeElement.style.height = height + 'px';
     743        this.bodyElement.style.width = width + 'px';
     744        this.bodyElement.style.height = height + 'px';
     745        this.headElement.style.width = width + 'px';
     746        //this.statusElement.style.width = width + 'px';
     747};
     748
     749TinyMCE_Window.prototype.updateClamping = function () {
     750        var clamp, oversize;
     751
     752        clamp = mcWindows.clampBoxPosition(
     753                this.left, this.top,
     754                this.winElement.scrollWidth,
     755                this.winElement.scrollHeight,
     756                this.features.minWidth, this.features.minHeight
     757        );
     758        oversize = (
     759                clamp[2] != this.winElement.scrollWidth ||
     760                clamp[3] != this.winElement.scrollHeight
     761        ) ? true : false;
     762
     763        this.moveTo(clamp[0], clamp[1]);
     764        if (this.features.resizable == "yes" && oversize)
     765                this.resizeTo(clamp[2], clamp[3]);
    613766};
    614767
    … …  
    639792TinyMCE_Window.prototype.onMouseDown = function(e) {
    640793        var elm = mcWindows.isMSIE ? this.wrapperFrame.event.srcElement : e.target;
    641 
    642         var scrollX = 0;//this.doc.body.scrollLeft;
    643         var scrollY = 0;//this.doc.body.scrollTop;
    644794
    645795        mcWindows.mouseDownScreenX = e.screenX;
  • trunk/wp-includes/js/tinymce/plugins/paste/editor_plugin.js

    r4799 r5256  
    11/**
    2  * $Id: editor_plugin_src.js 162 2007-01-03 16:16:52Z spocke $
     2 * $Id: editor_plugin_src.js 201 2007-02-12 15:56:56Z spocke $
    33 *
    44 * @author Moxiecode
    … …  
    1515                        author : 'Moxiecode Systems AB',
    1616                        authorurl : 'http://tinymce.moxiecode.com',
    17                         infourl : 'http://tinymce.moxiecode.com/tinymce/docs/plugin_paste.html',
     17                        infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/paste',
    1818                        version : tinyMCE.majorVersion + "." + tinyMCE.minorVersion
    1919                };
    … …  
    2323                if (tinyMCE.isMSIE && tinyMCE.getParam("paste_auto_cleanup_on_paste", false))
    2424                        tinyMCE.addEvent(inst.getBody(), "paste", TinyMCE_PastePlugin._handlePasteEvent);
     25        },
     26
     27        handleEvent : function(e) {
     28                // Force paste dialog if non IE browser
     29                if (!tinyMCE.isRealIE && tinyMCE.getParam("paste_auto_cleanup_on_paste", false) && e.ctrlKey && e.keyCode == 86 && e.type == "keydown") {
     30                        window.setTimeout('tinyMCE.selectedInstance.execCommand("mcePasteText",true)', 1);
     31                        return tinyMCE.cancelEvent(e);
     32                }
     33
     34                return true;
    2535        },
    2636
  • trunk/wp-includes/js/tinymce/plugins/wordpress/editor_plugin.js

    r4747 r5256  
    516516
    517517                // Tweak the widths
    518                 ta.parentNode.style.paddingRight = '2px';
     518                ta.parentNode.style.paddingRight = '12px';
    519519
    520520                if ( tinyMCE.isMSIE && !tinyMCE.isOpera ) {
  • trunk/wp-includes/js/tinymce/themes/advanced/css/editor_ui.css

    r4799 r5256  
    1212.mceToolbarTop {border-bottom: 1px solid #cccccc; padding-bottom: 1px;}
    1313.mceToolbarBottom {border-top: 1px solid #cccccc;}
    14 .mceToolbarContainer {position: relative; left: 0; top: 0; display: block;}
     14.mceToolbarContainer {display: block; position: relative; left: 0; top: 0; width: 100%;}
    1515.mceStatusbarTop, .mceStatusbarBottom, .mceStatusbar {height: 20px;}
    1616.mceStatusbarTop .mceStatusbarPathText, .mceStatusbarBottom .mceStatusbarPathText, .mceStatusbar .mceStatusbarPathText {font-family: 'MS Sans Serif', sans-serif, Verdana, Arial; font-size: 9pt; padding: 2px; line-height: 16px; overflow: visible;}
    … …  
    5050/* Menu */
    5151
    52 .mceMenu {position: absolute; left: 0; top: 0; display: none; z-index: 100; background-color: white; border: 1px solid gray; font-weight: normal;}
     52.mceMenu {position: absolute; left: 0; top: 0; display: none; z-index: 1000; background-color: white; border: 1px solid gray; font-weight: normal;}
    5353.mceMenu a, .mceMenuTitle, .mceMenuDisabled {display: block; width: 100%; text-decoration: none; background-color: white; font-family: Tahoma, Verdana, Arial, Helvetica; font-size: 11px; line-height: 20px; color: black;}
    5454.mceMenu a:hover {background-color: #B6BDD2; color: black; text-decoration: none !important;}
    … …  
    6262span.mceMenuLine {display: block; position: absolute; left: 0; top: -1px; background-color: #F5F4F2; width: 30px; height: 1px; overflow: hidden; padding-left: 0; padding-right: 0;}
    6363.mceColors table, .mceColors td {margin: 0; padding: 2px;}
    64 a.mceMoreColors {width: 130px; margin: 0; padding: 0; margin-left: 3px; margin-bottom: 3px; text-align: center; border: 1px solid white;}
     64a.mceMoreColors {width: auto; padding: 0; margin: 0 3px 3px 3px; text-align: center; border: 1px solid white; text-decoration: none !important;}
    6565.mceColorPreview {position: absolute; overflow:hidden; left: 0; top: 0; margin-left: 3px; margin-top: 15px; width: 16px; height: 4px; background-color: red;}
    6666a.mceMoreColors:hover {border: 1px solid #0A246A;}
    … …  
    7878* html span.mceMenuButton, * html span.mceMenuButtonFocus {position: relative; left: 0; top: 0;}
    7979* html span.mceMenuButton img, * html span.mceMenuButtonSelected img, * html span.mceMenuButtonFocus img {position: relative; top: 1px;}
    80 * html a.mceMoreColors {width: 132px;}
     80* html a.mceMoreColors {width: auto;}
    8181* html .mceColors td a {width: 10px; height: 10px;}
    8282* html .mceColorPreview {margin-left: 2px; margin-top: 14px;}
    … …  
    9393*:first-child+html span.mceMenuButton, *:first-child+html span.mceMenuButtonFocus {position: relative; left: 0; top: 0;}
    9494*:first-child+html span.mceMenuButton img, *:first-child+html span.mceMenuButtonSelected img, *:first-child+html span.mceMenuButtonFocus img {position: relative; top: 1px;}
    95 *:first-child+html a.mceMoreColors {width: 132px;}
     95*:first-child+html a.mceMoreColors {width: 137px;}
    9696*:first-child+html .mceColors td a {width: 10px; height: 10px;}
    9797*:first-child+html .mceColorPreview {margin: 0; padding-left: 4px; margin-top: 14px; width: 14px;}
  • trunk/wp-includes/js/tinymce/themes/advanced/editor_template.js

    r4799 r5256  
    11/**
    2  * $Id: editor_template_src.js 166 2007-01-05 10:31:50Z spocke $
     2 * $Id: editor_template_src.js 218 2007-02-13 11:08:01Z spocke $
    33 *
    44 * @author Moxiecode
    … …  
    4444                ['sup', 'sup.gif', 'lang_theme_sup_desc', 'superscript'],
    4545                ['forecolor', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolor', true],
     46                ['forecolorpicker', 'forecolor.gif', 'lang_theme_forecolor_desc', 'forecolorpicker', true],
    4647                ['backcolor', 'backcolor.gif', 'lang_theme_backcolor_desc', 'HiliteColor', true],
     48                ['backcolorpicker', 'backcolor.gif', 'lang_theme_backcolor_desc', 'backcolorpicker', true],
    4749                ['charmap', 'charmap.gif', 'lang_theme_charmap_desc', 'mceCharMap'],
    4850                ['visualaid', 'visualaid.gif', 'lang_theme_visualaid_desc', 'mceToggleVisualAid'],
    … …  
    357359                                return false;
    358360
     361                        case "forecolorpicker":
     362                                this._pickColor(editor_id, 'forecolor');
     363                                return true;
     364
    359365                        case "forecolorMenu":
    360366                                TinyMCE_AdvancedTheme._hideMenus(editor_id);
    … …  
    421427                                ml.show();
    422428                        return true;
     429       
     430                        case "backcolorpicker":
     431                                this._pickColor(editor_id, 'HiliteColor');
     432                                return true;
    423433
    424434                        case "mceColorPicker":
    425435                                if (user_interface) {
    426                                         var template = new Array();
    427                                         var inputColor = value['document'].getElementById(value['element_id']).value;
     436                                        var template = [];
     437       
     438                                        if (!value['callback'] && !value['color'])
     439                                                value['color'] = value['document'].getElementById(value['element_id']).value;
    428440
    429441                                        template['file'] = 'color_picker.htm';
    430                                         template['width'] = 220;
    431                                         template['height'] = 190;
     442                                        template['width'] = 380;
     443                                        template['height'] = 250;
    432444                                        template['close_previous'] = "no";
    433445
    … …  
    439451
    440452                                        tinyMCE.lastColorPickerValue = value;
    441                                         tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : inputColor});
     453                                        tinyMCE.openWindow(template, {editor_id : editor_id, mce_store_selection : value['store_selection'], inline : "yes", command : "mceColorPicker", input_color : value['color']});
    442454                                } else {
    443                                         var savedVal = tinyMCE.lastColorPickerValue;
    444                                         var elm = savedVal['document'].getElementById(savedVal['element_id']);
     455                                        var savedVal = tinyMCE.lastColorPickerValue, elm;
     456
     457                                        if (savedVal['callback']) {
     458                                                savedVal['callback'](value);
     459                                                return true;
     460                                        }
     461
     462                                        elm = savedVal['document'].getElementById(savedVal['element_id']);
    445463                                        elm.value = value;
    446464
    … …  
    600618                                template['html'] = '<table class="mceEditor" border="0" cellpadding="0" cellspacing="0" width="{$width}" height="{$height}" style="width:{$width_style};height:{$height_style}"><tbody>';
    601619
    602                                 if (toolbarLocation == "top") {
    603                                         template['html'] += '<tr><td class="mceToolbarTop" align="' + toolbarAlign + '" height="1" nowrap="nowrap"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';
    604                                 }
     620                                if (toolbarLocation == "top")
     621                                        template['html'] += '<tr><td dir="ltr" class="mceToolbarTop" align="' + toolbarAlign + '" height="1" nowrap="nowrap"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';
    605622
    606623                                if (statusbarLocation == "top") {
    … …  
    611628                                template['html'] += '<tr><td align="center"><span id="{$editor_id}"></span></td></tr>';
    612629
    613                                 if (toolbarLocation == "bottom") {
    614                                         template['html'] += '<tr><td class="mceToolbarBottom" align="' + toolbarAlign + '" height="1"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';
    615                                 }
     630                                if (toolbarLocation == "bottom")
     631                                        template['html'] += '<tr><td dir="ltr" class="mceToolbarBottom" align="' + toolbarAlign + '" height="1"><span id="' + editorId + '_toolbar" class="mceToolbarContainer">' + toolbarHTML + '</span></td></tr>';
    616632
    617633                                // External toolbar changes
    … …  
    739755
    740756        removeInstance : function(inst) {
    741                 var fcm = new TinyMCE_Layer(inst.editorId + '_fcMenu');
    742 
    743                 fcm.remove();
     757                new TinyMCE_Layer(inst.editorId + '_fcMenu').remove();
     758                new TinyMCE_Layer(inst.editorId + '_bcMenu').remove();
     759        },
     760
     761        hideInstance : function(inst) {
     762                TinyMCE_AdvancedTheme._hideMenus(inst.editorId);
    744763        },
    745764
    … …  
    12251244                        tableElm.style.width = w + "px";
    12261245
     1246                if ( !tinyMCE.isMSIE || tinyMCE.isMSIE7 || tinyMCE.isOpera ) // WordPress: do this later to avoid creeping toolbar bug in MSIE6
    12271247                tableElm.style.height = h + "px";
    12281248
    … …  
    12331253                ih = ih < 1 ? 30 : ih;
    12341254
     1255/* WordPress found that this led to a shrinking editor with every resize. (Gray background creeps in 1px at a time.)
    12351256                if (tinyMCE.isGecko) {
    12361257                        iw -= 2;
    12371258                        ih -= 2;
    12381259                }
     1260*/
    12391261
    12401262                if (set_w)
    … …  
    12531275                        }
    12541276                }
     1277
     1278                tableElm.style.height = h + "px"; // WordPress: see above
    12551279
    12561280                // Remove pesky table controls
    … …  
    13791403
    13801404                h += '</tr></table>';
    1381                 /*
    1382                 h += '<a href="" class="mceMoreColors">More colors</a>';
    1383                 */
     1405
     1406                if (tinyMCE.getParam("theme_advanced_more_colors", true))
     1407                        h += '<a href="#" onclick="TinyMCE_AdvancedTheme._pickColor(\'' + id + '\',\'' + cm + '\');" class="mceMoreColors">' + tinyMCE.getLang('lang_more_colors') + '</a>';
    13841408
    13851409                return h;
     1410        },
     1411
     1412        _pickColor : function(id, cm) {
     1413                var inputColor, inst = tinyMCE.selectedInstance;
     1414
     1415                if (cm == 'forecolor' && inst)
     1416                        inputColor = inst.foreColor;
     1417
     1418                if ((cm == 'backcolor' || cm == 'HiliteColor') && inst)
     1419                        inputColor = inst.backColor;
     1420
     1421                tinyMCE.execCommand('mceColorPicker', true, {color : inputColor, callback : function(c) {
     1422                        tinyMCE.execInstanceCommand(id, cm, false, c);
     1423                }});
    13861424        },
    13871425
  • trunk/wp-includes/js/tinymce/themes/advanced/jscripts/color_picker.js

    r3664 r5256  
    1 function init() {
    2         if (tinyMCE.isMSIE)
    3                 tinyMCEPopup.resizeToInnerSize();
    4 }
    5 
    6 function selectColor() {
    7         var color = document.getElementById("selectedColorBox").value;
    8 
    9         tinyMCEPopup.execCommand(tinyMCE.getWindowArg('command'), false, color);
    10         tinyMCEPopup.close();
    11 }
    12 
    13 function showColor(color) {
    14         document.getElementById("selectedColor").style.backgroundColor = color;
    15         document.getElementById("selectedColorBox").value = color;
    16 }
     1var detail = 50, strhex = "0123456789abcdef", i, isMouseDown = false, isMouseOver = false;
    172
    183var colors = new Array(
    … …  
    4631);
    4732
     33var named = {
     34        '#F0F8FF':'AliceBlue','#FAEBD7':'AntiqueWhite','#00FFFF':'Aqua','#7FFFD4':'Aquamarine','#F0FFFF':'Azure','#F5F5DC':'Beige',
     35        '#FFE4C4':'Bisque','#000000':'Black','#FFEBCD':'BlanchedAlmond','#0000FF':'Blue','#8A2BE2':'BlueViolet','#A52A2A':'Brown',
     36        '#DEB887':'BurlyWood','#5F9EA0':'CadetBlue','#7FFF00':'Chartreuse','#D2691E':'Chocolate','#FF7F50':'Coral','#6495ED':'CornflowerBlue',
     37        '#FFF8DC':'Cornsilk','#DC143C':'Crimson','#00FFFF':'Cyan','#00008B':'DarkBlue','#008B8B':'DarkCyan','#B8860B':'DarkGoldenRod',
     38        '#A9A9A9':'DarkGray','#A9A9A9':'DarkGrey','#006400':'DarkGreen','#BDB76B':'DarkKhaki','#8B008B':'DarkMagenta','#556B2F':'DarkOliveGreen',
     39        '#FF8C00':'Darkorange','#9932CC':'DarkOrchid','#8B0000':'DarkRed','#E9967A':'DarkSalmon','#8FBC8F':'DarkSeaGreen','#483D8B':'DarkSlateBlue',
     40        '#2F4F4F':'DarkSlateGray','#2F4F4F':'DarkSlateGrey','#00CED1':'DarkTurquoise','#9400D3':'DarkViolet','#FF1493':'DeepPink','#00BFFF':'DeepSkyBlue',
     41        '#696969':'DimGray','#696969':'DimGrey','#1E90FF':'DodgerBlue','#B22222':'FireBrick','#FFFAF0':'FloralWhite','#228B22':'ForestGreen',
     42        '#FF00FF':'Fuchsia','#DCDCDC':'Gainsboro','#F8F8FF':'GhostWhite','#FFD700':'Gold','#DAA520':'GoldenRod','#808080':'Gray','#808080':'Grey',
     43        '#008000':'Green','#ADFF2F':'GreenYellow','#F0FFF0':'HoneyDew','#FF69B4':'HotPink','#CD5C5C':'IndianRed','#4B0082':'Indigo','#FFFFF0':'Ivory',
     44        '#F0E68C':'Khaki','#E6E6FA':'Lavender','#FFF0F5':'LavenderBlush','#7CFC00':'LawnGreen','#FFFACD':'LemonChiffon','#ADD8E6':'LightBlue',
     45        '#F08080':'LightCoral','#E0FFFF':'LightCyan','#FAFAD2':'LightGoldenRodYellow','#D3D3D3':'LightGray','#D3D3D3':'LightGrey','#90EE90':'LightGreen',
     46        '#FFB6C1':'LightPink','#FFA07A':'LightSalmon','#20B2AA':'LightSeaGreen','#87CEFA':'LightSkyBlue','#778899':'LightSlateGray','#778899':'LightSlateGrey',
     47        '#B0C4DE':'LightSteelBlue','#FFFFE0':'LightYellow','#00FF00':'Lime','#32CD32':'LimeGreen','#FAF0E6':'Linen','#FF00FF':'Magenta','#800000':'Maroon',
     48        '#66CDAA':'MediumAquaMarine','#0000CD':'MediumBlue','#BA55D3':'MediumOrchid','#9370D8':'MediumPurple','#3CB371':'MediumSeaGreen','#7B68EE':'MediumSlateBlue',
     49        '#00FA9A':'MediumSpringGreen','#48D1CC':'MediumTurquoise','#C71585':'MediumVioletRed','#191970':'MidnightBlue','#F5FFFA':'MintCream','#FFE4E1':'MistyRose','#FFE4B5':'Moccasin',
     50        '#FFDEAD':'NavajoWhite','#000080':'Navy','#FDF5E6':'OldLace','#808000':'Olive','#6B8E23':'OliveDrab','#FFA500':'Orange','#FF4500':'OrangeRed','#DA70D6':'Orchid',
     51        '#EEE8AA':'PaleGoldenRod','#98FB98':'PaleGreen','#AFEEEE':'PaleTurquoise','#D87093':'PaleVioletRed','#FFEFD5':'PapayaWhip','#FFDAB9':'PeachPuff',
     52        '#CD853F':'Peru','#FFC0CB':'Pink','#DDA0DD':'Plum','#B0E0E6':'PowderBlue','#800080':'Purple','#FF0000':'Red','#BC8F8F':'RosyBrown','#4169E1':'RoyalBlue',
     53        '#8B4513':'SaddleBrown','#FA8072':'Salmon','#F4A460':'SandyBrown','#2E8B57':'SeaGreen','#FFF5EE':'SeaShell','#A0522D':'Sienna','#C0C0C0':'Silver',
     54        '#87CEEB':'SkyBlue','#6A5ACD':'SlateBlue','#708090':'SlateGray','#708090':'SlateGrey','#FFFAFA':'Snow','#00FF7F':'SpringGreen',
     55        '#4682B4':'SteelBlue','#D2B48C':'Tan','#008080':'Teal','#D8BFD8':'Thistle','#FF6347':'Tomato','#40E0D0':'Turquoise','#EE82EE':'Violet',
     56        '#F5DEB3':'Wheat','#FFFFFF':'White','#F5F5F5':'WhiteSmoke','#FFFF00':'Yellow','#9ACD32':'YellowGreen'
     57};
     58
     59function init() {
     60        var inputColor = convertRGBToHex(tinyMCE.getWindowArg('input_color'));
     61
     62        if (tinyMCE.isMSIE)
     63                tinyMCEPopup.resizeToInnerSize();
     64
     65        generatePicker();
     66
     67        if (inputColor) {
     68                changeFinalColor(inputColor);
     69
     70                col = convertHexToRGB(inputColor);
     71
     72                if (col)
     73                        updateLight(col.r, col.g, col.b);
     74        }
     75}
     76
     77function insertAction() {
     78        var color = document.getElementById("color").value;
     79
     80        tinyMCEPopup.execCommand(tinyMCE.getWindowArg('command'), false, color);
     81        tinyMCEPopup.close();
     82}
     83
     84function showColor(color, name) {
     85        if (name)
     86                document.getElementById("colorname").innerHTML = name;
     87
     88        document.getElementById("preview").style.backgroundColor = color;
     89        document.getElementById("color").value = color;
     90}
     91
    4892function convertRGBToHex(col) {
    4993        var re = new RegExp("rgb\\s*\\(\\s*([0-9]+).*,\\s*([0-9]+).*,\\s*([0-9]+).*\\)", "gi");
     94
     95        if (!col)
     96                return col;
    5097
    5198        var rgb = col.replace(re, "$1,$2,$3").split(',');
    … …  
    73120                b = parseInt(col.substring(4, 6), 16);
    74121
    75                 return "rgb(" + r + "," + g + "," + b + ")";
    76         }
    77 
    78         return col;
    79 }
    80 
    81 function renderColorMap() {
    82         var html = "";
    83         var inputColor = convertRGBToHex(tinyMCE.getWindowArg('input_color'));
    84 
    85         html += '<table border="0" cellspacing="1" cellpadding="0">'
     122                return {r : r, g : g, b : b};
     123        }
     124
     125        return null;
     126}
     127
     128function generatePicker() {
     129        var el = document.getElementById('light'), h = '', i;
     130
     131        for (i = 0; i < detail; i++){
     132                h += '<div id="gs'+i+'" style="background-color:#000000; width:15px; height:3px; border-style:none; border-width:0px;"'
     133                + ' onclick="changeFinalColor(this.style.backgroundColor)"'
     134                + ' onmousedown="isMouseDown = true; return false;"'
     135                + ' onmouseup="isMouseDown = false;"'
     136                + ' onmousemove="if (isMouseDown && isMouseOver) changeFinalColor(this.style.backgroundColor); return false;"'
     137                + ' onmouseover="isMouseOver = true;"'
     138                + ' onmouseout="isMouseOver = false;"'
     139                + '></div>';
     140        }
     141
     142        el.innerHTML = h;
     143}
     144
     145function generateWebColors() {
     146        var el = document.getElementById('webcolors'), h = '', i;
     147
     148        if (el.className == 'generated')
     149                return;
     150
     151        h += '<table border="0" cellspacing="1" cellpadding="0">'
    86152                + '<tr>';
    87         for (var i=0; i<colors.length; i++) {
    88                 html += '<td bgcolor="' + colors[i] + '">'
     153
     154        for (i=0; i<colors.length; i++) {
     155                h += '<td bgcolor="' + colors[i] + '">'
    89156                        + '<a href="javascript:selectColor();" onfocus="showColor(\'' + colors[i] +  '\');" onmouseover="showColor(\'' + colors[i] +  '\');">'
    90157                        + '<img border="0" src="images/spacer.gif" width="10" height="10" title="' + colors[i] +  '" alt="' + colors[i] +  '" /></a></td>';
    91158                if ((i+1) % 18 == 0)
    92                         html += '</tr><tr>';
    93         }
    94         html += '<tr><td colspan="18">'
    95                 + '<table width="100%" border="0" cellspacing="0" cellpadding="0">'
    96                 + '<tr><td>'
    97                 + '<img id="selectedColor" style="background-color:' + tinyMCE.getWindowArg('input_color') + '" border="0" src="images/spacer.gif" width="80" height="16" />'
    98                 + '</td><td align="right">'
    99                 + '<input id="selectedColorBox" name="selectedColorBox" type="text" size="7" maxlength="7" style="width:65px" value="' + inputColor + '" />'
    100                 + '</td></tr>'
    101                 + '</table>'
    102                 + '<div style="float: left"><input type="button" id="insert" name="insert" value="{$lang_theme_colorpicker_apply}" style="margin-top:3px" onclick="selectColor();"></div>'
    103                 + '<div style="float: right"><input type="button" name="cancel" value="{$lang_cancel}" style="margin-top:3px" onclick="tinyMCEPopup.close();" id="cancel" /></div>'
    104                 + '</td></tr>'
    105                 + '</table>';
    106 
    107         document.write(html);
    108 }
     159                        h += '</tr><tr>';
     160        }
     161
     162        h += '</table>';
     163
     164        el.innerHTML = h;
     165        el.className = 'generated';
     166}
     167
     168function generateNamedColors() {
     169        var el = document.getElementById('namedcolors'), h = '', n, v, i = 0;
     170
     171        if (el.className == 'generated')
     172                return;
     173
     174        for (n in named) {
     175                v = named[n];
     176                h += '<a href="javascript:selectColor();" onmouseover="showColor(\'' + n +  '\',\'' + v + '\');" style="background-color: ' + n + '"><!-- IE --></a>'
     177        }
     178
     179        el.innerHTML = h;
     180        el.className = 'generated';
     181}
     182
     183function selectColor() {
     184        var color = document.getElementById("color").value;
     185
     186        if(window.opener)
     187                window.opener.tinyMCE.execInstanceCommand(tinyMCE.getWindowArg('editor_id'),tinyMCE.getWindowArg('command'),false,color);
     188
     189        window.close();
     190}
     191
     192function dechex(n) {
     193        return strhex.charAt(Math.floor(n / 16)) + strhex.charAt(n % 16);
     194}
     195
     196function computeColor(e) {
     197        var x, y, partWidth, partDetail, imHeight, r, g, b, coef, i, finalCoef, finalR, finalG, finalB;
     198
     199        x = e.offsetX ? e.offsetX : (e.target ? e.clientX - e.target.x : 0);
     200        y = e.offsetY ? e.offsetY : (e.target ? e.clientY - e.target.y : 0);
     201
     202        partWidth = document.getElementById('colorpicker').width / 6;
     203        partDetail = detail / 2;
     204        imHeight = document.getElementById('colorpicker').height;
     205
     206        r = (x >= 0)*(x < partWidth)*255 + (x >= partWidth)*(x < 2*partWidth)*(2*255 - x * 255 / partWidth) + (x >= 4*partWidth)*(x < 5*partWidth)*(-4*255 + x * 255 / partWidth) + (x >= 5*partWidth)*(x < 6*partWidth)*255;
     207        g = (x >= 0)*(x < partWidth)*(x * 255 / partWidth) + (x >= partWidth)*(x < 3*partWidth)*255     + (x >= 3*partWidth)*(x < 4*partWidth)*(4*255 - x * 255 / partWidth);
     208        b = (x >= 2*partWidth)*(x < 3*partWidth)*(-2*255 + x * 255 / partWidth) + (x >= 3*partWidth)*(x < 5*partWidth)*255 + (x >= 5*partWidth)*(x < 6*partWidth)*(6*255 - x * 255 / partWidth);
     209
     210        coef = (imHeight - y) / imHeight;
     211        r = 128 + (r - 128) * coef;
     212        g = 128 + (g - 128) * coef;
     213        b = 128 + (b - 128) * coef;
     214
     215        changeFinalColor('#' + dechex(r) + dechex(g) + dechex(b));
     216        updateLight(r, g, b);
     217}
     218
     219function updateLight(r, g, b) {
     220        var i, partDetail = detail / 2, finalCoef, finalR, finalG, finalB, color;
     221
     222        for (i=0; i<detail; i++) {
     223                if ((i>=0) && (i<partDetail)) {
     224                        finalCoef = i / partDetail;
     225                        finalR = dechex(255 - (255 - r) * finalCoef);
     226                        finalG = dechex(255 - (255 - g) * finalCoef);
     227                        finalB = dechex(255 - (255 - b) * finalCoef);
     228                } else {
     229                        finalCoef = 2 - i / partDetail;
     230                        finalR = dechex(r * finalCoef);
     231                        finalG = dechex(g * finalCoef);
     232                        finalB = dechex(b * finalCoef);
     233                }
     234
     235                color = finalR + finalG + finalB;
     236
     237                document.getElementById('gs' + i).style.backgroundColor = '#'+color;
     238        }
     239}
     240
     241function changeFinalColor(color) {
     242        if (color.indexOf('#') == -1)
     243                color = convertRGBToHex(color);
     244
     245        document.getElementById('preview').style.backgroundColor = color;
     246        document.getElementById('color').value = color;
     247}
     248
     249window.focus();
  • trunk/wp-includes/js/tinymce/themes/advanced/jscripts/link.js

    r4642 r5256  
    2828        document.forms[0].href.value = tinyMCE.getWindowArg('href') || 'http://';
    2929        document.forms[0].href.select();
     30        document.forms[0].href.focus();
    3031        document.forms[0].linktitle.value = tinyMCE.getWindowArg('title');
    3132        document.forms[0].insert.value = tinyMCE.getLang('lang_' + tinyMCE.getWindowArg('action'), 'Insert', true);
    … …  
    5859        var style_class = document.forms[0].styleSelect ? document.forms[0].styleSelect.value : "";
    5960        var dummy;
    60 
    61         // Make anchors absolute
     61       
     62        // WordPress: Make anchors absolute;
    6263        if (href.charAt(0) == '#')
    6364                href = tinyMCE.settings['document_base_url'] + href;
  • trunk/wp-includes/js/tinymce/themes/advanced/langs/en.js

    r4747 r5256  
    7979close : 'Close',
    8080toolbar_focus : 'Jump to tool buttons - Alt+Q, Jump to editor - Alt-Z, Jump to element path - Alt-X',
    81 invalid_data : 'Error: Invalid values entered, these are marked in red.'
     81invalid_data : 'Error: Invalid values entered, these are marked in red.',
     82more_colors : 'More colors',
     83color_picker_tab : 'Picker',
     84color_picker : 'Color picker',
     85web_colors_tab : 'Web safe',
     86web_colors : 'Web safe colors',
     87named_colors_tab : 'Named',
     88named_colors : 'Named colors',
     89color : 'Color:',
     90color_name : 'Name:'
    8291});
  • trunk/wp-includes/js/tinymce/tiny_mce.js

    r4799 r5256  
    66
    77        this.majorVersion = "2";
    8         this.minorVersion = "0.9";
    9         this.releaseDate = "2007-01-09";
     8        this.minorVersion = "1.0";
     9        this.releaseDate = "2007-02-13";
    1010
    1111        this.instances = new Array();
    … …  
    187187                this._def("convert_on_click", false);
    188188                this._def("content_css", '');
    189                 this._def("fix_list_elements", false);
     189                this._def("fix_list_elements", true);
    190190                this._def("fix_table_elements", false);
    191191                this._def("strict_loading_mode", document.contentType == 'application/xhtml+xml');
    … …  
    242242                this.blockRegExp = new RegExp("^(" + this.blockElms + ")$", "i");
    243243                this.posKeyCodes = new Array(13,45,36,35,33,34,37,38,39,40);
    244                 this.uniqueURL = 'javascript:TINYMCE_UNIQUEURL();'; // Make unique URL non real URL
     244                this.uniqueURL = 'javascript:void(091039730);'; // Make unique URL non real URL
    245245                this.uniqueTag = '<div id="mceTMPElement" style="display: none">TMP</div>';
    246246                this.callbacks = new Array('onInit', 'getInfo', 'getEditorTemplate', 'setupContent', 'onChange', 'onPageLoad', 'handleNodeChange', 'initInstance', 'execCommand', 'getControlHTML', 'handleEvent', 'cleanup', 'removeInstance');
    … …  
    739739                        case "mceRemoveEditor":
    740740                                tinyMCE.removeMCEControl(value);
     741                                return;
     742
     743                        case "mceToggleEditor":
     744                                var inst = tinyMCE.getInstanceById(value), pe, te;
     745
     746                                if (inst) {
     747                                        pe = document.getElementById(inst.editorId + '_parent');
     748                                        te = inst.oldTargetElement;
     749
     750                                        if (typeof(inst.enabled) == 'undefined')
     751                                                inst.enabled = true;
     752
     753                                        inst.enabled = !inst.enabled;
     754
     755                                        if (!inst.enabled) {
     756                                                pe.style.display = 'none';
     757                                                te.value = inst.getHTML();
     758                                                te.style.display = inst.oldTargetDisplay;
     759                                                tinyMCE.dispatchCallback(inst, 'hide_instance_callback', 'hideInstance', inst);
     760                                        } else {
     761                                                pe.style.display = 'block';
     762                                                te.style.display = 'none';
     763                                                inst.setHTML(te.value);
     764                                                inst.useCSS = false;
     765                                                tinyMCE.dispatchCallback(inst, 'show_instance_callback', 'showInstance', inst);
     766                                        }
     767                                } else
     768                                        tinyMCE.addMCEControl(tinyMCE._getElementById(value), value);
     769
    741770                                return;
    742771
    … …  
    962991                //inst.getDoc().designMode = inst.getDoc().designMode;
    963992
    964                 // Setup element references
    965                 var parentElm = inst.targetDoc.getElementById(inst.editorId + '_parent');
    966                 inst.formElement = tinyMCE.isGecko ? parentElm.previousSibling : parentElm.nextSibling;
    967 
    968993                tinyMCE.handleVisualAid(inst.getBody(), true, tinyMCE.settings['visual'], inst);
    969994                tinyMCE.dispatchCallback(inst, 'setupcontent_callback', 'setupContent', editor_id, inst.getBody(), inst.getDoc());
    … …  
    14461471                } else {
    14471472                        if (tinyMCE.isRealIE)
    1448                                 h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';
     1473                                h += '<span id="{$editor_id}_' + id + '" dir="ltr" class="mceMenuButton" onmouseover="tinyMCE._menuButtonEvent(\'over\',this);tinyMCE.lastHover = this;" onmouseout="tinyMCE._menuButtonEvent(\'out\',this);">';
    14491474                        else
    1450                                 h += '<span id="{$editor_id}_' + id + '" class="mceMenuButton">';
     1475                                h += '<span id="{$editor_id}_' + id + '" dir="ltr" class="mceMenuButton">';
    14511476
    14521477                        h += '<a href="javascript:' + cmd + '" onclick="' + cmd + 'return false;" onmousedown="return false;" class="mceMenuButtonNormal" target="_self">';
    … …  
    16941719
    16951720        triggerNodeChange : function(focus, setup_content) {
    1696                 var elm, inst, editorId, undoIndex = -1, undoLevels = -1, doc, anySelection = false;
     1721                var elm, inst, editorId, undoIndex = -1, undoLevels = -1, doc, anySelection = false, st;
    16971722
    16981723                if (tinyMCE.selectedInstance) {
    … …  
    17061731
    17071732                        editorId = inst.editorId;
    1708                         selectedText = inst.selection.getSelectedText();
     1733                        st = inst.selection.getSelectedText();
    17091734
    17101735                        if (tinyMCE.settings.auto_resize)
    … …  
    17171742
    17181743                        if (tinyMCE.selectedElement)
    1719                                 anySelection = (tinyMCE.selectedElement.nodeName.toLowerCase() == "img") || (selectedText && selectedText.length > 0);
     1744                                anySelection = (tinyMCE.selectedElement.nodeName.toLowerCase() == "img") || (st && st.length > 0);
    17201745
    17211746                        if (tinyMCE.settings['custom_undo_redo']) {
    … …  
    21812206
    21822207        getCSSClasses : function(editor_id, doc) {
    2183                 var output = new Array();
     2208                var inst = tinyMCE.getInstanceById(editor_id);
    21842209
    21852210                // Is cached, use that
    2186                 if (typeof(tinyMCE.cssClasses) != "undefined")
    2187                         return tinyMCE.cssClasses;
     2211                if (inst && inst.cssClasses.length > 0)
     2212                        return inst.cssClasses;
    21882213
    21892214                if (typeof(editor_id) == "undefined" && typeof(doc) == "undefined") {
    … …  
    22432268                                                                        var addClass = true;
    22442269
    2245                                                                         for (var p=0; p<output.length && addClass; p++) {
    2246                                                                                 if (output[p] == cssClass)
     2270                                                                        for (var p=0; p<inst.cssClasses.length && addClass; p++) {
     2271                                                                                if (inst.cssClasses[p] == cssClass)
    22472272                                                                                        addClass = false;
    22482273                                                                        }
    22492274
    22502275                                                                        if (addClass)
    2251                                                                                 output[output.length] = cssClass;
     2276                                                                                inst.cssClasses[inst.cssClasses.length] = cssClass;
    22522277                                                                }
    22532278                                                        }
    … …  
    22582283                }
    22592284
    2260                 // Cache em
    2261                 if (output.length > 0)
    2262                         tinyMCE.cssClasses = output;
    2263 
    2264                 return output;
     2285                return inst.cssClasses;
    22652286        },
    22662287
    … …  
    22902311
    22912312        getControlHTML : function(c) {
    2292                 var i, l, n, o, v;
     2313                var i, l, n, o, v, rtl = tinyMCE.getLang('lang_dir') == 'rtl';
    22932314
    22942315                l = tinyMCE.plugins;
    … …  
    22962317                        o = l[n];
    22972318
    2298                         if (o.getControlHTML && (v = o.getControlHTML(c)) != '')
     2319                        if (o.getControlHTML && (v = o.getControlHTML(c)) != '') {
     2320                                if (rtl)
     2321                                        return '<span dir="rtl">' + tinyMCE.replaceVar(v, "pluginurl", o.baseURL) + '</span>';
     2322
    22992323                                return tinyMCE.replaceVar(v, "pluginurl", o.baseURL);
     2324                        }
    23002325                }
    23012326
    23022327                o = tinyMCE.themes[tinyMCE.settings['theme']];
    2303                 if (o.getControlHTML && (v = o.getControlHTML(c)) != '')
     2328                if (o.getControlHTML && (v = o.getControlHTML(c)) != '') {
     2329                        if (rtl)
     2330                                return '<span dir="rtl">' + v + '</span>';
     2331
    23042332                        return v;
     2333                }
    23052334
    23062335                return '';
    … …  
    24342463        this.foreColor = this.backColor = "#999999";
    24352464        this.data = {};
     2465        this.cssClasses = [];
    24362466
    24372467        this.cleanup.init({
    … …  
    28662896                                        focusElm = tinyMCE.getParentElement(focusElm, 'A');
    28672897
    2868                                         if (focusElm && this.getRng(0).endOffset > 0 && this.getRng(0).endOffset != focusElm.innerHTML.length) // WordPress mod to prevent unlinking if caret at start/end of link
     2898                                        if (focusElm)
    28692899                                                this.selection.selectNode(focusElm, false);
    28702900                                }
    … …  
    36913721                        } else {
    36923722                                hc = '<input type="hidden" id="' + form_element_name + '" name="' + form_element_name + '" />';
     3723                                this.oldTargetDisplay = tinyMCE.getStyle(this.oldTargetElement, 'display', 'inline');
    36933724                                this.oldTargetElement.style.display = "none";
    36943725                        }
    … …  
    37163747                        this.oldTargetElement = replace_element;
    37173748
    3718                         if (!tinyMCE.settings['debug'])
     3749                        if (!tinyMCE.settings['debug']) {
     3750                                this.oldTargetDisplay = tinyMCE.getStyle(this.oldTargetElement, 'display', 'inline');
    37193751                                this.oldTargetElement.style.display = "none";
     3752                        }
    37203753
    37213754                        // Output HTML and set editable
    … …  
    37903823                if (tinyMCE.isIE)
    37913824                        window.setTimeout("tinyMCE.addEventHandlers(tinyMCE.instances[\"" + this.editorId + "\"]);", 1);
     3825
     3826                // Setup element references
     3827                var parentElm = this.targetDoc.getElementById(this.editorId + '_parent');
     3828                this.formElement = tinyMCE.isGecko ? parentElm.previousSibling : parentElm.nextSibling;
    37923829
    37933830                tinyMCE.setupContent(this.editorId, true);
    … …  
    48664903                        av = t;
    48674904
    4868                 if (os && av.length != 0 && this.settings.url_converter.length != 0 && /^(src|href|longdesc)$/.test(an))
     4905                if (os && av.length != 0 && /^(src|href|longdesc)$/.test(an))
    48694906                        av = this._urlConverter(this, n, av);
    48704907
    … …  
    51875224        // Convert all strong/em to b/i in Gecko
    51885225        if (tinyMCE.isGecko) {
    5189                 h = h.replace(/<strong/gi, '<b');
    5190                 h = h.replace(/<em(\/?)/gi, '<i');
    5191                 h = h.replace(/<em /gi, '<i');
     5226                h = h.replace(/<embed([^>]*)>/gi, '<tmpembed$1>');
     5227                h = h.replace(/<em([^>]*)>/gi, '<i$1>');
     5228                h = h.replace(/<tmpembed([^>]*)>/gi, '<embed$1>');
     5229                h = h.replace(/<strong([^>]*)>/gi, '<b$1>');
    51925230                h = h.replace(/<\/strong>/gi, '</b>');
    51935231                h = h.replace(/<\/em>/gi, '</i>');
    … …  
    55025540                height : w.innerHeight || (m ? de.clientHeight : b.clientHeight)
    55035541        };
     5542};
     5543
     5544TinyMCE_Engine.prototype.getStyle = function(n, na, d) {
     5545        if (!n)
     5546                return false;
     5547
     5548        // Gecko
     5549        if (tinyMCE.isGecko && n.ownerDocument.defaultView) {
     5550                try {
     5551                        return n.ownerDocument.defaultView.getComputedStyle(n, null).getPropertyValue(na);
     5552                } catch (n) {
     5553                        // Old safari might fail
     5554                        return null;
     5555                }
     5556        }
     5557
     5558        // Camelcase it, if needed
     5559        na = na.replace(/-(\D)/g, function(a, b){
     5560                return b.toUpperCase();
     5561        });
     5562
     5563        // IE & Opera
     5564        if (n.currentStyle)
     5565                return n.currentStyle[na];
     5566
     5567        return false;
    55045568};
    55055569
    … …  
    71337197
    71347198        show : function() {
    7135                 this.getElement().style.display = 'block';
    7136                 this.updateBlocker();
     7199                var el = this.getElement();
     7200
     7201                if (el) {
     7202                        el.style.display = 'block';
     7203                        this.updateBlocker();
     7204                }
    71377205        },
    71387206
    71397207        hide : function() {
    7140                 this.getElement().style.display = 'none';
    7141                 this.updateBlocker();
     7208                var el = this.getElement();
     7209
     7210                if (el) {
     7211                        el.style.display = 'none';
     7212                        this.updateBlocker();
     7213                }
    71427214        },
    71437215
Note: See TracChangeset for help on using the changeset viewer.