Changeset 7173

Show
Ignore:
Timestamp:
03/06/08 19:56:02 (9 months ago)
Author:
ryan
Message:

Added filter for changing the languages selection for the spellchecker, fixed problems with valid_elements and added filter for extended_valid_elements, update to the latest version. Props azaozz. fixes #6111

Files:

Legend:

Unmodified
Added
Removed
Modified
Copied
Moved
  • trunk/wp-admin/js/editor.js

    r7130 r7173  
    33    if ( ( 'undefined' == typeof wpTinyMCEConfig ) || 'tinymce' == wpTinyMCEConfig.defaultEditor ) { 
    44        document.getElementById('editorcontainer').style.padding = '0px'; 
    5         tinyMCE.execCommand("mceAddControl", true, "content"); 
     5        tinyMCE.execCommand("mceAddControl", false, "content"); 
    66    } else { 
    77        var H; 
     
    1414 
    1515    saveCallback : function(el, content, body) { 
    16  
    1716        document.getElementById(el).style.color = '#fff'; 
    18         if ( tinyMCE.activeEditor.isHidden() ) 
    19             content = document.getElementById(el).value; 
    20         else 
    21             content = this.pre_wpautop(content); 
    22  
    23         return content; 
     17        return this.pre_wpautop(content); 
    2418    }, 
    2519 
     
    2721       // We have a TON of cleanup to do. 
    2822 
    29         // content = content.replace(/\n|\r/g, ' '); 
    3023        // Remove anonymous, empty paragraphs. 
    31         content = content.replace(new RegExp('<p>(\\s|&nbsp;|<br>)*</p>', 'mg'), ''); 
     24        content = content.replace(new RegExp('<p>(\\s|&nbsp;|<br />)*</p>', 'mg'), ''); 
    3225 
    3326        // Mark </p> if it has any attributes. 
     
    8578            else tinyMCE.execCommand("mceAddControl", false, id); 
    8679 
    87             this.wpSetDefaultEditor( 'tinymce' ); 
     80            this.wpSetDefaultEditor('tinymce'); 
    8881        } else { 
    8982            this.edToggle(H, P); 
    90             tinyMCE.triggerSave(); 
    91             ta.style.height = tinyMCE.activeEditor.contentAreaContainer.offsetHeight + 6 + 'px'; 
     83            ta.style.height = ed.getContentAreaContainer().offsetHeight + 6 + 'px'; 
    9284 
    9385            ed.hide(); 
    94             ta.value = this.pre_wpautop(ta.value); 
    9586            qt.style.display = 'block'; 
    9687 
     
    10596 
    10697            ta.style.color = ''; 
    107  
    108             this.wpSetDefaultEditor( 'html' ); 
     98            this.wpSetDefaultEditor('html'); 
    10999        } 
    110100    }, 
     
    118108    }, 
    119109 
    120     wpSetDefaultEditor : function( editor ) { 
     110    wpSetDefaultEditor : function(editor) { 
    121111        try { 
    122112            editor = escape( editor.toString() ); 
  • trunk/wp-includes/js/tinymce/langs/wp-langs.php

    r7131 r7173  
    134134}, 
    135135fullscreen:{ 
    136 desc:"' . mce_escape( __('Toggle fullscreen mode') ) . '
     136desc:"' . mce_escape( __('Toggle fullscreen mode') ) . ' (Alt+Shift+G)
    137137}, 
    138138media:{ 
     
    152152}, 
    153153spellchecker:{ 
    154 desc:"' . mce_escape( __('Toggle spellchecker') ) . '", 
     154desc:"' . mce_escape( __('Toggle spellchecker') ) . ' (Alt+Shift+N)", 
    155155menu:"' . mce_escape( __('Spellchecker settings') ) . '", 
    156156ignore_word:"' . mce_escape( __('Ignore word') ) . '", 
     
    186186dt:"' . mce_escape( __('Definition term ') ) . '", 
    187187dd:"' . mce_escape( __('Definition description') ) . '", 
    188 bold_desc:"' . mce_escape( __('Bold (Ctrl+B)') ) . '", 
    189 italic_desc:"' . mce_escape( __('Italic (Ctrl+I)') ) . '", 
    190 underline_desc:"' . mce_escape( __('Underline (Ctrl+U)') ) . '", 
    191 striketrough_desc:"' . mce_escape( __('Strikethrough') ) . '", 
    192 justifyleft_desc:"' . mce_escape( __('Align left') ) . '", 
    193 justifycenter_desc:"' . mce_escape( __('Align center') ) . '", 
    194 justifyright_desc:"' . mce_escape( __('Align right') ) . '", 
    195 justifyfull_desc:"' . mce_escape( __('Align full') ) . '", 
    196 bullist_desc:"' . mce_escape( __('Unordered list') ) . '", 
    197 numlist_desc:"' . mce_escape( __('Ordered list') ) . '", 
     188bold_desc:"' . mce_escape( __('Bold') ) . ' (Ctrl / Alt+Shift + B)", 
     189italic_desc:"' . mce_escape( __('Italic') ) . ' (Ctrl / Alt+Shift + I)", 
     190underline_desc:"' . mce_escape( __('Underline') ) . '", 
     191striketrough_desc:"' . mce_escape( __('Strikethrough') ) . ' (Alt+Shift+D)", 
     192justifyleft_desc:"' . mce_escape( __('Align left') ) . ' (Alt+Shift+L)", 
     193justifycenter_desc:"' . mce_escape( __('Align center') ) . ' (Alt+Shift+C)", 
     194justifyright_desc:"' . mce_escape( __('Align right') ) . ' (Alt+Shift+R)", 
     195justifyfull_desc:"' . mce_escape( __('Align full') ) . ' (Alt+Shift+J)", 
     196bullist_desc:"' . mce_escape( __('Unordered list') ) . ' (Alt+Shift+U)", 
     197numlist_desc:"' . mce_escape( __('Ordered list') ) . ' (Alt+Shift+O)", 
    198198outdent_desc:"' . mce_escape( __('Outdent') ) . '", 
    199199indent_desc:"' . mce_escape( __('Indent') ) . '", 
    200 undo_desc:"' . mce_escape( __('Undo (Ctrl+Z)') ) . '", 
    201 redo_desc:"' . mce_escape( __('Redo (Ctrl+Y)') ) . '", 
    202 link_desc:"' . mce_escape( __('Insert/edit link') ) . '", 
     200undo_desc:"' . mce_escape( __('Undo') ) . ' (Ctrl+Z)", 
     201redo_desc:"' . mce_escape( __('Redo') ) . ' (Ctrl+Y)", 
     202link_desc:"' . mce_escape( __('Insert/edit link') ) . ' (Alt+Shift+A)", 
    203203link_delta_width:"' . mce_escape( _c('0| Extra width for the link popup in pixels') ) . '", 
    204204link_delta_height:"' . mce_escape( _c('0| Extra height for the link popup in pixels') ) . '", 
    205 unlink_desc:"' . mce_escape( __('Unlink') ) . '", 
    206 image_desc:"' . mce_escape( __('Insert/edit image') ) . '", 
     205unlink_desc:"' . mce_escape( __('Unlink') ) . ' (Alt+Shift+S)", 
     206image_desc:"' . mce_escape( __('Insert/edit image') ) . ' (Alt+Shift+M)", 
    207207image_delta_width:"' . mce_escape( _c('0| Extra width for the image popup in pixels') ) . '", 
    208208image_delta_height:"' . mce_escape( _c('0| Extra height for the image popup in pixels') ) . '", 
     
    224224newdocument_desc:"' . mce_escape( __('New document') ) . '", 
    225225help_desc:"' . mce_escape( __('Help') ) . '", 
    226 blockquote_desc:"' . mce_escape( __('Blockquote') ) . '", 
     226blockquote_desc:"' . mce_escape( __('Blockquote') ) . ' (Alt+Shift+Q)", 
    227227clipboard_msg:"' . mce_escape( __('Copy/Cut/Paste is not available in Mozilla and Firefox.') ) . '", 
    228228path:"' . mce_escape( __('Path') ) . '", 
     
    391391 
    392392tinyMCE.addI18n("' . $language . '.wordpress",{ 
    393 wp_adv_desc:"' . mce_escape( __('Show/Hide Advanced Toolbar') ) . '", 
    394 wp_more_desc:"' . mce_escape( __('Insert More tag') ) . '", 
    395 wp_page_desc:"' . mce_escape( __('Insert Page break') ) . '", 
    396 wp_help_desc:"' . mce_escape( __('Help') ) . '", 
     393wp_adv_desc:"' . mce_escape( __('Show/Hide Advanced Toolbar') ) . ' (Alt+Shift+Z)", 
     394wp_more_desc:"' . mce_escape( __('Insert More tag') ) . ' (Alt+Shift+T)", 
     395wp_page_desc:"' . mce_escape( __('Insert Page break') ) . ' (Alt+Shift+P)", 
     396wp_help_desc:"' . mce_escape( __('Help') ) . ' (Alt+Shift+H)", 
    397397wp_more_alt:"' . mce_escape( __('More...') ) . '", 
    398398wp_page_alt:"' . mce_escape( __('Next page...') ) . '" 
  • trunk/wp-includes/js/tinymce/plugins/inlinepopups/skins/clearlooks2/window.css

    r7060 r7173  
    1313.clearlooks2 .mceTop,  
    1414.clearlooks2 .mceTop div { 
    15 top:0;  
    16 width:100%;  
    17 height:23px 
     15   top:0;  
     16   width:100%;  
     17   height:23px 
    1818} 
    1919.clearlooks2 .mceTop .mceLeft { 
    20 width:55%;  
    21 background: #cee1ef; 
    22 border-left: 1px solid #c6d9e9; 
    23 border-top: 1px solid #c6d9e9; 
     20   width:55%;  
     21   background: #cee1ef; 
     22   border-left: 1px solid #c6d9e9; 
     23   border-top: 1px solid #c6d9e9; 
    2424} 
    2525.clearlooks2 .mceTop .mceCenter { 
    2626} 
    2727.clearlooks2 .mceTop .mceRight { 
    28 right:0;  
    29 width:55%;  
    30 height:23px;  
    31 background: #cee1ef; 
    32 border-right: 1px solid #c6d9e9; 
    33 border-top: 1px solid #c6d9e9; 
     28   right:0;  
     29   width:55%;  
     30   height:23px;  
     31   background: #cee1ef; 
     32   border-right: 1px solid #c6d9e9; 
     33   border-top: 1px solid #c6d9e9; 
    3434} 
    3535.clearlooks2 .mceTop span { 
    36 width:100%; 
    37 font: 12px/20px bold "Lucida Grande","Lucida Sans Unicode",Tahoma,Verdana,sans-serif; 
    38 text-align:center;  
    39 vertical-align:middle;  
    40 line-height:23px;  
    41 font-weight:bold; 
     36   width:100%; 
     37   font: 12px/20px bold "Lucida Grande","Lucida Sans Unicode",Tahoma,Verdana,sans-serif; 
     38   text-align:center;  
     39   vertical-align:middle;  
     40   line-height:23px;  
     41   font-weight:bold; 
    4242} 
    4343.clearlooks2 .mceFocus .mceTop .mceLeft { 
    44 background: #2683ae; 
    45 border-left: 1px solid #464646; 
    46 border-top: 1px solid #464646; 
     44   background: #2683ae; 
     45   border-left: 1px solid #464646; 
     46   border-top: 1px solid #464646; 
    4747} 
    4848.clearlooks2 .mceFocus .mceTop .mceCenter { 
    4949} 
    5050.clearlooks2 .mceFocus .mceTop .mceRight { 
    51 background: #2683ae; 
    52 border-right: 1px solid #464646; 
    53 border-top: 1px solid #464646; 
     51   background: #2683ae; 
     52   border-right: 1px solid #464646; 
     53   border-top: 1px solid #464646; 
    5454} 
    5555.clearlooks2 .mceFocus .mceTop span { 
     
    118118.clearlooks2 .mceAlert .mceMiddle span, .clearlooks2 .mceConfirm .mceMiddle span {background:transparent;left:60px; top:35px; width:320px; height:50px; font-weight:bold; overflow:auto; white-space:normal;} 
    119119.clearlooks2 a:hover {font-weight:bold;} 
    120 .clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#D6D7D5;} 
     120.clearlooks2 .mceAlert .mceMiddle, .clearlooks2 .mceConfirm .mceMiddle {background:#eaf3fa;} 
    121121.clearlooks2 .mceAlert .mceOk {left:50%; top:auto; margin-left: -40px;} 
    122122.clearlooks2 .mceAlert .mceIcon {background:url(img/alert.gif);} 
  • trunk/wp-includes/js/tinymce/plugins/spellchecker/editor_plugin.js

    r6959 r7173  
    1 (function(){var JSONRequest=tinymce.util.JSONRequest,each=tinymce.each,DOM=tinymce.DOM;tinymce.create('tinymce.plugins.SpellcheckerPlugin',{getInfo:function(){return{longname:'Spellchecker',author:'Moxiecode Systems AB',authorurl:'http://tinymce.moxiecode.com',infourl:'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker',version:tinymce.majorVersion+"."+tinymce.minorVersion};},init:function(ed,url){var t=this,cm;t.url=url;t.editor=ed;ed.addCommand('mceSpellCheck',function(){if(!t.active){ed.setProgressState(1);t._sendRPC('checkWords',[t.selectedLang,t._getWords()],function(r){if(r.length>0){t.active=1;t._markWords(r);ed.setProgressState(0);ed.nodeChanged();}else{ed.setProgressState(0);ed.windowManager.alert('spellchecker.no_mpell');}});}else t._done();});ed.onInit.add(function(){ed.dom.loadCSS(url+'/css/content.css');});ed.onClick.add(t._showMenu,t);ed.onContextMenu.add(t._showMenu,t);ed.onBeforeGetContent.add(function(){if(t.active)t._removeWords();});ed.onNodeChange.add(function(ed,cm){cm.setActive('spellchecker',t.active);});ed.onSetContent.add(function(){t._done();});ed.onBeforeGetContent.add(function(){t._done();});ed.onBeforeExecCommand.add(function(ed,cmd){if(cmd=='mceFullScreen')t._done();});t.languages={};each(ed.getParam('spellchecker_languages','+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv').split(','),function(v){v=v.split('=');if(v[0].indexOf('+')===0){v[0]=v[0].substring(1);t.selectedLang=v[1];}t.languages[v[0]]=v[1];});},createControl:function(n,cm){var t=this,c,ed=t.editor;if(n=='spellchecker'){c=cm.createSplitButton(n,{title:'spellchecker.desc',cmd:'mceSpellCheck',scope:t});c.onRenderMenu.add(function(c,m){m.add({title:'spellchecker.langs','class':'mceMenuItemTitle'}).setDisabled(1);each(t.languages,function(v,k){var o={icon:1},mi;o.onclick=function(){mi.setSelected(1);t.selectedItem.setSelected(0);t.selectedItem=mi;t.selectedLang=v;};o.title=k;mi=m.add(o);mi.setSelected(v==t.selectedLang);if(v==t.selectedLang)t.selectedItem=mi;})});return c;}},_walk:function(n,f){var d=this.editor.getDoc(),w;if(d.createTreeWalker){w=d.createTreeWalker(n,NodeFilter.SHOW_TEXT,null,false);while((n=w.nextNode())!=null)f.call(this,n);}else tinymce.walk(n,f,'childNodes');},_getSeparators:function(){var re='',i,str=this.editor.getParam('spellchecker_word_separator_chars','\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}����������������\u201d\u201c');for(i=0;i<str.length;i++)re+='\\'+str.charAt(i);return re;},_getWords:function(){var ed=this.editor,wl=[],tx='',lo={};this._walk(ed.getBody(),function(n){if(n.nodeType==3)tx+=n.nodeValue+' ';});tx=tx.replace(new RegExp('([0-9]|['+this._getSeparators()+'])','g'),' ');tx=tinymce.trim(tx.replace(/(\s+)/g,' '));each(tx.split(' '),function(v){if(!lo[v]){wl.push(v);lo[v]=1;}});return wl;},_removeWords:function(w){var ed=this.editor,dom=ed.dom,se=ed.selection,b=se.getBookmark();each(dom.select('span').reverse(),function(n){if(n&&(dom.hasClass(n,'mceItemHiddenSpellWord')||dom.hasClass(n,'mceItemHidden'))){if(!w||dom.decode(n.innerHTML)==w)dom.remove(n,1);}});se.moveToBookmark(b);},_markWords:function(wl){var r1,r2,r3,r4,r5,w='',ed=this.editor,re=this._getSeparators(),dom=ed.dom,nl=[];var se=ed.selection,b=se.getBookmark();each(wl,function(v){w+=(w?'|':'')+v;});r1=new RegExp('(['+re+'])('+w+')(['+re+'])','g');r2=new RegExp('^('+w+')','g');r3=new RegExp('('+w+')(['+re+']?)$','g');r4=new RegExp('^('+w+')(['+re+']?)$','g');r5=new RegExp('('+w+')(['+re+'])','g');this._walk(this.editor.getBody(),function(n){if(n.nodeType==3){nl.push(n);}});each(nl,function(n){var v;if(n.nodeType==3){v=n.nodeValue;if(r1.test(v)||r2.test(v)||r3.test(v)||r4.test(v)){v=dom.encode(v);v=v.replace(r5,'<span class="mceItemHiddenSpellWord">$1</span>$2');v=v.replace(r3,'<span class="mceItemHiddenSpellWord">$1</span>$2');dom.replace(dom.create('span',{'class':'mceItemHidden'},v),n);}}});se.moveToBookmark(b);},_showMenu:function(ed,e){var t=this,ed=t.editor,m=t._menu,p1,dom=ed.dom,vp=dom.getViewPort(ed.getWin());if(!m){p1=DOM.getPos(ed.getContentAreaContainer());m=ed.controlManager.createDropMenu('spellcheckermenu',{offset_x:p1.x,offset_y:p1.y,'class':'noIcons'});t._menu=m;}if(dom.hasClass(e.target,'mceItemHiddenSpellWord')){m.removeAll();m.add({title:'spellchecker.wait','class':'mceMenuItemTitle'}).setDisabled(1);t._sendRPC('getSuggestions',[t.selectedLang,dom.decode(e.target.innerHTML)],function(r){m.removeAll();if(r.length>0){m.add({title:'spellchecker.sug','class':'mceMenuItemTitle'}).setDisabled(1);each(r,function(v){m.add({title:v,onclick:function(){dom.replace(ed.getDoc().createTextNode(v),e.target);t._checkDone();}});});m.addSeparator();}else m.add({title:'spellchecker.no_sug','class':'mceMenuItemTitle'}).setDisabled(1);m.add({title:'spellchecker.ignore_word',onclick:function(){dom.remove(e.target,1);t._checkDone();}});m.add({title:'spellchecker.ignore_words',onclick:function(){t._removeWords(dom.decode(e.target.innerHTML));t._checkDone();}});m.update();});ed.selection.select(e.target);p1=dom.getPos(e.target);m.showMenu(p1.x,p1.y+e.target.offsetHeight-vp.y);return tinymce.dom.Event.cancel(e);}else m.hideMenu();},_checkDone:function(){var t=this,ed=t.editor,dom=ed.dom,o;each(dom.select('span'),function(n){if(n&&dom.hasClass(n,'mceItemHiddenSpellWord')){o=true;return false;}});if(!o)t._done();},_done:function(){var t=this,la=t.active;t.active=0;t._removeWords();if(t._menu)t._menu.hideMenu();if(la)t.editor.nodeChanged();},_sendRPC:function(m,p,cb){var t=this,url=t.editor.getParam("spellchecker_rpc_url",this.url+"/rpc.php");if(url=='{backend}'){alert('Please specify: spellchecker_rpc_url');return;}JSONRequest.sendRPC({url:url,method:m,params:p,success:cb,error:function(e,x){t.editor.setProgressState(0);t.editor.windowManager.alert(e.errstr||('Error response: '+x.responseText));}});}});tinymce.PluginManager.add('spellchecker',tinymce.plugins.SpellcheckerPlugin);})(); 
     1/** 
     2 * $Id: editor_plugin_src.js 425 2007-11-21 15:17:39Z spocke $ 
     3 * 
     4 * @author Moxiecode 
     5 * @copyright Copyright � 2004-2008, Moxiecode Systems AB, All rights reserved. 
     6 */ 
     7 
     8(function() { 
     9    var JSONRequest = tinymce.util.JSONRequest, each = tinymce.each, DOM = tinymce.DOM; 
     10 
     11    tinymce.create('tinymce.plugins.SpellcheckerPlugin', { 
     12        getInfo : function() { 
     13            return { 
     14                longname : 'Spellchecker', 
     15                author : 'Moxiecode Systems AB', 
     16                authorurl : 'http://tinymce.moxiecode.com', 
     17                infourl : 'http://wiki.moxiecode.com/index.php/TinyMCE:Plugins/spellchecker', 
     18                version : tinymce.majorVersion + "." + tinymce.minorVersion 
     19            }; 
     20        }, 
     21 
     22        init : function(ed, url) { 
     23            var t = this, cm; 
     24 
     25            t.url = url; 
     26            t.editor = ed; 
     27 
     28            // Register commands 
     29            ed.addCommand('mceSpellCheck', function() { 
     30                if (!t.active) { 
     31                    ed.setProgressState(1); 
     32                    t._sendRPC('checkWords', [t.selectedLang, t._getWords()], function(r) { 
     33                        if (r.length > 0) { 
     34                            t.active = 1; 
     35                            t._markWords(r); 
     36                            ed.setProgressState(0); 
     37                            ed.nodeChanged(); 
     38                        } else { 
     39                            ed.setProgressState(0); 
     40                            ed.windowManager.alert('spellchecker.no_mpell'); 
     41                        } 
     42                    }); 
     43                } else 
     44                    t._done(); 
     45            }); 
     46 
     47            ed.onInit.add(function() { 
     48                ed.dom.loadCSS(url + '/css/content.css'); 
     49            }); 
     50 
     51            ed.onClick.add(t._showMenu, t); 
     52            ed.onContextMenu.add(t._showMenu, t); 
     53            ed.onBeforeGetContent.add(function() { 
     54                if (t.active) 
     55                    t._removeWords(); 
     56            }); 
     57 
     58            ed.onNodeChange.add(function(ed, cm) { 
     59                cm.setActive('spellchecker', t.active); 
     60            }); 
     61 
     62            ed.onSetContent.add(function() { 
     63                t._done(); 
     64            }); 
     65 
     66            ed.onBeforeGetContent.add(function() { 
     67                t._done(); 
     68            }); 
     69 
     70            ed.onBeforeExecCommand.add(function(ed, cmd) { 
     71                if (cmd == 'mceFullScreen') 
     72                    t._done(); 
     73            }); 
     74 
     75            // Find selected language 
     76            t.languages = {}; 
     77            each(ed.getParam('spellchecker_languages', '+English=en,Danish=da,Dutch=nl,Finnish=fi,French=fr,German=de,Italian=it,Polish=pl,Portuguese=pt,Spanish=es,Swedish=sv', 'hash'), function(v, k) { 
     78                if (k.indexOf('+') === 0) { 
     79                    k = k.substring(1); 
     80                    t.selectedLang = v; 
     81                } 
     82 
     83                t.languages[k] = v; 
     84            }); 
     85        }, 
     86 
     87        createControl : function(n, cm) { 
     88            var t = this, c, ed = t.editor; 
     89 
     90            if (n == 'spellchecker') { 
     91                c = cm.createSplitButton(n, {title : 'spellchecker.desc', cmd : 'mceSpellCheck', scope : t}); 
     92 
     93                c.onRenderMenu.add(function(c, m) { 
     94                    m.add({title : 'spellchecker.langs', 'class' : 'mceMenuItemTitle'}).setDisabled(1); 
     95                    each(t.languages, function(v, k) { 
     96                        var o = {icon : 1}, mi; 
     97 
     98                        o.onclick = function() { 
     99                            mi.setSelected(1); 
     100                            t.selectedItem.setSelected(0); 
     101                            t.selectedItem = mi; 
     102                            t.selectedLang = v; 
     103                        }; 
     104 
     105                        o.title = k; 
     106                        mi = m.add(o); 
     107                        mi.setSelected(v == t.selectedLang); 
     108 
     109                        if (v == t.selectedLang) 
     110                            t.selectedItem = mi; 
     111                    }) 
     112                }); 
     113 
     114                return c; 
     115            } 
     116        }, 
     117 
     118        // Internal functions 
     119 
     120        _walk : function(n, f) { 
     121            var d = this.editor.getDoc(), w; 
     122 
     123            if (d.createTreeWalker) { 
     124                w = d.createTreeWalker(n, NodeFilter.SHOW_TEXT, null, false); 
     125 
     126                while ((n = w.nextNode()) != null) 
     127                    f.call(this, n); 
     128            } else 
     129                tinymce.walk(n, f, 'childNodes'); 
     130        }, 
     131 
     132        _getSeparators : function() { 
     133            var re = '', i, str = this.editor.getParam('spellchecker_word_separator_chars', '\\s!"#$%&()*+,-./:;<=>?@[\]^_{|}���������������\u201d\u201c'); 
     134 
     135            // Build word separator regexp 
     136            for (i=0; i<str.length; i++) 
     137                re += '\\' + str.charAt(i); 
     138 
     139            return re; 
     140        }, 
     141 
     142        _getWords : function() { 
     143            var ed = this.editor, wl = [], tx = '', lo = {}; 
     144 
     145            // Get area text 
     146            this._walk(ed.getBody(), function(n) { 
     147                if (n.nodeType == 3) 
     148                    tx += n.nodeValue + ' '; 
     149            }); 
     150 
     151            // Split words by separator 
     152            tx = tx.replace(new RegExp('([0-9]|[' + this._getSeparators() + '])', 'g'), ' '); 
     153            tx = tinymce.trim(tx.replace(/(\s+)/g, ' ')); 
     154 
     155            // Build word array and remove duplicates 
     156            each(tx.split(' '), function(v) { 
     157                if (!lo[v]) { 
     158                    wl.push(v); 
     159                    lo[v] = 1; 
     160                } 
     161            }); 
     162 
     163            return wl; 
     164        }, 
     165 
     166        _removeWords : function(w) { 
     167            var ed = this.editor, dom = ed.dom, se = ed.selection, b = se.getBookmark(); 
     168 
     169            each(dom.select('span').reverse(), function(n) { 
     170                if (n && (dom.hasClass(n, 'mceItemHiddenSpellWord') || dom.hasClass(n, 'mceItemHidden'))) { 
     171                    if (!w || dom.decode(n.innerHTML) == w) 
     172                        dom.remove(n, 1); 
     173                } 
     174            }); 
     175 
     176            se.moveToBookmark(b); 
     177        }, 
     178 
     179        _markWords : function(wl) { 
     180            var r1, r2, r3, r4, r5, w = '', ed = this.editor, re = this._getSeparators(), dom = ed.dom, nl = []; 
     181            var se = ed.selection, b = se.getBookmark(); 
     182 
     183            each(wl, function(v) { 
     184                w += (w ? '|' : '') + v; 
     185            }); 
     186 
     187            r1 = new RegExp('([' + re + '])(' + w + ')([' + re + '])', 'g'); 
     188            r2 = new RegExp('^(' + w + ')', 'g'); 
     189            r3 = new RegExp('(' + w + ')([' + re + ']?)$', 'g'); 
     190            r4 = new RegExp('^(' + w + ')([' + re + ']?)$', 'g'); 
     191            r5 = new RegExp('(' + w + ')([' + re + '])', 'g'); 
     192 
     193            // Collect all text nodes 
     194            this._walk(this.editor.getBody(), function(n) { 
     195                if (n.nodeType == 3) { 
     196                    nl.push(n); 
     197                } 
     198            }); 
     199 
     200            // Wrap incorrect words in spans 
     201            each(nl, function(n) { 
     202                var v; 
     203 
     204                if (n.nodeType == 3) { 
     205                    v = n.nodeValue; 
     206 
     207                    if (r1.test(v) || r2.test(v) || r3.test(v) || r4.test(v)) { 
     208                        v = dom.encode(v); 
     209                        v = v.replace(r5, '<span class="mceItemHiddenSpellWord">$1</span>$2'); 
     210                        v = v.replace(r3, '<span class="mceItemHiddenSpellWord">$1</span>$2'); 
     211 
     212                        dom.replace(dom.create('span', {'class' : 'mceItemHidden'}, v), n); 
     213                    } 
     214                } 
     215            }); 
     216 
     217            se.moveToBookmark(b); 
     218        }, 
     219 
     220        _showMenu : function(ed, e) { 
     221            var t = this, ed = t.editor, m = t._menu, p1, dom = ed.dom, vp = dom.getViewPort(ed.getWin()); 
     222 
     223            if (!m) { 
     224                p1 = DOM.getPos(ed.getContentAreaContainer()); 
     225                //p2 = DOM.getPos(ed.getContainer()); 
     226 
     227                m = ed.controlManager.createDropMenu('spellcheckermenu', { 
     228                    offset_x : p1.x, 
     229                    offset_y : p1.y, 
     230                    'class' : 'noIcons' 
     231                }); 
     232 
     233                t._menu = m; 
     234            } 
     235 
     236            if (dom.hasClass(e.target, 'mceItemHiddenSpellWord')) { 
     237                m.removeAll(); 
     238                m.add({title : 'spellchecker.wait', 'class' : 'mceMenuItemTitle'}).setDisabled(1); 
     239 
     240                t._sendRPC('getSuggestions', [t.selectedLang, dom.decode(e.target.innerHTML)], function(r) { 
     241                    m.removeAll(); 
     242 
     243                    if (r.length > 0) { 
     244                        m.add({title : 'spellchecker.sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); 
     245                        each(r, function(v) { 
     246                            m.add({title : v, onclick : function() { 
     247                                dom.replace(ed.getDoc().createTextNode(v), e.target); 
     248                                t._checkDone(); 
     249                            }}); 
     250                        }); 
     251 
     252                        m.addSeparator(); 
     253                    } else 
     254                        m.add({title : 'spellchecker.no_sug', 'class' : 'mceMenuItemTitle'}).setDisabled(1); 
     255 
     256                    m.add({ 
     257                        title : 'spellchecker.ignore_word', 
     258                        onclick : function() { 
     259                            dom.remove(e.target, 1); 
     260                            t._checkDone(); 
     261                        } 
     262                    }); 
     263 
     264                    m.add({ 
     265                        title : 'spellchecker.ignore_words', 
     266                        onclick : function() { 
     267                            t._removeWords(dom.decode(e.target.innerHTML)); 
     268                            t._checkDone(); 
     269                        } 
     270                    }); 
     271 
     272                    m.update(); 
     273                }); 
     274 
     275                ed.selection.select(e.target); 
     276                p1 = dom.getPos(e.target); 
     277                m.showMenu(p1.x, p1.y + e.target.offsetHeight - vp.y); 
     278 
     279                return tinymce.dom.Event.cancel(e); 
     280            } else 
     281                m.hideMenu(); 
     282        }, 
     283 
     284        _checkDone : function() { 
     285            var t = this, ed = t.editor, dom = ed.dom, o; 
     286 
     287            each(dom.select('span'), function(n) { 
     288                if (n && dom.hasClass(n, 'mceItemHiddenSpellWord')) { 
     289                    o = true; 
     290                    return false; 
     291                } 
     292            }); 
     293 
     294            if (!o) 
     295                t._done(); 
     296        }, 
     297 
     298        _done : function() { 
     299            var t = this, la = t.active; 
     300 
     301            if (t.active) { 
     302                t.active = 0; 
     303                t._removeWords(); 
     304 
     305                if (t._menu) 
     306                    t._menu.hideMenu(); 
     307 
     308                if (la) 
     309                    t.editor.nodeChanged(); 
     310            } 
     311        }, 
     312 
     313        _sendRPC : function(m, p, cb) { 
     314            var t = this, url = t.editor.getParam("spellchecker_rpc_url", this.url+"/rpc.php"); 
     315 
     316            if (url == '{backend}') { 
     317                t.editor.setProgressState(0); 
     318                alert('Please specify: spellchecker_rpc_url'); 
     319                return; 
     320            } 
     321 
     322            JSONRequest.sendRPC({ 
     323                url : url, 
     324                method : m, 
     325                params : p, 
     326                success : cb, 
     327                error : function(e, x) { 
     328                    t.editor.setProgressState(0); 
     329                    t.editor.windowManager.alert(e.errstr || ('Error response: ' + x.responseText)); 
     330                } 
     331            }); 
     332        } 
     333    }); 
     334 
     335    // Register plugin 
     336    tinymce.PluginManager.add('spellchecker', tinymce.plugins.SpellcheckerPlugin); 
     337})(); 
  • trunk/wp-includes/js/tinymce/themes/advanced/js/link.js

    r7147 r7173  
    5151            href : f.href.value, 
    5252            title : f.linktitle.value, 
    53             target : f.target_list ? f.target_list.options[f.target_list.selectedIndex].value : ''
    54             'class' : f.class_list ? f.class_list.options[f.class_list.selectedIndex].value : '' 
     53            target : f.target_list ? f.target_list.options[f.target_list.selectedIndex].value : null
     54            'class' : f.class_list ? f.class_list.options[f.class_list.selectedIndex].value : null 
    5555        }); 
    5656 
  • trunk/wp-includes/js/tinymce/themes/advanced/skins/default/content.css

    r7025 r7173  
    1 body, td, pre {background:#FFF; color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px; } 
     1body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} 
     2body {background:#FFF;} 
    23body.mceForceColors {background:#FFF; color:#000;} 
    3 .mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceVisualAid {border: 1px dashed #BBB;} 
     4.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} 
    45a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(img/items.gif) no-repeat bottom left;} 
    56img.mceItemAnchor {width:12px; height:12px; background:url(img/items.gif) no-repeat;} 
  • trunk/wp-includes/js/tinymce/themes/advanced/skins/default/ui.css

    r7025 r7173  
    7777.defaultSkin a.mceMoreColors:hover {border:1px solid #0A246A} 
    7878.defaultSkin .mceColorPreview {position:absolute; top:15px; left:2px; width:16px; height:4px; overflow:hidden} 
     79.defaultSkin .mce_forecolor, .defaultSkin .mce_backcolor {position:relative} 
    7980 
    8081/* Menu */ 
  • trunk/wp-includes/js/tinymce/themes/advanced/skins/o2k7/content.css

    r7025 r7173  
    1 body, td, pre {background:#FFF; color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px; } 
     1body, td, pre {color:#000; font-family:Verdana, Arial, Helvetica, sans-serif; font-size:10px; margin:8px;} 
     2body {background:#FFF;} 
    23body.mceForceColors {background:#FFF; color:#000;} 
    3 .mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceVisualAid {border: 1px dashed #BBB;} 
     4.mceItemTable, .mceItemTable td, .mceItemTable th, .mceItemTable caption, .mceItemVisualAid {border: 1px dashed #BBB;} 
    45a.mceItemAnchor {width:12px; line-height:6px; overflow:hidden; padding-left:12px; background:url(../default/img/items.gif) no-repeat bottom left;} 
    56img.mceItemAnchor {width:12px; height:12px; background:url(../default/img/items.gif) no-repeat;} 
  • trunk/wp-includes/js/tinymce/themes/advanced/skins/o2k7/ui.css

    r7025 r7173  
    2525.o2k7Skin .mceStatusbar a:hover {text-decoration:underline} 
    2626.o2k7Skin table.mceToolbar {margin-left:3px} 
    27 .o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; } 
     27.o2k7Skin .mceToolbar .mceToolbarStart span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px; margin-left:3px;} 
     28.o2k7Skin .mceToolbar td.mceFirst span {margin:0} 
    2829.o2k7Skin .mceToolbar .mceToolbarEnd span {display:block; background:url(img/button_bg.png) -22px 0; width:1px; height:22px} 
    29 .o2k7Skin .mceToolbar .mceToolbarEndListBox span {display:none} 
     30.o2k7Skin .mceToolbar .mceToolbarEndListBox span, .o2k7Skin .mceToolbar .mceToolbarStartListBox span {display:none} 
    3031.o2k7Skin span.mceIcon, .o2k7Skin img.mceIcon {display:block; width:20px; height:20px} 
    3132.o2k7Skin .mceIcon {background:url(../../img/icons.gif) no-repeat 20px 20px} 
     
    4647 
    4748/* ListBox */ 
     49.o2k7Skin .mceListBox {margin-left:3px} 
    4850.o2k7Skin .mceListBox, .o2k7Skin .mceListBox a {display:block} 
    4951.o2k7Skin .mceListBox .mceText {padding-left:4px; text-align:left; width:70px; border:1px solid #b3c7e1; border-right:0; background:#eaf2fb; font-family:Tahoma,Verdana,Arial,Helvetica; font-size:11px; height:20px; line-height:20px; overflow:hidden} 
    50 .o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0; margin-right:2px
     52.o2k7Skin .mceListBox .mceOpen {width:14px; height:22px; background:url(img/button_bg.png) -66px 0
    5153.o2k7Skin table.mceListBoxEnabled:hover .mceText, .o2k7Skin .mceListBoxHover .mceText, .o2k7Skin .mceListBoxSelected .mceText {background:#FFF} 
    5254.o2k7Skin table.mceListBoxEnabled:hover .mceOpen, .o2k7Skin .mceListBoxHover .mceOpen, .o2k7Skin .mceListBoxSelected .mceOpen {background-position:-66px -22px} 
     
    7779.o2k7Skin a.mceMoreColors:hover {border:1px solid #0A246A} 
    7880.o2k7Skin .mceColorPreview {position:absolute; top:15px; left:2px; width:16px; height:4px; overflow:hidden} 
     81.o2k7Skin .mce_forecolor, .o2k7Skin .mce_backcolor {position:relative} 
    7982 
    8083/* Menu */ 
  • trunk/wp-includes/js/tinymce/themes/advanced/skins/wp_theme/ui.css

    r7147 r7173  
    3636/* Button */ 
    3737.wp_themeSkin .mceButton { 
    38 display:block;  
    39 width: 20px;  
    40 height: 20px;  
    41 cursor: default;  
    42 padding: 1px 2px;  
    43 margin: 1px;  
    44 background: #e9e8e8 url(img/butt2.png) 2px 1px no-repeat scroll; 
    45 -moz-border-radius: 3px; 
    46 -webkit-border-radius: 3px; 
    47 -khtml-border-radius: 3px; 
    48 border-radius: 3px; 
    49 border: 1px solid #abc0fb; 
     38   display:block;  
     39   width: 20px;  
     40   height: 20px;  
     41   cursor: default;  
     42   padding: 1px 2px;  
     43   margin: 1px;  
     44   background: #e9e8e8 url(img/butt2.png) 2px 1px no-repeat scroll; 
     45   -moz-border-radius: 3px; 
     46   -webkit-border-radius: 3px; 
     47   -khtml-border-radius: 3px; 
     48   border-radius: 3px; 
     49   border: 1px solid #abc0fb; 
    5050} 
    5151.wp_themeSkin a.mceButton span, .wp_themeSkin a.mceButton img {} 
    5252.wp_themeSkin .mceOldBoxModel a.mceButton span, .wp_themeSkin .mceOldBoxModel a.mceButton img {margin:0 0 0 1px} 
    5353.wp_themeSkin a.mceButtonEnabled:hover { 
    54 background-color:#d6d8da; 
    55 background-position:0 -20px; 
    56 border: 1px solid #7789ba !important; 
     54   background-color:#d6d8da; 
     55   background-position:0 -20px; 
     56   border: 1px solid #7789ba !important; 
    5757} 
    5858.wp_themeSkin a.mceButtonActive, .wp_themeSkin a.mceButtonSelected { 
    59 background-color: #d6d8da; 
    60 background-position:0 -20px; 
    61 border: 1px solid #7789ba !important; 
     59   background-color: #d6d8da; 
     60   background-position:0 -20px; 
     61   border: 1px solid #7789ba !important; 
    6262} 
    6363.wp_themeSkin .mceButtonDisabled .mceIcon {opacity:0.3; filter:alpha(opacity=30);} 
     
    6666/* Separator */ 
    6767.wp_themeSkin .mceSeparator {  
    68 height: 24px;  
    69 width: 1px; 
    70 display: block; 
    71 background: transparent; 
    72 overflow: hidden;  
    73 margin: 0 2px;  
     68   height: 24px;  
     69   width: 1px; 
     70   display: block; 
     71   background: transparent; 
     72   overflow: hidden;  
     73   margin: 0 2px;  
    7474} 
    7575 
     
    7777.wp_themeSkin .mceListBox, .wp_themeSkin .mceListBox a {display:block} 
    7878.wp_themeSkin .mceListBox .mceText { 
    79 padding: 1px 2px 1px 5px; 
    80 border: 1px solid #abc0fb; 
    81 text-align:left;  
    82 width:70px;  
    83 border-right:0;  
    84 background: #e9e8e8 url(img/butt2.png) 1px 1px repeat-x scroll; 
    85 font-family: Tahoma,Verdana,Arial,Helvetica;  
    86 font-size: 11px;  
    87 height: 20px;  
    88 line-height: 20px;  
    89 overflow: hidden; 
     79   padding: 1px 2px 1px 5px; 
     80   border: 1px solid #abc0fb; 
     81   text-align:left;  
     82   width:70px;  
     83   border-right:0;  
     84   background: #e9e8e8 url(img/butt2.png) 1px 1px repeat-x scroll; 
     85   font-family: Tahoma,Verdana,Arial,Helvetica;  
     86   font-size: 11px;  
     87   height: 20px;  
     88   line-height: 20px;  
     89   overflow: hidden; 
    9090} 
    9191.wp_themeSkin .mceListBox { 
    92 margin: 1px; 
    93 direction: ltr; 
     92   margin: 1px; 
     93   direction: ltr; 
    9494} 
    9595.wp_themeSkin .mceListBox .mceOpen { 
    96 width:14px; 
    97 height:20px;  
    98 border-collapse:separate; 
    99 background: #e9e8e8 url(img/butt2.png) 1px 1px repeat-x scroll; 
    100 padding: 1px; 
    101 border: 1px solid #abc0fb; 
     96   width:14px; 
     97   height:20px;  
     98   border-collapse:separate; 
     99   background: #e9e8e8 url(img/butt2.png) 1px 1px repeat-x scroll; 
     100   padding: 1px; 
     101   border: 1px solid #abc0fb; 
    102102} 
    103103.wp_themeSkin .mceListBox .mceOpen span { 
    104 display: block; 
    105 width:14px; 
    106 height:20px; 
    107 background:url(img/down_arrow.gif) 2px 1px no-repeat; 
     104   display: block; 
     105   width:14px; 
     106   height:20px; 
     107   background:url(img/down_arrow.gif) 2px 1px no-repeat; 
    108108} 
    109109.wp_themeSkin table.mceListBoxEnabled:hover .mceText,  
    110110.wp_themeSkin .mceListBoxHover .mceText,  
    111111.wp_themeSkin .mceListBoxSelected .mceText { 
    112 background:#eae8ea; 
    113 border-collapse:separate; 
    114 border: 1px solid #7789ba !important; 
    115 border-right: 0 none !important; 
     112   background:#eae8ea; 
     113   border-collapse:separate; 
     114   border: 1px solid #7789ba !important; 
     115   border-right: 0 none !important; 
    116116} 
    117117.wp_themeSkin table.mceListBoxEnabled:hover .mceOpen,  
    118118.wp_themeSkin .mceListBoxHover .mceOpen,  
    119119.wp_themeSkin .mceListBoxSelected .mceOpen { 
    120 background-color:#d6d8da; 
    121 border: 1px solid #7789ba !important; 
     120   background-color:#d6d8da; 
     121   border: 1px solid #7789ba !important; 
    122122} 
    123123.wp_themeSkin .mceListBoxDisabled .mceText {color:gray} 
     
    129129.wp_themeSkin .mceSplitButton a, .wp_themeSkin .mceSplitButton span {display:block; height:20px} 
    130130.wp_themeSkin .mceSplitButton {  
    131 display:block; 
    132 margin: 1px; 
    133 direction: ltr; 
     131   display:block; 
     132   margin: 1px; 
     133   direction: ltr; 
    134134} 
    135135.wp_themeSkin table.mceSplitButton td { 
    136 padding: 2px; 
     136   padding: 2px; 
    137137} 
    138138.wp_themeSkin .mceSplitButton a.mceAction { 
    139 height:20px; 
    140 width:20px; 
    141 background: #e9e8e8 url(img/butt2.png) 1px 1px repeat-x scroll; 
    142 padding: 1px 2px; 
    143 border: 1px solid #abc0fb; 
     139   height:20px; 
     140   width:20px; 
     141   background: #e9e8e8 url(img/butt2.png) 1px 1px repeat-x scroll; 
     142   padding: 1px 2px; 
     143   border: 1px solid #abc0fb; 
    144144} 
    145145.wp_themeSkin .mceSplitButton span.mceAction { 
    146 background: url(../../img/icons.gif) 20px 20px; 
    147 width:20px;  
     146   background: url(../../img/icons.gif) 20px 20px; 
     147   width:20px;  
    148148} 
    149149.wp_themeSkin .mceSplitButton a.mceOpen { 
    150 width:10px; 
    151 height:20px; 
    152 border-collapse:separate; 
    153 background: #e9e8e8 url(img/butt2.png) 1px 1px repeat-x scroll; 
    154 padding: 1px; 
    155 border: 1px solid #abc0fb; 
    156 border-left: 0 none; 
     150   width:10px; 
     151   height:20px; 
     152   border-collapse:separate; 
     153   background: #e9e8e8 url(img/butt2.png) 1px 1px repeat-x scroll; 
     154   padding: 1px; 
     155   border: 1px solid #abc0fb; 
     156   border-left: 0 none; 
    157157} 
    158158.wp_themeSkin .mceSplitButton span.mceOpen { 
    159 width:10px;  
    160 background:url(img/down_arrow.gif) 0px 1px; 
     159   width:10px;  
     160   background:url(img/down_arrow.gif) 0px 1px; 
    161161} 
    162162.wp_themeSkin .mceSplitButton a.mceOpen:hover, 
    163163.wp_themeSkin .mceSplitButtonSelected a.mceOpen { 
    164 background:#d6d8da; 
    165 border-collapse:separate; 
    166 border: 1px solid #7789ba !important; 
    167 border-left: 0 none !important; 
     164   background:#d6d8da; 
     165   border-collapse:separate; 
     166   border: 1px solid #7789ba !important; 
     167   border-left: 0 none !important; 
    168168}  
    169169.wp_themeSkin table.mceSplitButtonEnabled:hover a.mceAction { 
    170 background:#d6d8da; 
    171 border: 1px solid #7789ba !important; 
     170   background:#d6d8da; 
     171   border: 1px solid #7789ba !important; 
    172172} 
    173173.wp_themeSkin .mceSplitButton a.mceAction:hover { 
    174 background:#d6d8da; 
    175 border-collapse:separate; 
    176 border: 1px solid #7789ba !important; 
     174   background:#d6d8da; 
     175   border-collapse:separate; 
     176   border: 1px solid #7789ba !important; 
    177177} 
    178178.wp_themeSkin table.mceSplitButtonEnabled:hover span.mceOpen,  
     
    181181} 
    182182.wp_themeSkin .mceSplitButtonDisabled .mceAction { 
    183 opacity:0.3; filter:alpha(opacity=30) 
     183   opacity:0.3; filter:alpha(opacity=30) 
    184184} 
    185185.wp_themeSkin .mceSplitButtonActive { 
    186 background: #d6d8da; 
     186   background: #d6d8da; 
    187187} 
    188188.wp_themeSkin .mceListBox a.mceText, .wp_themeSkin .mceSplitButton a.mceAction { 
    189 -moz-border-radius-bottomleft: 3px; 
    190 -webkit-border-bottom-left-radius: 3px; 
    191 -khtml-border-bottom-left-radius: 3px; 
    192 border-bottom-left-radius: 3px; 
    193 -moz-border-radius-topleft: 3px; 
    194 -webkit-border-top-left-radius: 3px; 
    195 -khtml-border-top-left-radius: 3px; 
    196 border-top-left-radius: 3px; 
     189   -moz-border-radius-bottomleft: 3px; 
     190   -webkit-border-bottom-left-radius: 3px; 
     191   -khtml-border-bottom-left-radius: 3px; 
     192   border-bottom-left-radius: 3px; 
     193   -moz-border-radius-topleft: 3px; 
     194   -webkit-border-top-left-radius: 3px; 
     195   -khtml-border-top-left-radius: 3px; 
     196   border-top-left-radius: 3px; 
    197197} 
    198198.wp_themeSkin .mceSplitButton a.mceOpen, .wp_themeSkin .mceListBox a.mceOpen { 
    199 -moz-border-radius-bottomright: 3px; 
    200 -webkit-border-bottom-right-radius: 3px; 
    201 -khtml-border-bottom-right-radius: 3px; 
    202 border-bottom-right-radius: 3px; 
    203 -moz-border-radius-topright: 3px; 
    204 -webkit-border-top-right-radius: 3px; 
    205 -khtml-border-top-right-radius: 3px; 
    206 border-top-right-radius: 3px; 
     199   -moz-border-radius-bottomright: 3px; 
     200   -webkit-border-bottom-right-radius: 3px; 
     201   -khtml-border-bottom-right-radius: 3px; 
     202   border-bottom-right-radius: