00001 <?php
00002
00028 class SMWOutputs {
00029
00035 protected static $headItems = array();
00036
00043 protected static $scripts = array();
00044
00046 protected static $resourceModules = array();
00047
00055 public static function requireResource( $moduleName ) {
00056 self::$resourceModules[$moduleName] = $moduleName;
00057 }
00058
00071 public static function requireScript( $id, $script ) {
00072 self::$scripts[$id] = $script;
00073 }
00074
00088 public static function requireHeadItem( $id, $item = '' ) {
00089 if ( is_numeric( $id ) ) {
00090 switch ( $id ) {
00091 case SMW_HEADER_TOOLTIP:
00092 self::requireResource( 'ext.smw.tooltips' );
00093 break;
00094 case SMW_HEADER_STYLE:
00095 self::requireResource( 'ext.smw.style' );
00096 break;
00097 }
00098 } else {
00099 self::$headItems[$id] = $item;
00100 }
00101 }
00102
00118 static public function requireFromParserOutput( ParserOutput $parserOutput ) {
00119
00120
00121 if ( is_callable( array( $parserOutput, 'getHeadItems' ) ) ) {
00122 $parserOutputHeadItems = $parserOutput->getHeadItems();
00123 } else {
00124 $parserOutputHeadItems = (array)$parserOutput->headItems;
00125 }
00126 self::$headItems = array_merge( (array)self::$headItems, $parserOutputHeadItems );
00128 if ( isset( $parserOutput->mModules ) ) {
00129 foreach ( $parserOutput->mModules as $module ) {
00130 self::$resourceModules[$module] = $module;
00131 }
00132 }
00133 }
00134
00146 static public function commitToParser( Parser $parser ) {
00148 if ( method_exists( $parser, 'getOutput' ) ) {
00149 $po = $parser->getOutput();
00150 } else {
00151 $po = $parser->mOutput;
00152 }
00153
00154 if ( isset( $po ) ) {
00155 self::commitToParserOutput( $po );
00156 }
00157 }
00158
00164 static public function commitToParserOutput( ParserOutput $parserOutput ) {
00165 foreach ( self::$scripts as $key => $script ) {
00166 $parserOutput->addHeadItem( $script . "\n", $key );
00167 }
00168 foreach ( self::$headItems as $key => $item ) {
00169 $parserOutput->addHeadItem( "\t\t" . $item . "\n", $key );
00170 }
00171
00172
00173 if ( method_exists( $parserOutput, 'addModules' ) ) {
00174 $parserOutput->addModules( array_values( self::$resourceModules ) );
00175 } else {
00176 self::addModulesBC( $parserOutput );
00177 }
00178
00179 self::$resourceModules = array();
00180 self::$headItems = array();
00181 }
00182
00193 static public function commitToOutputPage( OutputPage $output ) {
00194 foreach ( self::$scripts as $script ) {
00195 $output->addScript( $script );
00196 }
00197 foreach ( self::$headItems as $key => $item ) {
00198 $output->addHeadItem( $key, "\t\t" . $item . "\n" );
00199 }
00200
00201
00202 if ( method_exists( $output, 'addModules' ) ) {
00203 $output->addModules( array_values( self::$resourceModules ) );
00204 } else {
00205 self::addModulesBC( $output );
00206 }
00207
00208 self::$resourceModules = array();
00209 self::$headItems = array();
00210 }
00211
00220 static public function addModulesBC( $output ) {
00221 $items = array();
00222 foreach ( self::$resourceModules as $moduleName ) {
00223 self::processModuleBC( $moduleName, $items );
00224 }
00225 foreach ( $items as $key => $item ) {
00226 $output->addHeadItem( $key, $item );
00227 }
00228 }
00229
00236 static public function processModuleBC( $moduleName, &$items ) {
00237 global $wgResourceModules, $wgContLang, $smwgScriptPath;
00238
00239 if ( array_key_exists( $moduleName, $wgResourceModules ) ) {
00240 $module = $wgResourceModules[$moduleName];
00241 $basePath = $module['remoteBasePath'];
00242 foreach( self::getValueArrayForKey( 'dependencies', $module ) as $dependency ) {
00243 self::processModuleBC( $dependency, $items );
00244 }
00245 if ( $moduleName == 'ext.smw.style' && $wgContLang->isRTL() ) {
00246
00247 $items["CSSRTL"] = "<link rel=\"stylesheet\" type=\"text/css\" href=\"$smwgScriptPath/skins/SMW_custom_rtl.css\" />\n";
00248 }
00249 foreach( self::getValueArrayForKey( 'scripts', $module ) as $script ) {
00250 $items["JS$script"] = "<script type=\"text/javascript\" src=\"$basePath/$script\"></script>\n";
00251 }
00252 foreach( self::getValueArrayForKey( 'styles', $module ) as $style ) {
00253 $items["CSS$style"] = "<link rel=\"stylesheet\" type=\"text/css\" href=\"$basePath/$style\" />\n";
00254 }
00255 }
00256 }
00257
00263 static public function getValueArrayForKey( $key, $array ) {
00264 if ( !array_key_exists( $key, $array ) ) {
00265 return array();
00266 } elseif ( is_array( $array[$key] ) ) {
00267 return $array[$key];
00268 } else {
00269 return array( $array[$key] );
00270 }
00271 }
00272
00273 }