From dc76ce6c04347a42bdd03b2c6060395d071ddb0e Mon Sep 17 00:00:00 2001 From: xue <> Date: Wed, 2 Aug 2006 12:06:13 +0000 Subject: Fixed #316. --- framework/Web/UI/TClientScriptManager.php | 17 +++++++++++++---- framework/Web/UI/TPage.php | 21 +++++++++++++++++++-- framework/Web/UI/WebControls/TStyleSheet.php | 18 +++++++++++++++++- 3 files changed, 49 insertions(+), 7 deletions(-) (limited to 'framework') diff --git a/framework/Web/UI/TClientScriptManager.php b/framework/Web/UI/TClientScriptManager.php index 752b61ea..9a83c550 100644 --- a/framework/Web/UI/TClientScriptManager.php +++ b/framework/Web/UI/TClientScriptManager.php @@ -215,10 +215,14 @@ class TClientScriptManager extends TApplicationComponent * Registers a CSS file to be rendered in the page head * @param string a unique key identifying the file * @param string URL to the CSS file + * @param string media type of the CSS (such as 'print', 'screen', etc.). Defaults to empty, meaning the CSS applies to all media types. */ - public function registerStyleSheetFile($key,$url) + public function registerStyleSheetFile($key,$url,$media='') { - $this->_styleSheetFiles[$key]=$url; + if($media==='') + $this->_styleSheetFiles[$key]=$url; + else + $this->_styleSheetFiles[$key]=array($url,$media); } /** @@ -226,7 +230,7 @@ class TClientScriptManager extends TApplicationComponent * @param string a unique key identifying the CSS block * @param string CSS block */ - public function registerStyleSheet($key,$css) + public function registerStyleSheet($key,$css,$media='') { $this->_styleSheets[$key]=$css; } @@ -373,7 +377,12 @@ class TClientScriptManager extends TApplicationComponent { $str=''; foreach($this->_styleSheetFiles as $url) - $str.="\n"; + { + if(is_array($url)) + $str.="\n"; + else + $str.="\n"; + } $writer->write($str); } diff --git a/framework/Web/UI/TPage.php b/framework/Web/UI/TPage.php index 1fa9330c..8c01a501 100644 --- a/framework/Web/UI/TPage.php +++ b/framework/Web/UI/TPage.php @@ -490,19 +490,36 @@ class TPage extends TTemplateControl if($this->_theme instanceof ITheme) { foreach($this->_theme->getStyleSheetFiles() as $url) - $cs->registerStyleSheetFile($url,$url); + $cs->registerStyleSheetFile($url,$url,$this->getCssMediaType($url)); foreach($this->_theme->getJavaScriptFiles() as $url) $cs->registerHeadScriptFile($url,$url); } if($this->_styleSheet instanceof ITheme) { foreach($this->_styleSheet->getStyleSheetFiles() as $url) - $cs->registerStyleSheetFile($url,$url); + $cs->registerStyleSheetFile($url,$url,$this->getCssMediaType($url)); foreach($this->_styleSheet->getJavaScriptFiles() as $url) $cs->registerHeadScriptFile($url,$url); } } + /** + * Determines the media type of the CSS file. + * The media type is determined according to the following file name pattern: + * xxx.media-type.extension + * For example, 'mystyle.print.css' means its media type is 'print'. + * @param string CSS URL + * @return string media type of the CSS file + */ + private function getCssMediaType($url) + { + $segs=explode('.',basename($url)); + if(isset($segs[2])) + return $segs[count($segs)-2]; + else + return ''; + } + /** * Raises OnSaveStateComplete event. * This method is invoked right after {@link onSaveState OnSaveState} stage. diff --git a/framework/Web/UI/WebControls/TStyleSheet.php b/framework/Web/UI/WebControls/TStyleSheet.php index 5925645c..3e172697 100644 --- a/framework/Web/UI/WebControls/TStyleSheet.php +++ b/framework/Web/UI/WebControls/TStyleSheet.php @@ -45,6 +45,22 @@ class TStyleSheet extends TControl return $this->getViewState('StyleSheetUrl', ''); } + /** + * @return string media type of the CSS (such as 'print', 'screen', etc.). Defaults to empty, meaning the CSS applies to all media types. + */ + public function getMediaType() + { + return $this->getViewState('MediaType',''); + } + + /** + * @param string media type of the CSS (such as 'print', 'screen', etc.). If empty, it means the CSS applies to all media types. + */ + public function setMediaType($value) + { + $this->setViewState('MediaType',$value,''); + } + /** * Registers the stylesheet file and content to be rendered. * This method overrides the parent implementation and is invoked right before rendering. @@ -53,7 +69,7 @@ class TStyleSheet extends TControl public function onPreRender($param) { if(($url=$this->getStyleSheetUrl())!=='') - $this->getPage()->getClientScript()->registerStyleSheetFile($url,$url); + $this->getPage()->getClientScript()->registerStyleSheetFile($url,$url,$this->getMediaType()); } /** -- cgit v1.2.3