Nikerabbit has uploaded a new change for review.
https://gerrit.wikimedia.org/r/58885
Change subject: First step of Special:TranslateSandbox
......................................................................
First step of Special:TranslateSandbox
* Lists open requests
* Can promote or delete
Change-Id: If1747b0f803586d1d300957644649396e5acf14b
---
M Resources.php
M Translate.alias.php
M Translate.php
A TranslateSandbox.i18n.php
M _autoload.php
A resources/css/ext.translate.special.translatesandbox.css
A resources/js/ext.translate.special.translatesandbox.js
A specials/SpecialTranslateSandbox.php
8 files changed, 328 insertions(+), 1 deletion(-)
git pull ssh://gerrit.wikimedia.org:29418/mediawiki/extensions/Translate
refs/changes/85/58885/1
diff --git a/Resources.php b/Resources.php
index f88a772..cd4de44 100644
--- a/Resources.php
+++ b/Resources.php
@@ -322,6 +322,18 @@
),
) + $resourcePaths;
+$wgResourceModules['ext.translate.special.translatesandbox'] = array(
+ 'scripts' => 'resources/js/ext.translate.special.translatesandbox.js',
+ 'styles' => 'resources/css/ext.translate.special.translatesandbox.css',
+ 'position' => 'top',
+ 'dependencies' => array(
+ 'mediawiki.api',
+ 'jquery.uls.grid',
+ ),
+ 'messages' => array(
+ ),
+) + $resourcePaths;
+
$wgResourceModules['ext.translate.special.translationstats'] = array(
'scripts' => 'resources/js/ext.translate.special.translationstats.js',
'dependencies' => array(
diff --git a/Translate.alias.php b/Translate.alias.php
index a2f6d6e..96fdbe8 100644
--- a/Translate.alias.php
+++ b/Translate.alias.php
@@ -25,6 +25,7 @@
'PageTranslationDeletePage' => array( 'PageTranslationDeletePage' ),
'AggregateGroups' => array( 'AggregateGroups' ),
'SearchTranslations' => array( 'SearchTranslations' ),
+ 'TranslateSandbox' => array( 'ManageTranslatorSandbox',
'TranslateSandbox' ),
);
/** Afrikaans (Afrikaans) */
@@ -1053,4 +1054,4 @@
'PageTranslationDeletePage' => array( '刪除譯文頁面' ),
'AggregateGroups' => array( '聚合組' ),
'SearchTranslations' => array( '搜尋翻譯' ),
-);
\ No newline at end of file
+);
diff --git a/Translate.php b/Translate.php
index 9bf045e..3c22d13 100644
--- a/Translate.php
+++ b/Translate.php
@@ -49,6 +49,7 @@
$wgExtensionMessagesFiles['PageTranslation'] = "$dir/PageTranslation.i18n.php";
$wgExtensionMessagesFiles['TranslateGroupDescriptions'] =
"$dir/TranslateGroupDescriptions.i18n.php";
$wgExtensionMessagesFiles['TranslateSearch'] = "$dir/TranslateSearch.i18n.php";
+$wgExtensionMessagesFiles['TranslateSandbox'] =
"$dir/TranslateSandbox.i18n.php";
$wgExtensionMessagesFiles['TranslateAlias'] = "$dir/Translate.alias.php";
$wgExtensionMessagesFiles['TranslateMagic'] = "$dir/Translate.magic.php";
@@ -88,6 +89,7 @@
$wgSpecialPageGroups['AggregateGroups'] = 'wiki';
$wgSpecialPages['SearchTranslations'] = 'SpecialSearchTranslations';
$wgSpecialPageGroups['SearchTranslations'] = 'wiki';
+$wgSpecialPages['TranslateSandbox'] = 'SpecialTranslateSandbox';
// API
$wgAPIListModules['messagecollection'] = 'ApiQueryMessageCollection';
@@ -193,6 +195,7 @@
$wgAvailableRights[] = 'translate-manage';
$wgAvailableRights[] = 'translate-messagereview';
$wgAvailableRights[] = 'translate-groupreview';
+$wgAvailableRights[] = 'translate-sandboxmanage';
// New rights group
$wgGroupPermissions['translate-proofr']['translate-messagereview'] = true;
diff --git a/TranslateSandbox.i18n.php b/TranslateSandbox.i18n.php
new file mode 100644
index 0000000..b557730
--- /dev/null
+++ b/TranslateSandbox.i18n.php
@@ -0,0 +1,26 @@
+<?php
+/**
+ * Translations for the sandbox feature.
+ *
+ * @file
+ * @license GPL2+
+ */
+
+$messages = array();
+
+/** English
+ * @author Nike
+ */
+$messages['en'] = array(
+ 'translatesandbox' => 'Manage translator sandbox',
+ 'tsb-filter-pending' => 'Pending requests',
+);
+
+/** Message documentation (Message documentation)
+ * @author Nike
+ */
+$messages['qqq'] = array(
+ 'translatesandbox' => '{{doc-special|TranslateSandbox}}',
+ 'tsb-filter-pending' => 'A filter option on Special:TranslateSandbox',
+);
+
diff --git a/_autoload.php b/_autoload.php
index 83aff0f..cefd26e 100644
--- a/_autoload.php
+++ b/_autoload.php
@@ -46,6 +46,7 @@
$wgAutoloadClasses['SpecialSearchTranslations'] =
"$dir/specials/SpecialSearchTranslations.php";
$wgAutoloadClasses['SpecialSupportedLanguages'] =
"$dir/specials/SpecialSupportedLanguages.php";
$wgAutoloadClasses['SpecialTranslate'] = "$dir/specials/SpecialTranslate.php";
+$wgAutoloadClasses['SpecialTranslateSandbox'] =
"$dir/specials/SpecialTranslateSandbox.php";
$wgAutoloadClasses['SpecialTranslationStats'] =
"$dir/specials/SpecialTranslationStats.php";
$wgAutoloadClasses['SpecialTranslations'] =
"$dir/specials/SpecialTranslations.php";
/**@}*/
diff --git a/resources/css/ext.translate.special.translatesandbox.css
b/resources/css/ext.translate.special.translatesandbox.css
new file mode 100644
index 0000000..624cb71
--- /dev/null
+++ b/resources/css/ext.translate.special.translatesandbox.css
@@ -0,0 +1,114 @@
+/**
+ * CSS for special page.
+ * @author Niklas Laxström
+ * @license GPL2+
+ */
+
+/* Panes */
+.filter.pane,
+.search.pane {
+ border-bottom: 1px solid #575656;
+ height: 50px;
+ line-height: 50px;
+ font-size: 24px;
+}
+
+.requets.pane,
+.details.pane {
+ border-top: 1px solid #d3d2d2;
+}
+
+/* Requests pane */
+.request {
+ height: 50px;
+ border-right: 1px solid #c9c8c8;
+ border-bottom: 1px solid #c9c8c8;
+ cursor: pointer;
+}
+
+.request:first-child {
+ height: 51px;
+ border-top: 1px solid #c9c8c8;
+}
+
+.request .amount {
+ height: 100%;
+ line-height: 48px;
+ font-size: 40px;
+ text-align: center;
+ color: #96989a;
+ background-color: #f7f8f8;
+}
+
+.request .username,
+.request .selector {
+ height: 30px;
+ line-height: 30px;
+ font-size: 16px;
+ text-wrap: nowrap;
+}
+
+.request .email,
+.request .signup-age {
+ height: 20px;
+ line-height: 20px;
+ font-size: 12px;
+ color: #6c6d70;
+ text-wrap: nowrap;
+}
+
+.request .username,
+.request .email {
+ padding-left: 10px;
+ overflow: ellipsis;
+}
+
+.request .signup-age {
+ text-align: center;
+ overflow: hidden;
+}
+
+.request .proofread-marker {
+ background-color: #3e8dc5;
+ width: 10px;
+ height: 10px;
+ position: absolute;
+ top: 50%;
+ left: 5%;
+ margin-top: -5px;
+ -webkit-border-radius: 5px;
+ -moz-border-radius: 5px;
+ border-radius: 5px;
+}
+
+/* Details pane */
+
+.details.pane > div {
+ padding: 20px 0 0 20px;
+}
+
+.details.pane .username {
+ font-size: 30px;
+}
+
+.details.pane .email {
+ font-size: 14px;
+ color: #6c6d70;
+}
+
+.details.pane .languages {
+ color: #6c6d70;
+ font-size: 14px;
+}
+
+.details.pane .languages span {
+ margin-right: 2em;
+}
+
+.details.pane .actions {
+ font-size: 26px;
+}
+
+.actions .button {
+ margin-right: 1.5em;
+}
diff --git a/resources/js/ext.translate.special.translatesandbox.js
b/resources/js/ext.translate.special.translatesandbox.js
new file mode 100644
index 0000000..6749001
--- /dev/null
+++ b/resources/js/ext.translate.special.translatesandbox.js
@@ -0,0 +1,69 @@
+/**
+ * JS for special page.
+ * @author Niklas Laxström
+ * @license GPL2+
+ */
+
+(function ( $, mw ) {
+ function doApiAction( options ) {
+ var api = new mw.Api();
+
+ options = $.extend( {}, {
+ action: 'translatesandbox',
+ token: $( '#token' ).val()
+ }, options );
+
+ api.post( options )
+ .done( function () { window.alert( 'Success' ); } )
+ .fail( function () { window.alert( 'Failure' ); } )
+ ;
+ }
+
+ $( document ).ready( function () {
+ var $requests, $detailsPane;
+
+ $detailsPane = $( '.details.pane' );
+
+ $requests = $( '.requests .request' );
+ $requests.on( 'click', function () {
+ var $this = $( this );
+
+ $detailsPane.empty().append(
+ $( '<div>' )
+ .addClass( 'username row' )
+ .text( $this.find( '.username' ).text()
),
+ $( '<div>' )
+ .addClass( 'email row' )
+ .text( $this.find( '.email' ).text() ),
+ $( '<div>' )
+ .addClass( 'languages row' )
+ .append(
+ $( '<span>' ).text( 'Afrikaans'
),
+ $( '<span>' ).text( 'español' )
+ ),
+ $( '<div>' )
+ .addClass( 'actions row' )
+ .append(
+ $( '<button>' )
+ .addClass( 'accept
primary button' )
+ .text( 'Accept' )
+ .on( 'click', function
() {
+ doApiAction( {
+ userid:
$this.data( 'data' ).id,
+ 'do':
'promote'
+ } );
+ } ),
+ $( '<button>' )
+ .addClass( 'delete
destructive button' )
+ .text( 'Delete' )
+ .on( 'click', function
() {
+ doApiAction( {
+ userid:
$this.data( 'data' ).id,
+ 'do':
'delete'
+ } );
+ } )
+ )
+ );
+ } );
+ } );
+}( jQuery, mediaWiki ) );
diff --git a/specials/SpecialTranslateSandbox.php
b/specials/SpecialTranslateSandbox.php
new file mode 100644
index 0000000..126b552
--- /dev/null
+++ b/specials/SpecialTranslateSandbox.php
@@ -0,0 +1,101 @@
+<?php
+/**
+ * Contains logic for special page ...
+ *
+ * @file
+ * @author Niklas Laxström
+ * @license GPL2+
+ */
+
+/**
+ * Special page for managing sandboxed users.
+ *
+ * @ingroup SpecialPage TranslateSpecialPage
+ */
+class SpecialTranslateSandbox extends SpecialPage {
+ function __construct() {
+ global $wgTranslateUseSandbox;
+ parent::__construct( 'TranslateSandbox',
'translate-sandboxmanage', $wgTranslateUseSandbox );
+ }
+
+ public function execute( $params ) {
+ $this->checkPermissions();
+ $out = $this->getOutput();
+ $out->addModules( 'ext.translate.special.translatesandbox' );
+ $this->showPage();
+ }
+
+ /**
+ * Generates the whole page html and appends it to output
+ */
+ protected function showPage() {
+ // Easier to do this way than in JS
+ $token = Html::hidden( 'token',
ApiTranslateSandbox::getToken(), array( 'id' => 'token' ) );
+
+ $out = $this->getOutput();
+ $out->addHtml( <<<HTML
+<div class="grid">
+ <div class="row">
+ <div class="four columns pane
filter">{$this->makeFilter()}</div>
+ <div class="eight columns pane search"></div>
+ </div>
+ <div class="row">
+ <div class="four columns pane
requests">{$this->makeList()}</div>
+ <div class="eight columns pane details"></div>
+ </div>
+ $token
+</div>
+HTML
+ );
+ }
+
+ protected function makeFilter() {
+ return $this->msg( 'tsb-filter-pending' )->escaped();
+ }
+
+ protected function makeList() {
+ $items = array();
+
+ $users = TranslateSandbox::getUsers();
+ foreach ( $users as $user ) {
+ $items[] = $this->makeRequestItem( $user );
+ }
+
+ return "\n\n" . implode( "\n", $items ) . "\n\n";
+ }
+
+ protected function makeRequestItem( User $user ) {
+ $data = array(
+ 'name' => $user->getName(),
+ 'email' => $user->getEmail(),
+ 'registration' => $user->getRegistration(),
+ 'translations' => 0,
+ 'id' => $user->getId(),
+ );
+
+ $dataEnc = htmlspecialchars( FormatJson::encode( $data ) );
+
+ $nameEnc = htmlspecialchars( $data['name'] );
+ $emailEnc = htmlspecialchars( $data['email'] );
+ $countEnc = htmlspecialchars( $data['translations'] );
+ $timestamp = new MWTimestamp( $data['registration'] );
+ $agoEnc = htmlspecialchars( $timestamp->getHumanTimestamp() );
+
+ return <<<HTML
+<div class="row request" data-data="$dataEnc">
+ <div class="three columns amount">
+ <div class="proofread-marker"></div>
+ <div class="translation-count">$countEnc</div>
+ </div>
+ <div class="six columns details">
+ <div class="row username">$nameEnc</div>
+ <div class="row email">$emailEnc</div>
+ </div>
+ <div class="three columns approval">
+ <div class="row selector"></div>
+ <div class="row signup-age">$agoEnc</div>
+ </div>
+</div>
+HTML;
+ }
+}
--
To view, visit https://gerrit.wikimedia.org/r/58885
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: newchange
Gerrit-Change-Id: If1747b0f803586d1d300957644649396e5acf14b
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Translate
Gerrit-Branch: master
Gerrit-Owner: Nikerabbit <[email protected]>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits