diff --git a/gallery_base.inc b/gallery_base.inc index d4f28ba9557bd1dd04ad93be91137b486b864ccf..ff76ba2ad443ffb1eeb555f6cce3705cea09dda7 100644 --- a/gallery_base.inc +++ b/gallery_base.inc @@ -277,11 +277,28 @@ function gallery_set_head($html, $settitle = FALSE) { * Implementation of gallery_set_css */ function gallery_set_css($css) { + global $base_url; + static $css_memory = array(); + if (count($css)) { - $css = preg_replace('//i', '${2}', $css); + $css = preg_replace('//i', '${2}', $css); + $css = preg_replace(array('#^'. $base_url .'#', '#^'. base_path() .'#', '#^/#'), '', $css); foreach ($css as $include) { - // Gallery's CSS will always be added first, what allows overriding in the module(s) - drupal_add_css(substr($include, strlen(base_path())), 'module', 'all', FALSE); + if (!in_array(($md5 = md5($include)), $css_memory)) { + $css_memory[] = $md5; + if (substr($include, 0, 6) == '@import "'. $include .'";' ."\n"); + } + else { + // Gallery's css must always be added first to allow overriding from the module(s) + drupal_add_css($include, 'module', 'all', FALSE); + } + } } } } @@ -291,14 +308,29 @@ function gallery_set_css($css) { * (druapl_add_js() ensures proper cascading of included G2 javascript) */ function gallery_set_javascript($javascript) { + global $base_url; + static $js_memory = array(); + if (!empty($javascript)) { $files = preg_grep('/]*)>([^<]*)<\/script>/i', '${2}', $inline); drupal_add_js(implode("\n", $inline), 'inline'); + // Javascript files $files = preg_replace('/]*)>(.*?)<\/script>/i', '${2}', $files); + $files = preg_replace(array('#^'. $base_url .'#', '#^'. base_path() .'#', '#^/#'), '', $files); foreach ($files as $include) { - drupal_add_js(substr($include, strlen(base_path()))); + if (!in_array(($md5 = md5($include)), $js_memory)) { + $js_memory[] = $md5; + if (substr($include, 0, 4) == 'http') { + // drupal_add_js() does not support external paths + drupal_set_html_head('' ."\n"); + } + else { + drupal_add_js($include); + } + } } } }