Make WordPress Core

Changeset 6789


Ignore:
Timestamp:
02/11/2008 05:45:18 PM (19 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.