Hello,

For MediaWiki below 17.0, replacing of variables does not work,
unfortunately.

Can someone tell me, whether "replaceVariables($query, $frame)" and
"recursiveTagParse( $query )" are actually the right functions to use, e.g.,
in MediaWiki 15.4.

Regards,

Benedikt

--
AIFB, Karlsruhe Institute of Technology (KIT)
Phone: +49 721 608-47946 
Email: [email protected]
Web: http://www.aifb.kit.edu/web/Hauptseite/en 



-----Original Message-----
From: Benedikt Kämpgen 
Sent: Friday, September 02, 2011 9:54 AM
To: '[email protected]'; 'Jeroen De Dauw'
Subject: SPARK extension for MW < 17.0

Hello,

I have changed the SPARK extension so that it also works for MW versions
below 17.0. I basically made the extension work without Resource Loader,
also.

See attached the patch. Jeroen, I now, the JavaScript handling is not nice
but I do not see another way at the moment; may I commit?

Best,

Benedikt


--
AIFB, Karlsruhe Institute of Technology (KIT)
Phone: +49 721 608-47946
Email: [email protected]
Web: http://www.aifb.kit.edu/web/Hauptseite/en 



### Eclipse Workspace Patch 1.0
#P Spark
Index: Spark.class.php
===================================================================
--- Spark.class.php     (revision 95984)
+++ Spark.class.php     (working copy)
@@ -45,44 +45,83 @@
         *
         * @return string
         */
