Make WordPress Core

Ticket #17136: html.mode.2.diff

File html.mode.2.diff, 40.5 KB (added by koopersmith, 13 years ago)
  • wp-includes/js/tinymce/plugins/wplink/js/wplink.dev.js

     
    99                riverBottomThreshold: 5,
    1010                keySensitivity: 100,
    1111                lastSearch: '',
    12                 textarea: edCanvas,
     12                textarea: function() { return edCanvas; },
    1313
    1414                init : function() {
    1515                        inputs.dialog = $('#wp-link');
     
    4949                        wpLink.range = null;
    5050
    5151                        if ( ! wpLink.isMCE() && document.selection ) {
    52                                 wpLink.textarea.focus();
     52                                wpLink.textarea().focus();
    5353                                wpLink.range = document.selection.createRange();
    5454                        }
    5555                },
     
    127127
    128128                onClose: function() {
    129129                        if ( ! wpLink.isMCE() ) {
    130                                 wpLink.textarea.focus();
     130                                wpLink.textarea().focus();
    131131                                if ( wpLink.range ) {
    132132                                        wpLink.range.moveToBookmark( wpLink.range.getBookmark() );
    133133                                        wpLink.range.select();
     
    152152
    153153                htmlUpdate : function() {
    154154                        var attrs, html, start, end, cursor,
    155                                 textarea = wpLink.textarea;
     155                                textarea = wpLink.textarea();
    156156
    157157                        if ( ! textarea )
    158158                                return;
  • wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin.js

     
    1 (function(){tinymce.create("tinymce.plugins.wpFullscreenPlugin",{init:function(a,c){var d=this,g=0,e={},f=tinymce.DOM;a.addCommand("wpFullScreenClose",function(){if(a.getParam("wp_fullscreen_is_enabled")){f.win.setTimeout(function(){tinyMCE.remove(a);f.remove("wp_mce_fullscreen_parent");tinyMCE.settings=tinyMCE.oldSettings},10)}});a.addCommand("wpFullScreenSave",function(){var h=tinyMCE.get("wp_mce_fullscreen"),i;h.focus();i=tinyMCE.get(h.getParam("wp_fullscreen_editor_id"));i.setContent(h.getContent({format:"raw"}),{format:"raw"})});a.addCommand("wpFullScreenSaveContent",function(){a.execCommand("wpFullScreenSave");tinyMCE.triggerSave()});a.addCommand("wpFullScreenOpen",function(){var i=a.getDoc(),h=i.body;tinyMCE.oldSettings=tinyMCE.settings;tinymce.each(a.settings,function(j,k){e[k]=j});e.id="wp_mce_fullscreen";e.wp_fullscreen_is_enabled=true;e.wp_fullscreen_editor_id=a.id;e.theme_advanced_resizing=false;e.theme_advanced_toolbar_location="external";e.theme_advanced_statusbar_location="none";e.content_css=e.wp_fullscreen_content_css||"";e.height=tinymce.isIE?h.scrollHeight:h.offsetHeight;e.save_onsavecallback=function(){a.setContent(tinyMCE.get(e.id).getContent({format:"raw"}),{format:"raw"});a.execCommand("mceSave")};tinymce.each(a.getParam("wp_fullscreen_settings"),function(l,j){e[j]=l});d.fullscreenEditor=new tinymce.Editor("wp_mce_fullscreen",e);d.fullscreenEditor.onInit.add(function(){d.fullscreenEditor.setContent(a.getContent());d.fullscreenEditor.focus()});fullscreen.on();d.fullscreenEditor.render()});a.addButton("fullscreen",{title:"fullscreen.desc",cmd:"wpFullScreenOpen"});if(a.getParam("fullscreen_is_enabled")||!a.getParam("wp_fullscreen_is_enabled")){return}function b(){var k=a.getDoc(),h=k.body,m=k.documentElement,j=tinymce.DOM,l,i;if(tinymce.isIE){i=h.scrollHeight}else{if(tinymce.isWebKit){i=h.offsetHeight}else{i=m.offsetHeight}}l=(i>300)?i:300;if(g!=l){g=l;j.setStyle(j.get(a.id+"_ifr"),"height",l+"px")}}a.onInit.add(function(i,h){i.onChange.add(b);i.onSetContent.add(b);i.onPaste.add(b);i.onKeyUp.add(b);i.onPostRender.add(b);i.getBody().style.overflowY="hidden";i.dom.setStyle(i.getBody(),"paddingBottom",i.getParam("autoresize_bottom_margin",50)+"px")});if(a.getParam("autoresize_on_init",true)){a.onLoadContent.add(function(i,h){setTimeout(function(){b()},1200)})}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"WP Fullscreen",author:"WordPress",authorurl:"http://wordpress.org",infourl:"",version:"1.0"}}});tinymce.PluginManager.add("wpfullscreen",tinymce.plugins.wpFullscreenPlugin)})();
    2  No newline at end of file
     1(function(){tinymce.create("tinymce.plugins.wpFullscreenPlugin",{init:function(a,c){var d=this,g=0,e={},f=tinymce.DOM;a.addCommand("wpFullScreenClose",function(){if(a.getParam("wp_fullscreen_is_enabled")){f.win.setTimeout(function(){tinyMCE.remove(a);f.remove("wp_mce_fullscreen_parent");tinyMCE.settings=tinyMCE.oldSettings;tinyMCE.activeEditor.execCommand("wpFullScreenClosed")},10)}});a.addCommand("wpFullScreenClosed",function(){d.fullscreenEditor=null});a.addCommand("wpFullScreenSave",function(){var h=tinyMCE.get("wp_mce_fullscreen"),i;h.focus();i=tinyMCE.get(h.getParam("wp_fullscreen_editor_id"));i.setContent(h.getContent({format:"raw"}),{format:"raw"})});a.addCommand("wpFullScreenSaveContent",function(){a.execCommand("wpFullScreenSave");tinyMCE.triggerSave()});a.addCommand("wpFullScreenInit",function(){if(d.fullscreenEditor||a.id=="wp_mce_fullscreen"){return}var i=a.getDoc(),h=i.body;tinyMCE.oldSettings=tinyMCE.settings;tinymce.each(a.settings,function(j,k){e[k]=j});e.id="wp_mce_fullscreen";e.wp_fullscreen_is_enabled=true;e.wp_fullscreen_editor_id=a.id;e.theme_advanced_resizing=false;e.theme_advanced_toolbar_location="external";e.theme_advanced_statusbar_location="none";e.content_css=e.wp_fullscreen_content_css||"";e.height=tinymce.isIE?h.scrollHeight:h.offsetHeight;e.save_onsavecallback=function(){a.setContent(tinyMCE.get(e.id).getContent({format:"raw"}),{format:"raw"});a.execCommand("mceSave")};tinymce.each(a.getParam("wp_fullscreen_settings"),function(l,j){e[j]=l});d.fullscreenEditor=new tinymce.Editor("wp_mce_fullscreen",e);d.fullscreenEditor.onInit.add(function(){if(!fullscreen.visible&&fullscreen.mode()==="tinymce"){d.fullscreenEditor.setContent(a.getContent());d.fullscreenEditor.focus()}});d.fullscreenEditor.render()});a.addCommand("wpFullScreenOpen",function(){fullscreen.on("tinymce")});a.onInit.add(function(){if(!fullscreen.visible){return}if(a.id==="wp_mce_fullscreen"){fullscreen.mode("tinymce")}else{a.execCommand("wpFullScreenInit")}});if(a.id=="wp_mce_fullscreen"){setTimeout(function(){a.onNodeChange.add(function(j,h,k,i){tinymce.each(fullscreen.tinymce.commands,function(l,n){var o=h.get(n),m=fullscreen.Button(n);if(o){m.disabled(!!o.disabled);m.active(!!o.active)}})})},100)}a.addButton("fullscreen",{title:"fullscreen.desc",cmd:"wpFullScreenOpen"});if(a.getParam("fullscreen_is_enabled")||!a.getParam("wp_fullscreen_is_enabled")){return}function b(){var k=a.getDoc(),h=k.body,m=k.documentElement,j=tinymce.DOM,l,i;if(tinymce.isIE){i=h.scrollHeight}else{if(tinymce.isWebKit){i=h.offsetHeight}else{i=m.offsetHeight}}l=(i>300)?i:300;if(g!=l){g=l;j.setStyle(j.get(a.id+"_ifr"),"height",l+"px")}}a.onInit.add(function(i,h){i.onChange.add(b);i.onSetContent.add(b);i.onPaste.add(b);i.onKeyUp.add(b);i.onPostRender.add(b);i.getBody().style.overflowY="hidden";i.dom.setStyle(i.getBody(),"paddingBottom",i.getParam("autoresize_bottom_margin",50)+"px")});if(a.getParam("autoresize_on_init",true)){a.onLoadContent.add(function(i,h){setTimeout(function(){b()},1200)})}a.addCommand("mceAutoResize",b)},getInfo:function(){return{longname:"WP Fullscreen",author:"WordPress",authorurl:"http://wordpress.org",infourl:"",version:"1.0"}}});tinymce.PluginManager.add("wpfullscreen",tinymce.plugins.wpFullscreenPlugin)})();
     2 No newline at end of file
  • wp-includes/js/tinymce/plugins/wpfullscreen/editor_plugin.dev.js

     
    1818                                                tinyMCE.remove(ed);
    1919                                                DOM.remove('wp_mce_fullscreen_parent');
    2020                                                tinyMCE.settings = tinyMCE.oldSettings; // Restore old settings
     21                                                tinyMCE.activeEditor.execCommand('wpFullScreenClosed');
    2122                                        }, 10);
    2223                                }
    2324                        });
    24                        
     25
     26                        ed.addCommand('wpFullScreenClosed', function() {
     27                                t.fullscreenEditor = null;
     28                        });
     29
    2530                        ed.addCommand('wpFullScreenSave', function() {
    2631                                var ed = tinyMCE.get('wp_mce_fullscreen'), edd;
    2732
     
    3035
    3136                                edd.setContent( ed.getContent({format : 'raw'}), {format : 'raw'} );
    3237                        });
    33                        
     38
    3439                        ed.addCommand('wpFullScreenSaveContent', function() {
    3540                                ed.execCommand('wpFullScreenSave');
    3641                                tinyMCE.triggerSave();
    3742                        });
    38                        
    39                         ed.addCommand('wpFullScreenOpen', function() {
     43
     44                        ed.addCommand('wpFullScreenInit', function() {
     45                                // Only init the editor if necessary.
     46                                if ( t.fullscreenEditor || ed.id == 'wp_mce_fullscreen' )
     47                                        return;
     48
    4049                                var d = ed.getDoc(), b = d.body;
    4150
    4251                                tinyMCE.oldSettings = tinyMCE.settings; // Store old settings
     
    6473
    6574                                t.fullscreenEditor = new tinymce.Editor('wp_mce_fullscreen', s);
    6675                                t.fullscreenEditor.onInit.add(function() {
    67                                         t.fullscreenEditor.setContent(ed.getContent());
    68                                         t.fullscreenEditor.focus();
     76                                        if ( ! fullscreen.visible && fullscreen.mode() === 'tinymce' ) {
     77                                                t.fullscreenEditor.setContent( ed.getContent() );
     78                                                t.fullscreenEditor.focus();
     79                                        }
    6980                                });
    7081
    71                                 fullscreen.on();
    7282                                t.fullscreenEditor.render();
    7383                        });
    7484
     85                        ed.addCommand('wpFullScreenOpen', function() {
     86                                fullscreen.on('tinymce');
     87                        });
     88
     89                        ed.onInit.add( function() {
     90                                if ( ! fullscreen.visible )
     91                                        return;
     92
     93                                if ( ed.id === 'wp_mce_fullscreen' )
     94                                        fullscreen.mode('tinymce');
     95                                else
     96                                        ed.execCommand('wpFullScreenInit');
     97                        });
     98
     99                        if ( ed.id == 'wp_mce_fullscreen' ) {
     100                                // Ensure event is bound after theme events.
     101                                setTimeout( function() {
     102                                        // Keep external buttons in sync with tinymce buttons
     103                                        ed.onNodeChange.add( function( edi, cm, n, co ) {
     104                                                tinymce.each( fullscreen.tinymce.commands, function( v, key ) {
     105                                                        var control = cm.get( key ),
     106                                                                button  = fullscreen.Button( key );
     107
     108                                                        if ( control ) {
     109                                                                button.disabled( !! control.disabled );
     110                                                                button.active( !! control.active );
     111                                                        }
     112                                                });
     113                                        });
     114                                }, 100 );
     115                        }
     116
    75117                        // Register buttons
    76118                        ed.addButton('fullscreen', {title : 'fullscreen.desc', cmd : 'wpFullScreenOpen'});
    77119
     120
    78121                        // END fullscreen
    79122//----------------------------------------------------------------
    80123                        // START autoresize
  • wp-includes/js/quicktags.dev.js

     
    259259        }
    260260        document.write('<input type="button" id="ed_spell" class="ed_button" onclick="edSpell(edCanvas);" title="' + quicktagsL10n.dictionaryLookup + '" value="' + quicktagsL10n.lookup + '" />');
    261261        document.write('<input type="button" id="ed_close" class="ed_button" onclick="edCloseAllTags();" title="' + quicktagsL10n.closeAllOpenTags + '" value="' + quicktagsL10n.closeTags + '" />');
     262        document.write('<input type="button" id="ed_fullscreen" class="ed_button" onclick="fullscreen.on(\'html\');return false;" title="' + quicktagsL10n.toggleFullscreen + '" value="' + quicktagsL10n.fullscreen + '" />');
    262263//      edShowLinks(); // disabled by default
    263264        document.write('</div>');
    264265}
  • wp-includes/script-loader.php

     
    8686                'enterURL' => __('Enter the URL'),
    8787                'enterImageURL' => __('Enter the URL of the image'),
    8888                'enterImageDescription' => __('Enter a description of the image'),
     89                'fullscreen' => __('fullscreen'),
     90                'toggleFullscreen' => esc_attr( __('Toggle fullscreen mode') ),
    8991                'l10n_print_after' => 'try{convertEntities(quicktagsL10n);}catch(e){};'
    9092        ) );
    9193
     
    9395
    9496        $scripts->add( 'editor', "/wp-admin/js/editor$suffix.js", array('utils','jquery'), '20110411' );
    9597        $scripts->add_data( 'editor', 'group', 1 );
    96        
    97         $scripts->add( 'wp-fullscreen', "/wp-admin/js/wp-fullscreen$suffix.js", array('jquery'), '20110425a' );
     98
     99        $scripts->add( 'wp-fullscreen', "/wp-admin/js/wp-fullscreen$suffix.js", array('jquery'), '20110428' );
    98100        $scripts->add_data( 'wp-fullscreen', 'group', 1 );
     101        $scripts->localize( 'wp-fullscreen', 'fullscreenL10n', array(
     102                'bold' => __('Bold (Ctrl + B)'),
     103                'italic' => __('Italic (Ctrl + I)'),
     104                'bullist' => __('Unordered list (Alt + Shift + U)'),
     105                'numlist' => __('Ordered list (Alt + Shift + O)'),
     106                'image' => __('Insert/edit image (Alt + Shift + M)'),
     107                'link' => __('Insert/edit link (Alt + Shift + A)'),
     108                'unlink' => __('Unlink (Alt + Shift + S)'),
     109                'html' => __('HTML'),
     110                'visual' => __('Visual'),
     111                'l10n_print_after' => 'try{convertEntities(fullscreenL10n);}catch(e){};',
     112        ) );
    99113
    100114        $scripts->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.6.1');
    101115
     
    271285        $scripts->add( 'admin-bar', "/wp-includes/js/admin-bar$suffix.js", false, '20110131' );
    272286        $scripts->add_data( 'admin-bar', 'group', 1 );
    273287
    274         $scripts->add( 'wplink', "/wp-includes/js/tinymce/plugins/wplink/js/wplink$suffix.js", array( 'jquery', 'wpdialogs' ), '20110421' );
     288        $scripts->add( 'wplink', "/wp-includes/js/tinymce/plugins/wplink/js/wplink$suffix.js", array( 'jquery', 'wpdialogs' ), '20110428' );
    275289        $scripts->add_data( 'wplink', 'group', 1 );
    276290        $scripts->localize( 'wplink', 'wpLinkL10n', array(
    277291                'title' => __('Insert/edit link'),
  • wp-admin/includes/post.php

     
    17251725        $width = isset($content_width) && 800 > $content_width ? $content_width : 800;
    17261726        $width = $width + 10; // compensate for the padding
    17271727        $save = $post->post_status == 'publish' ? __('Update') : __('Save');
    1728 ?> 
     1728?>
    17291729<div id="wp-fullscreen-body">
    17301730<div id="fullscreen-topbar" class="fade-600">
    17311731        <div id="wp-fullscreen-info">
    17321732                <span id="wp-fullscreen-saved"> </span>
    17331733                <span class="autosave-message">&nbsp;</span>
    1734                 <span id="wp-fullscreen-last-edit"> </span> 
     1734                <span id="wp-fullscreen-last-edit"> </span>
    17351735        </div>
    17361736
    17371737        <div id="wp-fullscreen-toolbar">
    1738                 <div id="wp-fullscreen-close"><a href="#" onclick="fullscreen.off();return false;"><?php _e('Back'); ?></a></div>
    1739                 <div id="wp-fullscreen-save"><input type="button" class="button-primary" value="<?php echo $save; ?>" onclick="fullscreen.save();" /></div>
    1740                 <div id="wp-fullscreen-buttons" style="width:<?php echo $width; ?>px;" class="wp_themeSkin">
    1741                         <div>
    1742                         <a title="<?php _e('Bold (Ctrl + B)'); ?>" aria-labelledby="wp_fs_bold_voice" onclick="fullscreen.b();return false;" class="mceButton mceButtonEnabled mce_bold" href="javascript:;" id="wp_fs_bold" role="button" tabindex="-1" aria-pressed="false">
    1743                         <span class="mceIcon mce_bold"></span>
    1744                         <span id="wp_fs_bold_voice" style="display: none;" class="mceVoiceLabel mceIconOnly"><?php _e('Bold (Ctrl + B)'); ?></span>
    1745                         </a>
     1738                <div id="wp-fullscreen-resources" style="display:none;">
     1739                        <div id="wp-fullscreen-button-template" class="wp-fullscreen-button">
     1740                                <a class="mceButton mceButtonEnabled" href="javascript:;" role="button" tabindex="-1" aria-pressed="false">
     1741                                        <span class="mceIcon"></span>
     1742                                        <span style="display: none;" class="mceVoiceLabel mceIconOnly"></span>
     1743                                </a>
    17461744                        </div>
    1747 
    1748                         <div>
    1749                         <a title="<?php _e('Italic (Ctrl + I)'); ?>" aria-labelledby="wp_fs_italic_voice" onclick="fullscreen.i();return false;" class="mceButton mceButtonEnabled mce_italic" href="javascript:;" id="wp_fs_italic" role="button" tabindex="-1" aria-pressed="false">
    1750                         <span class="mceIcon mce_italic"></span>
    1751                         <span id="wp_fs_italic_voice" style="display: none;" class="mceVoiceLabel mceIconOnly"><?php _e('Italic (Ctrl + I)'); ?></span>
    1752                         </a>
     1745                        <div class="wp-fullscreen-separator">
     1746                                <span tabindex="-1" aria-orientation="vertical" role="separator" class="mceSeparator"></span>
    17531747                        </div>
     1748                </div>
    17541749
    1755                         <div>
    1756                         <span tabindex="-1" aria-orientation="vertical" role="separator" class="mceSeparator"></span>
    1757                         </div>
    1758 
    1759                         <div>
    1760                         <a title="<?php _e('Unordered list (Alt + Shift + U)'); ?>" aria-labelledby="wp_fs_bullist_voice" onclick="fullscreen.ul();return false;" onmousedown="return false;" class="mceButton mceButtonEnabled mce_bullist" href="javascript:;" id="wp_fs_bullist" role="button" tabindex="-1" aria-pressed="false">
    1761                         <span class="mceIcon mce_bullist"></span>
    1762                         <span id="wp_fs_bullist_voice" style="display: none;" class="mceVoiceLabel mceIconOnly"><?php _e('Unordered list (Alt + Shift + U)'); ?></span>
    1763                         </a>
    1764                         </div>
    1765 
    1766                         <div>
    1767                         <a title="<?php _e('Ordered list (Alt + Shift + O)'); ?>" aria-labelledby="wp_fs_numlist_voice" onclick="fullscreen.ol();return false;" class="mceButton mceButtonEnabled mce_numlist" href="javascript:;" id="wp_fs_numlist" role="button" tabindex="-1" aria-pressed="false">
    1768                         <span class="mceIcon mce_numlist"></span>
    1769                         <span id="wp_fs_numlist_voice" style="display: none;" class="mceVoiceLabel mceIconOnly"><?php _e('Ordered list (Alt + Shift + O)'); ?></span>
    1770                         </a>
    1771                         </div>
    1772 
    1773                         <div>
    1774                         <span tabindex="-1" aria-orientation="vertical" role="separator" class="mceSeparator"></span>
    1775                         </div>
    1776 
    1777                         <div>
    1778                         <a title="<?php _e('Insert/edit image (Alt + Shift + M)'); ?>" aria-labelledby="wp_fs_image_voice" onclick="jQuery('#add_image').click();return false;" class="mceButton mceButtonEnabled mce_image" href="javascript:;" id="wp_fs_image" role="button" tabindex="-1">
    1779                         <span class="mceIcon mce_image"></span>
    1780                         <span id="wp_fs_image_voice" style="display: none;" class="mceVoiceLabel mceIconOnly"><?php _e('Insert/edit image (Alt + Shift + M)'); ?></span>
    1781                         </a>
    1782                         </div>
    1783 
    1784                         <div>
    1785                         <span tabindex="-1" aria-orientation="vertical" role="separator" class="mceSeparator"></span>
    1786                         </div>
    1787 
    1788                         <div>
    1789                         <a title="<?php _e('Insert/edit link (Alt + Shift + A)'); ?>" aria-labelledby="wp_fs_link_voice" onclick="fullscreen.link();return false;" class="mceButton mce_link mceButtonEnabled" href="javascript:;" id="wp_fs_link" role="button" tabindex="-1" aria-pressed="false">
    1790                         <span class="mceIcon mce_link"></span>
    1791                         <span id="wp_fs_link_voice" style="display: none;" class="mceVoiceLabel mceIconOnly"><?php _e('Insert/edit link (Alt + Shift + A)'); ?></span>
    1792                         </a>
    1793                         </div>
    1794 
    1795                         <div>
    1796                         <a title="<?php _e('Unlink (Alt + Shift + S)'); ?>" aria-labelledby="wp_fs_unlink_voice" onclick="fullscreen.unlink();return false;" class="mceButton mce_unlink mceButtonEnabled" href="javascript:;" id="wp_fs_unlink" role="button" tabindex="-1" aria-pressed="false">
    1797                         <span class="mceIcon mce_unlink"></span>
    1798                         <span id="wp_fs_unlink_voice" style="display: none;" class="mceVoiceLabel mceIconOnly"><?php _e('Unlink (Alt + Shift + S)'); ?></span>
    1799                         </a>
    1800                         </div>
    1801 
     1750                <div id="wp-fullscreen-close"><a href="#" onclick="fullscreen.off();return false;"><?php _e('Back'); ?></a></div>
     1751                <div id="wp-fullscreen-save"><input type="button" class="button-primary" value="<?php echo $save; ?>" onclick="fullscreen.save();" /></div>
     1752                <div id="wp-fullscreen-central-toolbar" style="width:<?php echo $width; ?>px;">
     1753                        <div id="wp-fullscreen-mode-bar"><div id="wp-fullscreen-modes"></div></div>
     1754                        <div id="wp-fullscreen-button-bar"><div id="wp-fullscreen-buttons" class="wp_themeSkin"></div></div>
    18021755                        <div id="wp-fullscreen-count"><?php _e('Word Count:'); ?> <span class="word-count">0</span></div>
    18031756                </div>
    18041757        </div>
  • wp-admin/js/wp-fullscreen.dev.js

     
    11/**
    2  * PubSub -- A lightweight publish/subscribe implementation. Private use only!
     2 * PUBSUB
     3 *
     4 * A lightweight publish/subscribe implementation.
     5 * Private use only!
    36 */
    47var PubSub, fullscreen, wptitlehint;
    58
     
    3841};
    3942
    4043PubSub.prototype.publish = function( topic, args ) {
    41         var i, l,
     44        var i, l, broken,
    4245                topics = this.topics[ topic ];
    4346
    4447        if ( ! topics )
     
    4750        args = args || [];
    4851
    4952        for ( i = 0, l = topics.length; i < l; i++ ) {
    50                 topics[i].apply( null, args );
     53                broken = ( topics[i].apply( null, args ) === false || broken );
    5154        }
     55        return ! broken;
    5256};
    5357
    54 // Distraction Free Writing (wp-fullscreen) access the API globally using the fullscreen variable.
     58/**
     59 * FULLSCREEN
     60 *
     61 * Distraction free writing.
     62 * Access the API globally using the fullscreen variable.
     63 */
     64
    5565(function($){
    5666        var api, ps, bounder;
    5767
     
    97107        /**
    98108         * ON / OFF API
    99109         */
    100         api.on = function() {
    101                 if ( ! api.ui.element )
    102                         api.ui.init();
     110        /**
     111         * on()
     112         *
     113         * Turns fullscreen on.
     114         *
     115         * @param string mode Optional. Switch to the given mode before opening.
     116         */
     117        api.on = function( mode ) {
     118                if ( api.visible )
     119                        return;
    103120
    104                 if ( ! api.visible )
    105                         api.ui.fade( 'show', 'showing', 'shown' );
     121                api.mode( mode );
     122                api.ui.fade( 'show', 'showing', 'shown' );
    106123        };
    107124
     125        /**
     126         * off()
     127         *
     128         * Turns fullscreen off.
     129         */
    108130        api.off = function() {
    109                 if ( api.ui.element && api.visible )
    110                         api.ui.fade( 'hide', 'hiding', 'hidden' );
     131                if ( ! api.visible )
     132                        return;
     133
     134                api.ui.fade( 'hide', 'hiding', 'hidden' );
    111135        };
    112136
    113137        /**
     138         * MODE API
     139         */
     140        (function(){
     141                var mode = 'html';
     142
     143                /**
     144                 * mode()
     145                 *
     146                 * @return string - The fullscreen mode.
     147                 *
     148                 * mode( to )
     149                 *
     150                 * @param string to - The fullscreen mode to switch to.
     151                 * @event switchMode
     152                 * @eventparam string to   - The new mode.
     153                 * @eventparam string from - The old mode.
     154                 */
     155                api.mode = function( to ) {
     156                        if ( ! to )
     157                                return mode;
     158
     159                        var from = mode;
     160
     161                        // Don't switch if the mode is the same.
     162                        if ( mode == to )
     163                                return;
     164
     165                        // Only fire the switch event when visible.
     166                        if ( ! api.visible || ps.publish( 'switchMode', [ to, from ] ) ) {
     167                                mode = to;
     168                                ps.publish( 'switchedMode', [ to, from ] );
     169                        }
     170                };
     171        })();
     172
     173        /**
     174         * MODE TOGGLE BUTTONS
     175         */
     176        api.modes = {
     177                order: 'tinymce html',
     178                labels: {
     179                        html: fullscreenL10n.html,
     180                        tinymce: fullscreenL10n.visual
     181                },
     182                refresh: function( slug, label ) {
     183                        var modes = $('#wp-fullscreen-modes'),
     184                                slugs = api.modes.order.split(' ');
     185
     186                        modes.detach().children().detach().removeClass('active');
     187
     188                        $.each( slugs, function( i, slug ) {
     189                                modes.append( api.modes.element( slug ) );
     190                        });
     191
     192                        api.modes.element( api.mode() ).addClass('active');
     193
     194                        modes.appendTo('#wp-fullscreen-mode-bar');
     195                },
     196                _elements: {},
     197                element: function( slug ) {
     198                        if ( api.modes._elements[ slug ] )
     199                                return api.modes._elements[ slug ];
     200
     201                        var label = api.modes.labels[ slug ] || slug;
     202                                mode = $('<a href="javascript:;">' + label + '</a>');
     203
     204                        mode.click( function( e ) {
     205                                api.mode( slug );
     206                                e.preventDefault();
     207                        });
     208
     209                        return api.modes._elements[ slug ] = mode;
     210                }
     211        }
     212
     213        /**
    114214         * GENERAL
    115215         */
    116216
    117217        api.save = function() {
    118218                $('#title').val( $('#wp-fullscreen-title').val() );
    119                 tinyMCE.execCommand('wpFullScreenSaveContent');
     219
     220                if ( api.mode() === 'tinymce' )
     221                        tinyMCE.execCommand('wpFullScreenSaveContent');
     222
    120223                $('#hiddenaction').val('wp-fullscreen-save-post');
    121224
    122225                $.post( ajaxurl, $('form#post').serialize(), function(r){
     
    129232                }, 'json');
    130233        }
    131234
    132         set_title_hint = function(title) {
    133                 if ( !title.val().length )
     235        set_title_hint = function( title ) {
     236                if ( ! title.val().length )
    134237                        title.siblings('label').css( 'visibility', '' );
    135238                else
    136239                        title.siblings('label').css( 'visibility', 'hidden' );
     
    164267                        .bind( 'mousemove.fullscreen', function(e) { bounder( 'showToolbar', 'hideToolbar', 2500 ); } );
    165268        });
    166269
     270
     271        // This event occurs before the overlay blocks the UI.
    167272        ps.subscribe( 'show', function() {
     273                var textarea;
     274
     275                if ( ! api.textarea ) {
     276                        textarea = $('#wp_mce_fullscreen');
     277                        api.textarea = textarea[0];
     278                        api.grow( textarea );
     279                }
     280
     281                if ( api.mode() === 'tinymce' ) {
     282                        // Initialize the editor.
     283                        api.tinymce.editor();
     284
     285                } else if ( api.mode() === 'html' ) {
     286                        // Copy the content from the editor's textarea.
     287                        api.textarea.value = edCanvas.value;
     288                }
     289
     290                // Map the textarea to edCanvas, store the old edCanvas.
     291                api._edCanvas = edCanvas;
     292                edCanvas = api.textarea;
     293        });
     294
     295        // This event occurs while the overlay blocks the UI.
     296        ps.subscribe( 'showing', function() {
     297                // Update the fullscreen fields
    168298                var title = $('#wp-fullscreen-title').val( $('#title').val() );
    169                 this.set_title_hint(title);
     299                set_title_hint( title );
     300                $('#wp-fullscreen-last-edit').html( $('#last-edit').html() );
     301
     302                // Show the fullscreen UI
     303                $('#wp-fullscreen-body').show();
     304                $( document.body ).addClass( 'fullscreen-active' );
     305                api.buttons.refresh();
     306                api.modes.refresh();
     307
     308                // Bind toolbar fading events
    170309                $( document ).bind( 'mousemove.fullscreen', function(e) { bounder( 'showToolbar', 'hideToolbar', 2500 ); } );
     310                bounder( 'showToolbar', 'hideToolbar', 2500 );
    171311        });
    172312
     313        // This event occurs after the overlay blocks the UI.
     314        ps.subscribe( 'shown', function() {
     315                api.visible = true;
     316        });
     317
     318        // This event occurs before the overlay blocks the UI.
    173319        ps.subscribe( 'hide', function() {
    174                 var title = $('#title').val( $('#wp-fullscreen-title').val() );
    175                 this.set_title_hint(title);
    176                 tinyMCE.execCommand('wpFullScreenSave');
     320                if ( api.mode() === 'tinymce' )
     321                        tinyMCE.execCommand('wpFullScreenSave');
     322
     323                // Unbind all fullscreen events on the document (including mousemove)
    177324                $( document ).unbind( '.fullscreen' );
    178325        });
    179326
    180         ps.subscribe( 'showing', function() {
    181                 $('#wp-fullscreen-body').show();
    182                 $( document.body ).addClass( 'fullscreen-active' );
    183                 bounder( 'showToolbar', 'hideToolbar', 3000 );
    184                 $('#wp-fullscreen-last-edit').html( $('#last-edit').html() );
    185         });
     327        // This event occurs while the overlay blocks the UI.
     328        ps.subscribe( 'hiding', function() {
     329                var mode, title;
    186330
    187         ps.subscribe( 'hiding', function() {
     331                // Update the normal fields
     332                title = $('#title').val( $('#wp-fullscreen-title').val() );
     333                set_title_hint( title );
     334                $('#last-edit').html( $('#wp-fullscreen-last-edit').html() );
     335
     336                // Restore and update edCanvas.
     337                edCanvas = api._edCanvas;
     338                edCanvas.value = api.textarea.value;
     339
     340                // Hide the fullscreen UI
    188341                $('#wp-fullscreen-body').hide();
    189342                $( document.body ).removeClass( 'fullscreen-active' );
    190                 $('#last-edit').html( $('#wp-fullscreen-last-edit').html() );
    191         });
    192343
    193         ps.subscribe( 'shown', function() {
    194                 api.visible = true;
     344                // Destroy the tinyMCE editor if it has been instantiated.
     345                if ( tinyMCE ) // This should be run regardless of mode.
     346                        tinyMCE.execCommand('wpFullScreenClose');
     347
     348                // Clear the textarea.
     349                api.textarea.value = '';
     350
     351                // Make sure the correct editor is displaying.
     352                mode = api.mode();
     353                if ( mode == 'tinymce' || mode == 'html' )
     354                        switchEditors.go( 'content', mode );
    195355        });
    196356
     357        // This event occurs after the overlay blocks the UI.
    197358        ps.subscribe( 'hidden', function() {
    198359                api.visible = false;
     360
    199361                $('#wp_mce_fullscreen').removeAttr('style');
    200                 tinyMCE.execCommand('wpFullScreenClose');
    201362        });
    202363
     364        ps.subscribe( 'switchMode', function( to, from ) {
     365                var ed;
     366
     367                if ( to === 'tinymce' || from === 'tinymce' ) {
     368                        ed = api.tinymce.editor();
     369
     370                        // Don't switch modes if there was an error fetching the editor.
     371                        // If the editor is rendering, it will trigger the switch when initialized.
     372                        if ( ! ed )
     373                                return false;
     374                }
     375
     376                if ( from ==='html' && to === 'tinymce' ) {
     377                        api.textarea.value = switchEditors.wpautop( api.textarea.value );
     378                        ed.show();
     379                } else if ( from ==='tinymce' && to === 'html' ) {
     380                        ed.hide();
     381                }
     382        });
     383
     384        ps.subscribe( 'switchedMode', function( to, from ) {
     385                api.buttons.refresh();
     386                api.modes.refresh();
     387
     388                if ( to === 'html' )
     389                        api.grow.resize( api.textarea );
     390        });
     391
     392
    203393        /**
    204          * Buttons
     394         * BUTTONS
    205395         */
    206         api.b = function() {
    207                 tinyMCE.execCommand('Bold');
    208         }
     396        api.Button = function( slug ) {
     397                if ( ! ( this instanceof api.Button ) ) {
     398                        // Get the instance and create a new one if necessary.
     399                        if ( ! api.Button.buttons[ slug ] )
     400                                api.Button.buttons[ slug ] = new api.Button( slug );
     401                        return api.Button.buttons[ slug ];
     402                }
    209403
    210         api.i = function() {
    211                 tinyMCE.execCommand('Italic');
    212         }
     404                this.slug   = slug;
     405                this.action = {};
    213406
    214         api.ul = function() {
    215                 tinyMCE.execCommand('InsertUnorderedList');
    216         }
     407                api.Button.buttons[ slug ] = this;
     408        };
    217409
    218         api.ol = function() {
    219                 tinyMCE.execCommand('InsertOrderedList');
    220         }
     410        api.Button.buttons = {};
    221411
    222         api.link = function() {
    223                 tinyMCE.execCommand('WP_Link');
    224         }
     412        $.extend( api.Button.prototype, {
     413                set: function( modes, callback ) {
     414                        var self = this;
     415                        if ( typeof modes === 'string' )
     416                                modes = [ modes ];
     417                        $.each( modes, function( i, mode ) {
     418                                self.action[ mode ] = callback;
     419                        });
     420                },
     421                get: function( mode ) {
     422                        return this.action[ mode ];
     423                },
     424                run: function() {
     425                        var callback = this.get( api.mode() );
    225426
    226         api.unlink = function() {
    227                 tinyMCE.execCommand('unlink');
     427                        if ( ! this.disabled() && callback )
     428                                return callback();
     429                },
     430                element: function( element ) {
     431                        var self = this;
     432                        if ( ! element ) {
     433                                if ( ! this._element )
     434                                        this.elementTemplate();
     435                                return this._element;
     436                        }
     437
     438                        this._element = element.detach();
     439                        // Ensure the proper classes are set.
     440                        $.each([ 'disabled', 'active' ], function( i, fn ) {
     441                                self[ fn ]( self[ fn ]() );
     442                        });
     443                        // Run when the element clicked.
     444                        element.click( function( e ) {
     445                                self.run();
     446                                e.preventDefault();
     447                        });
     448                },
     449
     450                elementTemplate: function() {
     451                        if ( ! api.Button.template || ! api.Button.template.length )
     452                                return;
     453
     454                        var slug  = this.slug,
     455                                el    = api.Button.template.clone(),
     456                                a     = el.children('a'),
     457                                label = fullscreenL10n[ slug ] || '';
     458
     459                        el.attr( 'id', 'wp-fs-button-' + slug );
     460                        a.addClass( 'mce_' + slug ).attr({
     461                                title: label,
     462                                'aria-labelledby': 'wp-fs-voice-' + slug
     463                        });
     464                        a.children('.mceIcon').addClass( 'mce_' + slug );
     465                        a.children('.mceVoiceLabel').attr( 'id', 'wp-fs-voice-' + slug ).text( label );
     466
     467                        this.element( el );
     468                }
     469        });
     470
     471        $(document).ready( function() {
     472                api.Button.template = $('#wp-fullscreen-button-template');
     473        });
     474
     475        /**
     476         * Create disabled and active functions.
     477         *
     478         * These functions act as getters/setters.
     479         * They also toggle the appropriate classnames on the element.
     480         */
     481        $.each([ 'disabled', 'active' ], function( i, fn ) {
     482                var key = '_' + fn;
     483
     484                api.Button.prototype[ fn ] = function( change ) {
     485                        if ( typeof change == 'undefined' )
     486                                return this[ key ];
     487
     488                        this[ key ] = !! change;
     489
     490                        if ( this.element() )
     491                                this.element().toggleClass( fn, this[ key ] );
     492                };
     493        });
     494
     495        api.buttons = {
     496                order: {
     497                        tinymce: 'bold italic | bullist numlist | image | link unlink',
     498                        html: 'image link'
     499                },
     500                refresh: function() {
     501                        var toolbar = $('#wp-fullscreen-buttons'),
     502                                sep     = $('#wp-fullscreen-resources .wp-fullscreen-separator'),
     503                                order   = api.buttons.order[ api.mode() ] || '',
     504                                slugs   = order.split(' ');
     505
     506                        if ( ! toolbar.length )
     507                                return;
     508
     509                        // Detach the toolbar from the DOM.
     510                        toolbar.detach();
     511                        // Remove separators
     512                        toolbar.children('.wp-fullscreen-separator').remove();
     513                        // Detach old buttons
     514                        toolbar.children().detach();
     515
     516                        // Arrange current buttons
     517                        $.each( slugs, function( i, slug ) {
     518                                var button;
     519
     520                                // A pipe indicates a separator
     521                                if ( slug == '|' ) {
     522                                        toolbar.append( sep.clone() );
     523                                // Otherwise attempt to fetch the element and append it.
     524                                } else {
     525                                        button = api.Button( slug );
     526                                        button.disabled( false );
     527                                        button.active( false );
     528
     529                                        if ( button.element() )
     530                                                toolbar.append( button.element() );
     531                                }
     532                        });
     533
     534                        // Add the toolbar back to the DOM
     535                        toolbar.prependTo('#wp-fullscreen-button-bar');
     536                }
    228537        }
    229538
    230539        /**
    231          * UI elements (used for transitioning)
     540         * TINYMCE
    232541         */
    233         api.ui = {
     542        api.tinymce = {
     543
    234544                /**
    235                  * Undefined api.ui properties:
    236                  * element, topbar
     545                 * editor()
     546                 *
     547                 * Fetches the fullscreen TinyMCE editor.
     548                 *
     549                 * Checks for errors.
     550                 * Will initialize the editor if necessary.
     551                 *
     552                 * @return false | tinymce.Editor
    237553                 */
     554                editor: function() {
     555                        var ed;
    238556
     557                        if ( ! tinyMCE )
     558                                return false;
     559
     560                        ed = tinyMCE.get('wp_mce_fullscreen');
     561
     562                        if ( ed ) {
     563                                return ed;
     564                        } else if ( tinyMCE.activeEditor ) {
     565                                tinyMCE.activeEditor.execCommand('wpFullScreenInit');
     566                        } else {
     567                                switchEditors.go( 'content', 'tinymce' );
     568                        }
     569
     570                        return false;
     571                },
     572
     573                commands: {
     574                        bold:    'Bold',
     575                        italic:  'Italic',
     576                        bullist: 'InsertUnorderedList',
     577                        numlist: 'InsertOrderedList',
     578                        link:    'WP_Link',
     579                        unlink:  'unlink'
     580                }
     581        };
     582
     583        $.each( api.tinymce.commands, function( key, command ) {
     584                api.Button( key ).set( 'tinymce', function() { tinyMCE.execCommand( command ); });
     585        });
     586
     587        api.Button('link').set( 'html', function() { wpLink.open(); });
     588        api.Button('image').set([ 'html', 'tinymce' ], function() {
     589                $('#add_image').click();
     590        });
     591
     592        /**
     593         * UI ELEMENTS
     594         *
     595         * Used for transitioning between states.
     596         *
     597         * Undeclared api.ui properties: element, topbar
     598         */
     599        api.ui = {
    239600                init: function() {
    240                         var topbar = api.ui.topbar  = $('#fullscreen-topbar');
     601                        var topbar = api.ui.topbar = $('#fullscreen-topbar');
    241602                        api.ui.element = $('#fullscreen-fader');
    242603
    243604                        if ( wptitlehint )
     
    254615                },
    255616
    256617                fade: function( before, during, after ) {
    257                         if ( before )
    258                                 ps.publish( before );
     618                        if ( ! api.ui.element )
     619                                api.ui.init();
    259620
     621                        // If any callback bound to before returns false, bail.
     622                        if ( before && ! ps.publish( before ) )
     623                                return;
     624
    260625                        api.fade.In( api.ui.element, 600, function() {
    261626                                if ( during )
    262627                                        ps.publish( during );
     
    332697                })()
    333698        };
    334699
    335         /*
    336         api.editor = function() {
    337                 return $('#content, #content_ifr').filter(':visible');
     700
     701        /**
     702         * GROW API
     703         *
     704         * Automatically updates textarea height.
     705         */
     706        api.grow = function( element ) {
     707                element = element.filter( 'textarea:not[.grow]' );
     708                element.addClass( 'grow' ).css({
     709                        overflow: 'hidden',
     710                        resize: 'none'
     711                });
     712                element.bind( 'keydown.grow keypress.grow focus.grow', api.grow.resizeEvent );
     713
     714                element.each( function() {
     715                        var t = $(this);
     716
     717                        // Ensure a minHeight is set. Default to the height.
     718                        if ( ! this.style.minHeight && this.style.minHeight !== 0 )
     719                                this.style.minHeight = this.style.height;
     720
     721                        t.bind( 'grow', function() {
     722                                // If the textarea causes the window's scrollbars, remember the offset.
     723                                // Otherwise, the scrollbars will jump when we revert to minHeight.
     724                                var scroll = api.grow.window.scrollTop();
     725
     726                                // Set to the minHeight so the textarea shrinks appropriately.
     727                                textarea.style.height = textarea.style.minHeight;
     728
     729                                if ( textarea.scrollHeight > textarea.clientHeight )
     730                                        textarea.style.height = textarea.scrollHeight + 'px';
     731
     732                                api.grow.window.scrollTop( scroll );
     733                        });
     734
     735                        // Initial resize.
     736                        if ( t.is(':visible') )
     737                                api.grow.resize( this );
     738                });
     739
     740                return element;
    338741        };
    339         */
    340742
     743        api.grow.window = $(window);
     744
     745        api.grow.resizeEvent = function( e ) {
     746                var textarea = this;
     747                setTimeout( function() {
     748                        api.grow.resize( textarea );
     749                }, 1 );
     750        };
     751
     752        api.grow.resize = function( textarea ) {
     753                // If the textarea causes the window's scrollbars, remember the offset.
     754                // Otherwise, the scrollbars will jump when we revert to minHeight.
     755                var scroll = api.grow.window.scrollTop();
     756
     757                // Set to the minHeight so the textarea shrinks appropriately.
     758                textarea.style.height = textarea.style.minHeight;
     759
     760                if ( textarea.scrollHeight > textarea.clientHeight )
     761                        textarea.style.height = textarea.scrollHeight + 'px';
     762
     763                api.grow.window.scrollTop( scroll );
     764        };
     765
    341766})(jQuery);
  • wp-admin/css/wp-admin.dev.css

     
    657657        width: 100%;
    658658        min-height: 300px;
    659659        border: 0;
     660        background: transparent;
     661        line-height: 1.6em;
     662        padding: 0;
     663        outline: none;
     664        resize: none;
    660665}
    661666
    662667/* =Top bar
     
    672677        min-width: 800px;
    673678        width: 100%;
    674679        height: 62px;
    675         background: #d9d9d9;
    676         background: -moz-linear-gradient(bottom,  #d7d7d7,  #e4e4e4);
    677         background: -webkit-gradient(linear, left bottom, left top, from(#d7d7d7), to(#e4e4e4));
     680        background-color: #d9d9d9;
     681        background-image: -moz-linear-gradient(bottom,  #d7d7d7,  #e4e4e4);
     682        background-image: -webkit-gradient(linear, left bottom, left top, from(#d7d7d7), to(#e4e4e4));
    678683}
    679684
    680685#wp-fullscreen-toolbar {
     
    682687        clear: both;
    683688}
    684689
     690#wp-fullscreen-mode-bar,
     691#wp-fullscreen-button-bar,
    685692#wp-fullscreen-close {
    686693        float: left;
    687694}
    688695
    689696#wp-fullscreen-save,
    690 #wp-fullscreen-buttons #wp-fullscreen-count {
     697#wp-fullscreen-count {
    691698        float: right;
    692699}
    693700
     
    701708        padding: 3px 10px;
    702709}
    703710
    704 #wp-fullscreen-buttons {
     711#wp-fullscreen-central-toolbar {
    705712        margin: auto;
    706713        padding: 0;
    707714}
     
    710717        float: left;
    711718}
    712719
     720#wp-fullscreen-mode-bar {
     721        padding-right: 14px;
     722}
     723#wp-fullscreen-modes a {
     724        display: block;
     725        font-size: 11px;
     726        text-decoration: none;
     727        float: left;
     728        margin: 1px 0 0 0;
     729        padding: 2px 6px 2px;
     730        border-width: 1px 1px 1px 0;
     731        border-style: solid;
     732        border-color: #bbb;
     733        color: #777;
     734        text-shadow: 0 1px 0 #fff;
     735        background-color: #f4f4f4;
     736        background-image: -moz-linear-gradient(bottom,  #e4e4e4,  #f9f9f9);
     737        background-image: -webkit-gradient(linear, left bottom, left top, from(#e4e4e4), to(#f9f9f9));
     738}
     739#wp-fullscreen-modes a:hover,
     740#wp-fullscreen-modes .active {
     741        color: #333;
     742        border-color: #999;
     743        background-color: #eee;
     744        background-image: -moz-linear-gradient(bottom,  #f9f9f9,  #e0e0e0);
     745        background-image: -webkit-gradient(linear, left bottom, left top, from(#f9f9f9), to(#e0e0e0));
     746}
     747#wp-fullscreen-modes a:first-child {
     748        border-width: 1px;
     749        -moz-border-radius: 4px 0 0 4px;
     750        -webkit-border-top-left-radius: 4px;
     751        -webkit-border-bottom-left-radius: 4px;
     752        -khtml-border-top-left-radius: 4px;
     753        -khtml-border-bottom-left-radius: 4px;
     754        border-top-left-radius: 4px;
     755        border-bottom-left-radius: 4px;
     756}
     757#wp-fullscreen-modes a:last-child {
     758        -moz-border-radius: 0 4px 4px 0;
     759        -webkit-border-top-right-radius: 4px;
     760        -webkit-border-bottom-right-radius: 4px;
     761        -khtml-border-top-right-radius: 4px;
     762        -khtml-border-bottom-right-radius: 4px;
     763        border-top-right-radius: 4px;
     764        border-bottom-right-radius: 4px;
     765}
     766
     767
     768#wp-fullscreen-buttons .active a {
     769        background: inherit;
     770}
     771
     772#wp-fullscreen-buttons .hidden {
     773        display: none;
     774}
     775
     776#wp-fullscreen-buttons .disabled {
     777        opacity: 0.5;
     778}
     779
    713780/* =Thickbox Adjustments
    714781-------------------------------------------------------------- */
    715782.fullscreen-active #TB_overlay {
     
    40764143        margin: 20px 0;
    40774144}
    40784145
    4079 .pressthis a { 
     4146.pressthis a {
    40804147        display: inline-block;
    40814148        width: 113px;
    40824149        position: relative;
     
    40964163                rgb(216,216,216) 77%
    40974164        );
    40984165        background-repeat: no-repeat;
    4099         background-image-position: 10px 8px;   
     4166        background-image-position: 10px 8px;
    41004167        border-radius: 5px;
    41014168        -webkit-border-radius: 5px;
    41024169        -moz-border-radius: 5px;
    4103         -o-border-radius: 5px; 
     4170        -o-border-radius: 5px;
    41044171        border: 1px #b4b4b4 solid;
    4105         font: normal normal normal 14px/16px Georgia, "Times New Roman", "Bitstream Charter", Times, serif;     
     4172        font: normal normal normal 14px/16px Georgia, "Times New Roman", "Bitstream Charter", Times, serif;
    41064173        text-decoration: none;
    41074174        text-shadow: #fff 0 1px 0px;
    41084175        -webkit-text-shadow: #fff 0 1px 0px;
     
    41194186        transform: skew(20deg) rotate(9deg);
    41204187        -webkit-transform: skew(20deg) rotate(9deg);
    41214188        -moz-transform: skew(20deg) rotate(9deg);
    4122         box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); 
    4123         -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); 
    4124         -moz-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7); 
     4189        box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7);
     4190        -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7);
     4191        -moz-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.7);
    41254192}
    41264193
    41274194.pressthis a span {
    4128         background: url(../images/press-this.png) no-repeat 10px 7px ; 
     4195        background: url(../images/press-this.png) no-repeat 10px 7px ;
    41294196        padding: 8px 0 8px 32px;
    41304197        display: inline-block;
    41314198}
    41324199
    4133 .pressthis a:after { 
    4134         content: ''; 
    4135         width: 70%; 
     4200.pressthis a:after {
     4201        content: '';
     4202        width: 70%;
    41364203        height: 55%;
    4137         z-index: -1; 
    4138         position: absolute; 
    4139         right: 10px; 
    4140         bottom: 9px; 
    4141         background: transparent; 
     4204        z-index: -1;
     4205        position: absolute;
     4206        right: 10px;
     4207        bottom: 9px;
     4208        background: transparent;
    41424209        transform: skew(20deg) rotate(6deg);
    41434210        -webkit-transform: skew(20deg) rotate(6deg);
    41444211        -moz-transform: skew(20deg) rotate(6deg);
    4145         box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); 
    4146         -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); 
    4147         -moz-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6); 
    4148 } 
     4212        box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6);
     4213        -webkit-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6);
     4214        -moz-box-shadow: 0 10px 8px rgba(0, 0, 0, 0.6);
     4215}
    41494216
    41504217
    41514218/*------------------------------------------------------------------------------