http://www.mediawiki.org/wiki/Special:Code/MediaWiki/73498

Revision: 73498
Author:   tparscal
Date:     2010-09-21 23:51:34 +0000 (Tue, 21 Sep 2010)

Log Message:
-----------
Initial import of the new ArticleEmblems extension which adds support for 
<emblem> tags, of which the contents are collected and output together as list 
items in the top of an article header. This provides a software substitution 
for the current practice of using CSS hacks to get icons and text such as 
featured article starts or geo-coordinates to appear at the top of the article 
beneeth the first heading. This should also play nice with the existing hacks, 
so transitioning shouldn't be an issue. Emblems are displayed in the order they 
are defined, and the contents of emblem tags is fully parsed. This extension 
was inspired by input from the community expressed in detail in bug #23796.

Added Paths:
-----------
    trunk/extensions/ArticleEmblems/
    trunk/extensions/ArticleEmblems/ArticleEmblems.hooks.php
    trunk/extensions/ArticleEmblems/ArticleEmblems.i18n.php
    trunk/extensions/ArticleEmblems/ArticleEmblems.php
    trunk/extensions/ArticleEmblems/modules/
    trunk/extensions/ArticleEmblems/modules/ext.articleEmblems.css
    trunk/extensions/ArticleEmblems/patches/
    trunk/extensions/ArticleEmblems/patches/ArticleEmblems.sql

Added: trunk/extensions/ArticleEmblems/ArticleEmblems.hooks.php
===================================================================
--- trunk/extensions/ArticleEmblems/ArticleEmblems.hooks.php                    
        (rev 0)
+++ trunk/extensions/ArticleEmblems/ArticleEmblems.hooks.php    2010-09-21 
23:51:34 UTC (rev 73498)
@@ -0,0 +1,88 @@
+<?php
+/**
+ * Hooks for ArticleEmblems extension
+ * 
+ * @file
+ * @ingroup Extensions
+ */
+
+class ArticleEmblemsHooks {
+       
+       /* Protected Static Members */
+       
+       protected static $emblems = array();
+       
+       /* Static Methods */
+
+       /**
+        * LoadExtensionSchemaUpdates hook
+        */
+       public static function loadExtensionSchemaUpdates() {
+               global $wgExtNewTables;
+               $wgExtNewTables[] = array( 'articleemblems', dirname( __FILE__ 
) . '/patches/ArticleEmblems.sql' );
+               return true;
+       }
+
+       /*
+        * ParserInit hook
+        */
+       public static function parserInit( &$parser ) {
+               $parser->setHook( 'emblem', 'ArticleEmblemsHooks::render' );
+               return true;
+       }
+       
+       /*
+        * Renderer for <emblem> parser tag hook
+        */
+       public static function render( $input, $args, $parser, $frame ) {
+               self::$emblems[] = $parser->recursiveTagParse( $input, $frame );
+               return null;
+       }
+       
+       /*
+        * ArticleSaveComplete hook
+        */
+       public static function articleSaveComplete( &$article ) {
+               $articleId = $article->getId();
+               $dbw = wfGetDB( DB_MASTER );
+               $dbw->delete( 'articleemblems', array( 'ae_article' => 
$articleId ), __METHOD__ );
+               $emblems = array();
+               foreach ( self::$emblems as $emblem ) {
+                       $emblems[] = array( 'ae_article' => $articleId, 
'ae_value' => $emblem );
+               }
+               $dbw->insert( 'articleemblems', array_reverse( $emblems ), 
__METHOD__ );
+               return true;
+       }
+       
+       /*
+        * ArticleViewHeader hook
+        */
+       public static function articleViewHeader( &$article, &$outputDone, 
&$pcache ) {
+               global $wgOut;
+               
+               $wgOut->addModuleStyles( 'ext.articleEmblems' );
+               
+               $articleId = $article->getId();
+               $dbr = wfGetDB( DB_SLAVE );
+               $results = $dbr->select( 'articleemblems', 'ae_value', array( 
'ae_article' => $articleId ), __METHOD__ );
+               $emblems = array();
+               while ( $emblem = $dbr->fetchRow( $results ) ) {
+                       $emblems[] = '<li class="articleEmblem">' . 
$emblem['ae_value'] . '</li>';
+               }
+               $wgOut->addHtml( '<ul id="articleEmblems">' . implode( $emblems 
) . '</ul>' );
+               return true;
+       }
+       
+       /*
+        * ResourceLoaderRegisterModules hook
+        */
+       public static function resourceLoaderRegisterModules() {
+               ResourceLoader::register(
+                       'ext.articleEmblems',
+                       new ResourceLoaderFileModule( array(
+                               'styles' => 
'extensions/ArticleEmblems/modules/ext.articleEmblems.css',
+                       ) )
+               );
+               return true;
+       }
+}