-       public function render( Parser $parser, PPFrame $frame  ) {
+       public function render( Parser $parser, $frame  ) {
+               global $wgVersion;
+               global $wgOut;
+               global $egSparkScriptPath;
                global $wgResourceModules;
-               
-               if ( array_key_exists( 'data-spark-query', $this->parameters ) 
) {
-                       $query = htmlspecialchars( 
$this->parameters['data-spark-query'] );
-                               
+
+               // What is loaded already?
+               static $loadedJsses = array();
+
+               wfDebugLog( 'myextension', 'Parameters alright? ' . 
print_r($this->parameters, true) );
+               if ( array_key_exists( egSparkQuery, $this->parameters ) ) {
+                       $query = htmlspecialchars( 
$this->parameters[egSparkQuery] );
+
                        // Before that, shall we allow internal parse, at least 
for the query?
                        // We replace variables, templates etc.
-                       $query = $parser->replaceVariables($query, $frame);
-                               
+                       if (!isset($frame)) {
+                               $query = $parser->replaceVariables($query, 
null);
+                       } else {
+                               $query = $parser->replaceVariables($query, 
$frame);
+                       }
+
                        // Replace special characters
                        $query = str_replace( array( '&lt;', '&gt;' ), array( 
'<', '>' ), $query );
-                               
-                       unset( $this->parameters['data-spark-query'] );
-                               
+
+                       unset( $this->parameters[egSparkQuery] );
+
                        // Depending on the format, we possibly need to add 
modules
-                       if ( array_key_exists( 'data-spark-format', 
$this->parameters ) ) {
-                               $format = htmlspecialchars( 
$this->parameters['data-spark-format'] );
+                       if ( array_key_exists( egSparkFormat, $this->parameters 
) ) {
+                               $format = htmlspecialchars( 
$this->parameters[egSparkFormat] );
                                // Remove everything before "spark.XXX"
                                $format = substr($format , strpos($format, 
"spark."));
                                // Remove .js at the end
                                $format = str_replace( array( '.js' ), array( 
'' ), $format );
                                $module = 'ext.'.$format;
-                               if ( array_key_exists($module, 
$wgResourceModules)) {
-                                       // TODO: Do we need to check, whether 
module has been added already?
-                                       $parser->getOutput()->addModules( 
$module );
 
+                               // for older versions of MW, different
+                               if ( version_compare( $wgVersion, '1.17', '<' ) 
) {
+                                       if (isset($wgResourceModules) && 
array_key_exists($module, $wgResourceModules)) {
+                                               // only if not already loaded
+                                               if 
(!isset($loadedJsses[$module])) {
+                                                       // scripts
+                                                       foreach 
($wgResourceModules[$module]['scripts'] as $script) {
+                                                               
$wgOut->addScript('<script src="'.$egSparkScriptPath."/".$script.'" 
type="text/javascript"></script>');
+                                                               wfDebugLog( 
'spark', "AddScript:".' <script src="'.$egSparkScriptPath."/".$script.'" 
type="text/javascript"></script>' );
+                                                       }
+
+                                                       // css
+                                                       foreach 
($wgResourceModules[$module]['styles'] as $style) {
+                                                               
$wgOut->addScript('<link rel="stylesheet" 
href="'.$egSparkScriptPath."/".$style.'" type="text/css" />');
+                                                               wfDebugLog( 
'spark', "AddLink:".' <link rel="stylesheet" 
href="'.$egSparkScriptPath."/".$style.'" type="text/css" />' );
+                                                       }
+                                                       $loadedJsses[$module] = 
true;
+                                               } 
+                                       }
+                               } else {
+                                       // $wgResourceModules might not exist
+                                       if (isset($wgResourceModules) && 
array_key_exists($module, $wgResourceModules)) {
+                                               // TODO: Do we need to check, 
whether module has been added already?
+                                               
$parser->getOutput()->addModules( $module );
+                                       }
                                }
                        }
-                       
+
                        $html = '<div class="spark" data-spark-query="' . 
$query . '" ' . Html::expandAttributes( $this->parameters ) . ' >' .
                        ( is_null( $this->contents ) ? '' : htmlspecialchars( 
$this->contents ) ) .
                                        '</div>';
 
                        // In MW 1.17 there seems to be the problem that ? 
after an empty space is replaced by a non-breaking space (&#160;) Therefore we 
remove all spaces before ? which should still make the SPARQL query work
                        $html = preg_replace( '/[ \t]+(\?)/', '$1', $html );
-                               
-                       return array( $parser->insertStripItem( $html, 
$parser->mStripState ), 'noparse' => true, 'isHTML' => true );
+
+                       // for older versions of MW, different
+                       if ( version_compare( $wgVersion, '1.17', '<' ) ) {
+                               $parser->disableCache();
+                               return $html;
+                       } else {
+                               return array( $parser->insertStripItem( $html, 
$parser->mStripState ), 'noparse' => true, 'isHTML' => true );
+                       }
                }
                else {
                        return Html::element( 'i', array(), wfMsg( 
'spark-missing-query' ) );
@@ -101,9 +140,12 @@
        protected function getSparkParameters( array $args ) {
                $parameters = array();
 
+               // For lower versions of MW, special chars were not allowed in 
tags, therefore, we simply add them, then.
                foreach ( $args as $name => $value ) {
                        if ( strpos( $name, 'data-spark-' ) === 0 ) {
                                $parameters[$name] = $value;
+                       } else {
+                               $parameters['data-spark-'.$name] = $value;
                        }
                }
 
Index: Spark.php
===================================================================
--- Spark.php   (revision 95490)
+++ Spark.php   (working copy)
@@ -2,7 +2,7 @@
 
 /**
  * Initialization file for the Spark extension.
- * 
+ *
  * Documentation:                      
http://www.mediawiki.org/wiki/Extension:Spark
  * Support                                     
http://www.mediawiki.org/wiki/Extension_talk:Spark
  * Source code:                                
http://svn.wikimedia.org/viewvc/mediawiki/trunk/extensions/Spark
@@ -24,8 +24,9 @@
        die( 'Not an entry point.' );
 }
 
-if ( version_compare( $wgVersion, '1.17', '<' ) ) {
-       die( '<b>Error:</b> Spark requires MediaWiki 1.17 or above.' );
+// We also want to support versions below 1.17
+if ( version_compare( $wgVersion, '1.15', '<' ) ) {
+       die( '<b>Error:</b> Spark requires MediaWiki 1.15 or above.' );
 }
 
 define( 'Spark_VERSION', '0.2 alpha' );
@@ -36,27 +37,36 @@
        'version' => Spark_VERSION,
        'author' => array(
                '[http://www.mediawiki.org/wiki/User:Jeroen_De_Dauw Jeroen De 
Dauw]',
-       ),
+),
        'url' => 'http://www.mediawiki.org/wiki/Extension:Spark',
        'descriptionmsg' => 'spark-desc'
 );
 
-$egSparkScriptPath = ( $wgExtensionAssetsPath === false ? $wgScriptPath . 
'/extensions' : $wgExtensionAssetsPath ) . '/Spark';
+// $wgExtensionAssetsPath does possibly not exist.
+$egSparkScriptPath = ( (!isset($wgExtensionAssetsPath) || 
$wgExtensionAssetsPath === false) ? $wgScriptPath . '/extensions' : 
$wgExtensionAssetsPath ) . '/Spark';
 
 $wgExtensionMessagesFiles['Spark'] = dirname( __FILE__ ) . '/Spark.i18n.php';
 
 $wgAutoloadClasses['SparkHooks'] = dirname( __FILE__ ) . '/Spark.hooks.php';
 $wgAutoloadClasses['SparkTag'] = dirname( __FILE__ ) . '/Spark.class.php';
 
-$wgResourceModules['ext.spark'] = array(
+if ( version_compare( $wgVersion, '1.17', '<' ) ) {
+       // We do not have resource loader
+       $egSparkScriptJquery = 
$egSparkScriptPath.'/rdf-spark/lib/jquery-1.4.4.js';
+       $egSparkScriptJquerySpark = 
$egSparkScriptPath.'/rdf-spark/jquery.spark.js';
+} else {
+       // We have resource loader
+       $wgResourceModules['ext.spark'] = array(
        'localBasePath' => dirname( __FILE__ ),
        'remoteBasePath' => $egSparkScriptPath,
        'styles' => array(),
        'scripts' => array( 'rdf-spark/jquery.spark.js' ),
        'dependencies' => array(),
        'messages' => array()
-);
+       );
+}
 
+
 $wgHooks['ParserFirstCallInit'][] = 'SparkHooks::onParserFirstCallInit';
 
 require_once 'Spark.settings.php';
\ No newline at end of file
Index: Spark.settings.php
===================================================================
--- Spark.settings.php  (revision 95984)
+++ Spark.settings.php  (working copy)
@@ -19,33 +19,37 @@
        die( 'Not an entry point.' );
 }
 
+/// Parameters /////
+define("egSparkQuery", "data-spark-query");
+define("egSparkFormat", "data-spark-format");
+
 /*
  * Example configuration modules
- 
-$wgResourceModules['ext.spark.oatpivot'] = array(
-       'localBasePath' => "$IP/extensions/Spark/",
-       'remoteBasePath' => $egSparkScriptPath,
-       'styles' => array('rdf-spark/lib/oat/styles/pivot.css'),
-       'scripts' => array( 'rdf-spark/lib/oat/loader.js', 
'rdf-spark/lib/oat/bootstrap.js', 'rdf-spark/lib/oat/animation.js', 
'rdf-spark/lib/oat/barchart.js', 'rdf-spark/lib/oat/ghostdrag.js', 
'rdf-spark/lib/oat/instant.js', 'rdf-spark/lib/oat/pivot.js', 
'rdf-spark/lib/oat/statistics.js' ),
-       'dependencies' => array(),
-       'messages' => array()
-);
 
-$wgResourceModules['ext.spark.datechart'] = array(
-       'localBasePath' => "$IP/extensions/Spark/",
-       'remoteBasePath' => $egSparkScriptPath,
-       'styles' => array(),
-       'scripts' => array( 'rdf-spark/lib/jquery.jqplot.js', 
'rdf-spark/lib/jqplot.pieRenderer.js', 
'rdf-spark/lib/jqplot.dateAxisRenderer.js', 
'rdf-spark/lib/jqplot.categoryAxisRenderer.js' ),
-       'dependencies' => array(),
-       'messages' => array()
-);
+ $wgResourceModules['ext.spark.oatpivot'] = array(
+ 'localBasePath' => "$IP/extensions/Spark/",
+ 'remoteBasePath' => $egSparkScriptPath,
+ 'styles' => array('rdf-spark/lib/oat/styles/pivot.css'),
+ 'scripts' => array( 'rdf-spark/lib/oat/loader.js', 
'rdf-spark/lib/oat/bootstrap.js', 'rdf-spark/lib/oat/animation.js', 
'rdf-spark/lib/oat/barchart.js', 'rdf-spark/lib/oat/ghostdrag.js', 
'rdf-spark/lib/oat/instant.js', 'rdf-spark/lib/oat/pivot.js', 
'rdf-spark/lib/oat/statistics.js' ),
+ 'dependencies' => array(),
+ 'messages' => array()
+ );
 
-$wgResourceModules['ext.spark.piechart'] = array(
-       'localBasePath' => "$IP/extensions/Spark/",
-       'remoteBasePath' => $egSparkScriptPath,
-       'styles' => array(),
-       'scripts' => array( 'rdf-spark/lib/jquery.jqplot.js', 
'rdf-spark/lib/jqplot.pieRenderer.js', 
'rdf-spark/lib/jqplot.dateAxisRenderer.js', 
'rdf-spark/lib/jqplot.categoryAxisRenderer.js' ),
-       'dependencies' => array(),
-       'messages' => array()
-);
+ $wgResourceModules['ext.spark.datechart'] = array(
+ 'localBasePath' => "$IP/extensions/Spark/",
+ 'remoteBasePath' => $egSparkScriptPath,
+ 'styles' => array(),
+ 'scripts' => array( 'rdf-spark/lib/jquery.jqplot.js', 
'rdf-spark/lib/jqplot.dateAxisRenderer.js', 
'rdf-spark/lib/jqplot.categoryAxisRenderer.js' ),
+ 'dependencies' => array(),
+ 'messages' => array()
+ );
+
+ $wgResourceModules['ext.spark.piechart'] = array(
+ 'localBasePath' => "$IP/extensions/Spark/",
+ 'remoteBasePath' => $egSparkScriptPath,
+ 'styles' => array(),
+ 'scripts' => array( 'rdf-spark/lib/jquery.jqplot.js', 
'rdf-spark/lib/jqplot.pieRenderer.js', 
'rdf-spark/lib/jqplot.dateAxisRenderer.js', 
'rdf-spark/lib/jqplot.categoryAxisRenderer.js' ),
+ 'dependencies' => array(),
+ 'messages' => array()
+ );
  */
\ No newline at end of file
Index: Spark.hooks.php
===================================================================
--- Spark.hooks.php     (revision 95984)
+++ Spark.hooks.php     (working copy)
@@ -2,49 +2,70 @@
 
 /**
  * Static class for hooks handled by the Spark extension.
- * 
+ *
  * @since 0.1
- * 
+ *
  * @file Spark.hooks.php
  * @ingroup Spark
- * 
+ *
  * @licence GNU GPL v3+
  * @author Jeroen De Dauw < [email protected] >
  */
 final class SparkHooks {
-       
+
        /**
         * Register the spark tag extension when the parser initializes.
-        * 
+        *
         * @since 0.1
-        * 
+        *
         * @param Parser $parser
-        * 
+        *
         * @return true
         */
        public static function onParserFirstCallInit( Parser &$parser ) {
                $parser->setHook( 'spark', __CLASS__ . '::onSparkRender' );
                return true;
        }
-       
+
        /**
         * @since 0.1
-        * 
+        *
         * @param mixed $input
         * @param array $args
         * @param Parser $parser
         * @param PPFrame $frame
         */
-       public static function onSparkRender( $input, array $args, Parser 
$parser, PPFrame $frame ) {
+       public static function onSparkRender( $input, array $args, Parser 
$parser, $frame = null) {
+               global $wgVersion;
+               global $wgOut;
+               global $egSparkScriptJquery;
+               global $egSparkScriptJquerySpark;
+
                static $loadedJs = false;
-               
-               if ( !$loadedJs ) {
-                       $parser->getOutput()->addModules( 'ext.spark' );
-                       $loadedJs = true;
+
+               if ( version_compare( $wgVersion, '1.17', '<' ) ) {
+                       // We do not have resource loader
+                       if ( !$loadedJs ) {
+                               $wgOut->addScript('<script 
src="'.$egSparkScriptJquery.'" type="text/javascript"></script>');
+                               wfDebugLog( 'spark', "AddScript:".' <script 
src="'.$egSparkScriptJquery.'" type="text/javascript"></script>' );
+                               $wgOut->addScript('<script 
src="'.$egSparkScriptJquerySpark.'" type="text/javascript"></script>');
+                               wfDebugLog( 'spark', "AddScript:".' <script 
src="'.$egSparkScriptJquerySpark.'" type="text/javascript"></script>' );
+                               $loadedJs = true;
+                       }
+
+               } else {
+                       // We have resource loader
+                       // If we have resource loader
+                       if ( !$loadedJs ) {
+                               $parser->getOutput()->addModules( 'ext.spark' );
+                               $loadedJs = true;
+                       }
                }
-               
                $tag = new SparkTag( $args, $input );
+
+               // PPFrame maybe not existing
                return $tag->render( $parser, $frame );
+
        }
-       
+
 }
\ No newline at end of file
_______________________________________________
Wikitech-l mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/wikitech-l

Reply via email to