summaryrefslogtreecommitdiff
path: root/program/include
diff options
context:
space:
mode:
authorthomascube <thomas@roundcube.net>2007-09-29 18:15:05 +0000
committerthomascube <thomas@roundcube.net>2007-09-29 18:15:05 +0000
commit97bd2c0537bc3edb3751b3020f37e680944ac41c (patch)
tree3845f62069bbfc9ddb67447f07e504f0f455077a /program/include
parentca2b4ddfcc7a506925c9d5b3a798a4c74147c2e1 (diff)
Filter linked/imported CSS files (#1484056)
Diffstat (limited to 'program/include')
-rw-r--r--program/include/main.inc45
-rw-r--r--program/include/rcube_shared.inc4
2 files changed, 49 insertions, 0 deletions
diff --git a/program/include/main.inc b/program/include/main.inc
index 9809865d4..db0ee6c07 100644
--- a/program/include/main.inc
+++ b/program/include/main.inc
@@ -29,6 +29,7 @@
require_once('lib/des.inc');
require_once('lib/utf7.inc');
require_once('lib/utf8.class.php');
+require_once('include/rcube_shared.inc');
require_once('include/rcmail_template.inc');
@@ -1450,6 +1451,50 @@ function rcmail_mail_domain($host)
/**
+ * Replace all css definitions with #container [def]
+ *
+ * @param string CSS source code
+ * @param string Container ID to use as prefix
+ * @return string Modified CSS source
+ */
+function rcmail_mod_css_styles($source, $container_id, $base_url = '')
+ {
+ $a_css_values = array();
+ $last_pos = 0;
+
+ // cut out all contents between { and }
+ while (($pos = strpos($source, '{', $last_pos)) && ($pos2 = strpos($source, '}', $pos)))
+ {
+ $key = sizeof($a_css_values);
+ $a_css_values[$key] = substr($source, $pos+1, $pos2-($pos+1));
+ $source = substr($source, 0, $pos+1) . "<<str_replacement[$key]>>" . substr($source, $pos2, strlen($source)-$pos2);
+ $last_pos = $pos+2;
+ }
+
+ // remove html commends and add #container to each tag selector.
+ // also replace body definition because we also stripped off the <body> tag
+ $styles = preg_replace(
+ array(
+ '/(^\s*<!--)|(-->\s*$)/',
+ '/(^\s*|,\s*|\}\s*)([a-z0-9\._#][a-z0-9\.\-_]*)/im',
+ '/@import\s+(url\()?[\'"]?([^\)\'"]+)[\'"]?(\))?/ime',
+ '/<<str_replacement\[([0-9]+)\]>>/e',
+ "/$container_id\s+body/i"
+ ),
+ array(
+ '',
+ "\\1#$container_id \\2",
+ "sprintf(\"@import url('./bin/modcss.php?u=%s&c=%s')\", urlencode(make_absolute_url('\\2','$base_url')), urlencode($container_id))",
+ "\$a_css_values[\\1]",
+ "$container_id div.rcmBody"
+ ),
+ $source);
+
+ return $styles;
+ }
+
+
+/**
* Compose a valid attribute string for HTML tags
*
* @param array Named tag attributes
diff --git a/program/include/rcube_shared.inc b/program/include/rcube_shared.inc
index a5a3ca64e..05fa7a2bc 100644
--- a/program/include/rcube_shared.inc
+++ b/program/include/rcube_shared.inc
@@ -434,6 +434,10 @@ function make_absolute_url($path, $base_url)
{
$host_url = $base_url;
$abs_path = $path;
+
+ // check if path is an absolute URL
+ if (preg_match('/^[fhtps]+:\/\//', $path))
+ return $path;
// cut base_url to the last directory
if (strpos($base_url, '/')>7)