Property changes on: trunk/extensions/ArticleEmblems/ArticleEmblems.hooks.php
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/ArticleEmblems/ArticleEmblems.i18n.php
===================================================================
--- trunk/extensions/ArticleEmblems/ArticleEmblems.i18n.php                     
        (rev 0)
+++ trunk/extensions/ArticleEmblems/ArticleEmblems.i18n.php     2010-09-21 
23:51:34 UTC (rev 73498)
@@ -0,0 +1,17 @@
+<?php
+/**
+ * Internationalisation for ArticleEmblems extension
+ *
+ * @file
+ * @ingroup Extensions
+ */
+
+$messages = array();
+
+/** English
+ * @author Trevor Parscal
+ */
+$messages['en'] = array(
+       'articleEmblems' => 'Article Emblems',
+       'articleEmblems-desc' => 'Parser hook that collects and renders extra 
information about an article',
+);


Property changes on: trunk/extensions/ArticleEmblems/ArticleEmblems.i18n.php
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/ArticleEmblems/ArticleEmblems.php
===================================================================
--- trunk/extensions/ArticleEmblems/ArticleEmblems.php                          
(rev 0)
+++ trunk/extensions/ArticleEmblems/ArticleEmblems.php  2010-09-21 23:51:34 UTC 
(rev 73498)
@@ -0,0 +1,29 @@
+<?php
+/**
+ * ArticleEmblems extension
+ * 
+ * @file
+ * @ingroup Extensions
+ * 
+ * @author Trevor Parscal <[email protected]>
+ * @license GPL v2 or later
+ * @version 0.1.0
+ */
+
+/* Setup */
+
+$wgExtensionCredits['parserhook'][] = array(
+       'path' => __FILE__,
+       'name' => 'ArticleEmblems',
+       'author' => array( 'Trevor Parscal' ),
+       'version' => '0.1.0',
+       'url' => 'http://www.mediawiki.org/wiki/Extension:ArticleEmblems',
+       'descriptionmsg' => 'articleEmblems-desc',
+);
+$wgAutoloadClasses['ArticleEmblemsHooks'] = dirname( __FILE__ ) . 
'/ArticleEmblems.hooks.php';
+$wgExtensionMessagesFiles['ArticleEmblems'] = dirname( __FILE__ ) . 
'/ArticleEmblems.i18n.php';
+$wgHooks['LoadExtensionSchemaUpdates'][] = 
'ArticleEmblemsHooks::loadExtensionSchemaUpdates';
+$wgHooks['ParserFirstCallInit'][] = 'ArticleEmblemsHooks::parserInit';
+$wgHooks['ArticleViewHeader'][] = 'ArticleEmblemsHooks::articleViewHeader';
+$wgHooks['ArticleSaveComplete'][] = 'ArticleEmblemsHooks::articleSaveComplete';
+$wgHooks['ResourceLoaderRegisterModules'][] = 
'ArticleEmblemsHooks::resourceLoaderRegisterModules';
\ No newline at end of file


Property changes on: trunk/extensions/ArticleEmblems/ArticleEmblems.php
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/ArticleEmblems/modules/ext.articleEmblems.css
===================================================================
--- trunk/extensions/ArticleEmblems/modules/ext.articleEmblems.css              
                (rev 0)
+++ trunk/extensions/ArticleEmblems/modules/ext.articleEmblems.css      
2010-09-21 23:51:34 UTC (rev 73498)
@@ -0,0 +1,14 @@
+/*
+ * CSS for ArticleEmblems extension
+ */
+
+#articleEmblems {
+       float: right;
+       list-style: none;
+       margin-top: -1em;
+}
+#articleEmblems li {
+       float: right;
+       list-style: none;
+       margin-left: 0.5em;
+}
\ No newline at end of file


Property changes on: 
trunk/extensions/ArticleEmblems/modules/ext.articleEmblems.css
___________________________________________________________________
Added: svn:eol-style
   + native

Added: trunk/extensions/ArticleEmblems/patches/ArticleEmblems.sql
===================================================================
--- trunk/extensions/ArticleEmblems/patches/ArticleEmblems.sql                  
        (rev 0)
+++ trunk/extensions/ArticleEmblems/patches/ArticleEmblems.sql  2010-09-21 
23:51:34 UTC (rev 73498)
@@ -0,0 +1,12 @@
+--
+-- Schema for ArticleEmblems
+--
+
+CREATE TABLE IF NOT EXISTS /*_*/articleemblems (
+       -- Article ID
+       ae_article int NOT NULL,
+       -- Emblem value
+       ae_value blob NOT NULL
+) /*$wgDBTableOptions*/;
+
+CREATE INDEX /*i*/ae_article ON /*_*/articleemblems (ae_article);


Property changes on: trunk/extensions/ArticleEmblems/patches/ArticleEmblems.sql
___________________________________________________________________
Added: svn:eol-style
   + native



_______________________________________________
MediaWiki-CVS mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-cvs

Reply via email to