tosfos has uploaded a new change for review. ( https://gerrit.wikimedia.org/r/334027 )
Change subject: Initial commit ...................................................................... Initial commit Change-Id: Ic3c26955a2941afcc03927799ed0df0a0d6d2c76 --- A .eslintrc.json A .gitignore A Gruntfile.js A README.md A ShowMe.class.php A ShowMe.hooks.php A ShowMe.php A composer.json A extension.json A i18n/en.json A i18n/qqq.json A modules/ext.showMe.js A package.json A phpcs.xml 14 files changed, 293 insertions(+), 0 deletions(-) git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/ShowMe refs/changes/27/334027/1 diff --git a/.eslintrc.json b/.eslintrc.json new file mode 100644 index 0000000..4843240 --- /dev/null +++ b/.eslintrc.json @@ -0,0 +1,10 @@ +{ + "extends": "wikimedia", + "env": { + "browser": true, + "jquery": true + }, + "globals": { + "mediaWiki": false + } +} diff --git a/.gitignore b/.gitignore new file mode 100644 index 0000000..59a2a36 --- /dev/null +++ b/.gitignore @@ -0,0 +1,6 @@ +.*.swp +*~ +/.project +/composer.lock +/vendor +/node_modules diff --git a/Gruntfile.js b/Gruntfile.js new file mode 100644 index 0000000..c30a729 --- /dev/null +++ b/Gruntfile.js @@ -0,0 +1,29 @@ +/* eslint-env node */ +module.exports = function ( grunt ) { + grunt.loadNpmTasks( 'grunt-eslint' ); + grunt.loadNpmTasks( 'grunt-jsonlint' ); + grunt.loadNpmTasks( 'grunt-banana-checker' ); + + grunt.initConfig( { + eslint: { + all: [ + '*.js', + '**/*.js', + '!node_modules/**' + ] + }, + banana: { + all: 'i18n/' + }, + jsonlint: { + all: [ + '**/*.json', + '!node_modules/**', + '!vendor/**' + ] + } + } ); + + grunt.registerTask( 'test', [ 'eslint', 'jsonlint', 'banana' ] ); + grunt.registerTask( 'default', 'test' ); +}; diff --git a/README.md b/README.md new file mode 100644 index 0000000..4f59de1 --- /dev/null +++ b/README.md @@ -0,0 +1 @@ +This is a MediaWiki extension. Find the docs [https://www.mediawiki.org/wiki/Extension:ShowMe here]. diff --git a/ShowMe.class.php b/ShowMe.class.php new file mode 100644 index 0000000..45b2a06 --- /dev/null +++ b/ShowMe.class.php @@ -0,0 +1,54 @@ +<?php +/** + * + * @author Ike Hecht <tos...@yahoo.com> + */ +class ShowMe { + private $type; + private $name; + private $options; + static protected $num = 0; + + /** + * + * @param string $type The type of input field, currently must be 'dropdown' + * @param string $name The name and ID to be assigned to the input field + * @param array $options Use the form label => value + * @param ParserOutput $out + */ + function __construct( $type, $name, array $options, ParserOutput $out ) { + $this->type = $type; + $this->name = $name; + $this->options = $options; + + // Add this $name to he array of ShowMe field IDs that exist on this page + $configVars = $out->getJsConfigVars(); + $configVars['wgShowMeDropdownIDs'][] = $name; + $out->addJsConfigVars( 'wgShowMeDropdownIDs', $configVars['wgShowMeDropdownIDs'] ); + } + + /** + * Get the output HTML + * + * @return string + */ + public function getHTML() { + // Theoretically, other types may be added in the future, such as radio buttons. + if ( $this->type == 'dropdown' ) { + return $this->getDropdownHTML(); + } + // invalid type + return ''; // Throw error? + } + + /** + * Get the output HTML for a dropdown + * + * @return string + */ + protected function getDropdownHTML() { + $select = new XmlSelect( $this->name, $this->name ); + $select->addOptions( $this->options ); + return $select->getHTML(); + } +} diff --git a/ShowMe.hooks.php b/ShowMe.hooks.php new file mode 100644 index 0000000..4109ced --- /dev/null +++ b/ShowMe.hooks.php @@ -0,0 +1,57 @@ +<?php +/** + * Hooks for ShowMe extension + * + * @file + * @ingroup Extensions + */ + +class ShowMeHooks { + + /** + * + * @param Parser $parser + * @return bool + */ + public static function onParserFirstCallInit( Parser &$parser ) { + $parser->setHook( 'showme', [ __CLASS__, 'showMeRender' ] ); + return true; + } + + /** + * + * @staticvar int $num + * @param string $input + * @param array $args + * @param Parser $parser + * @param PPFrame $frame + * @return string Output HTML + */ + public static function showMeRender( $input, array $args, Parser $parser, PPFrame $frame ) { + $parser->getOutput()->addModuleScripts( 'ext.showMe' ); + + $options = []; + $lines = StringUtils::explode( "\n", $input ); + foreach ( $lines as $line ) { + $bits = StringUtils::explodeMarkup( '|', $line ); + if ( count( $bits ) < 2 ) { + continue; + // throw error instead? + } + $options[$bits[0]] = $bits[1]; + } + + // If the user supplied an ID, use it. Otherwise, generate one. + if ( isset( $args['name'] ) ) { + $name = $args['name']; + } else { + static $num = 0; + // Add a num to the HTML ID in case there is more than one ShowMe field on this page. + // Iterate after getting num. + $name = 'showme-dropdown' . '-' . $num++; + } + + $showMe = new ShowMe( 'dropdown', $name, $options, $parser->getOutput() ); + return $showMe->getHTML(); + } +} diff --git a/ShowMe.php b/ShowMe.php new file mode 100644 index 0000000..3d48c85 --- /dev/null +++ b/ShowMe.php @@ -0,0 +1,15 @@ +<?php + +if ( function_exists( 'wfLoadExtension' ) ) { + wfLoadExtension( 'ShowMe' ); + // Keep i18n globals so mergeMessageFileList.php doesn't break + $wgMessagesDirs['ShowMe'] = __DIR__ . '/i18n'; + $wgExtensionMessagesFiles['ShowMeAlias'] = __DIR__ . '/ShowMe.i18n.alias.php'; + wfWarn( + 'Deprecated PHP entry point used for ShowMe extension. Please use wfLoadExtension ' . + 'instead, see https://www.mediawiki.org/wiki/Extension_registration for more details.' + ); + return true; +} else { + die( 'This version of the ShowMe extension requires MediaWiki 1.25+' ); +} diff --git a/composer.json b/composer.json new file mode 100644 index 0000000..98d41d9 --- /dev/null +++ b/composer.json @@ -0,0 +1,13 @@ +{ + "require-dev": { + "jakub-onderka/php-parallel-lint": "0.9.2", + "mediawiki/mediawiki-codesniffer": "0.7.2" + }, + "scripts": { + "fix": "phpcbf", + "test": [ + "parallel-lint . --exclude vendor", + "phpcs -p -s" + ] + } +} diff --git a/extension.json b/extension.json new file mode 100644 index 0000000..2ad264b --- /dev/null +++ b/extension.json @@ -0,0 +1,41 @@ +{ + "name": "ShowMe", + "version": "0.0.1", + "author": [ + "Ike Hecht" + ], + "url": "https://www.mediawiki.org/wiki/Extension:ShowMe", + "descriptionmsg": "showme-desc", + "license-name": "GPL-2.0+", + "type": "parserhook", + "requires": { + "MediaWiki": ">= 1.25.0" + }, + "AutoloadClasses": { + "ShowMe": "ShowMe.class.php", + "ShowMeHooks": "ShowMe.hooks.php" + }, + "Hooks": { + "ParserFirstCallInit": [ + "ShowMeHooks::onParserFirstCallInit" + ] + }, + "MessagesDirs": { + "ShowMe": [ + "i18n" + ] + }, + "ResourceModules": { + "ext.showMe": { + "scripts": [ + "modules/ext.showMe.js" + ], + "position": "bottom" + } + }, + "ResourceFileModulePaths": { + "localBasePath": "", + "remoteExtPath": "ShowMe" + }, + "manifest_version": 1 +} diff --git a/i18n/en.json b/i18n/en.json new file mode 100644 index 0000000..db650ef --- /dev/null +++ b/i18n/en.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "tosfos" + ] + }, + "showme-desc": "Shows or hides selected elements on the page" +} diff --git a/i18n/qqq.json b/i18n/qqq.json new file mode 100644 index 0000000..87ff7fc --- /dev/null +++ b/i18n/qqq.json @@ -0,0 +1,8 @@ +{ + "@metadata": { + "authors": [ + "tosfos" + ] + }, + "showme-desc": "{{desc|name=ShowMe|url=https://www.mediawiki.org/wiki/Extension:ShowMe}}" +} diff --git a/modules/ext.showMe.js b/modules/ext.showMe.js new file mode 100644 index 0000000..156a5d9 --- /dev/null +++ b/modules/ext.showMe.js @@ -0,0 +1,30 @@ +( function ( mw, $ ) { + var i, dropdowns = mw.config.get( 'wgShowMeDropdownIDs' ); + + function showMe( id ) { + var dropdown, options, i; + dropdown = document.getElementById( id ); + if ( dropdown === null ) { + return; + } else { + options = dropdown.options; + } + $( '.' + options[ 0 ].value ).show(); + for ( i = 1; i < options.length; i++ ) { + $( '.' + options[ i ].value ).hide(); + } + $( '#' + id ).change( function () { + for ( i = 0; i < options.length; i++ ) { + if ( options[ i ].value === this.value ) { + $( '.' + this.value ).show(); + } else { + $( '.' + options[ i ].value ).hide(); + } + } + } ); + } + + for ( i = 0; i < dropdowns.length; i++ ) { + showMe( dropdowns[ i ] ); + } +}( mediaWiki, jQuery ) ); diff --git a/package.json b/package.json new file mode 100644 index 0000000..e7a5f92 --- /dev/null +++ b/package.json @@ -0,0 +1,13 @@ +{ + "private": true, + "scripts": { + "test": "grunt test" + }, + "devDependencies": { + "grunt": "1.0.1", + "grunt-banana-checker": "0.5.0", + "grunt-eslint": "19.0.0", + "eslint-config-wikimedia": "0.3.0", + "grunt-jsonlint": "1.1.0" + } +} diff --git a/phpcs.xml b/phpcs.xml new file mode 100644 index 0000000..d81a292 --- /dev/null +++ b/phpcs.xml @@ -0,0 +1,8 @@ +<?xml version="1.0"?> +<ruleset> + <rule ref="vendor/mediawiki/mediawiki-codesniffer/MediaWiki"/> + <file>.</file> + <arg name="extensions" value="php,php5,inc"/> + <arg name="encoding" value="utf8"/> + <exclude-pattern>vendor</exclude-pattern> +</ruleset> -- To view, visit https://gerrit.wikimedia.org/r/334027 To unsubscribe, visit https://gerrit.wikimedia.org/r/settings Gerrit-MessageType: newchange Gerrit-Change-Id: Ic3c26955a2941afcc03927799ed0df0a0d6d2c76 Gerrit-PatchSet: 1 Gerrit-Project: mediawiki/extensions/ShowMe Gerrit-Branch: master Gerrit-Owner: tosfos <tos...@yahoo.com> _______________________________________________ MediaWiki-commits mailing list MediaWiki-commits@lists.wikimedia.org https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits