Spage has uploaded a new change for review. https://gerrit.wikimedia.org/r/226258
Change subject: promote BoilerPlate files to top level ...................................................................... promote BoilerPlate files to top level So BoilerPlate acts like other extensions. Remove other files (they're still in extension/examples). Bug: T94279 Change-Id: I8f7b7cb02161bd582a7314040f25583eaafbaee6 --- R .jscsrc R .jshintrc R BoilerPlate.hooks.php R BoilerPlate.i18n.alias.php R BoilerPlate.php D ContentAction/ContentAction.php D ContentAction/i18n/en.json D DataPages/DataPages.example.php D DataPages/DataPages.php D DataPages/XmlContent.php D DataPages/XmlContentHandler.php D Example/.jshintrc D Example/Example.hooks.php D Example/Example.i18n.alias.php D Example/Example.i18n.magic.php D Example/Example.php D Example/api/ApiQueryExample.php D Example/i18n/en.json D Example/i18n/qqq.json D Example/modules/ext.Example.welcome.css D Example/modules/ext.Example.welcome.init.js D Example/modules/ext.Example.welcome.js D Example/specials/SpecialHelloWorld.php D Example/sql/add-example_note.sql R Gruntfile.js R README R composer.json R i18n/ast.json R i18n/bcl.json R i18n/be-tarask.json R i18n/br.json R i18n/ca.json R i18n/ce.json R i18n/da.json R i18n/de.json R i18n/dsb.json R i18n/en-gb.json R i18n/en.json R i18n/eo.json R i18n/es.json R i18n/fa.json R i18n/fi.json R i18n/fo.json R i18n/fr.json R i18n/frp.json R i18n/gl.json R i18n/he.json R i18n/hsb.json R i18n/hu.json R i18n/ia.json R i18n/id.json R i18n/it.json R i18n/ja.json R i18n/ko.json R i18n/ksh.json R i18n/lb.json R i18n/map-bms.json R i18n/mk.json R i18n/mr.json R i18n/ms.json R i18n/mt.json R i18n/nb.json R i18n/nl.json R i18n/oc.json R i18n/pl.json R i18n/pms.json R i18n/ps.json R i18n/pt-br.json R i18n/pt.json R i18n/qqq.json R i18n/roa-tara.json R i18n/ru.json R i18n/si.json R i18n/sv.json R i18n/ta.json R i18n/te.json R i18n/tl.json R i18n/uk.json R i18n/yi.json R i18n/zh-hans.json R i18n/zh-hant.json R modules/ext.BoilerPlate.foo.css R modules/ext.BoilerPlate.foo.js R modules/ext.BoilerPlate.js R package.json R specials/SpecialHelloWorld.php 86 files changed, 0 insertions(+), 1,031 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/BoilerPlate refs/changes/58/226258/1 diff --git a/BoilerPlate/.jscsrc b/.jscsrc similarity index 100% rename from BoilerPlate/.jscsrc rename to .jscsrc diff --git a/BoilerPlate/.jshintrc b/.jshintrc similarity index 100% rename from BoilerPlate/.jshintrc rename to .jshintrc diff --git a/BoilerPlate/BoilerPlate.hooks.php b/BoilerPlate.hooks.php similarity index 100% rename from BoilerPlate/BoilerPlate.hooks.php rename to BoilerPlate.hooks.php diff --git a/BoilerPlate/BoilerPlate.i18n.alias.php b/BoilerPlate.i18n.alias.php similarity index 100% rename from BoilerPlate/BoilerPlate.i18n.alias.php rename to BoilerPlate.i18n.alias.php diff --git a/BoilerPlate/BoilerPlate.php b/BoilerPlate.php similarity index 100% rename from BoilerPlate/BoilerPlate.php rename to BoilerPlate.php diff --git a/ContentAction/ContentAction.php b/ContentAction/ContentAction.php deleted file mode 100644 index ee6322b..0000000 --- a/ContentAction/ContentAction.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * An extension that demonstrates how to use the SkinTemplateContentActions - * hook to add a new content action - * - * @author Ævar Arnfjörð Bjarmason <[email protected]> - * @copyright Copyright © 2005, Ævar Arnfjörð Bjarmason - * @license http://www.gnu.org/copyleft/gpl.html GNU General Public License 2.0 or later - */ - -$wgExtensionCredits['other'][] = array( - 'path' => __FILE__, - 'name' => 'Content action hook', - 'author' => 'Ævar Arnfjörð Bjarmason', - 'descriptionmsg' => 'contentaction-desc', -); - -$wgHooks['UnknownAction'][] = 'wfAddactActionHook'; -$wgHooks['SkinTemplateNavigation'][] = 'wfAddactionContentHook'; - -$wgMessagesDirs['ContentAction'] = __DIR__ . '/i18n'; - -function wfAddActionContentHook( $skin, &$content_actions ) { - $action = $skin->getRequest->getText( 'action' ); - - if ( $skin->getTitle()->getNamespace() != NS_SPECIAL ) { - $content_actions['actions']['myact'] = array( - 'class' => $action === 'myact' ? 'selected' : false, - 'text' => wfMessage( 'contentaction-myact' )->text(), - 'href' => $skin->getTitle()->getLocalUrl( 'action=myact' ) - ); - } - - return true; -} - -function wfAddactActionHook( $action, $article ) { - $title = $article->getTitle(); - - if ( $action === 'myact' ) { - $article->getContext()->getOutput()->addWikiText( - 'The page name is ' . $title->getText() . ' and you are ' . $article->getUserText() - ); - return false; - } - - return true; -} diff --git a/ContentAction/i18n/en.json b/ContentAction/i18n/en.json deleted file mode 100644 index 02c1d65..0000000 --- a/ContentAction/i18n/en.json +++ /dev/null @@ -1,7 +0,0 @@ -{ - "@metadata": { - "authors": [] - }, - "contentaction-desc": "Adds a new tab to each page", - "contentaction-myact": "My action" -} diff --git a/DataPages/DataPages.example.php b/DataPages/DataPages.example.php deleted file mode 100644 index 189b83e..0000000 --- a/DataPages/DataPages.example.php +++ /dev/null @@ -1,22 +0,0 @@ -<?php - -////////////////////////////////////////////////////////////// -// Example settings for activating the DataPages extension -////////////////////////////////////////////////////////////// - -// load the extension -require_once( $IP . '/extensions/examples/DataPages/DataPages.php' ); - -// Define a custom namespace for XML. -// If your extension is going to use an extra namespace, -// you should list the suggested default at -// <http://www.mediawiki.org/wiki/Extension_default_namespaces>. -define( 'NS_XML', 234 ); -define( 'NS_XML_TALK', NS_XML +1 ); - -$wgExtraNamespaces[ NS_XML ] = 'XML'; -$wgExtraNamespaces[ NS_XML_TALK ] = 'XML_Talk'; - -// Associate the XML namespace with the XML content model provided by the extension. -// CONTENT_MODEL_XML_DATA is a constant defined in DataPages.php. -$wgNamespaceContentModels[ NS_XML ] = CONTENT_MODEL_XML_DATA; \ No newline at end of file diff --git a/DataPages/DataPages.php b/DataPages/DataPages.php deleted file mode 100644 index 4371ef9..0000000 --- a/DataPages/DataPages.php +++ /dev/null @@ -1,48 +0,0 @@ -<?php -/** - * Data pages extension, an example for how to use the ContentHandler - * facility to handle XML content in MediaWiki. - * - * See DataPages.example.php for information on what to put into - * your LocalSettings file. - * - * Note that this example represents XML as a string internally. - * More advanced implementation may want to use a DOM based approach. - * - * Please look at XmlContentHandler.php and XmlContent.php to see what - * can and should be done to support custom data types. - * - * @file - * @ingroup Extensions - * @author Daniel Kinzler, brightbyte.de - * - * @copyright Wikimedia Deutschland e.V., 2013 - * @license GNU General Public Licence 2.0 or later - */ - -if ( !defined( 'MEDIAWIKI' ) ) { - echo( "This file is an extension to the MediaWiki software and cannot be used on its own.\n" ); - die( 1 ); -} - -if ( version_compare( $wgVersion, '1.21', '<' ) ) { - die( "This extension requires MediaWiki 1.21+\n" ); -} - -$wgExtensionCredits['other'][] = array( - 'path' => __FILE__, - 'name' => 'DataPages', - 'author' => 'Daniel Kinzler', -); - -$wgAutoloadClasses['XmlContentHandler'] = __DIR__ . '/XmlContentHandler.php'; -$wgAutoloadClasses['XmlContent'] = __DIR__ . '/XmlContent.php'; - -// Define a constant for the identifier of our custom content model... -define( 'CONTENT_MODEL_XML_DATA', 'XML_DATA' ); - -// ...and register a handler for that content model. -$wgContentHandlers[CONTENT_MODEL_XML_DATA] = 'XmlContentHandler'; - -// The content model is typically associated with a namespace later, -// see DataPages.example.php \ No newline at end of file diff --git a/DataPages/XmlContent.php b/DataPages/XmlContent.php deleted file mode 100644 index 532d605..0000000 --- a/DataPages/XmlContent.php +++ /dev/null @@ -1,167 +0,0 @@ -<?php - /** - * - * Copyright © 25.05.13 by the authors listed below. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * http://www.gnu.org/copyleft/gpl.html - * - * @license GPL 2+ - * @file - * - * @author Daniel Kinzler - */ - - -/** - * Class XmlContent represents XML content. - * - * This is based on TextContent, and represents XML as a string. - * - * Using a text based content model is the simplest option, since it - * allows the use of the standard editor and diff code, and does not require - * serialization/unserialization. - * - * However, text based content is "dumb". It means that your code can't make use - * of the XML structure, making it a bit pointless. If you want to use and manipulate - * the XML structure, then it should be represented as a DOM inside the XmlContent. - * - * In that case, XmlContentHandler::serializeContent() - * and XmlContentHandler::unserializeContent() would have to be used for - * serializing resp. parsing the XML DOM. - * - * Also, a special editor might be needed to interact with the structure. - * - * @package DataPages - */ -class XmlContent extends \TextContent { - - public function __construct( $text, $model_id = CONTENT_MODEL_XML_DATA ) { - parent::__construct( $text, $model_id ); - } - - public function getHtml() { - // We could put pretty printing and syntax highlighting here. - // And maybe throw in some JS for collapsible sections. - // For now, let's assume the XML is already pretty. - - $html = htmlspecialchars( $this->getNativeData() ); - $html = "<pre>" . $html . "</pre>"; - return $html; - } - - public function getParserOutput( Title $title, - $revId = null, - ParserOptions $options = null, $generateHtml = true - ) { - // If you want to have more control over parsing than getHtml() gives you, - // you can control the construction of the ParserOutput object and add - // meta data like categories, etc. based on the content. - - return parent::getParserOutput( $title, $revId, $options, $generateHtml ); - } - - public function isEmpty() { - // Determines whether this content can be considered empty. - // For XML, we want to check whether there's any CDATA: - - $text = trim( strip_tags( $this->getNativeData() ) ); - return $text === ''; - } - - public function isCountable( $hasLinks = null ) { - // Determines whether this content should be counted as a "page" for the wiki's statistics. - // Here, we require it to be not-empty and not a redirect: - return !$this->isEmpty() && !$this->isRedirect(); - } - - public function prepareSave( WikiPage $page, $flags, $baseRevId, User $user ) { - // Called before saving an edit. - // This is the preferred place for checking constraints, be they - // on the content itself, or for global consistency. - // - // Alternatively, validity can be checked in isValid(), but there - // we have no way to provide a detailed error report to the user. - // - // NOTE: For checking even on preview, we'd need a custom editor. - // A nicer way to do this might be added to the ContentHandler facility in the future. - - libxml_use_internal_errors ( true ); - $doc = simplexml_load_string( $this->getNativeData() ); - - $errors = libxml_get_errors(); - - $status = Status::newGood(); - - if ( !$doc || $errors ) { - // construct an informative error message here! - - $param1 = array_reduce( // fancy way to concatenate the messages from LibXMLError objects - $errors, - function ( $msg, $error ) { - if ( $msg !== '' ) $msg .= '; '; - $msg .= "line " . $error->line . ": " . $error->message; - return $msg; - }, - '' - ); - - // you should use a more meaningful message, if possible - $status->fatal( 'content-failed-to-parse', "XML", "", $param1 ); - } - - return $status; - } - - public function isValid() { - // This is a last line of defense against storing invalid data. - // It can be used to check validity, as an alternative to doing so - // in prepareSave(). - // - // Checking here has the advantage that this is ALWAYS called before - // the content is saved to the database, no matter whether the content - // was edited, imported, restored, or what. - // - // The downside is that it's too late here for meaningful interaction - // with the user, we can just abort the save operation, casing an internal - // error. - - return parent::isValid(); - } - - public function getTextForSearchIndex() { - // Should return text relevant to the wiki's search index, for instance by stripping tags: - return strip_tags( $this->getNativeData() ); - } - - public function convert( $toModel, $lossy = '' ) { - // Implement conversion to other content models. - // Text based models can per default be converted to all other text based models. - - return parent::convert( $toModel, $lossy ); - } - - public function getSection( $sectionId ) { - // We could implement sections as XML elements based on their id attribute. - // If XmlContent was DOM based, that would be nice and easy. - return parent::getSection( $sectionId ); - } - - public function replaceSection( $section, Content $with, $sectionTitle = '' ) { - // If we want to support sections, we also have to provide a way to substitute them, - // for section based editing. - return parent::replaceSection( $section, $with, $sectionTitle ); - } -} \ No newline at end of file diff --git a/DataPages/XmlContentHandler.php b/DataPages/XmlContentHandler.php deleted file mode 100644 index efe3576..0000000 --- a/DataPages/XmlContentHandler.php +++ /dev/null @@ -1,96 +0,0 @@ -<?php - /** - * - * Copyright © 25.05.13 by the authors listed below. - * - * This program is free software; you can redistribute it and/or modify - * it under the terms of the GNU General Public License as published by - * the Free Software Foundation; either version 2 of the License, or - * (at your option) any later version. - * - * This program is distributed in the hope that it will be useful, - * but WITHOUT ANY WARRANTY; without even the implied warranty of - * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the - * GNU General Public License for more details. - * - * You should have received a copy of the GNU General Public License along - * with this program; if not, write to the Free Software Foundation, Inc., - * 51 Franklin Street, Fifth Floor, Boston, MA 02110-1301, USA. - * http://www.gnu.org/copyleft/gpl.html - * - * @license GPL 2+ - * @file - * - * @author Daniel Kinzler - */ - - -/** - * Class XmlContentHandler represents the set of operations for XMLContent that can be - * performed without the actual content. Most importantly, it acts as a factory - * and serialization/unserialization service for XmlContent objects. - * - * This extends TextContentHandler because XmlContent extends TextContent. - * Content and ContentHandler implementations are generally paired like this. - * See the documentation of XmlContent for more information. - * - * @package DataPages - */ -class XmlContentHandler extends \TextContentHandler { - - public function __construct( - $modelId = CONTENT_MODEL_XML_DATA, - $formats = array( CONTENT_FORMAT_XML ) // XML is supported as a serialization format by default - ) { - parent::__construct( $modelId, $formats ); - } - - public function serializeContent( Content $content, $format = null ) { - // No special logic needed; XmlContent just wraps the raw text. - // If XmlContent were DOM-based, we'd serialize the XML DOM here. - return parent::serializeContent( $content, $format ); - } - - public function unserializeContent( $text, $format = null ) { - // No special logic needed; XmlContent just wraps the raw text. - // If XmlContent were DOM-based, we'd parse the XML here. - return new XmlContent( $text ); - } - - public function makeEmptyContent() { - return new XmlContent( '' ); - } - - public function getActionOverrides() { - // Add an override for the edit action to specify a custom editor - // for editing XML. The standard edit page will work as a default for - // any text-based content. - return parent::getActionOverrides(); - } - - public function createDifferenceEngine( IContextSource $context, - $old = 0, $new = 0, $rcid = 0, - $refreshCache = false, $unhide = false - ) { - // We could provide a custom difference engine for creating and - // rendering diffs between XML structures. - // The default implementation is line-based, which isn't too great for XML. - return parent::createDifferenceEngine( $context, $old, $new, $rcid, $refreshCache, $unhide ); - } - - public function supportsSections() { - // return true if XmlContent implements section-handling - return parent::supportsSections(); - } - - public function supportsRedirects() { - // return true if XmlContent supports representing redirects - return parent::supportsRedirects(); - } - - public function merge3( Content $oldContent, Content $myContent, Content $yourContent ) { - // You could implement smart DOM-based diff/merge here. - // The default implementation is line-based, which isn't too great for XML. - return parent::merge3( $oldContent, $myContent, $yourContent ); - } -} \ No newline at end of file diff --git a/Example/.jshintrc b/Example/.jshintrc deleted file mode 100644 index 2ff5525..0000000 --- a/Example/.jshintrc +++ /dev/null @@ -1,20 +0,0 @@ -{ - // Enforcing - "bitwise": true, - "eqeqeq": true, - "es3": true, - "latedef": true, - "noarg": true, - "nonew": true, - "undef": true, - "unused": true, - "strict": false, - - // Environment - "browser": true, - - "globals": { - "mediaWiki": false, - "jQuery": false - } -} diff --git a/Example/Example.hooks.php b/Example/Example.hooks.php deleted file mode 100644 index b7f2b76..0000000 --- a/Example/Example.hooks.php +++ /dev/null @@ -1,152 +0,0 @@ -<?php -/** - * Hooks for Example extension - * - * @file - * @ingroup Extensions - */ - -class ExampleHooks { - /** - * Add welcome module to the load queue of all pages - */ - public static function onBeforePageDisplay( OutputPage &$out, Skin &$skin ) { - global $wgExampleEnableWelcome; - - if ( $wgExampleEnableWelcome ) { - $out->addModules( 'ext.Example.welcome.init' ); - } - - // Always return true, indicating that parser initialization should - // continue normally. - return true; - } - - /** - * Expose configuration variables through mw.config in javascript. - */ - public static function onResourceLoaderGetConfigVars( &$vars ) { - global $wgExampleEnableWelcome, $wgExampleWelcomeColorDefault, $wgExampleWelcomeColorDays; - - if ( $wgExampleEnableWelcome ) { - $vars['wgExampleWelcomeColorDefault'] = $wgExampleWelcomeColorDefault; - $vars['wgExampleWelcomeColorDays'] = $wgExampleWelcomeColorDays; - } - - return true; - } - - /** - * Register parser hooks - * See also http://www.mediawiki.org/wiki/Manual:Parser_functions - */ - public static function onParserFirstCallInit( &$parser ) { - // Add the following to a wiki page to see how it works: - // <dump>test</dump> - // <dump foo="bar" baz="quux">test content</dump> - $parser->setHook( 'dump' , 'ExampleHooks::parserTagDump' ); - - // Add the following to a wiki page to see how it works: - // {{#echo: hello }} - $parser->setFunctionHook( 'echo', 'ExampleHooks::parserFunctionEcho' ); - - // Add the following to a wiki page to see how it works: - // {{#showme: hello | hi | there }} - $parser->setFunctionHook( 'showme', 'ExampleHooks::parserFunctionShowme' ); - - return true; - } - - public static function onRegisterMagicWords( &$magicWordsIds ) { - // Add the following to a wiki page to see how it works: - // {{MYWORD}} - $magicWordsIds[] = 'myword'; - - return true; - } - - public static function onParserGetVariableValueSwitch( &$parser, &$cache, &$magicWordId, &$ret ) { - if ( $magicWordId === 'myword' ) { - // Return value and cache should match. Cache is used to save - // additional call when it is used multiple times on a page. - $ret = $cache['myword'] = self::parserGetWordMyword(); - } - - return true; - } - - /** - * This registers our database schema update(s) - */ - public static function onLoadExtensionSchemaUpdates( $updater ) { - $updater->addExtensionTable( 'example_note', __DIR__ . '/sql/add-example_note.sql' ); - - return true; - } - - /** - * Parser magic word handler for {{MYWORD}} - * - * @return string: Wikitext to be rendered in the page. - */ - public static function parserGetWordMyword() { - global $wgExampleMyWord; - - return wfEscapeWikiText( $wgExampleMyWord ); - } - - /** - * Parser hook handler for <dump> - * - * @param string $data: The content of the tag. - * @param array $params: The attributes of the tag. - * @param Parser $parser: Parser instance available to render - * wikitext into html, or parser methods. - * @param PPFrame $frame: Can be used to see what template - * arguments ({{{1}}}) this hook was used with. - * - * @return string: HTML to insert in the page. - */ - public static function parserTagDump( $data, $attribs, $parser, $frame ) { - $dump = array( - 'content' => $data, - 'atributes' => (object)$attribs, - ); - - // Very important to escape user data with htmlspecialchars() to prevent - // an XSS security vulnerability. - $html = '<pre>Dump Tag: ' . htmlspecialchars( FormatJson::encode( $dump, /*prettyPrint=*/true ) ) . '</pre>'; - - return $html; - } - - /** - * Parser function handler for {{#echo: .. }} - * - * @param Parser $parser - * @param string $value - * - * @return string: HTML to insert in the page. - */ - public static function parserFunctionEcho( $parser, $value ) { - return '<pre>Echo Function: ' . htmlspecialchars( $value ) . '</pre>'; - } - - /** - * Parser function handler for {{#showme: .. | .. }} - * - * @param Parser $parser - * @param string $arg - * - * @return string: HTML to insert in the page. - */ - public static function parserFunctionShowme( $parser, $value /* arg2, arg3, */ ) { - $args = array_slice( func_get_args(), 2 ); - $showme = array( - 'value' => $value, - 'arguments' => $args, - ); - - return '<pre>Showme Function: ' . htmlspecialchars( FormatJson::encode( $showme, /*prettyPrint=*/true ) ) . '</pre>'; - } -} diff --git a/Example/Example.i18n.alias.php b/Example/Example.i18n.alias.php deleted file mode 100644 index a8facd4..0000000 --- a/Example/Example.i18n.alias.php +++ /dev/null @@ -1,19 +0,0 @@ -<?php -/** - * Aliases for special pages of the Example extension - * - * @file - * @ingroup Extensions - */ - -$specialPageAliases = array(); - -/** English (English) */ -$specialPageAliases['en'] = array( - 'HelloWorld' => array( 'HelloWorld' ), -); - -/** Dutch (Nederlands) */ -$specialPageAliases['nl'] = array( - 'HelloWorld' => array( 'HalloWereld' ), -); diff --git a/Example/Example.i18n.magic.php b/Example/Example.i18n.magic.php deleted file mode 100644 index ad1a756..0000000 --- a/Example/Example.i18n.magic.php +++ /dev/null @@ -1,23 +0,0 @@ -<?php -/** - * Internationalisation file for magic words in the Example extension - * - * @file - * @ingroup Extensions - */ - -$magicWords = array(); - -/** English (English) */ -$magicWords['en'] = array( - 'echo' => array( 0, 'echo' ), - 'showme' => array( 0, 'showme' ), - 'myword' => array( 0, 'MYWORD' ), -); - -/** Dutch (Nederlands) */ -$magicWords['nl'] = array( - 'echo' => array( 0, 'echo' ), - 'showme' => array( 0, 'laatzien' ), - 'myword' => array( 0, 'MIJNWOORD' ), -); diff --git a/Example/Example.php b/Example/Example.php deleted file mode 100644 index 8dd18f8..0000000 --- a/Example/Example.php +++ /dev/null @@ -1,160 +0,0 @@ -<?php -/** - * Example extension - based on the BoilerPlate - * - * For more info see mediawiki.org/wiki/Extension:Example - * - * You should add a brief comment explaining what the file contains and - * what it is for. MediaWiki core uses the doxygen documentation syntax, - * you're recommended to use those tags to complement your comment. - * See the online documentation at: - * http://www.stack.nl/~dimitri/doxygen/manual.html - * - * Here are commonly used tags, most of them are optional, though: - * - * First we tag this document block as describing the entire file (as opposed - * to a variable, class or function): - * @file - * - * We regroup all extensions documentation in the group named "Extensions": - * @ingroup Extensions - * - * The author would let everyone know who wrote the code, if there is more - * than one author, add multiple author annotations: - * @author Jane Doe - * @author George Foo - * - * To mention the file version in the documentation: - * @version 1.0 - * - * The license governing the extension code: - * @license GNU General Public Licence 2.0 or later - */ - -/** - * MediaWiki has several global variables which can be reused or even altered - * by your extension. The very first one is the $wgExtensionCredits which will - * expose to MediaWiki metadata about your extension. For additional - * documentation, see its documentation block in includes/DefaultSettings.php - */ -$wgExtensionCredits['other'][] = array( - 'path' => __FILE__, - - // Name of your Extension: - 'name' => 'Example', - - // Sometime other patches contributors and minor authors are not worth - // mentionning, you can use the special case '...' to output a localised - // message 'and others...'. - 'author' => array( - 'Jane Doe', - 'George Foo', - '...' - ), - - 'version' => '0.1.0', - - // The extension homepage. www.mediawiki.org will be happy to host - // your extension homepage. - 'url' => 'https://www.mediawiki.org/wiki/Extension:Example', - - - # Key name of the message containing the description. - 'descriptionmsg' => 'example-desc', -); - -/* Setup */ - -// Initialize an easy to use shortcut: -$dir = dirname( __FILE__ ); -$dirbasename = basename( $dir ); - -// Register files -// MediaWiki need to know which PHP files contains your class. It has a -// registering mecanism to append to the internal autoloader. Simply use -// $wgAutoLoadClasses as below: -$wgAutoloadClasses['ExampleHooks'] = $dir . '/Example.hooks.php'; -$wgAutoloadClasses['SpecialHelloWorld'] = $dir . '/specials/SpecialHelloWorld.php'; -$wgAutoloadClasses['ApiQueryExample'] = $dir . '/api/ApiQueryExample.php'; - -$wgMessagesDirs['Example'] = __DIR__ . '/i18n'; -$wgExtensionMessagesFiles['ExampleAlias'] = $dir . '/Example.i18n.alias.php'; -$wgExtensionMessagesFiles['ExampleMagic'] = $dir . '/Example.i18n.magic.php'; - -$wgAPIListModules['example'] = 'ApiQueryExample'; - -// Register hooks -// See also http://www.mediawiki.org/wiki/Manual:Hooks -$wgHooks['BeforePageDisplay'][] = 'ExampleHooks::onBeforePageDisplay'; -$wgHooks['ResourceLoaderGetConfigVars'][] = 'ExampleHooks::onResourceLoaderGetConfigVars'; -$wgHooks['ParserFirstCallInit'][] = 'ExampleHooks::onParserFirstCallInit'; -$wgHooks['MagicWordwgVariableIDs'][] = 'ExampleHooks::onRegisterMagicWords'; -$wgHooks['ParserGetVariableValueSwitch'][] = 'ExampleHooks::onParserGetVariableValueSwitch'; -$wgHooks['LoadExtensionSchemaUpdates'][] = 'ExampleHooks::onLoadExtensionSchemaUpdates'; - -// Register special pages -// See also http://www.mediawiki.org/wiki/Manual:Special_pages -$wgSpecialPages['HelloWorld'] = 'SpecialHelloWorld'; - -// Register modules -// See also http://www.mediawiki.org/wiki/Manual:$wgResourceModules -// ResourceLoader modules are the de facto standard way to easily -// load JavaScript and CSS files to the client. -$wgResourceModules['ext.Example.welcome'] = array( - 'scripts' => array( - 'modules/ext.Example.welcome.js', - ), - 'styles' => array( - 'modules/ext.Example.welcome.css', - ), - 'messages' => array( - 'example-welcome-title-loggedout', - 'example-welcome-title-user', - 'example-welcome-color-label', - 'example-welcome-color-value', - ), - 'dependencies' => array( - 'mediawiki.util', - 'mediawiki.user', - 'mediawiki.Title', - ), - - 'localBasePath' => $dir, - 'remoteExtPath' => 'examples/' . $dirbasename, -); - -$wgResourceModules['ext.Example.welcome.init'] = array( - 'scripts' => 'modules/ext.Example.welcome.init.js', - 'dependencies' => array( - 'ext.Example.welcome', - ), - - 'localBasePath' => $dir, - 'remoteExtPath' => 'examples/' . $dirbasename, -); - -/* Configuration */ - - -/** Your extension configuration settings. Since they are going to be global - * always use a "wg" prefix + your extension name + your setting key. - * The entire variable name should use "lowerCamelCase". - */ - -// Enable Welcome -// Example of a configuration setting to enable the 'Welcome' feature: -$wgExampleEnableWelcome = true; - -// Color map for the Welcome feature -$wgExampleWelcomeColorDefault = '#eee'; -// Days not defined here fall back to the default -$wgExampleWelcomeColorDays = array( - 'Monday' => 'orange', - 'Tuesday' => 'blue', - 'Wednesday' => 'green', - 'Thursday' => 'red', - 'Friday' => 'yellow', -); - -// Value of {{MYWORD}} constant -$wgExampleMyWord = 'Awesome'; diff --git a/Example/api/ApiQueryExample.php b/Example/api/ApiQueryExample.php deleted file mode 100644 index 47e5969..0000000 --- a/Example/api/ApiQueryExample.php +++ /dev/null @@ -1,61 +0,0 @@ -<?php -class ApiQueryExample extends ApiQueryBase { - - /** - * Constructor is optional. Only needed if we give - * this module properties a prefix (in this case we're using - * "ex" as the prefix for the module's properties. - * Query modules have the convention to use a property prefix. - * Base modules generally don't use a prefix, and as such don't - * need the constructor in most cases. - */ - public function __construct( $query, $moduleName ) { - parent::__construct( $query, $moduleName, 'ex' ); - } - - /** - * In this example we're returning one ore more properties - * of wgExampleFooStuff. In a more realistic example, this - * method would probably - */ - public function execute() { - global $wgExampleFooStuff; - $params = $this->extractRequestParams(); - - $stuff = array(); - - // This is a filtered request, only show this key if it exists, - // (or none, if it doesn't exist) - if ( isset( $params['key'] ) ) { - $key = $params['key']; - if ( isset( $wgExampleFooStuff[$key] ) ) { - $stuff[$key] = $wgExampleFooStuff[$key]; - } - - // This is an unfiltered request, replace the array with the total - // set of properties instead. - } else { - $stuff = $wgExampleFooStuff; - } - - $r = array( 'stuff' => $stuff ); - $this->getResult()->addValue( null, $this->getModuleName(), $r ); - } - - public function getAllowedParams() { - return array( - 'key' => array( - ApiBase::PARAM_TYPE => 'string', - ), - ); - } - - protected function getExamplesMessages() { - return array( - 'action=query&list=example' - => 'apihelp-query+example-example-1', - 'action=query&list=example&key=do' - => 'apihelp-query+example-example-2', - ); - } -} diff --git a/Example/i18n/en.json b/Example/i18n/en.json deleted file mode 100644 index e4d8022..0000000 --- a/Example/i18n/en.json +++ /dev/null @@ -1,16 +0,0 @@ -{ - "@metadata": { - "authors": [] - }, - "example-desc": "This is an example extension using the BoilerPlate.", - "example-welcome-title-user": "Howdy, $1!", - "example-welcome-title-loggedout": "Hi there!", - "example-welcome-color-label": "Today's color:", - "example-welcome-color-value": "$1", - "example-helloworld": "Bar", - "example-helloworld-intro": "This is the HelloWorld special page, as provided by the Example extension.", - "apihelp-query+example-description": "Get information about foo.", - "apihelp-query+example-param-key": "Reduce the result to only one of the foo properties.", - "apihelp-query+example-example-1": "Get all the information about foo.", - "apihelp-query+example-example-2": "Get only information for the key \"do\"" -} diff --git a/Example/i18n/qqq.json b/Example/i18n/qqq.json deleted file mode 100644 index e2cc6d9..0000000 --- a/Example/i18n/qqq.json +++ /dev/null @@ -1,14 +0,0 @@ -{ - "@metadata": { - "authors": [] - }, - "example-desc": "{{desc}}", - "example-welcome-title-user": "Title of the Welcome interface for logged-in users. $1 is the username.", - "example-welcome-title-loggedout": "Title of the Welcome interface logged-out users.", - "example-helloworld": "Title of Special:HelloWorld.", - "example-helloworld-intro": "Intro paragraph shown on Special:HelloWorld.", - "apihelp-query+example-description": "{{doc-apihelp-description|query+example}}", - "apihelp-query+example-param-key": "{{doc-apihelp-param|query+example|key}}", - "apihelp-query+example-example-1": "{{doc-apihelp-example|query+example}}", - "apihelp-query+example-example-2": "{{doc-apihelp-example|query+example}}" -} diff --git a/Example/modules/ext.Example.welcome.css b/Example/modules/ext.Example.welcome.css deleted file mode 100644 index 1150543..0000000 --- a/Example/modules/ext.Example.welcome.css +++ /dev/null @@ -1,24 +0,0 @@ -/** - * Stylesheet for Example's Welcome feature. - */ - -.mw-example-welcome { - display: block; - background-color: #f9f9f9; - border: 1px solid #eee; - padding: 0.5em 0.7em; - margin: 1em 0; - overflow: hidden; -} - -.mw-example-welcome-color { - float: right; - padding: 0.5em 0.7em; - background: white; - border: 5px solid transparent; - text-align: center; -} - -.mw-example-welcome-color-code { - font-size: large; -} diff --git a/Example/modules/ext.Example.welcome.init.js b/Example/modules/ext.Example.welcome.init.js deleted file mode 100644 index 6ade70c..0000000 --- a/Example/modules/ext.Example.welcome.init.js +++ /dev/null @@ -1,15 +0,0 @@ -/** - * Initialize Welcome - * - * This file is part of the 'ext.Example.welcome.init' module, - * which is enqueued for loading from ExampleHooks::onBeforePageDisplay() - * in Example.hooks.php. - */ -( function ( mw, $ ) { - - // Let jQuery invoke the init method as soon as the document is ready - // $(..) is short for $(document).ready(..). - // See also api.jquery.com/jQuery and api.jquery.com/ready - $( mw.libs.welcome.init ); - -}( mediaWiki, jQuery ) ); diff --git a/Example/modules/ext.Example.welcome.js b/Example/modules/ext.Example.welcome.js deleted file mode 100644 index 09e9c8d..0000000 --- a/Example/modules/ext.Example.welcome.js +++ /dev/null @@ -1,71 +0,0 @@ -/** - * JavaScript for Welcome in Example. - * Inserts a welcome message into the page content. - */ -( function ( mw, $ ) { - var welcome, dayMap; - - /** - * Local cache of mapping date day indices to day names in English. - * Note that the range is 0-6, where 0 = Sunday. - * See also https://developer.mozilla.org/en/JavaScript/Reference/Global_Objects/Date/getDay - */ - dayMap = ['Sunday', 'Monday', 'Tuesday', 'Wednesday', 'Thursday', 'Friday', 'Saturday']; - - welcome = { - init: function () { - var $box, dNow, color; - - $box = $( '<div class="mw-example-welcome"></div>' ).append( - $( '<h4>', { - text: mw.user.isAnon() ? - mw.msg( 'example-welcome-title-loggedout') : - mw.msg( 'example-welcome-title-user', mw.user.getName() ) - } ) - ); - - // Get the current date and the associated color for that date's day - dNow = new Date(); - color = welcome.getColorByDate( dNow ); - - // Append the message about today's color, and the color icon itself. - $box.prepend( - $( '<div>' ) - .addClass( 'mw-example-welcome-color' ) - .css( 'borderColor', color ) - .prepend( - $( '<h5>' ).text( mw.msg( 'example-welcome-color-label' ) ) - ) - .append( - $( '<code>' ) - .addClass( 'mw-example-welcome-color-code' ) - .text( mw.msg( 'example-welcome-color-value', color ) ) - ) - ); - - $( '#content' ).append( $box ); - }, - - /** - * Get the color associated with the given date's day. - * If no color is assigned to this day, the default will be used instead. - * - * @param Date d: Instance of Date to use to get the correct color. - */ - getColorByDate: function ( d ) { - var days, day; - - day = dayMap[d.getDay()]; - days = mw.config.get( 'wgExampleWelcomeColorDays' ); - - if ( day && days[day] !== undefined ) { - return days[day]; - } - - return mw.config.get( 'wgExampleWelcomeColorDefault' ); - } - }; - - mw.libs.welcome = welcome; - -}( mediaWiki, jQuery ) ); diff --git a/Example/specials/SpecialHelloWorld.php b/Example/specials/SpecialHelloWorld.php deleted file mode 100644 index db56abb..0000000 --- a/Example/specials/SpecialHelloWorld.php +++ /dev/null @@ -1,39 +0,0 @@ -<?php -/** - * HelloWorld SpecialPage for Example extension - * - * @file - * @ingroup Extensions - */ - -class SpecialHelloWorld extends SpecialPage { - - /** - * Initialize the special page. - */ - public function __construct() { - // A special page should at least have a name. - // We do this by calling the parent class (the SpecialPage class) - // constructor method with the name as first and only parameter. - parent::__construct( 'HelloWorld' ); - } - - /** - * Shows the page to the user. - * @param string $sub: The subpage string argument (if any). - * [[Special:HelloWorld/subpage]]. - */ - public function execute( $sub ) { - $out = $this->getOutput(); - - $out->setPageTitle( $this->msg( 'example-helloworld' ) ); - - // Parses message from .i18n.php as wikitext and adds it to the - // page output. - $out->addWikiMsg( 'example-helloworld-intro' ); - } - - protected function getGroupName() { - return 'other'; - } -} diff --git a/Example/sql/add-example_note.sql b/Example/sql/add-example_note.sql deleted file mode 100644 index ba611bd..0000000 --- a/Example/sql/add-example_note.sql +++ /dev/null @@ -1,29 +0,0 @@ --- --- Tables for the Example extension --- - --- Notes table -CREATE TABLE /*_*/example_note ( - -- Unique ID to identify each note - exnote_id int unsigned NOT NULL PRIMARY KEY AUTO_INCREMENT, - - -- Foreign key to user.user_id - exnote_user int unsigned NOT NULL, - - -- Key to page.page_id. - exnote_page int unsigned NOT NULL, - - -- Note value as a string. - exnote_value blob - -) /*$wgDBTableOptions*/; - --- For querying of all notes from a certain user --- (e.g. Special:Notes). --- For querying of all notes from a certain user on a certain page --- (e.g. "My notes" on a page). -CREATE INDEX /*i*/exnote_user_page ON /*_*/example_note (exnote_user, exnote_page); - --- For querying of all notes from all users on a certain page --- (e.g. "Notes by other users" on a certain page). -CREATE INDEX /*i*/exnote_page_user ON /*_*/example_note (exnote_page, exnote_user); diff --git a/BoilerPlate/Gruntfile.js b/Gruntfile.js similarity index 100% rename from BoilerPlate/Gruntfile.js rename to Gruntfile.js diff --git a/BoilerPlate/README b/README similarity index 100% rename from BoilerPlate/README rename to README diff --git a/BoilerPlate/composer.json b/composer.json similarity index 100% rename from BoilerPlate/composer.json rename to composer.json diff --git a/BoilerPlate/i18n/ast.json b/i18n/ast.json similarity index 100% rename from BoilerPlate/i18n/ast.json rename to i18n/ast.json diff --git a/BoilerPlate/i18n/bcl.json b/i18n/bcl.json similarity index 100% rename from BoilerPlate/i18n/bcl.json rename to i18n/bcl.json diff --git a/BoilerPlate/i18n/be-tarask.json b/i18n/be-tarask.json similarity index 100% rename from BoilerPlate/i18n/be-tarask.json rename to i18n/be-tarask.json diff --git a/BoilerPlate/i18n/br.json b/i18n/br.json similarity index 100% rename from BoilerPlate/i18n/br.json rename to i18n/br.json diff --git a/BoilerPlate/i18n/ca.json b/i18n/ca.json similarity index 100% rename from BoilerPlate/i18n/ca.json rename to i18n/ca.json diff --git a/BoilerPlate/i18n/ce.json b/i18n/ce.json similarity index 100% rename from BoilerPlate/i18n/ce.json rename to i18n/ce.json diff --git a/BoilerPlate/i18n/da.json b/i18n/da.json similarity index 100% rename from BoilerPlate/i18n/da.json rename to i18n/da.json diff --git a/BoilerPlate/i18n/de.json b/i18n/de.json similarity index 100% rename from BoilerPlate/i18n/de.json rename to i18n/de.json diff --git a/BoilerPlate/i18n/dsb.json b/i18n/dsb.json similarity index 100% rename from BoilerPlate/i18n/dsb.json rename to i18n/dsb.json diff --git a/BoilerPlate/i18n/en-gb.json b/i18n/en-gb.json similarity index 100% rename from BoilerPlate/i18n/en-gb.json rename to i18n/en-gb.json diff --git a/BoilerPlate/i18n/en.json b/i18n/en.json similarity index 100% rename from BoilerPlate/i18n/en.json rename to i18n/en.json diff --git a/BoilerPlate/i18n/eo.json b/i18n/eo.json similarity index 100% rename from BoilerPlate/i18n/eo.json rename to i18n/eo.json diff --git a/BoilerPlate/i18n/es.json b/i18n/es.json similarity index 100% rename from BoilerPlate/i18n/es.json rename to i18n/es.json diff --git a/BoilerPlate/i18n/fa.json b/i18n/fa.json similarity index 100% rename from BoilerPlate/i18n/fa.json rename to i18n/fa.json diff --git a/BoilerPlate/i18n/fi.json b/i18n/fi.json similarity index 100% rename from BoilerPlate/i18n/fi.json rename to i18n/fi.json diff --git a/BoilerPlate/i18n/fo.json b/i18n/fo.json similarity index 100% rename from BoilerPlate/i18n/fo.json rename to i18n/fo.json diff --git a/BoilerPlate/i18n/fr.json b/i18n/fr.json similarity index 100% rename from BoilerPlate/i18n/fr.json rename to i18n/fr.json diff --git a/BoilerPlate/i18n/frp.json b/i18n/frp.json similarity index 100% rename from BoilerPlate/i18n/frp.json rename to i18n/frp.json diff --git a/BoilerPlate/i18n/gl.json b/i18n/gl.json similarity index 100% rename from BoilerPlate/i18n/gl.json rename to i18n/gl.json diff --git a/BoilerPlate/i18n/he.json b/i18n/he.json similarity index 100% rename from BoilerPlate/i18n/he.json rename to i18n/he.json diff --git a/BoilerPlate/i18n/hsb.json b/i18n/hsb.json similarity index 100% rename from BoilerPlate/i18n/hsb.json rename to i18n/hsb.json diff --git a/BoilerPlate/i18n/hu.json b/i18n/hu.json similarity index 100% rename from BoilerPlate/i18n/hu.json rename to i18n/hu.json diff --git a/BoilerPlate/i18n/ia.json b/i18n/ia.json similarity index 100% rename from BoilerPlate/i18n/ia.json rename to i18n/ia.json diff --git a/BoilerPlate/i18n/id.json b/i18n/id.json similarity index 100% rename from BoilerPlate/i18n/id.json rename to i18n/id.json diff --git a/BoilerPlate/i18n/it.json b/i18n/it.json similarity index 100% rename from BoilerPlate/i18n/it.json rename to i18n/it.json diff --git a/BoilerPlate/i18n/ja.json b/i18n/ja.json similarity index 100% rename from BoilerPlate/i18n/ja.json rename to i18n/ja.json diff --git a/BoilerPlate/i18n/ko.json b/i18n/ko.json similarity index 100% rename from BoilerPlate/i18n/ko.json rename to i18n/ko.json diff --git a/BoilerPlate/i18n/ksh.json b/i18n/ksh.json similarity index 100% rename from BoilerPlate/i18n/ksh.json rename to i18n/ksh.json diff --git a/BoilerPlate/i18n/lb.json b/i18n/lb.json similarity index 100% rename from BoilerPlate/i18n/lb.json rename to i18n/lb.json diff --git a/BoilerPlate/i18n/map-bms.json b/i18n/map-bms.json similarity index 100% rename from BoilerPlate/i18n/map-bms.json rename to i18n/map-bms.json diff --git a/BoilerPlate/i18n/mk.json b/i18n/mk.json similarity index 100% rename from BoilerPlate/i18n/mk.json rename to i18n/mk.json diff --git a/BoilerPlate/i18n/mr.json b/i18n/mr.json similarity index 100% rename from BoilerPlate/i18n/mr.json rename to i18n/mr.json diff --git a/BoilerPlate/i18n/ms.json b/i18n/ms.json similarity index 100% rename from BoilerPlate/i18n/ms.json rename to i18n/ms.json diff --git a/BoilerPlate/i18n/mt.json b/i18n/mt.json similarity index 100% rename from BoilerPlate/i18n/mt.json rename to i18n/mt.json diff --git a/BoilerPlate/i18n/nb.json b/i18n/nb.json similarity index 100% rename from BoilerPlate/i18n/nb.json rename to i18n/nb.json diff --git a/BoilerPlate/i18n/nl.json b/i18n/nl.json similarity index 100% rename from BoilerPlate/i18n/nl.json rename to i18n/nl.json diff --git a/BoilerPlate/i18n/oc.json b/i18n/oc.json similarity index 100% rename from BoilerPlate/i18n/oc.json rename to i18n/oc.json diff --git a/BoilerPlate/i18n/pl.json b/i18n/pl.json similarity index 100% rename from BoilerPlate/i18n/pl.json rename to i18n/pl.json diff --git a/BoilerPlate/i18n/pms.json b/i18n/pms.json similarity index 100% rename from BoilerPlate/i18n/pms.json rename to i18n/pms.json diff --git a/BoilerPlate/i18n/ps.json b/i18n/ps.json similarity index 100% rename from BoilerPlate/i18n/ps.json rename to i18n/ps.json diff --git a/BoilerPlate/i18n/pt-br.json b/i18n/pt-br.json similarity index 100% rename from BoilerPlate/i18n/pt-br.json rename to i18n/pt-br.json diff --git a/BoilerPlate/i18n/pt.json b/i18n/pt.json similarity index 100% rename from BoilerPlate/i18n/pt.json rename to i18n/pt.json diff --git a/BoilerPlate/i18n/qqq.json b/i18n/qqq.json similarity index 100% rename from BoilerPlate/i18n/qqq.json rename to i18n/qqq.json diff --git a/BoilerPlate/i18n/roa-tara.json b/i18n/roa-tara.json similarity index 100% rename from BoilerPlate/i18n/roa-tara.json rename to i18n/roa-tara.json diff --git a/BoilerPlate/i18n/ru.json b/i18n/ru.json similarity index 100% rename from BoilerPlate/i18n/ru.json rename to i18n/ru.json diff --git a/BoilerPlate/i18n/si.json b/i18n/si.json similarity index 100% rename from BoilerPlate/i18n/si.json rename to i18n/si.json diff --git a/BoilerPlate/i18n/sv.json b/i18n/sv.json similarity index 100% rename from BoilerPlate/i18n/sv.json rename to i18n/sv.json diff --git a/BoilerPlate/i18n/ta.json b/i18n/ta.json similarity index 100% rename from BoilerPlate/i18n/ta.json rename to i18n/ta.json diff --git a/BoilerPlate/i18n/te.json b/i18n/te.json similarity index 100% rename from BoilerPlate/i18n/te.json rename to i18n/te.json diff --git a/BoilerPlate/i18n/tl.json b/i18n/tl.json similarity index 100% rename from BoilerPlate/i18n/tl.json rename to i18n/tl.json diff --git a/BoilerPlate/i18n/uk.json b/i18n/uk.json similarity index 100% rename from BoilerPlate/i18n/uk.json rename to i18n/uk.json diff --git a/BoilerPlate/i18n/yi.json b/i18n/yi.json similarity index 100% rename from BoilerPlate/i18n/yi.json rename to i18n/yi.json diff --git a/BoilerPlate/i18n/zh-hans.json b/i18n/zh-hans.json similarity index 100% rename from BoilerPlate/i18n/zh-hans.json rename to i18n/zh-hans.json diff --git a/BoilerPlate/i18n/zh-hant.json b/i18n/zh-hant.json similarity index 100% rename from BoilerPlate/i18n/zh-hant.json rename to i18n/zh-hant.json diff --git a/BoilerPlate/modules/ext.BoilerPlate.foo.css b/modules/ext.BoilerPlate.foo.css similarity index 100% rename from BoilerPlate/modules/ext.BoilerPlate.foo.css rename to modules/ext.BoilerPlate.foo.css diff --git a/BoilerPlate/modules/ext.BoilerPlate.foo.js b/modules/ext.BoilerPlate.foo.js similarity index 100% rename from BoilerPlate/modules/ext.BoilerPlate.foo.js rename to modules/ext.BoilerPlate.foo.js diff --git a/BoilerPlate/modules/ext.BoilerPlate.js b/modules/ext.BoilerPlate.js similarity index 100% rename from BoilerPlate/modules/ext.BoilerPlate.js rename to modules/ext.BoilerPlate.js diff --git a/BoilerPlate/package.json b/package.json similarity index 100% rename from BoilerPlate/package.json rename to package.json diff --git a/BoilerPlate/specials/SpecialHelloWorld.php b/specials/SpecialHelloWorld.php similarity index 100% rename from BoilerPlate/specials/SpecialHelloWorld.php rename to specials/SpecialHelloWorld.php -- To view, visit https://gerrit.wikimedia.org/r/226258 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: I8f7b7cb02161bd582a7314040f25583eaafbaee6 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/BoilerPlate Gerrit-Branch: master Gerrit-Owner: Spage <[email protected]> _______________________________________________ MediaWiki-commits mailing list [email protected] https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits
