diff options
author | thomascube <thomas@roundcube.net> | 2007-09-29 18:15:05 +0000 |
---|---|---|
committer | thomascube <thomas@roundcube.net> | 2007-09-29 18:15:05 +0000 |
commit | 97bd2c0537bc3edb3751b3020f37e680944ac41c (patch) | |
tree | 3845f62069bbfc9ddb67447f07e504f0f455077a /program/include | |
parent | ca2b4ddfcc7a506925c9d5b3a798a4c74147c2e1 (diff) |
Filter linked/imported CSS files (#1484056)
Diffstat (limited to 'program/include')
-rw-r--r-- | program/include/main.inc | 45 | ||||
-rw-r--r-- | program/include/rcube_shared.inc | 4 |
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) |