- Timestamp:
- Nov 17, 2013, 3:01:07 PM (10 years ago)
- File:
-
- 1 edited
Legend:
- Unmodified
- Added
- Removed
-
trunk/include/template.class.php
r25471 r25506 47 47 48 48 const COMBINED_CSS_TAG = '<!-- COMBINED_CSS -->'; 49 var $css _by_priority = array();49 var $cssLoader; 50 50 51 51 var $picture_buttons = array(); … … 59 59 60 60 $this->scriptLoader = new ScriptLoader; 61 $this->cssLoader = new CssLoader; 61 62 $this->smarty = new SmartyBC; 62 63 $this->smarty->debugging = $conf['debug_template']; … … 411 412 } 412 413 413 if(!empty($this->css_by_priority)) 414 { 415 ksort($this->css_by_priority); 416 417 global $conf; 418 $combiner = new FileCombiner('css'); 419 foreach ($this->css_by_priority as $files) 420 { 421 foreach ($files as $combi) 422 $combiner->add( $combi ); 423 } 424 $css = $combiner->combine(); 425 426 $content = array(); 427 foreach( $css as $combi ) 428 { 429 $href = embellish_url(get_root_url().$combi->path); 430 if ($combi->version !== false) 431 $href .= '?v' . ($combi->version ? $combi->version : PHPWG_VERSION); 432 // trigger the event for eventual use of a cdn 433 $href = trigger_event('combined_css', $href, $combi); 434 $content[] = '<link rel="stylesheet" type="text/css" href="'.$href.'">'; 435 } 436 $this->output = str_replace(self::COMBINED_CSS_TAG, 437 implode( "\n", $content ), 438 $this->output ); 439 $this->css_by_priority = array(); 440 } 414 $css = $this->cssLoader->get_css(); 415 416 $content = array(); 417 foreach( $css as $combi ) 418 { 419 $href = embellish_url(get_root_url().$combi->path); 420 if ($combi->version !== false) 421 $href .= '?v' . ($combi->version ? $combi->version : PHPWG_VERSION); 422 // trigger the event for eventual use of a cdn 423 $href = trigger_event('combined_css', $href, $combi); 424 $content[] = '<link rel="stylesheet" type="text/css" href="'.$href.'">'; 425 } 426 $this->output = str_replace(self::COMBINED_CSS_TAG, 427 implode( "\n", $content ), 428 $this->output ); 429 $this->cssLoader->clear(); 441 430 442 431 if ( count($this->html_head_elements) || strlen($this->html_style) ) … … 752 741 function func_combine_css($params) 753 742 { 754 !empty($params['path']) || fatal_error('combine_css missing path'); 755 $order = (int)@$params['order']; 756 $version = isset($params['version']) ? $params['version'] : 0; 757 $css = new Css('', $params['path'], $version, $order); 758 $css->is_template = isset($params['template']) && !empty($params['template']); 759 $this->css_by_priority[$order][] = $css; 743 if (empty($params['path'])) 744 { 745 fatal_error('combine_css missing path'); 746 } 747 748 if (!isset($params['id'])) 749 { 750 $params['id'] = md5($params['path']); 751 } 752 753 $this->cssLoader->add($params['id'], $params['path'], (int)@$params['version'], (int)@$params['order'], (bool)@$params['template']); 760 754 } 761 755 … … 1031 1025 1032 1026 1027 /** Manage a list of css files */ 1028 class CssLoader 1029 { 1030 private $registered_css; 1031 1032 /** used to keep declaration order */ 1033 private $counter; 1034 1035 function __construct() 1036 { 1037 $this->clear(); 1038 } 1039 1040 function clear() 1041 { 1042 $this->registered_css = array(); 1043 $this->counter = 0; 1044 } 1045 1046 function get_css() 1047 { 1048 uasort($this->registered_css, array('CssLoader', 'cmp_by_order')); 1049 return self::do_combine($this->registered_css); 1050 } 1051 1052 private static function cmp_by_order($a, $b) 1053 { 1054 return $a->order - $b->order; 1055 } 1056 1057 private static function do_combine($files) 1058 { 1059 $combiner = new FileCombiner('css'); 1060 foreach ($files as $css) 1061 { 1062 $combiner->add( $css); 1063 } 1064 return $combiner->combine(); 1065 } 1066 1067 function add($id, $path, $version=0, $order=0, $is_template=false) 1068 { 1069 if (!isset($this->registered_css[$id])) 1070 { 1071 // costum order as an higher impact than declaration order 1072 $css = new Css($id, $path, $version, $order*1000+$this->counter); 1073 $css->is_template = $is_template; 1074 $this->registered_css[$id] = $css; 1075 $this->counter++; 1076 } 1077 else 1078 { 1079 $css = $this->registered_css[$id]; 1080 if ($css->order<$order || version_compare($css->version, $version)<0) 1081 { 1082 unset($this->registered_css[$id]); 1083 $this->add($id, $path, $version, $order, $is_template); 1084 } 1085 } 1086 } 1087 } 1088 1089 1033 1090 /** Manage a list of required scripts for a page, by optimizing their loading location (head, bottom, async) 1034 1091 and later on by combining them in a unique file respecting at the same time dependencies.*/ … … 1133 1190 $script->load_mode = $load_mode; 1134 1191 } 1135 1136 1192 } 1137 1193
Note: See TracChangeset
for help on using the changeset viewer.