Merge "content: Recognise .json as JsonContent in User and MediaWiki namespace"
authorjenkins-bot <jenkins-bot@gerrit.wikimedia.org>
Wed, 3 Jun 2015 16:25:09 +0000 (16:25 +0000)
committerGerrit Code Review <gerrit@wikimedia.org>
Wed, 3 Jun 2015 16:25:09 +0000 (16:25 +0000)
includes/content/ContentHandler.php
tests/phpunit/includes/content/ContentHandlerTest.php

index f8d0879..a188e48 100644 (file)
@@ -207,26 +207,26 @@ abstract class ContentHandler {
                        }
                }
 
-               // Could this page contain custom CSS or JavaScript, based on the title?
-               $isCssOrJsPage = NS_MEDIAWIKI == $ns && preg_match( '!\.(css|js)$!u', $title->getText(), $m );
-               if ( $isCssOrJsPage ) {
+               // Could this page contain code based on the title?
+               $isCodePage = NS_MEDIAWIKI == $ns && preg_match( '!\.(css|js|json)$!u', $title->getText(), $m );
+               if ( $isCodePage ) {
                        $ext = $m[1];
                }
 
                // Hook can force JS/CSS
-               Hooks::run( 'TitleIsCssOrJsPage', array( $title, &$isCssOrJsPage ), '1.25' );
+               Hooks::run( 'TitleIsCssOrJsPage', array( $title, &$isCodePage ), '1.25' );
 
-               // Is this a .css subpage of a user page?
-               $isJsCssSubpage = NS_USER == $ns
-                       && !$isCssOrJsPage
-                       && preg_match( "/\\/.*\\.(js|css)$/", $title->getText(), $m );
-               if ( $isJsCssSubpage ) {
+               // Is this a user subpage containing code?
+               $isCodeSubpage = NS_USER == $ns
+                       && !$isCodePage
+                       && preg_match( "/\\/.*\\.(js|css|json)$/", $title->getText(), $m );
+               if ( $isCodeSubpage ) {
                        $ext = $m[1];
                }
 
                // Is this wikitext, according to $wgNamespaceContentModels or the DefaultModelFor hook?
                $isWikitext = is_null( $model ) || $model == CONTENT_MODEL_WIKITEXT;
-               $isWikitext = $isWikitext && !$isCssOrJsPage && !$isJsCssSubpage;
+               $isWikitext = $isWikitext && !$isCodePage && !$isCodeSubpage;
 
                // Hook can override $isWikitext
                Hooks::run( 'TitleIsWikitextPage', array( $title, &$isWikitext ), '1.25' );
@@ -237,6 +237,8 @@ abstract class ContentHandler {
                                        return CONTENT_MODEL_JAVASCRIPT;
                                case 'css':
                                        return CONTENT_MODEL_CSS;
+                               case 'json':
+                                       return CONTENT_MODEL_JSON;
                                default:
                                        return is_null( $model ) ? CONTENT_MODEL_TEXT : $model;
                        }
index 63743eb..8178c12 100644 (file)
@@ -22,6 +22,7 @@ class ContentHandlerTest extends MediaWikiTestCase {
                        'wgContentHandlers' => array(
                                CONTENT_MODEL_WIKITEXT => 'WikitextContentHandler',
                                CONTENT_MODEL_JAVASCRIPT => 'JavaScriptContentHandler',
+                               CONTENT_MODEL_JSON => 'JsonContentHandler',
                                CONTENT_MODEL_CSS => 'CssContentHandler',
                                CONTENT_MODEL_TEXT => 'TextContentHandler',
                                'testing' => 'DummyContentHandlerForTesting',
@@ -51,19 +52,27 @@ class ContentHandlerTest extends MediaWikiTestCase {
                return array(
                        array( 'Help:Foo', CONTENT_MODEL_WIKITEXT ),
                        array( 'Help:Foo.js', CONTENT_MODEL_WIKITEXT ),
+                       array( 'Help:Foo.css', CONTENT_MODEL_WIKITEXT ),
+                       array( 'Help:Foo.json', CONTENT_MODEL_WIKITEXT ),
                        array( 'Help:Foo/bar.js', CONTENT_MODEL_WIKITEXT ),
                        array( 'User:Foo', CONTENT_MODEL_WIKITEXT ),
                        array( 'User:Foo.js', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo.css', CONTENT_MODEL_WIKITEXT ),
+                       array( 'User:Foo.json', CONTENT_MODEL_WIKITEXT ),
                        array( 'User:Foo/bar.js', CONTENT_MODEL_JAVASCRIPT ),
                        array( 'User:Foo/bar.css', CONTENT_MODEL_CSS ),
+                       array( 'User:Foo/bar.json', CONTENT_MODEL_JSON ),
+                       array( 'User:Foo/bar.json.nope', CONTENT_MODEL_WIKITEXT ),
                        array( 'User talk:Foo/bar.css', CONTENT_MODEL_WIKITEXT ),
                        array( 'User:Foo/bar.js.xxx', CONTENT_MODEL_WIKITEXT ),
                        array( 'User:Foo/bar.xxx', CONTENT_MODEL_WIKITEXT ),
                        array( 'MediaWiki:Foo.js', CONTENT_MODEL_JAVASCRIPT ),
-                       array( 'MediaWiki:Foo.css', CONTENT_MODEL_CSS ),
                        array( 'MediaWiki:Foo.JS', CONTENT_MODEL_WIKITEXT ),
-                       array( 'MediaWiki:Foo.CSS', CONTENT_MODEL_WIKITEXT ),
+                       array( 'MediaWiki:Foo.css', CONTENT_MODEL_CSS ),
                        array( 'MediaWiki:Foo.css.xxx', CONTENT_MODEL_WIKITEXT ),
+                       array( 'MediaWiki:Foo.CSS', CONTENT_MODEL_WIKITEXT ),
+                       array( 'MediaWiki:Foo.json', CONTENT_MODEL_JSON ),
+                       array( 'MediaWiki:Foo.JSON', CONTENT_MODEL_WIKITEXT ),
                );
        }