From 3536577bcbc908dbfd26d8b74696ce3da30bf48b Mon Sep 17 00:00:00 2001
From: alecpl <alec@alec.pl>
Date: Mon, 13 Jul 2009 07:22:28 -0400
Subject: [PATCH] - improve responsiveness by flushing template output asap, also set the \Seen flag after message page display
---
program/include/rcube_html_page.php | 92 +++++++++++++++++-----------------------------
1 files changed, 34 insertions(+), 58 deletions(-)
diff --git a/program/include/rcube_html_page.php b/program/include/rcube_html_page.php
index 676d1fb..6a19703 100644
--- a/program/include/rcube_html_page.php
+++ b/program/include/rcube_html_page.php
@@ -1,10 +1,11 @@
<?php
+
/*
+-----------------------------------------------------------------------+
| program/include/rcube_html_page.php |
| |
| This file is part of the RoundCube PHP suite |
- | Copyright (C) 2005-2008, RoundCube Dev. - Switzerland |
+ | Copyright (C) 2005-2009, RoundCube Dev. - Switzerland |
| Licensed under the GNU GPL |
| |
| CONTENTS: |
@@ -22,25 +23,26 @@
* Class for HTML page creation
*
* @package HTML
- *
- * @author Thomas Bruederli <roundcube@gmail.com>
- * @license http://gnu.org GPL
- * @todo See about improving performance (__get, __set, sprintf)
*/
class rcube_html_page
{
- protected $_store = array();
+ protected $scripts_path = '';
+ protected $script_files = array();
+ protected $scripts = array();
+ protected $charset = RCMAIL_CHARSET;
- /**
- * Constructor
- *
- * @return rcube_html_page
- * @uses self::reset()
- */
- public function __construct()
- {
- $this->reset();
- }
+ protected $script_tag_file = "<script type=\"text/javascript\" src=\"%s\"></script>\n";
+ protected $script_tag = "<script type=\"text/javascript\">\n/* <![CDATA[ */\n%s\n/* ]]> */\n</script>";
+ protected $default_template = "<html>\n<head><title></title></head>\n<body></body>\n</html>";
+
+ protected $title = '';
+ protected $header = '';
+ protected $footer = '';
+ protected $body = '';
+
+
+ /** Constructor */
+ public function __construct() {}
/**
* Link an external script file
@@ -51,6 +53,9 @@
public function include_script($file, $position='head')
{
static $sa_files = array();
+
+ if (!preg_match('|^https?://|i', $file) && $file[0] != '/')
+ $file = $this->scripts_path . $file . (($fs = @filemtime($this->scripts_path . $file)) ? '?s='.$fs : '');
if (in_array($file, $sa_files)) {
return;
@@ -120,26 +125,11 @@
/**
* Reset all saved properties
- *
- * @return void
- * @see self::__construct
- * @uses self::$_store
*/
public function reset()
{
- $this->scripts_path = '';
$this->script_files = array();
- $this->external_scripts = array();
$this->scripts = array();
- $this->charset = 'UTF-8';
-
- // templates
- $this->script_tag_file = "<script type=\"text/javascript\" src=\"%s%s\"></script>\n";
- $this->script_tag = "<script type=\"text/javascript\">\n<!--\n%s\n\n//-->\n</script>\n";
- $this->default_template = "<html>\n<head><title></title></head>\n<body></body>\n</html>";
- $this->tag_format_external_script = "<script type=\"text/javascript\" src=\"%s\"></script>\n";
-
- // page stuff
$this->title = '';
$this->header = '';
$this->footer = '';
@@ -178,7 +168,7 @@
// definition of the code to be placed in the document header and footer
if (is_array($this->script_files['head'])) {
foreach ($this->script_files['head'] as $file) {
- $__page_header .= sprintf($this->script_tag_file, $this->scripts_path, $file);
+ $__page_header .= sprintf($this->script_tag_file, $file);
}
}
@@ -193,7 +183,7 @@
if (is_array($this->script_files['foot'])) {
foreach ($this->script_files['foot'] as $file) {
- $__page_footer .= sprintf($this->script_tag_file, $this->scripts_path, $file);
+ $__page_footer .= sprintf($this->script_tag_file, $file);
}
}
@@ -259,36 +249,22 @@
$__page_header = $__page_footer = '';
// correct absolute paths in images and other tags
- $output = preg_replace('/(src|href|background)=(["\']?)(\/[a-z0-9_\-]+)/Ui', "\\1=\\2$base_path\\3", $output);
+ $output = preg_replace('!(src|href|background)=(["\']?)(/[a-z0-9_-]+)!i', "\\1=\\2$base_path\\3", $output);
+ $output = preg_replace_callback('!(src|href)=(["\']?)([a-z0-9/_.-]+.(css|js))(["\'\s>])!i', array($this, 'add_filemtime'), $output);
$output = str_replace('$__skin_path', $base_path, $output);
- echo rcube_charset_convert($output, 'UTF-8', $this->charset);
+ if ($this->charset != RCMAIL_CHARSET)
+ echo rcube_charset_convert($output, RCMAIL_CHARSET, $this->charset);
+ else
+ echo $output;
}
-
+
/**
- * __get
- *
- * @param string $var A variable name.
- *
- * @return mixed
- * @uses self::$_store
+ * Callback function for preg_replace_callback in write()
*/
- public function __get($var)
+ public function add_filemtime($matches)
{
- return $this->_store[$var];
- }
-
- /**
- * __set
- *
- * @param string $var A variable name.
- * @param mixed $value The value of the variable.
- *
- * @return mixed
- * @uses self::$_store
- */
- public function __set($var, $value)
- {
- return $this->_store[$var] = $value;
+ return sprintf("%s=%s%s?s=%d%s", $matches[1], $matches[2], $matches[3], @filemtime($matches[3]), $matches[5]);
}
}
+
--
Gitblit v1.9.1