r104698 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r104697‎ | r104698 | r104699 >
Date:16:03, 30 November 2011
Author:reedy
Status:ok
Tags:
Comment:
Branching ApiSandbox for 1.18wmf1
Modified paths:
  • /branches/wmf/1.18wmf1/extensions/ApiSandbox (added) (history)

Diff [purge]

Index: branches/wmf/1.18wmf1/extensions/ApiSandbox/SpecialApiSandbox.php
@@ -0,0 +1,206 @@
 2+<?php
 3+
 4+class SpecialApiSandbox extends SpecialPage {
 5+
 6+ /**
 7+ * @var ApiQuery
 8+ */
 9+ private $apiQuery;
 10+ /**
 11+ * Constructor
 12+ */
 13+ public function __construct() {
 14+ parent::__construct( 'ApiSandbox', '', true );
 15+ }
 16+
 17+ /**
 18+ * Main execution function
 19+ * @param $par Parameters passed to the page
 20+ */
 21+ public function execute( $par ) {
 22+ global $wgEnableAPI;
 23+
 24+ $out = $this->getContext()->getOutput();
 25+
 26+ if ( !$wgEnableAPI ) {
 27+ $out->showErrorPage( 'error', 'apisb-api-disabled' );
 28+ }
 29+
 30+ $this->setHeaders();
 31+ $out->addModules( 'ext.apiSandbox' );
 32+
 33+ $out->addHTML( '<noscript>' . wfMessage( 'apisb-no-js' )->parse() . '</noscript>
 34+<div id="api-sandbox-content" style="display: none">' );
 35+ $out->addWikiMsg( 'apisb-intro' );
 36+ $out->addHTML( $this->openFieldset( 'parameters' )
 37+ . $this->getInputs()
 38+ . '</fieldset>'
 39+ . $this->openFieldset( 'result' )
 40+ . '<table class="api-sandbox-result-container"><tbody>
 41+'
 42+ . '<tr><td class="api-sandbox-result-label"><label for="api-sandbox-url">'
 43+ . wfMessage( 'apisb-request-url' )->parse() . '</label></td>'
 44+ . '<td><input id="api-sandbox-url" readonly="readonly" /></td></tr>
 45+'
 46+ . '<tr id="api-sandbox-post-row"><td class="api-sandbox-result-label"><label for="api-sandbox-post">'
 47+ . wfMessage( 'apisb-request-post' )->parse() . '</label></td>'
 48+ . '<td><input id="api-sandbox-post" readonly="readonly" /></td></tr>
 49+'
 50+ . '<tr><td colspan="2"><div id="api-sandbox-output"></div></td></tr>'
 51+ . "\n</tbody></table>"
 52+ . "\n</fieldset>" );
 53+
 54+ $out->addHTML( "\n</div>" ); # <div id="api-sandbox-content">
 55+ }
 56+
 57+ /**
 58+ * @return string
 59+ */
 60+ private function getInputs() {
 61+ global $wgEnableWriteAPI;
 62+
 63+ $apiMain = new ApiMain( new FauxRequest( array() ), $wgEnableWriteAPI );
 64+ $this->apiQuery = new ApiQuery( $apiMain, 'query' );
 65+ $formats = array_filter( array_keys( $apiMain->getFormats() ),
 66+ 'SpecialApiSandbox::filterFormats' );
 67+ sort( $formats );
 68+ $modules = array_keys( $apiMain->getModules() );
 69+ sort( $modules );
 70+ $key = array_search( 'query', $modules );
 71+ if ( $key !== false ) {
 72+ array_splice( $modules, $key, 1 );
 73+ array_unshift( $modules, 'query' );
 74+ }
 75+ $queryModules = array_merge(
 76+ $this->getQueryModules( 'list' ),
 77+ $this->getQueryModules( 'prop' ),
 78+ $this->getQueryModules( 'meta' )
 79+ );
 80+
 81+ $s = '<table class="api-sandbox-options">
 82+<tbody>
 83+';
 84+ $s .= '<tr><td class="api-sandbox-label"><label for="api-sandbox-format">format=</label></td><td class="api-sandbox-value">'
 85+ . self::getSelect( 'format', $formats, 'json' )
 86+ . '</td><td></td></tr>
 87+';
 88+ $s .= '<tr><td class="api-sandbox-label"><label for="api-sandbox-action">action=</label></td><td class="api-sandbox-value">'
 89+ . self::getSelect( 'action', $modules )
 90+ . '</td><td id="api-sandbox-help" rowspan="2"></td></tr>
 91+';
 92+ $s .= '<tr id="api-sandbox-query-row" style="display: none"><td class="api-sandbox-label">'
 93+ . '</td><td class="api-sandbox-value">'
 94+ . self::getSelect( 'query', $queryModules )
 95+ . '</td></tr>
 96+</table>
 97+';
 98+ $s .= '<div id="api-sandbox-main-inputs"></div><div id="api-sandbox-query-inputs" style="display: none"></div>'
 99+ . $this->openFieldset( 'generic-parameters' )
 100+ . '<div id="api-sandbox-generic-inputs" class="mw-collapsible mw-collapsed"></div></fieldset>'
 101+ . $this->openFieldset( 'generator-parameters', array( 'style' => 'display: none;' ) )
 102+ . '<div id="api-sandbox-generator-inputs"></div></fieldset>
 103+';
 104+
 105+ $s .= Html::element( 'input',
 106+ array(
 107+ 'type' => 'button',
 108+ 'id' => 'api-sandbox-submit',
 109+ 'value' => wfMessage( 'apisb-submit' )->text(),
 110+ 'disabled' => 'disabled',
 111+ )
 112+ ) . "\n";
 113+ return $s;
 114+ }
 115+
 116+ /**
 117+ * @param $type string
 118+ * @return array
 119+ */
 120+ private function getQueryModules( $type ) {
 121+ $res = array();
 122+ $params = $this->apiQuery->getAllowedParams();
 123+ foreach ( $params[$type][ApiBase::PARAM_TYPE] as $module ) {
 124+ $res[] = array(
 125+ 'value' => "$type=$module",
 126+ 'text' => /* &nbsp; x 3 */ "\xc2\xa0\xc2\xa0\xc2\xa0$type=$module",
 127+ );
 128+ }
 129+ sort( $res );
 130+ array_unshift( $res,
 131+ array(
 132+ 'value' => "-$type-",
 133+ 'text' => wfMessage( "apisb-query-$type" )->parse(),
 134+ 'attributes' => array( 'disabled' => 'disabled' )
 135+ )
 136+ );
 137+
 138+ return $res;
 139+ }
 140+
 141+ /**
 142+ * @param $name string
 143+ * @param $items array
 144+ * @param $default bool
 145+ * @return string
 146+ */
 147+ private static function getSelect( $name, $items, $default = false ) {
 148+ $s = Html::openElement( 'select', array(
 149+ 'class' => 'api-sandbox-input',
 150+ 'name' => $name,
 151+ 'id' => "api-sandbox-$name" )
 152+ );
 153+ if ( $default === false ) {
 154+ $s .= "\n\t" . self::option( '-', wfMessage( "apisb-select-$name" )->text(),
 155+ array( 'selected' => 'selected' )
 156+ );
 157+ }
 158+ foreach ( $items as $item ) {
 159+ $attributes = array();
 160+ if ( is_array( $item ) ) {
 161+ $value = $item['value'];
 162+ $text = $item['text'];
 163+ $attributes = isset( $item['attributes'] ) ? $item['attributes'] : array();
 164+ } else {
 165+ $value = $text = $item;
 166+ }
 167+ if ( $value === $default ) {
 168+ $attributes['selected'] = 'selected';
 169+ }
 170+ $s .= "\n\t" . self::option( $value, $text, $attributes );
 171+ }
 172+ $s .= "\n" . Html::closeElement( 'select' ) . "\n";
 173+ return $s;
 174+ }
 175+
 176+ /**
 177+ * @param $value string
 178+ * @param $text string
 179+ * @param $attributes array
 180+ * @return string
 181+ */
 182+ private static function option( $value, $text, $attributes = array() ) {
 183+ $attributes['value'] = $value;
 184+ return Html::element( 'option', $attributes, $text );
 185+ }
 186+
 187+ /**
 188+ * @param $name string
 189+ * @param $attribs Array
 190+ * @return string
 191+ */
 192+ private function openFieldset( $name, $attribs = array() ) {
 193+ return "\n" . Html::openElement( 'fieldset', array( 'id' => "api-sandbox-$name" ) + $attribs )
 194+ . "\n\t" . Html::rawElement( 'legend', array(), wfMessage( "apisb-$name" )->parse() )
 195+ . "\n";
 196+ }
 197+
 198+ /**
 199+ * Callback that returns false if its argument (format name) ends with 'fm'
 200+ *
 201+ * @param $value string
 202+ * @return boolean
 203+ */
 204+ private static function filterFormats( $value ) {
 205+ return !preg_match( '/fm$/', $value );
 206+ }
 207+}
\ No newline at end of file
Property changes on: branches/wmf/1.18wmf1/extensions/ApiSandbox/SpecialApiSandbox.php
___________________________________________________________________
Added: svn:eol-style
1208 + native
Index: branches/wmf/1.18wmf1/extensions/ApiSandbox/ext.apiSandbox.js
@@ -0,0 +1,431 @@
 2+jQuery( function( $ ) {
 3+ /**
 4+ * Class that creates inputs for a query and builds request data
 5+ *
 6+ * Constructor
 7+ * @param $container {jQuery} Container to put UI into
 8+ * @param info {Object} Query information
 9+ * @param prefix {String} Additional prefix for parameter names
 10+ */
 11+ function UiBuilder( $container, info, prefix, params ) {
 12+ this.$container = $container;
 13+ this.info = info;
 14+ this.prefix = prefix + info.prefix;
 15+ this.params = isset( params ) ? params : info.parameters;
 16+
 17+ this.createInputs();
 18+ }
 19+
 20+ UiBuilder.prototype = {
 21+ /**
 22+ * Creates inputs and places them into container
 23+ */
 24+ createInputs: function() {
 25+ var s = '<table class="api-sandbox-options">\n<tbody>';
 26+ for ( var i = 0; i < this.params.length; i++ ) {
 27+ var param = this.params[i],
 28+ name = this.prefix + param.name;
 29+
 30+ s += '<tr><td class="api-sandbox-label">'
 31+ + mw.html.element( 'label', { 'for': 'param-' + name }, name + '=' )
 32+ + '</td><td class="api-sandbox-value">' + this.input( param, name )
 33+ + '</td><td>' + smartEscape( param.description ) + '</td></tr>';
 34+ }
 35+ s += '\n</tbody>\n</table>\n';
 36+ this.$container.html( s );
 37+ },
 38+
 39+ /**
 40+ * Adds module help to a container
 41+ * @param $container {jQuery} Container to use
 42+ */
 43+ setHelp: function( $container ) {
 44+ var desc = smartEscape( this.info.description );
 45+ if ( isset( this.info.helpurls ) && isset( this.info.helpurls[0] ) && this.info.helpurls[0] ) {
 46+ desc = desc.replace( /^([^\r\n\.]*)/,
 47+ mw.html.element( 'a', { 'target': '_blank', 'href': this.info.helpurls[0] }, '$1' )
 48+ );
 49+ }
 50+ $container.html( desc );
 51+ },
 52+
 53+ input: function( param, name ) {
 54+ var s,
 55+ value = '';
 56+ switch ( param.type ) {
 57+ case 'limit':
 58+ value = 10;
 59+ case 'user':
 60+ case 'timestamp':
 61+ case 'integer':
 62+ case 'string':
 63+ s = mw.html.element( 'input', { 'class': 'api-sandbox-input', 'id': 'param-' + name, 'value': value } );
 64+ break;
 65+ case 'bool':
 66+ param.type = 'boolean'; // normalisation for later use
 67+ case 'boolean':
 68+ s = mw.html.element( 'input', { 'id': 'param-' + name, 'type': 'checkbox' } );
 69+ break;
 70+ case 'namespace':
 71+ param.type = namespaces;
 72+ default:
 73+ if ( typeof param.type == 'object' ) {
 74+ var id = 'param-' + name,
 75+ attributes = { 'id': id };
 76+ if ( isset( param.multi ) ) {
 77+ attributes.multiple = 'multiple';
 78+ s = this.select( param.type, attributes, false );
 79+ } else {
 80+ s = this.select( param.type, attributes, true );
 81+ }
 82+ } else {
 83+ s = mw.html.element( 'code', {}, mw.msg( 'parentheses', param.type ) );
 84+ }
 85+ }
 86+ return s;
 87+ },
 88+
 89+ select: function( values, attributes, selected ) {
 90+ attributes['class'] = 'api-sandbox-input';
 91+ if ( isset( attributes.multiple ) ) {
 92+ attributes['size'] = Math.min( values.length, 10 );
 93+ }
 94+ var s = '';
 95+ if ( typeof selected != 'array' ) {
 96+ if ( selected ) {
 97+ s += mw.html.element( 'option', { value: '', selected: 'selected' }, mw.msg( 'apisb-select-value' ) );
 98+ }
 99+ selected = [];
 100+ }
 101+ for ( var i = 0; i < values.length; i++ ) {
 102+ var value = typeof values[i] == 'object' ? values[i].key : values[i],
 103+ face = typeof values[i] == 'object' ? values[i].value : values[i],
 104+ attrs = { 'value': value };
 105+ if ( $.inArray( value, selected ) >= 0 ) {
 106+ attrs.selected = 'selected';
 107+ }
 108+ s += '\n' + mw.html.element( 'option', attrs, face );
 109+ }
 110+ s = mw.html.element( 'select', attributes, new mw.html.Raw( s ) );
 111+ return s;
 112+ },
 113+
 114+ getRequestData: function() {
 115+ var params = '';
 116+ for ( var i = 0; i < this.params.length; i++ ) {
 117+ var param = this.params[i],
 118+ name = this.prefix + param.name,
 119+ $node = $( '#param-' + name );
 120+ if ( param.type == 'boolean' ) {
 121+ if ( $node.is( ':checked' ) ) {
 122+ params += '&' + name;
 123+ }
 124+ } else {
 125+ var value = $node.val();
 126+ if ( !isset( value ) || value == '' || value == null ) {
 127+ continue;
 128+ }
 129+ if ( $.isArray( value ) ) {
 130+ value = value.join( '|' );
 131+ }
 132+ params += '&' + encodeURIComponent( name ) + '=' + encodeURIComponent( value );
 133+ }
 134+ }
 135+ return params;
 136+ }
 137+ } // end of UiBuilder.prototype
 138+
 139+ var $content = $( '#api-sandbox-content' );
 140+ if ( !$content.length ) {
 141+ return;
 142+ }
 143+ $content.show();
 144+
 145+ // page elements
 146+ var $format = $( '#api-sandbox-format' ),
 147+ $action = $( '#api-sandbox-action' ),
 148+ $query = $( '#api-sandbox-query' ),
 149+ $queryRow = $( '#api-sandbox-query-row' ),
 150+ $help = $( '#api-sandbox-help' ),
 151+ $mainContainer = $( '#api-sandbox-main-inputs' ),
 152+ $genericContainer, // will be set later
 153+ $generatorContainer = $( '#api-sandbox-generator-inputs' ),
 154+ $queryContainer = $( '#api-sandbox-query-inputs' ),
 155+ $generatorBox = $( '#api-sandbox-generator-parameters' ),
 156+ $submit = $( '#api-sandbox-submit' ),
 157+ $requestUrl = $( '#api-sandbox-url' ),
 158+ $requestPost = $( '#api-sandbox-post' ),
 159+ $output = $( '#api-sandbox-output' ),
 160+ $postRow = $( '#api-sandbox-post-row' );
 161+
 162+ // UiBuilder objects
 163+ var mainRequest,
 164+ genericRequest,
 165+ generatorRequest,
 166+ queryRequest;
 167+
 168+ // cached stuff
 169+ var paramInfo = { modules: {}, querymodules: {} },
 170+ namespaces = [];
 171+
 172+ // load namespaces
 173+ $.getJSON( mw.util.wikiScript( 'api' ),
 174+ { format: 'json', action: 'query', meta: 'siteinfo', siprop: 'namespaces' },
 175+ function( data ) {
 176+ if ( isset( data.query ) && isset( data.query.namespaces ) ) {
 177+ for ( var id in data.query.namespaces ) {
 178+ if ( id < 0 ) {
 179+ continue;
 180+ }
 181+ var ns = data.query.namespaces[id]['*'];
 182+ if ( ns == '' ) {
 183+ ns = mw.msg( 'apisb-ns-main' );
 184+ }
 185+ namespaces.push( { key: id, value: ns } );
 186+ }
 187+ } else {
 188+ showLoadError( $mainContainer, 'apisb-namespaces-error' );
 189+ }
 190+ }
 191+ );
 192+
 193+ // load stuff we need from the beginning
 194+ getParamInfo( { mainmodule: 1, pagesetmodule: 1, modules: 'query' },
 195+ function() {},
 196+ function() {
 197+ paramInfo.mainmodule.parameters = paramInfo.mainmodule.parameters.slice( 2 ); // remove format and action
 198+ paramInfo.modules.query.parameters = paramInfo.modules.query.parameters.slice( 3 );
 199+ $genericContainer = $( '#api-sandbox-generic-inputs > div' );
 200+ genericRequest = new UiBuilder( $genericContainer, paramInfo.mainmodule, '' );
 201+ queryRequest = new UiBuilder( $queryContainer, paramInfo.modules.query, '',
 202+ [].concat( paramInfo.modules.query.parameters, paramInfo.pagesetmodule.parameters )
 203+ );
 204+ },
 205+ function() {}
 206+ );
 207+
 208+ $action.change( updateUI );
 209+ $query.change( updateUI );
 210+
 211+ $( '#param-generator' ).live( 'change', function() {
 212+ var generator = $( '#param-generator' ).val();
 213+ if ( generator == '' ) {
 214+ $generatorBox.hide();
 215+ } else {
 216+ $generatorBox.show();
 217+ getParamInfo( { querymodules: generator },
 218+ function() { showLoading( $generatorContainer ); },
 219+ function() {
 220+ generatorRequest = new UiBuilder( $generatorContainer, paramInfo.querymodules[generator], 'g' );
 221+ },
 222+ function() {
 223+ showLoadError( $generatorContainer, 'apisb-request-error' );
 224+ }
 225+ );
 226+ }
 227+ } );
 228+
 229+ $submit.click( function() {
 230+ var url = mw.util.wikiScript( 'api' ) + '?action=' + $action.val(),
 231+ params = mainRequest.getRequestData(),
 232+ mustBePosted = isset( mainRequest.info.mustbeposted );
 233+ if ( $action.val() == 'query' ) {
 234+ url += '&' + $query.val();
 235+ params += queryRequest.getRequestData();
 236+ }
 237+ url += '&format=' + $format.val();
 238+
 239+ params += genericRequest.getRequestData();
 240+ if ( $( '#param-generator' ).length && $( '#param-generator' ).val() != '' ) {
 241+ params += generatorRequest.getRequestData();
 242+ }
 243+
 244+ showLoading( $output );
 245+ if ( mustBePosted ) {
 246+ $requestUrl.val( url );
 247+ if ( params.length > 0 ) {
 248+ params = params.substr( 1 ); // remove leading &
 249+ }
 250+ $requestPost.val( params );
 251+ $postRow.show();
 252+ } else {
 253+ $requestUrl.val( url + params );
 254+ $postRow.hide();
 255+ }
 256+ url = url.replace( /(&format=[^&]+)/, '$1fm' );
 257+ var data = {
 258+ url: url,
 259+ data: params,
 260+ dataType: 'text',
 261+ type: mustBePosted ? 'POST' : 'GET',
 262+ success: function( data ) {
 263+ var match = data.match( /<pre>[\s\S]*<\/pre>/ );
 264+ if ( $.isArray( match ) ) {
 265+ data = match[0];
 266+ } else {
 267+ // some actions don't honor user-specified format
 268+ data = '<pre>' + mw.html.escape( data ) + '</pre>';
 269+ }
 270+ $output.html( data );
 271+ },
 272+ error: function( jqXHR, textStatus, errorThrown ) {
 273+ showLoadError( $output, 'apisb-request-error' );
 274+ }
 275+ };
 276+ $.ajax( data );
 277+ });
 278+
 279+ /**
 280+ * Shamelessly borrowed from PHP
 281+ */
 282+ function isset( x ) {
 283+ return typeof x != 'undefined';
 284+ }
 285+
 286+ /**
 287+ * Merges several objects into one that gets returned
 288+ */
 289+ function merge( /* ... */ ) {
 290+ var res = {};
 291+ for ( var i = 0; i < arguments.length; i++ ) {
 292+ $.extend( res, arguments[i] );
 293+ }
 294+ return res;
 295+ }
 296+
 297+ function showLoading( $element ) {
 298+ $element.html(
 299+ mw.html.element( 'img',
 300+ { src: mw.config.get( 'stylepath' ) + '/common/images/spinner.gif', alt: '' } )
 301+ + mw.html.escape( mw.msg( 'apisb-loading' ) ) );
 302+ }
 303+
 304+ function showLoadError( $element, message ) {
 305+ $element.html( mw.html.element( 'span', { 'class': 'error' }, mw.msg( message ) ) );
 306+ }
 307+
 308+ function getParamInfo( what, loadCallback, completeCallback, errorCallback ) {
 309+ var needed = {};
 310+ for ( var param in what ) {
 311+ if ( !isset( paramInfo[param] ) ) {
 312+ needed[param] = what[param];
 313+ } else if (typeof needed[param] == 'object' ) {
 314+ for ( var subParam in param ) {
 315+ if ( !isset( paramInfo[param][subParam] ) ) {
 316+ needed[param][subParam] = what[param][subParam];
 317+ }
 318+ }
 319+ } else {
 320+ needed[param] = what[param];
 321+ }
 322+ }
 323+ if ( $.isEmptyObject( needed ) ) {
 324+ completeCallback();
 325+ } else {
 326+ loadCallback();
 327+ needed.format = 'json';
 328+ needed.action = 'paraminfo';
 329+ $.getJSON(
 330+ mw.util.wikiScript( 'api' ),
 331+ needed,
 332+ function( data ) {
 333+ if ( data.error || !data.paraminfo ) {
 334+ errorCallback();
 335+ return;
 336+ }
 337+ for ( var prop in data.paraminfo ) {
 338+ if ( !isset( paramInfo[prop] ) ) {
 339+ paramInfo[prop] = data.paraminfo[prop];
 340+ } else {
 341+ for ( var i = 0; i < data.paraminfo[prop].length; i++ ) {
 342+ var info = data.paraminfo[prop][i];
 343+ if ( !paramInfo[prop][info.name] ) {
 344+ paramInfo[prop][info.name] = info;
 345+ }
 346+ }
 347+ }
 348+ }
 349+ completeCallback();
 350+ }
 351+ ).error( errorCallback );
 352+ }
 353+ }
 354+
 355+ function updateQueryInfo( action, query ) {
 356+ var isQuery = action == 'query';
 357+ if ( action == '-' || ( isQuery && query == '-' ) ) {
 358+ $submit.attr( 'disabled', 'disabled' );
 359+ return;
 360+ }
 361+ query = query.replace( /^.*=/, '' );
 362+ var data = {};
 363+ if (isQuery ) {
 364+ data.querymodules = query;
 365+ } else {
 366+ data.modules = action;
 367+ }
 368+ getParamInfo( data,
 369+ function() {
 370+ showLoading( $mainContainer );
 371+ $submit.attr( 'disabled', 'disabled' );
 372+ },
 373+ function() {
 374+ var info;
 375+ if ( isQuery ) {
 376+ info = paramInfo.querymodules[query];
 377+ } else {
 378+ info = paramInfo.modules[action];
 379+ }
 380+ mainRequest = new UiBuilder( $mainContainer, info, '' );
 381+ mainRequest.setHelp( $help );
 382+ $submit.removeAttr( 'disabled' );
 383+ },
 384+ function() {
 385+ $submit.removeAttr( 'disabled' );
 386+ showLoadError( $mainContainer, 'apisb-load-error' );
 387+ }
 388+ );
 389+ }
 390+
 391+ /**
 392+ * HTML-escapes and pretty-formats an API description string
 393+ *
 394+ * @param s {String} String to escape
 395+ * @return {String}
 396+ */
 397+ function smartEscape( s ) {
 398+ s = mw.html.escape( s );
 399+ if ( s.indexOf( '\n ' ) >= 0 ) {
 400+ // turns *-bulleted list into a HTML list
 401+ s = s.replace( /^(.*?)((?:\n\s+\*?[^\n]*)+)(.*?)$/m, '$1<ul>$2</ul>$3' ); // outer tags
 402+ s = s.replace( /\n\s+\*?([^\n]*)/g, '\n<li>$1</li>' ); // <li> around bulleted lines
 403+ }
 404+ s = s.replace( /\n(?!<)/, '\n<br/>' );
 405+ return s;
 406+ }
 407+
 408+ /**
 409+ * Updates UI after basic query parameters have been changed
 410+ */
 411+ function updateUI() {
 412+ var a = $action.val(),
 413+ q = $query.val(),
 414+ isQuery = a == 'query';
 415+ if ( isQuery ) {
 416+ $queryRow.show();
 417+ if ( q != '-' ) {
 418+ $queryContainer.show();
 419+ } else {
 420+ $queryContainer.hide();
 421+ }
 422+ } else {
 423+ $queryRow.hide();
 424+ $queryContainer.hide();
 425+ }
 426+ $mainContainer.text( '' );
 427+ $help.text( '' );
 428+ updateQueryInfo( a, q );
 429+ $generatorBox.hide();
 430+ }
 431+
 432+});
Property changes on: branches/wmf/1.18wmf1/extensions/ApiSandbox/ext.apiSandbox.js
___________________________________________________________________
Added: svn:eol-style
1433 + native
Index: branches/wmf/1.18wmf1/extensions/ApiSandbox/ApiSandbox.alias.php
@@ -0,0 +1,44 @@
 2+<?php
 3+/**
 4+ * Aliases for Special:ApiSandbox
 5+ *
 6+ * @file
 7+ * @ingroup Extensions
 8+ */
 9+
 10+$specialPageAliases = array();
 11+
 12+/** English (English) */
 13+$specialPageAliases['en'] = array(
 14+ 'ApiSandbox' => array( 'ApiSandbox' ),
 15+);
 16+
 17+/** Arabic (العربية) */
 18+$specialPageAliases['ar'] = array(
 19+ 'ApiSandbox' => array( 'ساحة_تجربة_إيه_بي_آي' ),
 20+);
 21+
 22+/** Esperanto (Esperanto) */
 23+$specialPageAliases['eo'] = array(
 24+ 'ApiSandbox' => array( 'Provejo_de_API' ),
 25+);
 26+
 27+/** Macedonian (Македонски) */
 28+$specialPageAliases['mk'] = array(
 29+ 'ApiSandbox' => array( 'ApiПесочник' ),
 30+);
 31+
 32+/** Nedersaksisch (Nedersaksisch) */
 33+$specialPageAliases['nds-nl'] = array(
 34+ 'ApiSandbox' => array( 'API-zaandbak' ),
 35+);
 36+
 37+/** Dutch (Nederlands) */
 38+$specialPageAliases['nl'] = array(
 39+ 'ApiSandbox' => array( 'APIZandbak' ),
 40+);
 41+
 42+/**
 43+ * For backwards compatibility with MediaWiki 1.15 and earlier.
 44+ */
 45+$aliases =& $specialPageAliases;
\ No newline at end of file
Property changes on: branches/wmf/1.18wmf1/extensions/ApiSandbox/ApiSandbox.alias.php
___________________________________________________________________
Added: svn:eol-style
146 + native
Index: branches/wmf/1.18wmf1/extensions/ApiSandbox/ApiSandbox.i18n.php
@@ -0,0 +1,1027 @@
 2+<?php
 3+/**
 4+ * Internationalization file for the API sandbox extension.
 5+ *
 6+ * @file
 7+ * @ingroup Extensions
 8+*/
 9+
 10+$messages = array();
 11+
 12+$messages['en'] = array(
 13+ 'apisb-desc' => 'Allows to debug [http://www.mediawiki.org/wiki/API MediaWiki API] calls from browser',
 14+ 'apisandbox' => 'API sandbox',
 15+ 'apisb-no-js' => "'''Error''': this feature requires JavaScript.",
 16+ 'apisb-intro' => "Use this page to experiment with '''MediaWiki API'''.
 17+ Refer to [http://www.mediawiki.org/wiki/API the API documentation] for further details of API usage.",
 18+ 'apisb-api-disabled' => 'API is disabled on this site.',
 19+ 'apisb-parameters' => 'Parameters',
 20+ 'apisb-result' => 'Result',
 21+ 'apisb-request-url' => 'Request URL:',
 22+ 'apisb-request-post' => 'POST data:',
 23+ 'apisb-select-action' => 'Select action',
 24+ 'apisb-select-query' => 'What to query?',
 25+ 'apisb-select-value' => 'Select value',
 26+ 'apisb-loading' => 'Loading...',
 27+ 'apisb-load-error' => 'Error loading API description',
 28+ 'apisb-request-error' => 'Error performing API request',
 29+ 'apisb-namespaces-error' => 'Error loading namespaces',
 30+ 'apisb-ns-main' => '(Main)',
 31+ 'apisb-submit' => 'Make request',
 32+ 'apisb-query-prop' => 'Properties',
 33+ 'apisb-query-list' => 'Lists',
 34+ 'apisb-query-meta' => 'Meta information',
 35+ 'apisb-generic-parameters'=> 'Generic parameters',
 36+ 'apisb-generator-parameters'=> 'Generator',
 37+);
 38+
 39+/** Message documentation (Message documentation)
 40+ * @author EugeneZelenko
 41+ * @author Purodha
 42+ */
 43+$messages['qqq'] = array(
 44+ 'apisb-desc' => '{{desc}}',
 45+ 'apisb-parameters' => '{{Identical|Parameter}}',
 46+ 'apisb-result' => '{{Identical|Result}}',
 47+ 'apisb-request-url' => 'This is about the URL of a request.',
 48+ 'apisb-loading' => '{{Identical|Loading}}',
 49+ 'apisb-query-prop' => '{{Identical|Property}}',
 50+ 'apisb-query-list' => '{{Identical|List}}',
 51+);
 52+
 53+/** Arabic (العربية)
 54+ * @author روخو
 55+ */
 56+$messages['ar'] = array(
 57+ 'apisb-no-js' => "'''خطأ''' : هذه الخاصية تتطلب الجافا سكريبت.",
 58+ 'apisb-result' => 'النتيجة',
 59+ 'apisb-select-action' => 'اختر حدث',
 60+ 'apisb-ns-main' => '(رئيسي)',
 61+ 'apisb-query-prop' => 'الخصائص',
 62+ 'apisb-query-list' => 'قوائم',
 63+ 'apisb-query-meta' => 'معلومات الميتا',
 64+ 'apisb-generator-parameters' => 'مولد',
 65+);
 66+
 67+/** Azerbaijani (Azərbaycanca)
 68+ * @author Cekli829
 69+ * @author Vago
 70+ */
 71+$messages['az'] = array(
 72+ 'apisb-parameters' => 'Parametrlər',
 73+ 'apisb-result' => 'Nəticə',
 74+ 'apisb-loading' => 'Yüklənir…',
 75+ 'apisb-ns-main' => '(Əsas)',
 76+ 'apisb-query-list' => 'Siyahılar',
 77+ 'apisb-query-meta' => 'Meta məlumatları',
 78+);
 79+
 80+/** Belarusian (Taraškievica orthography) (‪Беларуская (тарашкевіца)‬)
 81+ * @author EugeneZelenko
 82+ * @author Jim-by
 83+ * @author Wizardist
 84+ */
 85+$messages['be-tarask'] = array(
 86+ 'apisb-desc' => 'Дазваляе налажваць выклікі [http://www.mediawiki.org/wiki/API MediaWiki API] з браўзэра',
 87+ 'apisandbox' => 'Пясочніца API',
 88+ 'apisb-no-js' => "'''Памылка''': гэтая магчымасьць патрабуе JavaScript.",
 89+ 'apisb-intro' => "Гэтая старонка зьяўляецца экспэрымэнтам з '''MediaWiki API'''.
 90+Зазірніце ў [http://www.mediawiki.org/wiki/API дакумэнтацыю API] для дадатковай інфармацыі па выкарыстаньні API.",
 91+ 'apisb-api-disabled' => 'API забаронены на гэтым сайце.',
 92+ 'apisb-parameters' => 'Парамэтры',
 93+ 'apisb-result' => 'Вынік',
 94+ 'apisb-request-url' => 'URL-адрас запыту:',
 95+ 'apisb-request-post' => 'POST-зьвесткі:',
 96+ 'apisb-select-action' => 'Выбраць дзеяньне',
 97+ 'apisb-select-query' => 'Што запытаць?',
 98+ 'apisb-select-value' => 'Выбраць значэньне',
 99+ 'apisb-loading' => 'Загрузка…',
 100+ 'apisb-load-error' => 'Немагчыма загрузіць апісаньне API',
 101+ 'apisb-request-error' => 'Немагчыма апрацаваць запыт API',
 102+ 'apisb-namespaces-error' => 'Немагчыма загрузіць прасторы назваў',
 103+ 'apisb-ns-main' => '(Асноўная)',
 104+ 'apisb-submit' => 'Зрабіць запыт',
 105+ 'apisb-query-prop' => 'Уласьцівасьці',
 106+ 'apisb-query-list' => 'Сьпісы',
 107+ 'apisb-query-meta' => 'Мэтазьвесткі',
 108+);
 109+
 110+/** Bulgarian (Български)
 111+ * @author DCLXVI
 112+ */
 113+$messages['bg'] = array(
 114+ 'apisb-no-js' => "'''Грешка''': тази функционалност изисква Джаваскрипт.",
 115+ 'apisb-result' => 'Резултат',
 116+ 'apisb-loading' => 'Зареждане...',
 117+);
 118+
 119+/** Breton (Brezhoneg)
 120+ * @author Fulup
 121+ */
 122+$messages['br'] = array(
 123+ 'apisb-desc' => 'Aotren dizreinañ galvadennoù [http://www.mediawiki.org/wiki/API API MediaWikiI] eus ar merdeer',
 124+ 'apisandbox' => 'Poull-traezh API',
 125+ 'apisb-no-js' => "'''Fazi''' : Rekis eo JavaScript evit an arc'hwel-mañ.",
 126+ 'apisb-intro' => "Grit gant ar bajenn-mañ evit amprouiñ '''MediaWiki API'''.
 127+Kit da deuler ur sell war [http://www.mediawiki.org/wiki/API teulioù API] evit gouzout hiroc'h penaos embreger API.",
 128+ 'apisb-api-disabled' => "Diweredekaet eo API war al lec'hienn-mañ.",
 129+ 'apisb-parameters' => 'Arventennoù',
 130+ 'apisb-result' => "Disoc'h",
 131+ 'apisb-request-url' => 'Goulenn URL :',
 132+ 'apisb-request-post' => 'roadennoù POST :',
 133+ 'apisb-select-action' => 'Dibab un ober',
 134+ 'apisb-select-query' => 'Petra glask ?',
 135+ 'apisb-select-value' => 'Dibab an talvoud',
 136+ 'apisb-loading' => 'O kargañ...',
 137+ 'apisb-load-error' => 'Fazi en ur gargañ deskrivadur an API',
 138+ 'apisb-request-error' => 'Ur fazi zo bet o klask seveniñ ar goulenn API',
 139+ 'apisb-namespaces-error' => 'Fazi en ur gargañ an esaouennoù anv',
 140+ 'apisb-ns-main' => '(Pennañ)',
 141+ 'apisb-submit' => 'Sevel ar goulenn',
 142+ 'apisb-query-prop' => 'Perzhioù',
 143+ 'apisb-query-list' => 'Rolloù',
 144+ 'apisb-query-meta' => 'Titouroù Meta',
 145+ 'apisb-generator-parameters' => 'Ganer',
 146+);
 147+
 148+/** Catalan (Català)
 149+ * @author Solde
 150+ */
 151+$messages['ca'] = array(
 152+ 'apisb-parameters' => 'Paràmetres',
 153+ 'apisb-result' => 'Resultat',
 154+);
 155+
 156+/** German (Deutsch)
 157+ * @author Kghbln
 158+ * @author Purodha
 159+ */
 160+$messages['de'] = array(
 161+ 'apisb-desc' => 'Ermöglicht das Beseitigen von Fehlern bei Aufrufen der [http://www.mediawiki.org/wiki/API MediaWiki-API] mit dem Browser',
 162+ 'apisandbox' => 'API-Spielwiese',
 163+ 'apisb-no-js' => "'''Fehler:''' Diese Funktion erfordert JavaSkript.",
 164+ 'apisb-intro' => "Diese Seite für Versuche mit der '''MediaWiki-API''' verwenden.
 165+Die [http://www.mediawiki.org/wiki/API Dokumentation zur API] enthält weitere Hinweise zur Nutzung der API.",
 166+ 'apisb-api-disabled' => 'Die API wurde auf diesem Wiki deaktiviert.',
 167+ 'apisb-parameters' => 'Parameter',
 168+ 'apisb-result' => 'Ergebnis',
 169+ 'apisb-request-url' => 'Anforderungs-URL:',
 170+ 'apisb-request-post' => 'POST-Daten:',
 171+ 'apisb-select-action' => 'Vorgang auswählen',
 172+ 'apisb-select-query' => 'Was soll abgefragt werden?',
 173+ 'apisb-select-value' => 'Wert auswählen',
 174+ 'apisb-loading' => 'Lade …',
 175+ 'apisb-load-error' => 'Fehler beim Laden der API-Beschreibung',
 176+ 'apisb-request-error' => 'Fehler beim Ausführen der API-Anforderung',
 177+ 'apisb-namespaces-error' => 'Fehler beim Laden der Namensräume',
 178+ 'apisb-ns-main' => '(Seiten)',
 179+ 'apisb-submit' => 'Anfrage ausführen',
 180+ 'apisb-query-prop' => 'Eigenschaften',
 181+ 'apisb-query-list' => 'Listen',
 182+ 'apisb-query-meta' => 'Metainformationen',
 183+ 'apisb-generic-parameters' => 'Generische Parameter',
 184+ 'apisb-generator-parameters' => 'Generator',
 185+);
 186+
 187+/** Greek (Ελληνικά)
 188+ * @author Glavkos
 189+ */
 190+$messages['el'] = array(
 191+ 'apisb-parameters' => 'Παράμετροι',
 192+ 'apisb-result' => 'Αποτέλεσμα',
 193+ 'apisb-request-url' => 'Αίτηση URL:',
 194+ 'apisb-select-action' => 'Επιλέξτε ενέργεια',
 195+ 'apisb-select-query' => 'Τι πρέπει να ρωτήσω;',
 196+ 'apisb-select-value' => 'Επιλέξτε τιμή',
 197+ 'apisb-loading' => 'Φόρτωση...',
 198+ 'apisb-namespaces-error' => 'Σφάλμα φόρτωσης ονοματοχώρων',
 199+ 'apisb-ns-main' => '(Κύρια)',
 200+ 'apisb-query-prop' => 'Ιδιότητες',
 201+ 'apisb-query-list' => 'Λίστες',
 202+ 'apisb-query-meta' => 'Πληροφορίες Meta',
 203+);
 204+
 205+/** Esperanto (Esperanto)
 206+ * @author Lucas
 207+ */
 208+$messages['eo'] = array(
 209+ 'apisb-result' => 'Rezulto',
 210+ 'apisb-select-action' => 'Elekti agojn',
 211+ 'apisb-select-value' => 'Elekti valoron',
 212+ 'apisb-loading' => 'Ŝarĝante...',
 213+ 'apisb-query-prop' => 'Ecoj',
 214+ 'apisb-query-list' => 'Listoj',
 215+);
 216+
 217+/** Spanish (Español)
 218+ * @author Fitoschido
 219+ * @author Pvgreenzebra
 220+ */
 221+$messages['es'] = array(
 222+ 'apisb-desc' => 'Permite depurar llamadas a la [http://www.mediawiki.org/wiki/API API de MediaWiki] desde el navegador',
 223+ 'apisb-no-js' => "'''Error ''': esta característica requiere JavaScript.",
 224+ 'apisb-api-disabled' => 'La API está desactivada en este sitio.',
 225+ 'apisb-parameters' => 'Parámetros',
 226+ 'apisb-result' => 'Resultado',
 227+ 'apisb-request-url' => 'URL solicitante:',
 228+ 'apisb-request-post' => 'Datos POST:',
 229+ 'apisb-select-action' => 'Selecciona acción',
 230+ 'apisb-select-query' => '¿Qué consultar?',
 231+ 'apisb-select-value' => 'Seleccionar valor',
 232+ 'apisb-loading' => 'Cargando...',
 233+ 'apisb-load-error' => 'Error al cargar la descripción de la API',
 234+ 'apisb-request-error' => 'Error al realizar la solicitud de API',
 235+ 'apisb-namespaces-error' => 'Error al cargar los espacios de nombres',
 236+ 'apisb-ns-main' => '(Principal)',
 237+ 'apisb-submit' => 'Realizar solicitud',
 238+ 'apisb-query-prop' => 'Propiedades',
 239+ 'apisb-query-list' => 'Listas',
 240+ 'apisb-query-meta' => 'información de Meta',
 241+);
 242+
 243+/** Persian (فارسی)
 244+ * @author Ebraminio
 245+ * @author Leyth
 246+ * @author Mjbmr
 247+ */
 248+$messages['fa'] = array(
 249+ 'apisb-desc' => 'اشکال‌یابی فراخوانی‌های [http://www.mediawiki.org/wiki/API رابط برنامه‌نویسی مدیاویکی] را از طریق مرورگر اجازه می‌دهد',
 250+ 'apisandbox' => 'گودال ماسه‌بازی رابط برنامه‌نویسی',
 251+ 'apisb-no-js' => "'''خطا''': این قابلیت نیازمند جاوااسکریپت است.",
 252+ 'apisb-api-disabled' => 'رابط برنامه‌نویسی در این تارنما غیرفعال شده‌است.',
 253+ 'apisb-parameters' => 'پارامترها',
 254+ 'apisb-result' => 'نتیجه',
 255+ 'apisb-request-url' => 'درخواست آدرس:',
 256+ 'apisb-select-action' => 'انتخاب اقدامات',
 257+ 'apisb-loading' => 'در حال بارگذاری…',
 258+ 'apisb-load-error' => 'خطا در بارگذاری توضیحات ای‌پی‌آی',
 259+ 'apisb-request-error' => 'خطا در اجرای درخواست ای‌پی‌آی',
 260+ 'apisb-namespaces-error' => 'خطا در بارگذاری فضاهای نام',
 261+ 'apisb-ns-main' => '(اصلی)',
 262+ 'apisb-submit' => 'ایجاد درخواست',
 263+ 'apisb-query-list' => 'فهرست‌ها',
 264+ 'apisb-query-meta' => 'اطلاعات متا',
 265+);
 266+
 267+/** French (Français)
 268+ * @author Balzac 40
 269+ * @author Crochet.david
 270+ * @author Grondin
 271+ * @author Verdy p
 272+ */
 273+$messages['fr'] = array(
 274+ 'apisb-desc' => 'Permet de déboguer les appels de l’[http://www.mediawiki.org/wiki/API API de MediaWiki] à partir du navigateur',
 275+ 'apisandbox' => 'Bac à sable API',
 276+ 'apisb-no-js' => "''' Erreur ''': cette fonctionnalité nécessite JavaScript.",
 277+ 'apisb-intro' => "Utilisez cette page pour expérimenter '''MediaWiki API'''.
 278+Reportez-vous sur [http://www.mediawiki.org/wiki/API la documentation de l’API] pour plus de détails sur l’utilisation de l’API.",
 279+ 'apisb-api-disabled' => 'API est désactivé sur ce site.',
 280+ 'apisb-parameters' => 'Paramètres',
 281+ 'apisb-result' => 'Résultat',
 282+ 'apisb-request-url' => 'Requête URL :',
 283+ 'apisb-request-post' => 'données POST :',
 284+ 'apisb-select-action' => 'Sélectionner une action',
 285+ 'apisb-select-query' => 'Que faut-il interroger ?',
 286+ 'apisb-select-value' => 'Sélectionnez la valeur',
 287+ 'apisb-loading' => 'Chargement...',
 288+ 'apisb-load-error' => 'Erreur lors du chargement de description de l’API',
 289+ 'apisb-request-error' => "Erreur lors de l'exécution d'une requête API",
 290+ 'apisb-namespaces-error' => 'Erreur lors du chargement des espaces de noms',
 291+ 'apisb-ns-main' => '(Principal)',
 292+ 'apisb-submit' => 'Faire la demande',
 293+ 'apisb-query-prop' => 'Propriétés',
 294+ 'apisb-query-list' => 'Listes',
 295+ 'apisb-query-meta' => 'Méta-information',
 296+ 'apisb-generic-parameters' => 'Paramètres génériques',
 297+ 'apisb-generator-parameters' => 'Générateur',
 298+);
 299+
 300+/** Franco-Provençal (Arpetan)
 301+ * @author ChrisPtDe
 302+ */
 303+$messages['frp'] = array(
 304+ 'apisb-desc' => 'Pèrmèt d’èliminar les cofieries des apèls de l’[http://www.mediawiki.org/wiki/API API de MediaWiki] dês lo navigator.',
 305+ 'apisandbox' => 'Bouèta de sabla API',
 306+ 'apisb-no-js' => "'''Èrror :''' cela fonccionalitât at fôta de JavaScript.",
 307+ 'apisb-intro' => "Utilisâd ceta pâge por èxpèrimentar avouéc '''MediaWiki API'''.
 308+Reportâd-vos sur [http://www.mediawiki.org/wiki/API la documentacion de l’API] por més de dètalys sur l’usâjo de l’API.",
 309+ 'apisb-api-disabled' => 'API est dèsactivâ sur ceti seto.',
 310+ 'apisb-parameters' => 'Paramètres',
 311+ 'apisb-result' => 'Rèsultat',
 312+ 'apisb-request-url' => 'Requéta URL :',
 313+ 'apisb-request-post' => 'Balyês POST :',
 314+ 'apisb-select-action' => 'Chouèsir una accion',
 315+ 'apisb-select-query' => 'Que fôt-o entèrrogiér ?',
 316+ 'apisb-select-value' => 'Chouèsir la valor',
 317+ 'apisb-loading' => 'Chargement...',
 318+ 'apisb-load-error' => 'Èrror pendent lo chargement de la dèscripcion de l’API',
 319+ 'apisb-request-error' => 'Èrror pendent l’ègzécucion d’una requéta API',
 320+ 'apisb-namespaces-error' => 'Èrror pendent lo chargement des èspâços de noms',
 321+ 'apisb-ns-main' => '(Principâl)',
 322+ 'apisb-submit' => 'Fâre la demanda',
 323+ 'apisb-query-prop' => 'Propriètâts',
 324+ 'apisb-query-list' => 'Listes',
 325+ 'apisb-query-meta' => 'Mèta-enformacions',
 326+ 'apisb-generic-parameters' => 'Paramètres g·ènèricos',
 327+ 'apisb-generator-parameters' => 'G·ènèrator',
 328+);
 329+
 330+/** Galician (Galego)
 331+ * @author Toliño
 332+ */
 333+$messages['gl'] = array(
 334+ 'apisb-desc' => 'Permite a depuración das chamadas da [http://www.mediawiki.org/wiki/API API de MediaWiki] desde o navegador',
 335+ 'apisandbox' => 'Zona de probas API',
 336+ 'apisb-no-js' => "'''Error''': Esta característica necesita JavaScript.",
 337+ 'apisb-intro' => "Use esta páxina para experimentar coa '''API de MediaWiki'''.
 338+Consulte a [http://www.mediawiki.org/wiki/API documentación da API] para obter máis información sobre o uso da API.",
 339+ 'apisb-api-disabled' => 'API está desactivado neste sitio.',
 340+ 'apisb-parameters' => 'Parámetros',
 341+ 'apisb-result' => 'Resultado',
 342+ 'apisb-request-url' => 'URL da solicitude:',
 343+ 'apisb-request-post' => 'Datos POST:',
 344+ 'apisb-select-action' => 'Seleccionar unha acción',
 345+ 'apisb-select-query' => 'Que quere consultar?',
 346+ 'apisb-select-value' => 'Seleccione o valor',
 347+ 'apisb-loading' => 'Cargando...',
 348+ 'apisb-load-error' => 'Erro ao cargar a descrición API',
 349+ 'apisb-request-error' => 'Erro ao executar a solicitude API',
 350+ 'apisb-namespaces-error' => 'Erro ao cargar o espazo de nomes',
 351+ 'apisb-ns-main' => '(Principal)',
 352+ 'apisb-submit' => 'Facer a solicitude',
 353+ 'apisb-query-prop' => 'Propiedades',
 354+ 'apisb-query-list' => 'Listas',
 355+ 'apisb-query-meta' => 'Metainformación',
 356+ 'apisb-generic-parameters' => 'Parámetros xenéricos',
 357+ 'apisb-generator-parameters' => 'Xerador',
 358+);
 359+
 360+/** Hebrew (עברית)
 361+ * @author Deror avi
 362+ */
 363+$messages['he'] = array(
 364+ 'apisb-parameters' => 'פרמטרים',
 365+ 'apisb-result' => 'תוצאה',
 366+ 'apisb-request-url' => 'כתובת ה-URL של הבקשה:',
 367+ 'apisb-select-action' => 'בחירת פעולה',
 368+ 'apisb-select-query' => 'מהי השאילתה?',
 369+ 'apisb-select-value' => 'בחירת ערך',
 370+ 'apisb-loading' => 'בטעינה...',
 371+ 'apisb-load-error' => 'שגיאה בטעינת תיאור API',
 372+ 'apisb-request-error' => 'שגיעה בביצוע בקשת API',
 373+ 'apisb-namespaces-error' => 'שגיעה בטעינת שם מתחם',
 374+ 'apisb-ns-main' => '(ראשי)',
 375+ 'apisb-submit' => 'ביצוע שאילתה',
 376+ 'apisb-query-prop' => 'מאפיינים',
 377+ 'apisb-query-list' => 'רשימות',
 378+ 'apisb-query-meta' => 'מידע נוסף',
 379+ 'apisb-generic-parameters' => 'פרמטרים כלליים',
 380+ 'apisb-generator-parameters' => 'מחולל',
 381+);
 382+
 383+/** Upper Sorbian (Hornjoserbsce)
 384+ * @author Michawiki
 385+ */
 386+$messages['hsb'] = array(
 387+ 'apisandbox' => 'API-hrajkanišćo',
 388+ 'apisb-no-js' => "'''Zmylk''': tuta funkcija sej JavaScript wužaduje.",
 389+ 'apisb-intro' => "Wužij tutu stronu, zo by z '''Mediawiki API''' eksperimentował.
 390+Hlej [http://www.mediawiki.org/wiki/API API-dokumentaciju] za dalše podrobnosće za wužiwanje API.",
 391+ 'apisb-api-disabled' => 'API je so na tutym sydle znjemóžnił.',
 392+ 'apisb-parameters' => 'Parametry',
 393+ 'apisb-result' => 'Wuslědk',
 394+ 'apisb-select-value' => 'Hódnotu wubrać',
 395+);
 396+
 397+/** Hungarian (Magyar)
 398+ * @author Dj
 399+ */
 400+$messages['hu'] = array(
 401+ 'apisb-desc' => 'Lehetőséget biztosít az [http://www.mediawiki.org/wiki/API MediaWiki API] hívások nyomkövetésére a böngészőből',
 402+ 'apisandbox' => 'API homokozó',
 403+ 'apisb-no-js' => "'''Hiba''': ehhez a szolgáltatáshoz JavaScript szükséges.",
 404+ 'apisb-intro' => "Használd ezt az oldalt '''MediaWiki API''' kísérletezésekre.
 405+Az API használatának további részletei az [http://www.mediawiki.org/wiki/API the API dokumentációnál] található.",
 406+ 'apisb-api-disabled' => 'API le van tiltva ezen az oldalon.',
 407+ 'apisb-parameters' => 'Paraméterek',
 408+ 'apisb-result' => 'Eredmény',
 409+ 'apisb-request-url' => 'Kérő URL:',
 410+ 'apisb-request-post' => 'POST adat:',
 411+ 'apisb-select-action' => 'Műveletek kiválasztása',
 412+ 'apisb-select-query' => 'Mi a lekérdezés?',
 413+ 'apisb-select-value' => 'Válassz értéket',
 414+ 'apisb-loading' => 'Betöltés…',
 415+ 'apisb-load-error' => 'Hiba a API leírás betöltésekor',
 416+ 'apisb-request-error' => 'Hiba az API kérés végrehajtásakor',
 417+ 'apisb-namespaces-error' => 'Hiba a névtér betöltése során',
 418+ 'apisb-ns-main' => '(Fő)',
 419+ 'apisb-submit' => 'Kérés végrehajtása',
 420+ 'apisb-query-prop' => 'Tulajdonságok',
 421+ 'apisb-query-list' => 'Listák',
 422+ 'apisb-query-meta' => 'Metaadatok',
 423+ 'apisb-generic-parameters' => 'Általános paraméterek',
 424+ 'apisb-generator-parameters' => 'Generátor',
 425+);
 426+
 427+/** Interlingua (Interlingua)
 428+ * @author McDutchie
 429+ */
 430+$messages['ia'] = array(
 431+ 'apisb-desc' => 'Permitte cercar defectos in appellos del [http://www.mediawiki.org/wiki/API API de MediaWiki] ab le navigator del web',
 432+ 'apisandbox' => 'Cassa de sablo pro API',
 433+ 'apisb-no-js' => "'''Error''': iste function require JavaScript.",
 434+ 'apisb-intro' => "Usa iste pagina pro experimentar con le '''API de MediaWiki'''.
 435+Consulta [http://www.mediawiki.org/wiki/API le documentation del API] pro ulterior detalios concernente le uso del API.",
 436+ 'apisb-api-disabled' => 'Le API ha essite disactivate in iste sito.',
 437+ 'apisb-parameters' => 'Parametros',
 438+ 'apisb-result' => 'Resultato',
 439+ 'apisb-request-url' => 'URL de requesta:',
 440+ 'apisb-request-post' => 'Datos POST:',
 441+ 'apisb-select-action' => 'Selige action',
 442+ 'apisb-select-query' => 'Que consultar?',
 443+ 'apisb-select-value' => 'Selige valor',
 444+ 'apisb-loading' => 'Cargamento…',
 445+ 'apisb-load-error' => 'Error durante le cargamento del description del API',
 446+ 'apisb-request-error' => 'Error durante le execution del requesta al API',
 447+ 'apisb-namespaces-error' => 'Error durante le cargamento del spatios de nomines',
 448+ 'apisb-ns-main' => '(Principal)',
 449+ 'apisb-submit' => 'Facer requesta',
 450+ 'apisb-query-prop' => 'Proprietates',
 451+ 'apisb-query-list' => 'Listas',
 452+ 'apisb-query-meta' => 'Metainformationes',
 453+ 'apisb-generic-parameters' => 'Parametros generic',
 454+ 'apisb-generator-parameters' => 'Generator',
 455+);
 456+
 457+/** Indonesian (Bahasa Indonesia)
 458+ * @author IvanLanin
 459+ */
 460+$messages['id'] = array(
 461+ 'apisb-desc' => 'Menyediakan fasilitas debug untuk pemanggilan [http://www.mediawiki.org/wiki/API API MediaWiki] dari peramban',
 462+ 'apisandbox' => 'Bak pasir API',
 463+ 'apisb-no-js' => "'''Galat''': fitur ini memerlukan JavaScript.",
 464+ 'apisb-intro' => "Gunakan halaman ini untuk bereksperimen dengan '''MediaWiki API'''.
 465+Lihat [http://www.mediawiki.org/wiki/API dokumentasi API] untuk perincian lanjut penggunaan API.",
 466+ 'apisb-api-disabled' => 'API dinonaktifkan pada situs ini.',
 467+ 'apisb-parameters' => 'Parameter',
 468+ 'apisb-result' => 'Hasil',
 469+ 'apisb-request-url' => 'URL Permintaan:',
 470+ 'apisb-request-post' => 'Data POST:',
 471+ 'apisb-select-action' => 'Pilih tindakan',
 472+ 'apisb-select-query' => 'Pilih permintaan',
 473+ 'apisb-select-value' => 'Pilih nilai',
 474+ 'apisb-loading' => 'Memuat...',
 475+ 'apisb-load-error' => 'Galat sewaktu memuat deskripsi API',
 476+ 'apisb-request-error' => 'Galat sewaktu melakukan permintaan API',
 477+ 'apisb-namespaces-error' => 'Galat sewaktu memuat ruang nama',
 478+ 'apisb-ns-main' => '(Utama)',
 479+ 'apisb-submit' => 'Kirim permintaan',
 480+ 'apisb-query-prop' => 'Properti',
 481+ 'apisb-query-list' => 'Daftar',
 482+ 'apisb-query-meta' => 'Informasi meta',
 483+);
 484+
 485+/** Italian (Italiano)
 486+ * @author Beta16
 487+ * @author Gianfranco
 488+ * @author Rippitippi
 489+ */
 490+$messages['it'] = array(
 491+ 'apisb-desc' => 'Permette di eseguire il debug delle chiamate [http://www.mediawiki.org/wiki/API MediaWiki API] dal browser',
 492+ 'apisandbox' => 'Sandbox API',
 493+ 'apisb-no-js' => "'''Errore''': questa funzione richiede JavaScript.",
 494+ 'apisb-intro' => "Utilizza questa pagina per sperimentare con '''MediaWiki API'''.
 495+Per ulteriori dettagli di utilizzo delle API, fai riferimento alla [http://www.mediawiki.org/wiki/API documentazione API].",
 496+ 'apisb-api-disabled' => 'Le funzionalità API sono disabilitate su questo sito.',
 497+ 'apisb-parameters' => 'Parametri',
 498+ 'apisb-result' => 'Risultato',
 499+ 'apisb-select-action' => 'Seleziona azione',
 500+ 'apisb-select-value' => 'Selezionare il valore',
 501+ 'apisb-loading' => 'Caricamento in corso ...',
 502+ 'apisb-ns-main' => '(Principale)',
 503+ 'apisb-query-prop' => 'Proprietà',
 504+ 'apisb-query-list' => 'Liste',
 505+);
 506+
 507+/** Colognian (Ripoarisch)
 508+ * @author Purodha
 509+ */
 510+$messages['ksh'] = array(
 511+ 'apisb-desc' => 'Hellef noh Fähler ze söhke bei [http://www.mediawiki.org/wiki/API MediaWiki <i lang="en">API</i>] Oprohfe uss_em Brauser.',
 512+ 'apisb-parameters' => 'Parrameetere',
 513+ 'apisb-result' => 'Erus jekumme es',
 514+ 'apisb-request-url' => 'Dä URL vun dä Aanfrooch:',
 515+ 'apisb-query-prop' => 'Eijeschafte',
 516+ 'apisb-query-list' => 'Leste',
 517+);
 518+
 519+/** Kurdish (Latin script) (‪Kurdî (latînî)‬)
 520+ * @author George Animal
 521+ */
 522+$messages['ku-latn'] = array(
 523+ 'apisb-parameters' => 'Parametre',
 524+);
 525+
 526+/** Luxembourgish (Lëtzebuergesch)
 527+ * @author Robby
 528+ */
 529+$messages['lb'] = array(
 530+ 'apisandbox' => 'API-Sandkëscht',
 531+ 'apisb-no-js' => "'''Feeler''': dës Fonctioun brauch JavaScript",
 532+ 'apisb-api-disabled' => 'API ass op dësem Site ausgeschalt.',
 533+ 'apisb-parameters' => 'Parameteren',
 534+ 'apisb-result' => 'Resultat',
 535+ 'apisb-select-action' => 'Aktioun eraussichen',
 536+ 'apisb-select-value' => 'Wäert eraussichen',
 537+ 'apisb-loading' => 'Lueden...',
 538+ 'apisb-load-error' => 'Feeler beim Luede vun der API- Beschreiwung',
 539+ 'apisb-namespaces-error' => 'Feeler beim Luede vun den Nummraim',
 540+ 'apisb-ns-main' => '(Haapt)',
 541+ 'apisb-submit' => 'Ufro maachen',
 542+ 'apisb-query-prop' => 'Eegeschaften',
 543+ 'apisb-query-list' => 'Lëschten',
 544+ 'apisb-query-meta' => 'Meta-Informatioun',
 545+);
 546+
 547+/** Lithuanian (Lietuvių)
 548+ * @author Eitvys200
 549+ * @author Ignas693
 550+ */
 551+$messages['lt'] = array(
 552+ 'apisb-desc' => 'Leidžia derinti [MediaWiki API http://www.mediawiki.org/wiki/API] skambučių iš naršyklės',
 553+ 'apisandbox' => 'API smėlio dėžės',
 554+ 'apisb-no-js' => '"" Klaida "": ši funkcija reikalauja JavaScript.',
 555+ 'apisb-intro' => "Naudokite šį puslapį norėdami eksperimentuoti su '''MediaWiki API \"„.
 556+ Ieškokite [http://www.mediawiki.org/wiki/API API dokumentacijoje] Išsamesnės informacijos apie API naudojimo.",
 557+ 'apisb-api-disabled' => 'API yra išjungtas šioje svetainėje.',
 558+ 'apisb-parameters' => 'Parametrai',
 559+ 'apisb-result' => 'Rezultatai',
 560+ 'apisb-request-url' => 'Prašyti URL:',
 561+ 'apisb-request-post' => 'POST duomenys:',
 562+ 'apisb-select-action' => 'Pasirinkite veiksmą',
 563+ 'apisb-select-query' => 'Ką užklausą?',
 564+ 'apisb-select-value' => 'Pasirinkite vertę',
 565+ 'apisb-loading' => 'Kraunasi ...',
 566+ 'apisb-load-error' => 'Klaida įkeliant API aprašymas',
 567+ 'apisb-request-error' => 'Klaida scenos API prašymą',
 568+ 'apisb-namespaces-error' => 'Klaida pakrovimo vardų sritys',
 569+ 'apisb-ns-main' => '(Pagrindinė)',
 570+ 'apisb-submit' => 'Pateikti prašymą',
 571+ 'apisb-query-prop' => 'Nusttymai',
 572+ 'apisb-query-list' => 'Sąrašai',
 573+ 'apisb-query-meta' => 'Meta informacija',
 574+ 'apisb-generator-parameters' => 'Generatorius',
 575+);
 576+
 577+/** Macedonian (Македонски)
 578+ * @author Bjankuloski06
 579+ */
 580+$messages['mk'] = array(
 581+ 'apisb-desc' => 'Овозможува отстранување на грешки во повикувањата на [http://www.mediawiki.org/wiki/API?uselang=mk посредникот за програмирање на прилози (API) на МедијаВики] од прелистувачот',
 582+ 'apisandbox' => 'API-песочница',
 583+ 'apisb-no-js' => "'''Грешка''': оваа функција бара JavaScript.",
 584+ 'apisb-intro' => "На оваа страница можете да експериментирате со '''API на МедијаВики'''.
 585+ Повеќе напатствија за користење ќе најдете на [http://www.mediawiki.org/wiki/API?uselang=mk документацијата на API].",
 586+ 'apisb-api-disabled' => 'API е оневозможен на ова мрежно место.',
 587+ 'apisb-parameters' => 'Параметри',
 588+ 'apisb-result' => 'Извод',
 589+ 'apisb-request-url' => 'URL на барањето:',
 590+ 'apisb-request-post' => 'POST-податоци:',
 591+ 'apisb-select-action' => 'Одберете дејство',
 592+ 'apisb-select-query' => 'Што да барам?',
 593+ 'apisb-select-value' => 'Одберете вредност',
 594+ 'apisb-loading' => 'Вчитувам...',
 595+ 'apisb-load-error' => 'Грешка при вчитувањето на описот на API',
 596+ 'apisb-request-error' => 'Грешка при извршувањето на барањето од API',
 597+ 'apisb-namespaces-error' => 'Грешка при вчитувањето на именските простори',
 598+ 'apisb-ns-main' => '(Главен)',
 599+ 'apisb-submit' => 'Постави барање',
 600+ 'apisb-query-prop' => 'Својства',
 601+ 'apisb-query-list' => 'Списоци',
 602+ 'apisb-query-meta' => 'Метаинформации',
 603+ 'apisb-generic-parameters' => 'Општи параметри',
 604+ 'apisb-generator-parameters' => 'Создавач',
 605+);
 606+
 607+/** Malayalam (മലയാളം)
 608+ * @author Junaidpv
 609+ */
 610+$messages['ml'] = array(
 611+ 'apisb-result' => 'ഫലം',
 612+);
 613+
 614+/** Malay (Bahasa Melayu)
 615+ * @author Anakmalaysia
 616+ */
 617+$messages['ms'] = array(
 618+ 'apisb-desc' => 'Membolehkan penyahpepijatan panggilan [http://www.mediawiki.org/wiki/API MediaWiki API] dari pelayar',
 619+ 'apisandbox' => 'Kotak pasir API',
 620+ 'apisb-no-js' => "'''Perhatian''': ciri ini memerlukan JavaScript.",
 621+ 'apisb-intro' => "Gunakan laman ini untuk bereksperimen dengan '''MediaWiki API'''.
 622+ Rujuk [http://www.mediawiki.org/wiki/API dokumentasi API] untuk keterangan lanjut tentang penggunaan API.",
 623+ 'apisb-api-disabled' => 'API dimatikan di tapak web ini.',
 624+ 'apisb-parameters' => 'Parameter',
 625+ 'apisb-result' => 'Hasil',
 626+ 'apisb-request-url' => 'URL permohonan:',
 627+ 'apisb-request-post' => 'Data POST:',
 628+ 'apisb-select-action' => 'Pilih tindakan',
 629+ 'apisb-select-query' => 'Apa untuk ditanya?',
 630+ 'apisb-select-value' => 'Pilih nilai',
 631+ 'apisb-loading' => 'Memuatkan...',
 632+ 'apisb-load-error' => 'Ralat ketika memuatkan keterangan API',
 633+ 'apisb-request-error' => 'Ralat ketika melakukan permohonan API',
 634+ 'apisb-namespaces-error' => 'Ralat ketika memuatkan ruang nama',
 635+ 'apisb-ns-main' => '(Utama)',
 636+ 'apisb-submit' => 'Buat permintaan',
 637+ 'apisb-query-prop' => 'Sifat',
 638+ 'apisb-query-list' => 'Senarai',
 639+ 'apisb-query-meta' => 'Maklumat meta',
 640+ 'apisb-generic-parameters' => 'Parameter am',
 641+ 'apisb-generator-parameters' => 'Penjana',
 642+);
 643+
 644+/** Dutch (Nederlands)
 645+ * @author SPQRobin
 646+ * @author Siebrand
 647+ */
 648+$messages['nl'] = array(
 649+ 'apisb-desc' => 'Maakt het mogelijk om [http://www.mediawiki.org/wiki/API API-verzoeken voor MediaWiki] vanuit een browser te debuggen',
 650+ 'apisandbox' => 'API-zandbak',
 651+ 'apisb-no-js' => "'''Fout''': deze functie vereist JavaScript.",
 652+ 'apisb-intro' => "Gebruik deze pagina om te experimenteren met de '''MediaWiki API'''.
 653+Zie de [http://www.mediawiki.org/wiki/API API-documentatie] voor verdere details over het gebruik van de API.",
 654+ 'apisb-api-disabled' => 'API is uitgeschakeld op deze site.',
 655+ 'apisb-parameters' => 'Parameters',
 656+ 'apisb-result' => 'Resultaat',
 657+ 'apisb-request-url' => 'Verzoek-URL:',
 658+ 'apisb-request-post' => 'POST-gegevens:',
 659+ 'apisb-select-action' => 'Handeling selecteren',
 660+ 'apisb-select-query' => 'Wat is uw vraag?',
 661+ 'apisb-select-value' => 'Selecteer waarde',
 662+ 'apisb-loading' => 'Bezig met laden…',
 663+ 'apisb-load-error' => 'Fout bij het laden van de API-beschrijving',
 664+ 'apisb-request-error' => 'Fout bij het uitvoeren van het API-verzoek',
 665+ 'apisb-namespaces-error' => 'Fout laden bij het laden van de naamruimten',
 666+ 'apisb-ns-main' => '(Hoofdnaamruimte)',
 667+ 'apisb-submit' => 'Verzoek uitvoeren',
 668+ 'apisb-query-prop' => 'Eigenschappen',
 669+ 'apisb-query-list' => 'Lijsten',
 670+ 'apisb-query-meta' => 'Metaigegevens',
 671+ 'apisb-generic-parameters' => 'Algemene parameters',
 672+ 'apisb-generator-parameters' => 'Generator',
 673+);
 674+
 675+/** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
 676+ * @author Nghtwlkr
 677+ */
 678+$messages['no'] = array(
 679+ 'apisb-desc' => 'Tillater å feilsøke [http://www.mediawiki.org/wiki/API MediaWiki API]-kall fra nettleseren',
 680+ 'apisandbox' => 'API-sandkasse',
 681+ 'apisb-no-js' => "'''Feil''': denne funksjonen krever JavaScript.",
 682+ 'apisb-intro' => "Bruk denne siden til å eksperimentere med '''MediaWiki API'''.
 683+Sjekk [http://www.mediawiki.org/wiki/API API-dokumentasjonen] for flere detaljer om bruk av API.",
 684+ 'apisb-api-disabled' => 'API er deaktivert på dette nettstedet.',
 685+ 'apisb-parameters' => 'Parametere',
 686+ 'apisb-result' => 'Resultat',
 687+ 'apisb-request-url' => 'Forespurt URL:',
 688+ 'apisb-request-post' => 'POST-data:',
 689+ 'apisb-select-action' => 'Velg handling',
 690+ 'apisb-select-query' => 'Hva skal du spørre etter?',
 691+ 'apisb-select-value' => 'Velg verdi',
 692+ 'apisb-loading' => 'Laster...',
 693+ 'apisb-load-error' => 'Feil under lasting av API-beskrivelse',
 694+ 'apisb-request-error' => 'Feil under utføring av API-forespørsel',
 695+ 'apisb-namespaces-error' => 'Feil under lasting av navnerom',
 696+ 'apisb-ns-main' => '(Hoved)',
 697+ 'apisb-submit' => 'Foreta en forespørsel',
 698+ 'apisb-query-prop' => 'Egenskaper',
 699+ 'apisb-query-list' => 'Lister',
 700+ 'apisb-query-meta' => 'Metainformasjon',
 701+);
 702+
 703+/** Oriya (ଓଡ଼ିଆ)
 704+ * @author Odisha1
 705+ */
 706+$messages['or'] = array(
 707+ 'apisb-ns-main' => '(ମୂଳ)',
 708+);
 709+
 710+/** Deitsch (Deitsch)
 711+ * @author Xqt
 712+ */
 713+$messages['pdc'] = array(
 714+ 'apisb-ns-main' => '(Bledder)',
 715+);
 716+
 717+/** Polish (Polski)
 718+ * @author Sp5uhe
 719+ * @author Woytecr
 720+ */
 721+$messages['pl'] = array(
 722+ 'apisb-no-js' => "'''Błąd''' – ta funkcja wymaga JavaScript.",
 723+ 'apisb-parameters' => 'Parametry',
 724+ 'apisb-result' => 'Rezultat',
 725+ 'apisb-request-url' => 'Żądanie URL:',
 726+ 'apisb-request-post' => 'Dane POST:',
 727+ 'apisb-select-action' => 'Wybierz działanie',
 728+ 'apisb-select-value' => 'Wybierz wartość',
 729+ 'apisb-loading' => 'Trwa ładowanie…',
 730+ 'apisb-ns-main' => '(główna)',
 731+ 'apisb-submit' => 'Wykonaj żądanie',
 732+ 'apisb-query-prop' => 'Właściwości',
 733+ 'apisb-query-list' => 'Listy',
 734+ 'apisb-query-meta' => 'Matainformacje',
 735+);
 736+
 737+/** Portuguese (Português)
 738+ * @author Hamilton Abreu
 739+ */
 740+$messages['pt'] = array(
 741+ 'apisb-desc' => 'Permite depurar chamadas à [http://www.mediawiki.org/wiki/API API do MediaWiki] a partir do browser',
 742+ 'apisandbox' => 'Testes da API',
 743+ 'apisb-no-js' => "'''Erro''': Esta funcionalidade requer o JavaScript.",
 744+ 'apisb-intro' => "Use esta página para fazer experiências com a '''API do MediaWiki'''.
 745+Consulte a [http://www.mediawiki.org/wiki/API documentação da API] para informações sobre o uso da API.",
 746+ 'apisb-api-disabled' => 'A API está desactivada neste site.',
 747+ 'apisb-parameters' => 'Parâmetros',
 748+ 'apisb-result' => 'Resultado',
 749+ 'apisb-request-url' => 'URL do pedido:',
 750+ 'apisb-request-post' => 'Dados POST:',
 751+ 'apisb-select-action' => 'Seleccionar acção',
 752+ 'apisb-select-query' => 'O que pretende consultar?',
 753+ 'apisb-select-value' => 'Seleccionar o valor',
 754+ 'apisb-loading' => 'A carregar…',
 755+ 'apisb-load-error' => 'Erro ao carregar a descrição da API',
 756+ 'apisb-request-error' => 'Erro ao executar o pedido da API',
 757+ 'apisb-namespaces-error' => 'Erro ao carregar os espaços nominais',
 758+ 'apisb-ns-main' => '(Principal)',
 759+ 'apisb-submit' => 'Fazer o pedido',
 760+ 'apisb-query-prop' => 'Propriedades',
 761+ 'apisb-query-list' => 'Listas',
 762+ 'apisb-query-meta' => 'Meta informação',
 763+);
 764+
 765+/** Brazilian Portuguese (Português do Brasil)
 766+ * @author Giro720
 767+ */
 768+$messages['pt-br'] = array(
 769+ 'apisb-desc' => 'Permite depurar chamadas do [http://www.mediawiki.org/wiki/API API do MediaWiki] a partir do navegador',
 770+);
 771+
 772+/** Tarandíne (Tarandíne)
 773+ * @author Joetaras
 774+ */
 775+$messages['roa-tara'] = array(
 776+ 'apisb-parameters' => 'Parametre',
 777+ 'apisb-result' => 'Resultate',
 778+ 'apisb-select-action' => "Scacchie l'azione",
 779+ 'apisb-select-value' => "Scacchie 'nu valore",
 780+ 'apisb-loading' => 'Stoche a careche…',
 781+ 'apisb-ns-main' => '(Prengepàle)',
 782+ 'apisb-submit' => "Fà 'na richieste",
 783+ 'apisb-query-prop' => 'probbietà',
 784+ 'apisb-query-list' => 'Elenghe',
 785+);
 786+
 787+/** Russian (Русский)
 788+ * @author DCamer
 789+ * @author KorneySan
 790+ * @author Александр Сигачёв
 791+ */
 792+$messages['ru'] = array(
 793+ 'apisb-desc' => 'Позволяет отлаживать вызовы [http://www.mediawiki.org/wiki/API MediaWiki API] из браузера',
 794+ 'apisandbox' => 'Песочница API',
 795+ 'apisb-no-js' => "'''Ошибка''': эта возможность требует JavaScript.",
 796+ 'apisb-intro' => "Используйте эту страницу для экспериментов с '''MediaWiki API'''.
 797+Обратитесь к [http://www.mediawiki.org/wiki/API документации API] для получения дополнительной информации об использовании API.",
 798+ 'apisb-api-disabled' => 'API отключен на этом сайте.',
 799+ 'apisb-parameters' => 'Параметры',
 800+ 'apisb-result' => 'Результат',
 801+ 'apisb-request-url' => 'URL-адрес запроса:',
 802+ 'apisb-request-post' => 'POST данные:',
 803+ 'apisb-select-action' => 'Выберите действие',
 804+ 'apisb-select-query' => 'Что запросить?',
 805+ 'apisb-select-value' => 'Выберите значение',
 806+ 'apisb-loading' => 'Загрузка…',
 807+ 'apisb-load-error' => 'Ошибка при загрузке описания API',
 808+ 'apisb-request-error' => 'Ошибка выполнения запроса API',
 809+ 'apisb-namespaces-error' => 'Ошибка при загрузке пространств имен',
 810+ 'apisb-ns-main' => '(Основная)',
 811+ 'apisb-submit' => 'Сделать запрос',
 812+ 'apisb-query-prop' => 'Свойства',
 813+ 'apisb-query-list' => 'Списки',
 814+ 'apisb-query-meta' => 'Мета-информация',
 815+ 'apisb-generic-parameters' => 'Общие параметры',
 816+ 'apisb-generator-parameters' => 'Генератор',
 817+);
 818+
 819+/** Slovak (Slovenčina)
 820+ * @author Helix84
 821+ */
 822+$messages['sk'] = array(
 823+ 'apisandbox' => 'API pieskovisko',
 824+ 'apisb-parameters' => 'Parametre',
 825+ 'apisb-result' => 'Výsledok',
 826+ 'apisb-request-url' => 'URL požiadavky:',
 827+ 'apisb-request-post' => 'Údaje POST:',
 828+ 'apisb-select-action' => 'Vyberte operáciu',
 829+ 'apisb-select-query' => 'Požiadavku na čo?',
 830+ 'apisb-select-value' => 'Vyberte hodnotu',
 831+ 'apisb-loading' => 'Načítava sa...',
 832+ 'apisb-ns-main' => '(Hlavné)',
 833+ 'apisb-submit' => 'Podať žiadosť',
 834+ 'apisb-query-prop' => 'Vlastnosti',
 835+ 'apisb-query-list' => 'Zoznamy',
 836+ 'apisb-query-meta' => 'Metainformácie',
 837+);
 838+
 839+/** Slovenian (Slovenščina)
 840+ * @author Dbc334
 841+ */
 842+$messages['sl'] = array(
 843+ 'apisb-desc' => 'Omogoča popravljanje napak klicev [http://www.mediawiki.org/wiki/API MediaWiki API] iz brskalnika',
 844+ 'apisandbox' => 'Peskovnik API',
 845+ 'apisb-no-js' => "'''Napaka''': funkcija potrebuje JavaScript.",
 846+ 'apisb-intro' => "Uporabite to stran za preizkušanje '''MediaWiki API'''.
 847+ Oglejte si [http://www.mediawiki.org/wiki/API dokumentacijo API] za nadaljnje podrobnosti uporabe API.",
 848+ 'apisb-api-disabled' => 'API je onemogočen na tej spletni strani.',
 849+ 'apisb-parameters' => 'Parametri',
 850+ 'apisb-result' => 'Rezultat',
 851+ 'apisb-request-url' => 'URL zahteve:',
 852+ 'apisb-request-post' => 'Podatki POST:',
 853+ 'apisb-select-action' => 'Izberite dejanje',
 854+ 'apisb-select-query' => 'Kaj naj poizvem?',
 855+ 'apisb-select-value' => 'Izberite vrednost',
 856+ 'apisb-loading' => 'Nalaganje ...',
 857+ 'apisb-load-error' => 'Napaka pri nalaganju opisa API',
 858+ 'apisb-request-error' => 'Napak pri izvajanju zahteve API',
 859+ 'apisb-namespaces-error' => 'Napaka pri nalaganju imenskih prostorov',
 860+ 'apisb-ns-main' => '(Osnovno)',
 861+ 'apisb-submit' => 'Izvedi zahtevo',
 862+ 'apisb-query-prop' => 'Lastnosti',
 863+ 'apisb-query-list' => 'Seznami',
 864+ 'apisb-query-meta' => 'Metapodatki',
 865+ 'apisb-generic-parameters' => 'Generični parametri',
 866+ 'apisb-generator-parameters' => 'Generator',
 867+);
 868+
 869+/** Swedish (Svenska)
 870+ * @author WikiPhoenix
 871+ */
 872+$messages['sv'] = array(
 873+ 'apisb-desc' => 'Gör det möjligt att felsöka [http://www.mediawiki.org/wiki/API MediaWiki API]-samtal från webbläsaren',
 874+ 'apisandbox' => 'API-sandlåda',
 875+ 'apisb-no-js' => "'''Fel''': Denna funktion kräver JavaScript.",
 876+ 'apisb-intro' => "Använd denna sida för att experimentera med '''MediaWiki API'''.
 877+Kolla på [http://www.mediawiki.org/wiki/API API-dokumentationen] för fler detaljer om API-användning.",
 878+ 'apisb-api-disabled' => 'API är inaktiverat på denna webbplats.',
 879+ 'apisb-parameters' => 'Parametrar',
 880+ 'apisb-result' => 'Resultat',
 881+ 'apisb-request-url' => 'Begär URL:',
 882+ 'apisb-request-post' => 'POST-data:',
 883+ 'apisb-select-action' => 'Välj handling',
 884+ 'apisb-select-query' => 'Vad ska begäras?',
 885+ 'apisb-select-value' => 'Välj värde',
 886+ 'apisb-loading' => 'Läser in...',
 887+ 'apisb-load-error' => 'Fel uppstod när API-beskrivningen skulle läsas in',
 888+ 'apisb-request-error' => 'Fel uppstod när API skulle begäras',
 889+ 'apisb-namespaces-error' => 'Fel uppstod när namnrymden skulle läsas in',
 890+ 'apisb-ns-main' => '(Huvud)',
 891+ 'apisb-submit' => 'Göra en begäran',
 892+ 'apisb-query-prop' => 'Egenskaper',
 893+ 'apisb-query-list' => 'Listor',
 894+ 'apisb-query-meta' => 'Metainformation',
 895+);
 896+
 897+/** Telugu (తెలుగు)
 898+ * @author Veeven
 899+ */
 900+$messages['te'] = array(
 901+ 'apisb-parameters' => 'పరామితులు',
 902+ 'apisb-result' => 'ఫలితం',
 903+ 'apisb-select-action' => 'చర్యను ఎంచుకోండి',
 904+ 'apisb-loading' => 'లోడవుతోంది...',
 905+ 'apisb-ns-main' => '(మొదటి)',
 906+ 'apisb-query-list' => 'జాబితాలు',
 907+ 'apisb-query-meta' => 'మెటా సమాచారం',
 908+);
 909+
 910+/** Tagalog (Tagalog)
 911+ * @author AnakngAraw
 912+ */
 913+$messages['tl'] = array(
 914+ 'apisb-desc' => 'Nagpapahintulot ng pagkumpuni ng mga pagtawag ng [http://www.mediawiki.org/wiki/API MediaWiki API] mula sa pantingin-tingin',
 915+ 'apisandbox' => 'Kahong buhanginan ng API',
 916+ 'apisb-no-js' => "'''Kamalian''': nangangailangan ng JavaScript ang tampok na ito.",
 917+ 'apisb-intro' => "Gamitin ang pahinang ito upang mag-eksperimento sa pamamagitan ng '''API ng MediaWiki'''.
 918+Sumangguni sa [http://www.mediawiki.org/wiki/API dokumentasyon ng API] para sa karagdagan pang mga detalye sa paggamit ng API.",
 919+ 'apisb-api-disabled' => 'Hindi pinagagana ang API sa sityong ito.',
 920+ 'apisb-parameters' => 'Mga parametro',
 921+ 'apisb-result' => 'Kinalabasan',
 922+ 'apisb-request-url' => 'Hilingin ang URL:',
 923+ 'apisb-request-post' => 'Dato ng POST:',
 924+ 'apisb-select-action' => 'Piliin ang kilos',
 925+ 'apisb-select-query' => 'Ano ang itatanong?',
 926+ 'apisb-select-value' => 'Piliin ang halaga',
 927+ 'apisb-loading' => 'Ikinakarga...',
 928+ 'apisb-load-error' => 'Kamalian sa pagkakarga ng paglalarawan ng API',
 929+ 'apisb-request-error' => 'Kamalian sa pagsasagawa ng hiling ng API',
 930+ 'apisb-namespaces-error' => 'Kamalian sa pagkakarga ng mga puwang ng pangalan',
 931+ 'apisb-ns-main' => '(Pangunahin)',
 932+ 'apisb-submit' => 'Gumawa ng kahilingan',
 933+ 'apisb-query-prop' => 'Mga katangiang-ari',
 934+ 'apisb-query-list' => 'Mga talaan',
 935+ 'apisb-query-meta' => 'Kabatirang meta',
 936+);
 937+
 938+/** Turkish (Türkçe)
 939+ * @author Emperyan
 940+ */
 941+$messages['tr'] = array(
 942+ 'apisb-parameters' => 'Parametreler',
 943+ 'apisb-result' => 'Sonuç',
 944+ 'apisb-loading' => 'Yükleniyor...',
 945+ 'apisb-ns-main' => '(Ana)',
 946+ 'apisb-query-prop' => 'Özellikler',
 947+ 'apisb-query-list' => 'Listeler',
 948+);
 949+
 950+/** Ukrainian (Українська)
 951+ * @author Microcell
 952+ * @author Sodmy
 953+ */
 954+$messages['uk'] = array(
 955+ 'apisb-desc' => 'Дозволяє налагоджувати виклики [http://www.mediawiki.org/wiki/API MediaWiki API] з браузера',
 956+ 'apisandbox' => 'Майданчик для тестування API',
 957+ 'apisb-no-js' => "'''Помилка''': ця функція вимагає JavaScript.",
 958+ 'apisb-intro' => "Ця сторінка служить для експериментування з '''MediaWiki API'''.
 959+Звертайтеся до [http://www.mediawiki.org/wiki/API документації] для докладнішої інформації про використання API.",
 960+ 'apisb-api-disabled' => 'API вимкнуто на цьому сайті.',
 961+ 'apisb-parameters' => 'Параметри',
 962+ 'apisb-result' => 'Результат',
 963+ 'apisb-request-url' => 'URL-адреса запиту:',
 964+ 'apisb-request-post' => 'POST данні:',
 965+ 'apisb-select-action' => 'Виберіть дію',
 966+ 'apisb-select-query' => 'Що запитати?',
 967+ 'apisb-select-value' => 'Оберіть значення',
 968+ 'apisb-loading' => 'Завантаження...',
 969+ 'apisb-load-error' => 'Помилка завантаження API опису',
 970+ 'apisb-request-error' => 'Помилка виконання запиту API',
 971+ 'apisb-namespaces-error' => 'Помилка завантаження простору імен',
 972+ 'apisb-ns-main' => '(Основний)',
 973+ 'apisb-submit' => 'Зробити запит',
 974+ 'apisb-query-prop' => 'Властивості',
 975+ 'apisb-query-list' => 'Списки',
 976+ 'apisb-query-meta' => 'Мета-інформація',
 977+ 'apisb-generic-parameters' => 'Загальні параметри',
 978+ 'apisb-generator-parameters' => 'Генератор',
 979+);
 980+
 981+/** Vietnamese (Tiếng Việt)
 982+ * @author Minh Nguyen
 983+ * @author Trần Nguyễn Minh Huy
 984+ */
 985+$messages['vi'] = array(
 986+ 'apisandbox' => 'Chỗ thử API',
 987+ 'apisb-no-js' => "'''Lỗi:''' Tính năng này cần JavaScript.",
 988+ 'apisb-api-disabled' => 'API đã bị vô hiệu hóa trên trang web này.',
 989+ 'apisb-parameters' => 'Các tham số',
 990+ 'apisb-result' => 'Kết quả',
 991+ 'apisb-request-url' => 'URL của yêu cầu:',
 992+ 'apisb-select-action' => 'Chọn tác vụ',
 993+ 'apisb-select-value' => 'Chọn giá trị',
 994+ 'apisb-loading' => 'Đang tải…',
 995+ 'apisb-ns-main' => '(Chính)',
 996+ 'apisb-query-prop' => 'Thuộc tính',
 997+ 'apisb-query-list' => 'Danh sách',
 998+ 'apisb-query-meta' => 'Siêu thông tin',
 999+);
 1000+
 1001+/** Simplified Chinese (‪中文(简体)‬)
 1002+ * @author Hydra
 1003+ * @author PhiLiP
 1004+ * @author Xiaomingyan
 1005+ */
 1006+$messages['zh-hans'] = array(
 1007+ 'apisb-desc' => '允许调试 [http://www.mediawiki.org/wiki/API MediaWiki API] 从浏览器的调用',
 1008+ 'apisandbox' => 'API 沙箱',
 1009+ 'apisb-no-js' => "'''错误''':此功能需要 JavaScript。",
 1010+ 'apisb-api-disabled' => '此站点上禁用了 API。',
 1011+ 'apisb-parameters' => '参数',
 1012+ 'apisb-result' => '结果',
 1013+ 'apisb-request-url' => '请求的 URL:',
 1014+ 'apisb-request-post' => 'POST数据:',
 1015+ 'apisb-select-action' => '选择操作',
 1016+ 'apisb-select-query' => '查询又如何?',
 1017+ 'apisb-select-value' => '选择值',
 1018+ 'apisb-loading' => '正在载入...',
 1019+ 'apisb-load-error' => '加载 API 说明时出错',
 1020+ 'apisb-request-error' => '执行 API 请求时出错',
 1021+ 'apisb-namespaces-error' => '载入名字空间出错',
 1022+ 'apisb-ns-main' => '(主)',
 1023+ 'apisb-submit' => '提出要求',
 1024+ 'apisb-query-prop' => '属性',
 1025+ 'apisb-query-list' => '列表',
 1026+ 'apisb-query-meta' => 'Meta 信息',
 1027+);
 1028+
Property changes on: branches/wmf/1.18wmf1/extensions/ApiSandbox/ApiSandbox.i18n.php
___________________________________________________________________
Added: svn:eol-style
11029 + native
Index: branches/wmf/1.18wmf1/extensions/ApiSandbox/ApiSandbox.php
@@ -0,0 +1,61 @@
 2+<?php
 3+/**
 4+ * API sandbox extension. Initial author Max Semenik, based on idea by Salil P. A.
 5+ * License: WTFPL 2.0
 6+ */
 7+$wgExtensionCredits['other'][] = array(
 8+ 'path' => __FILE__,
 9+ 'name' => 'ApiSandbox',
 10+ 'author' => array( 'Max Semenik' ),
 11+ 'url' => 'http://mediawiki.org/wiki/Extension:ApiSandbox',
 12+ 'descriptionmsg' => 'apisb-desc',
 13+);
 14+
 15+$dir = dirname(__FILE__) . '/';
 16+
 17+$wgExtensionMessagesFiles['ApiSandbox'] = $dir . 'ApiSandbox.i18n.php';
 18+$wgExtensionAliasesFiles['ApiSandbox'] = $dir . 'ApiSandbox.alias.php';
 19+
 20+$wgAutoloadClasses['SpecialApiSandbox'] = $dir . 'SpecialApiSandbox.php';
 21+
 22+$wgSpecialPages['ApiSandbox'] = 'SpecialApiSandbox';
 23+$wgSpecialPageGroups['ApiSandbox'] = 'wiki';
 24+
 25+$wgResourceModules['ext.apiSandbox'] = array(
 26+ 'scripts' => 'ext.apiSandbox.js',
 27+ 'styles' => 'ext.apiSandbox.css',
 28+ 'localBasePath' => dirname( __FILE__ ),
 29+ 'remoteExtPath' => 'ApiSandbox',
 30+ 'messages' => array(
 31+ 'apisb-loading',
 32+ 'apisb-load-error',
 33+ 'apisb-request-error',
 34+ 'apisb-select-value',
 35+ 'apisb-namespaces-error',
 36+ 'apisb-ns-main',
 37+ 'parentheses',
 38+ ),
 39+);
 40+
 41+$wgHooks['APIGetDescription'][] = 'efASAPIGetDescription';
 42+
 43+/**
 44+ * @param $module ApiBase
 45+ * @param $desc array
 46+ * @return bool
 47+ */
 48+function efASAPIGetDescription( &$module, &$desc ) {
 49+ if ( !$module instanceof ApiMain ) {
 50+ return true;
 51+ }
 52+
 53+ $desc[] = 'The ApiSandbox extension is installed on this wiki, it adds a graphical interface to using the MediaWiki Api.';
 54+ $desc[] = 'It is helpful for new users, allowing request debugging without any extra tools.';
 55+ $desc[] = 'See ' . SpecialPage::getTitleFor( 'ApiSandbox' )->getFullUrl();
 56+
 57+ // Append some more whitespace for ApiMain
 58+ for ( $i = 0; $i < 3; $i++ ) {
 59+ $desc[] = '';
 60+ }
 61+ return true;
 62+}
Property changes on: branches/wmf/1.18wmf1/extensions/ApiSandbox/ApiSandbox.php
___________________________________________________________________
Added: svn:eol-style
163 + native
Index: branches/wmf/1.18wmf1/extensions/ApiSandbox/ext.apiSandbox.css
@@ -0,0 +1,38 @@
 2+table.api-sandbox-options {
 3+ width: 100%;
 4+}
 5+
 6+td.api-sandbox-label {
 7+ text-align: right;
 8+ width: 12em;
 9+ vertical-align: top;
 10+ font-family: monospace;
 11+}
 12+
 13+td.api-sandbox-result-label {
 14+ width: 12em;
 15+}
 16+
 17+td.api-sandbox-value {
 18+ width: 18em;
 19+ vertical-align: top;
 20+ overflow: auto;
 21+}
 22+
 23+table.api-sandbox-result-container {
 24+ width: 100%;
 25+}
 26+
 27+#api-sandbox-input {
 28+ width: 17em;
 29+}
 30+
 31+#api-sandbox-url, #api-sandbox-post {
 32+ width: 100%;
 33+}
 34+
 35+#api-sandbox-output {
 36+ width: 100%;
 37+ height: 15em;
 38+ overflow: scroll;
 39+}
Property changes on: branches/wmf/1.18wmf1/extensions/ApiSandbox/ext.apiSandbox.css
___________________________________________________________________
Added: svn:eol-style
140 + native

Follow-up revisions

RevisionCommit summaryAuthorDate
r104699Followup r104698, add ApiSandbox to make-wmf-branch/default.confreedy16:05, 30 November 2011
r104742ApiSandbox is live on the WMF cluster (r104698)raymond20:42, 30 November 2011

Status & tagging log