WordPress.org

Make WordPress Core

Changeset 6789


Ignore:
Timestamp:
02/11/08 17:45:18 (6 years ago)
Author:
ryan
Message:

New gzip compressor for TinyMCE from azaozz. fixes #5807

Location:
trunk/wp-includes
Files:
5 edited

Legend:

Unmodified
Added
Removed
  • trunk/wp-includes/default-filters.php

    r6712 r6789  
    144144add_filter('option_home', '_config_wp_home'); 
    145145add_filter('option_siteurl', '_config_wp_siteurl'); 
    146 add_filter('mce_plugins', '_mce_load_rtl_plugin'); 
    147 add_filter('mce_buttons', '_mce_add_direction_buttons'); 
     146add_filter('tiny_mce_before_init', '_mce_set_direction'); 
    148147add_filter('pre_kses', 'wp_pre_kses_less_than'); 
    149148add_filter('sanitize_title', 'sanitize_title_with_dashes'); 
     
    174173add_action('sanitize_comment_cookies', 'sanitize_comment_cookies'); 
    175174add_action('admin_print_scripts', 'wp_print_scripts', 20); 
    176 add_action('mce_options', '_mce_set_direction'); 
    177175add_action('init', 'smilies_init', 5); 
    178176add_action( 'plugins_loaded', 'wp_maybe_load_widgets', 0 ); 
  • trunk/wp-includes/functions.php

    r6786 r6789  
    13831383 
    13841384 
    1385 function _mce_set_direction() { 
     1385function _mce_set_direction( $input ) { 
    13861386    global $wp_locale; 
    13871387 
    13881388    if ( 'rtl' == $wp_locale->text_direction ) { 
    1389         echo 'directionality : "rtl" ,'; 
    1390         echo 'theme_advanced_toolbar_align : "right" ,'; 
    1391     } 
    1392 } 
    1393  
    1394  
    1395 function _mce_load_rtl_plugin( $input ) { 
    1396     global $wp_locale; 
    1397  
    1398     if ( 'rtl' == $wp_locale->text_direction ) 
    1399         $input[] = 'directionality'; 
    1400  
    1401     return $input; 
    1402 } 
    1403  
    1404  
    1405 function _mce_add_direction_buttons( $input ) { 
    1406     global $wp_locale; 
    1407  
    1408     if ( 'rtl' == $wp_locale->text_direction ) { 
    1409         $new_buttons = array( 'separator', 'ltr', 'rtl' ); 
    1410         $input = array_merge( $input, $new_buttons ); 
     1389        $input['directionality'] = 'rtl'; 
     1390        $input['theme_advanced_toolbar_align'] = 'right'; 
     1391        $input['plugins'] .= ',directionality'; 
     1392        $input['theme_advanced_buttons2'] .= ',|,ltr,rtl'; 
    14111393    } 
    14121394 
  • trunk/wp-includes/js/tinymce/tiny_mce_config.php

    r6765 r6789  
    1 <?php 
    2     @ require('../../../wp-config.php'); 
    3     cache_javascript_headers(); 
    4  
    5     // deprecated 
    6     function wp_translate_tinymce_lang($text) { 
    7         if ( ! function_exists('__') ) { 
    8             return $text; 
    9         } else { 
    10             $search1 = "/^tinyMCELang\\[(['\"])(.*)\\1\]( ?= ?)(['\"])(.*)\\4/Uem"; 
    11             $replace1 = "'tinyMCELang[\\1\\2\\1]\\3'.stripslashes('\\4').__('\\5').stripslashes('\\4')"; 
    12  
    13             $search2 = "/ : (['\"])(.*)\\1/Uem"; 
    14             $replace2 = "' : '.stripslashes('\\1').__('\\2').stripslashes('\\1')"; 
    15  
    16             $search = array($search1, $search2); 
    17             $replace = array($replace1, $replace2); 
    18  
    19             $text = preg_replace($search, $replace, $text); 
    20  
    21             return $text; 
     1<?php  
     2// some code below is from: 
     3/** 
     4 * $Id: tiny_mce_gzip.php 315 2007-10-25 14:03:43Z spocke $ 
     5 * 
     6 * @author Moxiecode 
     7 * @copyright Copyright © 2005-2006, Moxiecode Systems AB, All rights reserved. 
     8 * 
     9 * This file compresses the TinyMCE JavaScript using GZip. 
     10 **/ 
     11   
     12@ require('../../../wp-config.php'); 
     13 
     14function getFileContents($path) { 
     15    $path = realpath($path); 
     16 
     17    if ( ! $path || ! @is_file($path) ) 
     18        return ''; 
     19 
     20    if ( function_exists('file_get_contents') ) 
     21        return @file_get_contents($path); 
     22 
     23    $content = ''; 
     24    $fp = @fopen($path, 'r'); 
     25    if ( ! $fp ) 
     26        return ''; 
     27 
     28    while ( ! feof($fp) ) 
     29        $content .= fgets($fp); 
     30 
     31    fclose($fp); 
     32    return $content; 
     33} 
     34 
     35function putFileContents( $path, $content ) { 
     36    if ( function_exists('file_put_contents') ) 
     37        return @file_put_contents( $path, $content ); 
     38 
     39    $fp = @fopen( $path, 'wb' ); 
     40    if ($fp) { 
     41        fwrite( $fp, $content ); 
     42        fclose($fp); 
     43    } 
     44} 
     45 
     46// Set up init variables 
     47$https = ( isset($_SERVER['HTTPS']) && 'on' == $_SERVER['HTTPS'] ) ? true : false; 
     48     
     49$baseurl = get_option('siteurl') . '/wp-includes/js/tinymce'; 
     50$baseurl = $https ? str_replace('http://', 'https://', $baseurl) : $baseurl; 
     51 
     52$mce_css = $baseurl . '/wordpress.css'; 
     53$mce_css = apply_filters('mce_css', $mce_css); 
     54$mce_css = $https ? str_replace('http://', 'https://', $mce_css) : $mce_css; 
     55 
     56$valid_elements = '*[*]'; 
     57$valid_elements = apply_filters('mce_valid_elements', $valid_elements); 
     58     
     59$invalid_elements = apply_filters('mce_invalid_elements', ''); 
     60 
     61$plugins = array( 'safari', 'inlinepopups', 'autosave', 'spellchecker', 'paste', 'wordpress', 'media', 'fullscreen' ); 
     62 
     63/*  
     64The following filter takes an associative array of external plugins for TinyMCE in the form "name" => "url". 
     65It adds the plugin's name (including the required dash) to TinyMCE's plugins init and the call to PluginManager to load the plugin.  
     66The url should be absolute and should include the js file name to be loaded.  
     67Example: array( 'myplugin' => 'http://my-site.com/wp-content/plugins/myfolder/mce_plugin.js' ).  
     68If the plugin uses a button, it should be added with one of the "$mce_buttons" filters. 
     69*/ 
     70$mce_external_plugins = apply_filters('mce_external_plugins', array());  
     71 
     72$ext_plugins = "\n"; 
     73foreach ( $mce_external_plugins as $name => $url ) { 
     74    $plugins[] = '-' . $name; 
     75    $url = $https ? str_replace('http://', 'https://', $url) : $url; 
     76     
     77    $ext_plugins .= 'tinymce.PluginManager.load("' . $name . '", "' . $url . '");' . "\n"; 
     78} 
     79 
     80$plugins = implode($plugins, ','); 
     81 
     82$mce_buttons = apply_filters('mce_buttons', array('bold', 'italic', 'strikethrough', '|', 'bullist', 'numlist', 'outdent', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', '|', 'link', 'unlink', 'image', 'wp_more', '|', 'spellchecker', '|', 'wp_help', 'wp_adv' )); 
     83$mce_buttons = implode($mce_buttons, ','); 
     84 
     85$mce_buttons_2 = apply_filters('mce_buttons_2', array('formatselect', 'underline', 'justifyfull', 'forecolor', '|', 'pastetext', 'pasteword', '|', 'removeformat', 'cleanup', '|', 'media', 'charmap', 'blockquote', '|', 'undo', 'redo', 'fullscreen' )); 
     86$mce_buttons_2 = implode($mce_buttons_2, ','); 
     87 
     88$mce_buttons_3 = apply_filters('mce_buttons_3', array()); 
     89$mce_buttons_3 = implode($mce_buttons_3, ','); 
     90     
     91$mce_buttons_4 = apply_filters('mce_buttons_4', array()); 
     92$mce_buttons_4 = implode($mce_buttons_4, ','); 
     93 
     94// all these browsers are now 100% supported, no need for this 
     95//$mce_browsers = apply_filters('mce_browsers', array('msie', 'gecko', 'opera', 'safari')); 
     96//$mce_browsers = implode($mce_browsers, ','); 
     97 
     98$mce_locale = ( '' == get_locale() ) ? 'en' : strtolower( substr(get_locale(), 0, 2) ); // only ISO 639-1 
     99 
     100// TinyMCE init settings 
     101$initArray = array ( 
     102    'mode' => 'none', 
     103    'onpageload' => 'wpEditorInit', 
     104    'width' => '100%', 
     105    'theme' => 'advanced', 
     106    'skin' => 'wp_theme', 
     107    'theme_advanced_buttons1' => "$mce_buttons", 
     108    'theme_advanced_buttons2' => "$mce_buttons_2", 
     109    'theme_advanced_buttons3' => "$mce_buttons_3", 
     110    'theme_advanced_buttons4' => "$mce_buttons_4", 
     111    'language' => "$mce_locale", 
     112    'theme_advanced_toolbar_location' => 'top', 
     113    'theme_advanced_toolbar_align' => 'left', 
     114    'theme_advanced_statusbar_location' => 'bottom', 
     115    'theme_advanced_resizing' => true, 
     116    'theme_advanced_resize_horizontal' => false, 
     117//  'browsers' => "$mce_browsers", 
     118    'dialog_type' => 'modal', 
     119    'convert_urls' => false, 
     120    'relative_urls' => false, 
     121    'remove_script_host' => false, 
     122    'fix_list_elements' => true, 
     123    'fix_table_elements' => true, 
     124    'gecko_spellcheck' => true, 
     125    'entities' => '38,amp,60,lt,62,gt', 
     126    'accessibility_focus' => false, 
     127    'tab_focus' => ':next', 
     128    'content_css' => "$mce_css", 
     129    'save_callback' => 'switchEditors.saveCallback', 
     130    'plugins' => "$plugins", 
     131    // pass-through the settings for compression and caching, so they can be changed with "tiny_mce_before_init" 
     132    'disk_cache' => true, 
     133    'compress' => true, 
     134    'del_old_cache' => true 
     135); 
     136 
     137if ( $valid_elements ) $initArray['valid_elements'] = $valid_elements; 
     138if ( $invalid_elements ) $initArray['invalid_elements'] = $invalid_elements; 
     139 
     140// For people who really REALLY know what they're doing with TinyMCE 
     141// You can modify initArray to add, remove, change elements of the config before tinyMCE.init 
     142$initArray = apply_filters('tiny_mce_before_init', $initArray); // changed from action to filter 
     143 
     144// support for deprecated actions 
     145ob_start(); 
     146do_action('mce_options'); 
     147$mce_deprecated1 = ob_get_contents() || ''; 
     148ob_end_clean(); 
     149 
     150/* 
     151// Do we need to support this? Most likely will breal TinyMCE 3... 
     152ob_start(); 
     153do_action('tinymce_before_init'); 
     154$mce_deprecated2 = ob_get_contents() || ''; 
     155ob_end_clean(); 
     156*/ 
     157 
     158// Settings for the gzip compression and cache 
     159$cache_path = dirname(__FILE__); // Cache path, this is where the .gz files will be stored 
     160$cache_ext = '.js'; 
     161 
     162$disk_cache = ( ! isset($initArray['disk_cache']) || false == $initArray['disk_cache'] ) ? false : true; 
     163$compress = ( ! isset($initArray['compress']) || false == $initArray['compress'] ) ? false : true; 
     164$del_old_cache = ( ! isset($initArray['del_old_cache']) || false == $initArray['del_old_cache'] ) ? false : true; 
     165 
     166$initArray['disk_cache'] = $initArray['compress'] = $initArray['del_old_cache'] = null; 
     167unset( $initArray['disk_cache'], $initArray['compress'], $initArray['del_old_cache'] ); 
     168 
     169$plugins = explode( ',', $initArray['plugins'] ); 
     170$theme = ( 'simple' == $initArray['theme'] ) ? 'simple' : 'advanced'; 
     171$language = isset($initArray['language']) ? substr( $initArray['language'], 0, 2 ) : 'en'; 
     172$enc = $cacheKey = $suffix = $mce_options = '';  
     173 
     174// Custom extra javascripts to pack 
     175$custom_js = array(); //$custom_js = apply_filters('tinymce_custom_js', array()); 
     176 
     177// Check if supports gzip 
     178if ( $compress && isset($_SERVER['HTTP_ACCEPT_ENCODING']) ) { 
     179    $encodings = explode( ',', strtolower( preg_replace('/\s+/', '', $_SERVER['HTTP_ACCEPT_ENCODING']) ) ); 
     180 
     181    if ( (in_array('gzip', $encodings) || in_array('x-gzip', $encodings) || isset($_SERVER['---------------']) ) && function_exists('ob_gzhandler') && !ini_get('zlib.output_compression') ) { 
     182        $enc = in_array('x-gzip', $encodings) ? 'x-gzip' : 'gzip'; 
     183        $cache_ext = '.gz'; 
     184    } 
     185} 
     186 
     187// Setup cache info 
     188if ( $disk_cache && $cache_path ) { 
     189 
     190    $ver = isset($_GET['ver']) ? (int) $_GET['ver'] : ''; 
     191    $cacheKey = $initArray['plugins'] . $language . $theme . $suffix . $ver; 
     192 
     193    foreach ( $custom_js as $file ) 
     194        $cacheKey .= $file; 
     195 
     196    $cacheKey = md5( $cacheKey ); 
     197    $cache_file = $cache_path . '/tiny_mce_' . $cacheKey . $cache_ext; 
     198} 
     199 
     200cache_javascript_headers(); 
     201 
     202// Use cached file if exists 
     203if ( $disk_cache && file_exists($cache_file) ) { 
     204    if ( '.gz' == $cache_ext ) 
     205        header( 'Content-Encoding: ' . $enc ); 
     206 
     207    echo getFileContents( $cache_file ); 
     208    exit; 
     209} 
     210 
     211foreach ( $initArray as $k => $v )  
     212    $mce_options .= $k . ':"' . $v . '", '; 
     213 
     214$mce_options .= $mce_deprecated1; 
     215$mce_options = rtrim( trim($mce_options), '\n\r,' ); 
     216 
     217$content = 'var tinyMCEPreInit = { suffix : "' . $suffix . '", base : "' . $baseurl . '" };'; 
     218$content .= 'var tinyMCE_GZ = { settings : { themes : "' . $theme . '", plugins : "' . $initArray['plugins'] . '", languages : "' . $language . '", debug : false, suffix : "' . $suffix . '" }, baseURL : "' . $baseurl . '" };'; 
     219 
     220// Load patch 
     221$content .= getFileContents( 'tiny_mce_ext.js' ); 
     222 
     223// Add core 
     224$content .= getFileContents( 'tiny_mce' . $suffix . '.js' ); 
     225 
     226// Patch loading functions 
     227$content .= 'tinyMCE_GZ.start();'; 
     228 
     229// Add all languages (WP) 
     230include_once( dirname(__FILE__).'/langs/wp-langs.php' ); 
     231$content .= $strings; 
     232 
     233// Add themes 
     234$content .= getFileContents( 'themes/' . $theme . '/editor_template' . $suffix . '.js' ); 
     235 
     236// Add plugins 
     237foreach ( $plugins as $plugin )  
     238    $content .= getFileContents( 'plugins/' . $plugin . '/editor_plugin' . $suffix . '.js' ); 
     239 
     240// Add custom files 
     241foreach ( $custom_js as $file ) 
     242    $content .= getFileContents($file); 
     243 
     244// Add external plugins and init  
     245$content .= $ext_plugins . 'tinyMCE.init({' . $mce_options . '});'; // $mce_deprecated2 .  
     246 
     247// Generate GZIP'd content 
     248if ( '.gz' == $cache_ext ) { 
     249    header('Content-Encoding: ' . $enc); 
     250    $cache_data = gzencode( $content, 9, FORCE_GZIP ); 
     251} else 
     252    $cache_data = $content; 
     253 
     254// Stream to client 
     255echo $cache_data; 
     256 
     257// Write file 
     258if ( '' != $cacheKey ) { 
     259    if ( $del_old_cache ) { 
     260        $old_key = getFileContents('tiny_mce_compressed_key'); 
     261             
     262        if ( '' != $old_key ) { //  && $old_key != $cacheKey 
     263            $old_cache = $cache_path . '/tiny_mce_' . $old_key . $cache_ext; 
     264            @unlink($old_cache); 
    22265        } 
     266             
     267        putFileContents( 'tiny_mce_compressed_key', $cacheKey ); 
    23268    } 
    24  
    25     // Set up init variables 
    26     $valid_elements = '*[*]'; 
    27     $valid_elements = apply_filters('mce_valid_elements', $valid_elements); 
    28  
    29     $invalid_elements = apply_filters('mce_invalid_elements', ''); 
    30  
    31     $plugins = array( 'safari', 'inlinepopups', 'autosave', 'spellchecker', 'paste', 'wordpress', 'media', 'fullscreen' ); 
    32     $plugins = apply_filters('mce_plugins', $plugins); 
    33     $plugins = implode($plugins, ','); 
    34  
    35     $mce_buttons = apply_filters('mce_buttons', array('bold', 'italic', 'strikethrough', '|', 'bullist', 'numlist', 'outdent', 'indent', '|', 'justifyleft', 'justifycenter', 'justifyright', '|', 'link', 'unlink', 'image', 'wp_more', '|', 'spellchecker', '|', 'wp_help', 'wp_adv' )); 
    36     $mce_buttons = implode($mce_buttons, ','); 
    37  
    38  
    39     $mce_buttons_2 = apply_filters('mce_buttons_2', array('formatselect', 'underline', 'justifyfull', 'forecolor', '|', 'pastetext', 'pasteword', '|', 'removeformat', 'cleanup', '|', 'media', 'charmap', 'blockquote', '|', 'undo', 'redo', 'fullscreen' )); 
    40     $mce_buttons_2 = implode($mce_buttons_2, ','); 
    41  
    42     $mce_buttons_3 = apply_filters('mce_buttons_3', array()); 
    43     $mce_buttons_3 = implode($mce_buttons_3, ','); 
    44  
    45     $mce_buttons_4 = apply_filters('mce_buttons_4', array()); 
    46     $mce_buttons_4 = implode($mce_buttons_4, ','); 
    47  
    48     $mce_browsers = apply_filters('mce_browsers', array('msie', 'gecko', 'opera', 'safari')); 
    49     $mce_browsers = implode($mce_browsers, ','); 
    50  
    51     $mce_css = get_option('siteurl') . '/wp-includes/js/tinymce/wordpress.css'; 
    52     $mce_css = apply_filters('mce_css', $mce_css); 
    53     if ( $_SERVER['HTTPS'] == 'on' ) 
    54         $mce_css = str_replace('http://', 'https://', $mce_css); 
    55  
    56     $mce_locale = ( '' == get_locale() ) ? 'en' : strtolower( substr(get_locale(), 0, 2) ); // only ISO 639-1 
     269         
     270    putFileContents( $cache_file, $cache_data ); 
     271} 
    57272?> 
    58  
    59 initArray = { 
    60     mode : "none", 
    61     onpageload : "wpEditorInit", 
    62     width : "100%", 
    63     theme : "advanced", 
    64     skin : "wp_theme", 
    65     theme_advanced_buttons1 : "<?php echo $mce_buttons; ?>", 
    66     theme_advanced_buttons2 : "<?php echo $mce_buttons_2; ?>", 
    67     theme_advanced_buttons3 : "<?php echo $mce_buttons_3; ?>", 
    68     theme_advanced_buttons4 : "<?php echo $mce_buttons_4; ?>", 
    69     language : "<?php echo $mce_locale; ?>", 
    70     theme_advanced_toolbar_location : "top", 
    71     theme_advanced_toolbar_align : "left", 
    72     theme_advanced_statusbar_location : "bottom", 
    73     theme_advanced_resizing : true, 
    74     browsers : "<?php echo $mce_browsers; ?>", 
    75     dialog_type : "modal", 
    76     theme_advanced_resize_horizontal : false, 
    77     convert_urls : false, 
    78     relative_urls : false, 
    79     remove_script_host : false, 
    80     fix_list_elements : true, 
    81     fix_table_elements : true, 
    82     gecko_spellcheck : true, 
    83     entities : "38,amp,60,lt,62,gt", 
    84     accessibility_focus : false, 
    85     tab_focus : ":next", 
    86     content_css : "<?php echo $mce_css; ?>", 
    87     <?php if ( $valid_elements ) echo 'valid_elements : "' . $valid_elements . '",' . "\n"; ?> 
    88     <?php if ( $invalid_elements ) echo 'invalid_elements : "' . $invalid_elements . '",' . "\n"; ?> 
    89     save_callback : "switchEditors.saveCallback", 
    90 <?php do_action('mce_options'); ?> 
    91     plugins : "<?php echo $plugins; ?>" 
    92 }; 
    93  
    94 <?php 
    95     // For people who really REALLY know what they're doing with TinyMCE 
    96     // You can modify initArray to add, remove, change elements of the config before tinyMCE.init 
    97     do_action('tinymce_before_init'); 
    98 ?> 
    99  
    100 tinyMCE_GZ.init(initArray); 
  • trunk/wp-includes/js/tinymce/tiny_mce_gzip.php

    r6765 r6789  
    1 <?php 
    2 /** Based on: 
    3  * $Id: tiny_mce_gzip.php 315 2007-10-25 14:03:43Z spocke $ 
    4  * 
    5  * @author Moxiecode 
    6  * @copyright Copyright © 2005-2006, Moxiecode Systems AB, All rights reserved. 
    7  * 
    8  * This file compresses the TinyMCE JavaScript using GZip and 
    9  * enables the browser to do two requests instead of one for each .js file. 
    10  * Notice: This script defaults the button_tile_map option to true for extra performance. 
    11  */ 
    12  
    13 @require_once('../../../wp-config.php');  // For get_bloginfo(). 
    14 cache_javascript_headers(); 
    15  
    16 if ( isset($_GET['load']) ) { 
    17  
    18     function getParam( $name, $def = false ) { 
    19         if ( ! isset($_GET[$name]) ) 
    20             return $def; 
    21  
    22         return preg_replace( "/[^0-9a-z\-_,]+/i", "", $_GET[$name] ); // Remove anything but 0-9,a-z,-_ 
    23     } 
    24  
    25     function getFileContents($path) { 
    26         $path = realpath($path); 
    27  
    28         if ( ! $path || !@is_file($path) ) 
    29             return ''; 
    30  
    31         if ( function_exists('file_get_contents') ) 
    32             return @file_get_contents($path); 
    33  
    34         $content = ''; 
    35         $fp = @fopen( $path, 'r' ); 
    36         if (!$fp) 
    37             return ''; 
    38  
    39         while ( ! feof($fp) ) 
    40             $content .= fgets($fp); 
    41  
    42         fclose($fp); 
    43  
    44         return $content; 
    45     } 
    46  
    47     function putFileContents( $path, $content ) { 
    48         if ( function_exists('file_put_contents') ) 
    49             return @file_put_contents( $path, $content ); 
    50  
    51         $fp = @fopen($path, 'wb'); 
    52         if ($fp) { 
    53             fwrite($fp, $content); 
    54             fclose($fp); 
    55         } 
    56     } 
    57  
    58     // WP defaults 
    59     $themes = explode( ',', getParam('themes', 'advanced') ); 
    60  
    61     $language = getParam( 'languages', 'en' ); 
    62     $language = strtolower( substr($language, 0, 2) ); // only ISO 639-1 
    63  
    64     $plugins = explode( ',', getParam('plugins', '') ); 
    65     $cachePath = realpath('.'); // Cache path, this is where the .gz files will be stored 
    66  
    67     $encodings = array(); 
    68     $supportsGzip = $diskCache = false; 
    69     $compress = $core = true; 
    70     $suffix = $content = $enc = $cacheKey = ''; 
    71  
    72     // Custom extra javascripts to pack 
    73     // WP - add a hook for external plugins to be compressed too? 
    74     $custom = array(/* 
    75         'some custom .js file', 
    76         'some custom .js file' 
    77     */); 
    78  
    79     // Setup cache info 
    80     if ( $diskCache ) { 
    81         if ( ! $cachePath ) 
    82             die('Real path failed.'); 
    83  
    84         $cacheKey = getParam( 'plugins', '' ) . getParam( 'languages', '' ) . getParam( 'themes', '' ) . $suffix; 
    85  
    86         foreach ( $custom as $file ) 
    87             $cacheKey .= $file; 
    88  
    89         $cacheKey = md5($cacheKey); 
    90  
    91         if ( $compress ) 
    92             $cacheFile = $cachePath . '/tiny_mce_' . $cacheKey . '.gz'; 
    93         else 
    94             $cacheFile = $cachePath . '/tiny_mce_' . $cacheKey . '.js'; 
    95     } 
    96  
    97     // Check if it supports gzip 
    98     if ( isset( $_SERVER['HTTP_ACCEPT_ENCODING'] ) ) 
    99         $encodings = explode(',', strtolower(preg_replace( '/\s+/', '', $_SERVER['HTTP_ACCEPT_ENCODING']) ) ); 
    100  
    101     if ( ( in_array('gzip', $encodings ) || in_array( 'x-gzip', $encodings ) || isset($_SERVER['---------------']) ) && function_exists( 'ob_gzhandler' ) && ! ini_get('zlib.output_compression') ) { 
    102         $enc = in_array( 'x-gzip', $encodings ) ? 'x-gzip' : 'gzip'; 
    103         $supportsGzip = true; 
    104     } 
    105  
    106     // Use cached file disk cache 
    107     if ( $diskCache && $supportsGzip && file_exists($cacheFile) ) { 
    108         if ( $compress ) 
    109             header('Content-Encoding: ' . $enc); 
    110  
    111         echo getFileContents( $cacheFile ); 
    112         die(); 
    113     } 
    114  
    115     // Add core 
    116     if ( $core == 'true' ) { 
    117         $content .= getFileContents( 'tiny_mce' . $suffix . '.js' ); 
    118  
    119         // Patch loading functions 
    120         $content .= 'tinyMCE_GZ.start();'; 
    121     } 
    122  
    123     // Add all languages (WP) 
    124     include_once( dirname(__file__).'/langs/wp-langs.php' ); 
    125     $content .= $strings; 
    126  
    127     // Add themes 
    128     foreach ( $themes as $theme )  
    129         $content .= getFileContents( 'themes/' . $theme . '/editor_template' . $suffix . '.js' ); 
    130      
    131     // Add plugins 
    132     foreach ( $plugins as $plugin )  
    133         $content .= getFileContents( 'plugins/' . $plugin . '/editor_plugin' . $suffix . '.js' ); 
    134  
    135     // Add custom files 
    136     foreach ( $custom as $file ) 
    137         $content .= getFileContents($file); 
    138  
    139     // Restore loading functions 
    140     if ( $core == 'true' ) 
    141         $content .= 'tinyMCE_GZ.end();'; 
    142  
    143     // Generate GZIP'd content 
    144     if ( $supportsGzip ) { 
    145         if ( $compress ) { 
    146             header('Content-Encoding: ' . $enc); 
    147             $cacheData = gzencode( $content, 9, FORCE_GZIP ); 
    148         } else 
    149             $cacheData = $content; 
    150  
    151         // Write gz file 
    152         if ( $diskCache && '' != $cacheKey ) 
    153             putFileContents( $cacheFile, $cacheData ); 
    154  
    155         // Stream to client 
    156         echo $cacheData; 
    157     } else { 
    158         // Stream uncompressed content 
    159         echo $content; 
    160     } 
    161  
    162     exit; 
    163 } 
    164 ?> 
    165  
    166 var tinyMCEPreInit = {suffix : ''}; 
    167  
    168 var tinyMCE_GZ = { 
    169     settings : { 
    170         themes : '', 
    171         plugins : '', 
    172         languages : '', 
    173         disk_cache : false, 
    174         page_name : 'tiny_mce_gzip.php', 
    175         debug : false, 
    176         suffix : '' 
    177     }, 
    178  
    179     opt : {}, 
    180  
    181     init : function(o, cb) { 
    182         var t = this, n, s = t.settings, nl = document.getElementsByTagName('script'); 
    183  
    184         t.opt = o; 
    185  
    186         s.themes = o.theme; 
    187         s.plugins = o.plugins;  
    188         s.languages = o.language; 
    189         t.settings = s; 
    190  
    191         t.cb = cb || ''; 
    192  
    193         for (i=0; i<nl.length; i++) { 
    194             n = nl[i]; 
    195  
    196             if (n.src && n.src.indexOf('tiny_mce') != -1) 
    197                 t.baseURL = n.src.substring(0, n.src.lastIndexOf('/')); 
    198         } 
    199         tinyMCEPreInit.base = t.baseURL; 
    200          
    201         if (!t.coreLoaded) 
    202             t.loadScripts(1, s.themes, s.plugins, s.languages); 
    203     }, 
    204  
    205     loadScripts : function(co, th, pl, la, cb, sc) { 
    206         var t = this, x, w = window, q, c = 0, ti, s = t.settings; 
    207  
    208         function get(s) { 
    209             x = 0; 
    210  
    211             try { 
    212                 x = new ActiveXObject(s); 
    213             } catch (s) { 
    214             } 
    215  
    216             return x; 
    217         }; 
    218  
    219         // Build query string 
    220         q = 'load=true&js=true&diskcache=' + (s.disk_cache ? 'true' : 'false') + '&core=' + (co ? 'true' : 'false') + '&suffix=' + escape(s.suffix) + '&themes=' + escape(th) + '&plugins=' + escape(pl) + '&languages=' + escape(la); 
    221  
    222         if (co) 
    223             t.coreLoaded = 1; 
    224  
    225     //  document.write('<sc'+'ript language="javascript" type="text/javascript" src="' + t.baseURL + '/' + s.page_name + '?' + q + '"></script>'); 
    226  
    227         // Send request 
    228         x = w.XMLHttpRequest ? new XMLHttpRequest() : get('Msxml2.XMLHTTP') || get('Microsoft.XMLHTTP'); 
    229         x.overrideMimeType && x.overrideMimeType('text/javascript'); 
    230         x.open('GET', t.baseURL + '/' + s.page_name + '?' + q, !!cb); 
    231 //      x.setRequestHeader('Content-Type', 'text/javascript'); 
    232         x.send(''); 
    233  
    234         // Handle asyncronous loading 
    235         if (cb) { 
    236             // Wait for response 
    237             ti = w.setInterval(function() { 
    238                 if (x.readyState == 4 || c++ > 10000) { 
    239                     w.clearInterval(ti); 
    240  
    241                     if (c < 10000 && x.status == 200) { 
    242                         t.loaded = 1; 
    243                         t.eval(x.responseText); 
    244                         tinymce.dom.Event.domLoaded = true; 
    245                     //  cb.call(sc || t, x); 
    246                     } 
    247  
    248                     ti = x = null; 
    249                 } 
    250             }, 10); 
    251         } else 
    252             t.eval(x.responseText); 
    253     }, 
    254  
    255     start : function() { 
    256         var t = this, each = tinymce.each, s = t.settings, sl, ln = s.languages.split(','); 
    257  
    258         tinymce.suffix = s.suffix; 
    259  
    260         // Extend script loader 
    261         tinymce.create('tinymce.compressor.ScriptLoader:tinymce.dom.ScriptLoader', { 
    262             loadScripts : function(sc, cb, s) { 
    263                 var ti = this, th = [], pl = [], la = []; 
    264  
    265                 each(sc, function(o) { 
    266                     var u = o.url; 
    267  
    268                     if ((!ti.lookup[u] || ti.lookup[u].state != 2) && u.indexOf(t.baseURL) === 0) { 
    269                         // Collect theme 
    270                         if (u.indexOf('editor_template') != -1) { 
    271                             th.push(/\/themes\/([^\/]+)/.exec(u)[1]); 
    272                             load(u, 1); 
    273                         } 
    274  
    275                         // Collect plugin 
    276                         if (u.indexOf('editor_plugin') != -1) { 
    277                             pl.push(/\/plugins\/([^\/]+)/.exec(u)[1]); 
    278                             load(u, 1); 
    279                         } 
    280  
    281                         // Collect language 
    282                         if (u.indexOf('/langs/') != -1) { 
    283                             la.push(/\/langs\/([^.]+)/.exec(u)[1]); 
    284                             load(u, 1); 
    285                         } 
    286                     } 
    287                 }); 
    288  
    289                 if (th.length + pl.length + la.length > 0) { 
    290                     if (sl.settings.strict_mode) { 
    291                         // Async 
    292                         t.loadScripts(0, th.join(','), pl.join(','), la.join(','), cb, s); 
    293                         return; 
    294                     } else 
    295                         t.loadScripts(0, th.join(','), pl.join(','), la.join(','), cb, s); 
    296                 } 
    297  
    298                 return ti.parent(sc, cb, s); 
    299             } 
    300         }); 
    301  
    302         sl = tinymce.ScriptLoader = new tinymce.compressor.ScriptLoader(); 
    303  
    304         function load(u, sp) { 
    305             var o; 
    306  
    307             if (!sp) 
    308                 u = t.baseURL + u; 
    309  
    310             o = {url : u, state : 2}; 
    311             sl.queue.push(o); 
    312             sl.lookup[o.url] = o; 
    313         }; 
    314  
    315         // Add core languages 
    316         each (ln, function(c) { 
    317             if (c) 
    318                 load('/langs/' + c + '.js'); 
    319         }); 
    320  
    321         // Add themes with languages 
    322         each(s.themes.split(','), function(n) { 
    323             if (n) { 
    324                 load('/themes/' + n + '/editor_template' + s.suffix + '.js'); 
    325  
    326                 each (ln, function(c) { 
    327                     if (c) 
    328                         load('/themes/' + n + '/langs/' + c + '.js'); 
    329                 }); 
    330             } 
    331         }); 
    332  
    333         // Add plugins with languages 
    334         each(s.plugins.split(','), function(n) { 
    335             if (n) { 
    336                 load('/plugins/' + n + '/editor_plugin' + s.suffix + '.js'); 
    337  
    338                 each (ln, function(c) { 
    339                     if (c) 
    340                         load('/plugins/' + n + '/langs/' + c + '.js'); 
    341                 }); 
    342             } 
    343         }); 
    344     }, 
    345  
    346     end : function() { 
    347        tinyMCE.init(this.opt); 
    348     }, 
    349  
    350     eval : function(co) { 
    351         var w = window; 
    352  
    353         // Evaluate script 
    354         if (!w.execScript) { 
    355             try { 
    356                 eval.call(w, co); 
    357             } catch (ex) { 
    358                 eval(co, w); // Firefox 3.0a8 
    359             } 
    360         } else 
    361             w.execScript(co); // IE 
    362     } 
    363 }; 
  • trunk/wp-includes/script-loader.php

    r6770 r6789  
    3131 
    3232        // Modify this version when tinyMCE plugins are changed 
    33         $this->add( 'tiny_mce', '/wp-includes/js/tinymce/tiny_mce_gzip.php', false, '20080208' ); 
    34  
    3533        $mce_config = apply_filters('tiny_mce_config_url', '/wp-includes/js/tinymce/tiny_mce_config.php'); 
    36         $this->add( 'wp_tiny_mce', $mce_config, array('tiny_mce'), '20080208' ); 
     34        $this->add( 'tiny_mce', $mce_config, false, '20080209' ); 
    3735         
    3836        $this->add( 'prototype', '/wp-includes/js/prototype.js', false, '1.6'); 
     
    479477// These localizations require information that may not be loaded even by init 
    480478function wp_just_in_time_script_localization() { 
    481     wp_localize_script( 'wp_tiny_mce', 'wpTinyMCEConfig', array( 'defaultEditor' => wp_default_editor() ) ); 
     479    wp_localize_script( 'tiny_mce', 'wpTinyMCEConfig', array( 'defaultEditor' => wp_default_editor() ) ); 
    482480} 
    483481 
Note: See TracChangeset for help on using the changeset viewer.