r101041 MediaWiki - Code Review archive

Repository:MediaWiki
Revision:r101040‎ | r101041 | r101042 >
Date:20:35, 27 October 2011
Author:catrope
Status:ok
Tags:
Comment:
1.18wmf1: Update MoodBar to trunk state
Modified paths:
  • /branches/wmf/1.18wmf1/extensions/MoodBar (modified) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/ApiFeedbackDashboard.php (added) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/ApiQueryMoodBarComments.php (added) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/DashboardForms.php (added) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/FeedbackItem.php (modified) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.alias.php (added) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.hooks.php (modified) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.i18n.php (modified) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.php (modified) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/SpecialFeedbackDashboard.php (added) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/SpecialMoodBar.php (modified) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard (added) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.core.css (modified) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.core.js (modified) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.init.js (modified) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/images/ajax-spinner.gif (modified) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/sql/AddIDToIndexes.sql (added) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/sql/AddIDToIndexes2.sql (added) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/sql/MoodBar.sql (modified) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/sql/mbf_hidden_state.sql (added) (history)
  • /branches/wmf/1.18wmf1/extensions/MoodBar/sql/mbf_timestamp_id.sql (added) (history)

Diff [purge]

Index: branches/wmf/1.18wmf1/extensions/MoodBar/ApiQueryMoodBarComments.php
@@ -0,0 +1,189 @@
 2+<?php
 3+
 4+class ApiQueryMoodBarComments extends ApiQueryBase {
 5+ public function __construct( $query, $moduleName ) {
 6+ parent::__construct( $query, $moduleName, 'mbc' );
 7+ }
 8+
 9+ public function execute() {
 10+ global $wgLang, $wgUser;
 11+ $params = $this->extractRequestParams();
 12+ $prop = array_flip( $params['prop'] );
 13+
 14+ // Build the query
 15+ $this->addTables( array( 'moodbar_feedback', 'user' ) );
 16+ $this->addJoinConds( array( 'user' => array( 'LEFT JOIN', 'user_id=mbf_user_id' ) ) );
 17+ $this->addFields( array( 'user_name', 'mbf_id', 'mbf_type', 'mbf_timestamp', 'mbf_user_id', 'mbf_user_ip',
 18+ 'mbf_comment', 'mbf_hidden_state' ) );
 19+ if ( count( $params['type'] ) ) {
 20+ $this->addWhereFld( 'mbf_type', $params['type'] );
 21+ }
 22+ if ( $params['user'] !== null ) {
 23+ $user = User::newFromName( $params['user'] ); // returns false for IPs
 24+ if ( !$user || $user->isAnon() ) {
 25+ $this->addWhereFld( 'mbf_user_id', 0 );
 26+ $this->addWhereFld( 'mbf_user_ip', $params['user'] );
 27+ } else {
 28+ $this->addWhereFld( 'mbf_user_id', $user->getID() );
 29+ $this->addWhere( 'mbf_user_ip IS NULL' );
 30+ }
 31+ }
 32+
 33+ if ( $params['continue'] !== null ) {
 34+ $this->applyContinue( $params['continue'], $params['dir'] == 'older' );
 35+ }
 36+
 37+ // Add ORDER BY mbf_timestamp {ASC|DESC}, mbf_id {ASC|DESC}
 38+ $this->addWhereRange( 'mbf_timestamp', $params['dir'], null, null );
 39+ $this->addWhereRange( 'mbf_id', $params['dir'], null, null );
 40+ $this->addOption( 'LIMIT', $params['limit'] + 1 );
 41+
 42+ if ( ! $wgUser->isAllowed( 'moodbar-admin' ) ) {
 43+ $this->addWhereFld( 'mbf_hidden_state', 0 );
 44+ }
 45+
 46+ $res = $this->select( __METHOD__ );
 47+ $result = $this->getResult();
 48+ $count = 0;
 49+ foreach ( $res as $row ) {
 50+ if ( ++$count > $params['limit'] ) {
 51+ // We've reached the one extra which shows that there are additional rows. Stop here
 52+ $this->setContinueEnumParameter( 'continue', $this->getContinue( $row ) );
 53+ break;
 54+ }
 55+
 56+ $vals = $this->extractRowInfo( $row, $prop );
 57+ $fit = $result->addValue( array( 'query', $this->getModuleName() ), null, $vals );
 58+ if ( !$fit ) {
 59+ $this->setContinueEnumParameter( 'continue', $this->getContinue( $row ) );
 60+ break;
 61+ }
 62+ }
 63+ $result->setIndexedTagName_internal( array( 'query', $this->getModuleName() ), 'comment' );
 64+ }
 65+
 66+ protected function getContinue( $row ) {
 67+ $ts = wfTimestamp( TS_MW, $row->mbf_timestamp );
 68+ return "$ts|{$row->mbf_id}";
 69+ }
 70+
 71+ protected function applyContinue( $continue, $sortDesc ) {
 72+ $vals = explode( '|', $continue, 3 );
 73+ if ( count( $vals ) !== 2 ) {
 74+ // TODO this should be a standard message in ApiBase
 75+ $this->dieUsage( 'Invalid continue param. You should pass the original value returned by the previous query', 'badcontinue' );
 76+ }
 77+
 78+ $db = $this->getDB();
 79+ $ts = $db->addQuotes( $db->timestamp( $vals[0] ) );
 80+ $id = intval( $vals[1] );
 81+ $op = $sortDesc ? '<' : '>';
 82+ // TODO there should be a standard way to do this in DatabaseBase or ApiQueryBase something
 83+ $this->addWhere( "mbf_timestamp $op $ts OR " .
 84+ "(mbf_timestamp = $ts AND " .
 85+ "mbf_id $op= $id)"
 86+ );
 87+ }
 88+
 89+ protected function extractRowInfo( $row, $prop ) {
 90+ global $wgUser;
 91+
 92+ $r = array();
 93+
 94+ $showHidden = isset($prop['hidden']) && $wgUser->isAllowed('moodbar-admin');
 95+ $isHidden = $row->mbf_hidden_state > 0;
 96+
 97+ if ( isset( $prop['metadata'] ) ) {
 98+ $r += array(
 99+ 'id' => intval( $row->mbf_id ),
 100+ 'type' => $row->mbf_type,
 101+ 'timestamp' => wfTimestamp( TS_ISO_8601, $row->mbf_timestamp ),
 102+ 'userid' => intval( $row->mbf_user_id ),
 103+ 'username' => $row->mbf_user_ip === null ? $row->user_name : $row->mbf_user_ip,
 104+ );
 105+ ApiResult::setContent( $r, $row->mbf_comment );
 106+ }
 107+ if ( isset( $prop['formatted'] ) ) {
 108+ $params = array();
 109+
 110+ if ( $wgUser->isAllowed( 'moodbar-admin' ) ) {
 111+ $params[] = 'admin';
 112+ }
 113+
 114+ if ( $isHidden && $showHidden ) {
 115+ $params[] = 'show-anyway';
 116+ }
 117+
 118+ $r['formatted'] = SpecialFeedbackDashboard::formatListItem( $row, $params );
 119+ }
 120+
 121+ if ( $isHidden && !$showHidden ) {
 122+ unset($r['userid']);
 123+ unset($r['username']);
 124+ unset($r['type']);
 125+ ApiResult::setContent( $r, '' );
 126+ $r['hidden'] = true;
 127+ }
 128+
 129+ return $r;
 130+ }
 131+
 132+ public function getAllowedParams() {
 133+ return array(
 134+ 'limit' => array(
 135+ ApiBase::PARAM_DFLT => 10,
 136+ ApiBase::PARAM_TYPE => 'limit',
 137+ ApiBase::PARAM_MIN => 1,
 138+ ApiBase::PARAM_MAX => ApiBase::LIMIT_BIG1,
 139+ ApiBase::PARAM_MAX2 => ApiBase::LIMIT_BIG2
 140+ ),
 141+ 'dir' => array(
 142+ ApiBase::PARAM_DFLT => 'older',
 143+ ApiBase::PARAM_TYPE => array(
 144+ 'newer',
 145+ 'older'
 146+ )
 147+ ),
 148+ 'continue' => null,
 149+ 'type' => array(
 150+ ApiBase::PARAM_TYPE => MBFeedbackItem::getValidTypes(),
 151+ ApiBase::PARAM_ISMULTI => true,
 152+ ApiBase::PARAM_DFLT => '', // all
 153+ ),
 154+ 'user' => array(
 155+ ApiBase::PARAM_TYPE => 'user',
 156+ ),
 157+ 'prop' => array(
 158+ ApiBase::PARAM_TYPE => array( 'metadata', 'formatted', 'hidden' ),
 159+ ApiBase::PARAM_DFLT => 'metadata',
 160+ ApiBase::PARAM_ISMULTI => true,
 161+ ),
 162+ );
 163+ }
 164+
 165+ public function getVersion() {
 166+ return __CLASS__ . ': $Id$';
 167+ }
 168+
 169+ public function getParamDescription() {
 170+ return array(
 171+ 'limit' => 'How many comments to return',
 172+ 'continue' => 'When more results are available, use this to continue',
 173+ 'type' => 'Only return comments of the given type(s). If not set or empty, return all comments',
 174+ 'user' => 'Only return comments submitted by the given user',
 175+ 'prop' => array( 'Which properties to get:',
 176+ ' metadata - Comment ID, type, timestamp, user',
 177+ ' formatted - HTML that would be displayed for this comment on Special:MoodBarFeedback',
 178+ ' hidden - Format the full HTML even if comments are hidden',
 179+ ),
 180+ );
 181+ }
 182+
 183+ public function getDescription() {
 184+ return 'List all feedback comments submitted through the MoodBar extension.';
 185+ }
 186+
 187+ public function getCacheMode( $params ) {
 188+ return isset($params['prop']['hidden']) ? 'private' : 'public';
 189+ }
 190+}
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/ApiQueryMoodBarComments.php
___________________________________________________________________
Added: svn:eol-style
1191 + native
Added: svn:keywords
2192 + Id
Index: branches/wmf/1.18wmf1/extensions/MoodBar/sql/MoodBar.sql
@@ -16,6 +16,9 @@
1717 mbf_comment varchar(255) binary,
1818
1919 -- Options and context
 20+ -- Whether or not the feedback item is hidden
 21+ -- 0 = No; 255 = Yes (other values reserved for partial hiding)
 22+ mbf_hidden_state tinyint unsigned not null default 0,
2023 mbf_anonymous tinyint unsigned not null default 0, -- Anonymity
2124 mbf_timestamp varchar(14) binary not null, -- When feedback was received
2225 mbf_system_type varchar(64) binary null, -- Operating System
@@ -23,8 +26,12 @@
2427 mbf_locale varchar(32) binary null, -- The locale of the user's browser
2528 mbf_editing tinyint unsigned not null, -- Whether or not the user was editing
2629 mbf_bucket varchar(128) binary null -- Bucket, for A/B testing
27 -) /*$wgDBtableOptions*/;
 30+) /*$wgDBTableOptions*/;
2831
2932 -- A little overboard with the indexes perhaps, but we want to be able to dice this data a lot!
30 -CREATE INDEX /*i*/type_timestamp ON /*_*/moodbar_feedback (mbf_type,mbf_timestamp);
31 -CREATE INDEX /*i*/title_type ON /*_*/moodbar_feedback (mbf_namespace,mbf_title,mbf_type,mbf_timestamp);
 33+CREATE INDEX /*i*/mbf_type_timestamp_id ON /*_*/moodbar_feedback (mbf_type,mbf_timestamp, mbf_id);
 34+CREATE INDEX /*i*/mbf_title_type_id ON /*_*/moodbar_feedback (mbf_namespace,mbf_title,mbf_type,mbf_timestamp, mbf_id);
 35+-- CREATE INDEX /*i*/mbf_namespace_title_timestamp ON /*_*/moodbar_feedback (mbf_namespace, mbf_title, mbf_timestamp, mbf_id); --maybe in the future if we actually do per-page filtering
 36+CREATE INDEX /*i*/mbf_userid_ip_timestamp_id ON /*_*/moodbar_feedback (mbf_user_id, mbf_user_ip, mbf_timestamp, mbf_id);
 37+CREATE INDEX /*i*/mbf_type_userid_ip_timestamp_id ON /*_*/moodbar_feedback (mbf_type, mbf_user_id, mbf_user_ip, mbf_timestamp, mbf_id);
 38+CREATE INDEX /*i*/mbf_timestamp_id ON /*_*/moodbar_feedback (mbf_timestamp, mbf_id);
Index: branches/wmf/1.18wmf1/extensions/MoodBar/sql/mbf_timestamp_id.sql
@@ -0,0 +1,5 @@
 2+-- Add some indexes to the moodbar_feedback table
 3+
 4+CREATE INDEX /*i*/mbf_userid_ip_timestamp_id ON /*_*/moodbar_feedback (mbf_user_id, mbf_user_ip, mbf_timestamp, mbf_id);
 5+CREATE INDEX /*i*/mbf_type_userid_ip_timestamp_id ON /*_*/moodbar_feedback (mbf_type, mbf_user_id, mbf_user_ip, mbf_timestamp, mbf_id);
 6+CREATE INDEX /*i*/mbf_timestamp_id ON /*_*/moodbar_feedback (mbf_timestamp, mbf_id);
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/sql/mbf_timestamp_id.sql
___________________________________________________________________
Added: svn:eol-style
17 + native
Index: branches/wmf/1.18wmf1/extensions/MoodBar/sql/AddIDToIndexes.sql
@@ -0,0 +1,5 @@
 2+-- Drop and recreate indexes to add mbf_id to the end
 3+DROP INDEX /*i*/type_timestamp ON /*_*/moodbar_feedback;
 4+DROP INDEX /*i*/title_type ON /*_*/moodbar_feedback;
 5+CREATE INDEX /*i*/mbf_type_timestamp_id ON /*_*/moodbar_feedback (mbf_type,mbf_timestamp, mbf_id);
 6+CREATE INDEX /*i*/mbf_title_type_id ON /*_*/moodbar_feedback (mbf_namespace,mbf_title,mbf_type,mbf_timestamp, mbf_id);
\ No newline at end of file
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/sql/AddIDToIndexes.sql
___________________________________________________________________
Added: svn:eol-style
17 + native
Index: branches/wmf/1.18wmf1/extensions/MoodBar/sql/AddIDToIndexes2.sql
@@ -0,0 +1,5 @@
 2+-- Drop and recreate indexes to add mbf_id to the end
 3+DROP INDEX /*i*/mbf_userid_ip_timestamp ON /*_*/moodbar_feedback;
 4+DROP INDEX /*i*/mbf_type_userid_ip_timestamp ON /*_*/moodbar_feedback;
 5+DROP INDEX /*i*/mbf_timestamp ON /*_*/moodbar_feedback;
 6+-- Recreation is done in mbf_timestamp_id.sql
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/sql/AddIDToIndexes2.sql
___________________________________________________________________
Added: svn:eol-style
17 + native
Index: branches/wmf/1.18wmf1/extensions/MoodBar/sql/mbf_hidden_state.sql
@@ -0,0 +1,4 @@
 2+-- Adds the mbf_hidden_state field to the moodbar_feedback table, for
 3+-- hiding feedback from public view.
 4+-- Andrew Garrett, 2011-10-07
 5+ALTER TABLE /*_*/moodbar_feedback ADD COLUMN mbf_hidden_state tinyint unsigned not null default 0;
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/sql/mbf_hidden_state.sql
___________________________________________________________________
Added: svn:eol-style
16 + native
Index: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.alias.php
@@ -0,0 +1,15 @@
 2+<?php
 3+/**
 4+ * Aliases for Special:Gadgets
 5+ *
 6+ * @file
 7+ * @ingroup Extensions
 8+ */
 9+
 10+$specialPageAliases = array();
 11+
 12+/** English (English) */
 13+$specialPageAliases['en'] = array(
 14+ 'MoodBar' => array( 'MoodBar' ),
 15+ 'FeedbackDashboard' => array( 'FeedbackDashboard' ),
 16+);
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.alias.php
___________________________________________________________________
Added: svn:eol-style
117 + native
Index: branches/wmf/1.18wmf1/extensions/MoodBar/SpecialFeedbackDashboard.php
@@ -0,0 +1,490 @@
 2+<?php
 3+/**
 4+ * Special:FeedbackDashboard. Special page for viewing moodbar comments.
 5+ */
 6+class SpecialFeedbackDashboard extends SpecialPage {
 7+ protected $showHidden = false;
 8+ protected $action = false;
 9+
 10+ public function __construct() {
 11+ parent::__construct( 'FeedbackDashboard' );
 12+ }
 13+
 14+ public function getDescription() {
 15+ return wfMessage( 'moodbar-feedback-title' )->plain();
 16+ }
 17+
 18+ public function execute( $par ) {
 19+ global $wgOut, $wgRequest;
 20+
 21+ $limit = 20;
 22+ $offset = false;
 23+ $filterType = '';
 24+ $id = intval( $par );
 25+ if ( $id > 0 ) {
 26+ // Special:FeedbackDashboard/123 is an ID/permalink view
 27+ $filters = array( 'id' => $id );
 28+ $filterType = 'id';
 29+ if ( $wgRequest->getCheck( 'show-feedback' ) ) {
 30+ $this->showHidden = true;
 31+ }
 32+
 33+ if ( $wgRequest->getCheck( 'restore-feedback' ) ) {
 34+ $this->action = 'restore';
 35+ } elseif ( $wgRequest->getCheck( 'hide-feedback' ) ) {
 36+ $this->action = 'hide';
 37+ }
 38+ } else {
 39+ // Determine filters and offset from the query string
 40+ $filters = array();
 41+ $type = $wgRequest->getArray( 'type' );
 42+ if ( $type ) {
 43+ $filters['type'] = $type;
 44+ }
 45+ $username = strval( $wgRequest->getVal( 'username' ) );
 46+ if ( $username !== '' ) {
 47+ $filters['username'] = $username;
 48+ }
 49+ $offset = $wgRequest->getVal( 'offset', $offset );
 50+ if ( count( $filters ) ) {
 51+ $filterType = 'filtered';
 52+ }
 53+ }
 54+ // Do the query
 55+ $backwards = $wgRequest->getVal( 'dir' ) === 'prev';
 56+ $res = $this->doQuery( $filters, $limit, $offset, $backwards );
 57+
 58+ // Output HTML
 59+ $wgOut->setPageTitle( wfMsg( 'moodbar-feedback-title' ) );
 60+ $wgOut->addHTML( $this->buildForm( $filterType ) );
 61+ $wgOut->addHTML( $this->buildList( $res ) );
 62+ $wgOut->addModuleStyles( 'ext.moodBar.dashboard.styles' );
 63+ $wgOut->addModules( 'ext.moodBar.dashboard' );
 64+ }
 65+
 66+ /**
 67+ * Build the filter form. The state of each form element is preserved
 68+ * using data in $wgRequest.
 69+ * @param $filterType string Value to pass in the <form>'s data-filtertype attribute
 70+ * @return string HTML
 71+ */
 72+ public function buildForm( $filterType ) {
 73+ global $wgRequest, $wgMoodBarConfig;
 74+ $filtersMsg = wfMessage( 'moodbar-feedback-filters' )->escaped();
 75+ $typeMsg = wfMessage( 'moodbar-feedback-filters-type' )->escaped();
 76+ $praiseMsg = wfMessage( 'moodbar-feedback-filters-type-happy' )->escaped();
 77+ $confusionMsg = wfMessage( 'moodbar-feedback-filters-type-confused' )->escaped();
 78+ $issuesMsg = wfMessage( 'moodbar-feedback-filters-type-sad' )->escaped();
 79+ $usernameMsg = wfMessage( 'moodbar-feedback-filters-username' )->escaped();
 80+ $setFiltersMsg = wfMessage( 'moodbar-feedback-filters-button' )->escaped();
 81+ $whatIsMsg = wfMessage( 'moodbar-feedback-whatis' )->escaped();
 82+ $whatIsURL = htmlspecialchars( $wgMoodBarConfig['infoUrl'] );
 83+ $actionURL = htmlspecialchars( $this->getTitle()->getLinkURL() );
 84+
 85+ $types = $wgRequest->getArray( 'type', array() );
 86+ $happyCheckbox = Xml::check( 'type[]', in_array( 'happy', $types ),
 87+ array( 'id' => 'fbd-filters-type-praise', 'value' => 'happy' ) );
 88+ $confusedCheckbox = Xml::check( 'type[]', in_array( 'confused', $types ),
 89+ array( 'id' => 'fbd-filters-type-confusion', 'value' => 'confused' ) );
 90+ $sadCheckbox = Xml::check( 'type[]', in_array( 'sad', $types ),
 91+ array( 'id' => 'fbd-filters-type-issues', 'value' => 'sad' ) );
 92+ $usernameTextbox = Html::input( 'username', $wgRequest->getText( 'username' ), 'text',
 93+ array( 'id' => 'fbd-filters-username', 'class' => 'fbd-filters-input' ) );
 94+ $filterType = htmlspecialchars( $filterType );
 95+
 96+ return <<<HTML
 97+ <div id="fbd-filters">
 98+ <form action="$actionURL" data-filtertype="$filterType">
 99+ <h3 id="fbd-filters-title">$filtersMsg</h3>
 100+ <fieldset id="fbd-filters-types">
 101+ <legend class="fbd-filters-label">$typeMsg</legend>
 102+ <ul>
 103+ <li>
 104+ $happyCheckbox
 105+ <label for="fbd-filters-type-praise" id="fbd-filters-type-praise-label">$praiseMsg</label>
 106+ </li>
 107+ <li>
 108+ $confusedCheckbox
 109+ <label for="fbd-filters-type-confusion" id="fbd-filters-type-confusion-label">$confusionMsg</label>
 110+ </li>
 111+ <li>
 112+ $sadCheckbox
 113+ <label for="fbd-filters-type-issues" id="fbd-filters-type-issues-label">$issuesMsg</label>
 114+ </li>
 115+ </ul>
 116+ </fieldset>
 117+ <label for="fbd-filters-username" class="fbd-filters-label">$usernameMsg</label>
 118+ $usernameTextbox
 119+ <button type="submit" id="fbd-filters-set">$setFiltersMsg</button>
 120+ </form>
 121+ <a href="$whatIsURL" id="fbd-about">$whatIsMsg</a>
 122+ </div>
 123+HTML;
 124+ }
 125+
 126+ /**
 127+ * Format a single list item from a database row.
 128+ * @param $row Database row object
 129+ * @param $params An array of flags. Valid flags:
 130+ * * admin (user can show/hide feedback items)
 131+ * * show-anyway (user has asked to see this hidden item)
 132+ * @return string HTML
 133+ */
 134+ public static function formatListItem( $row, $params = array() ) {
 135+ global $wgLang;
 136+
 137+ $feedbackItem = MBFeedbackItem::load( $row );
 138+
 139+ $classes = array('fbd-item');
 140+ $toolLinks = array();
 141+
 142+ // Type
 143+ $type = $feedbackItem->getProperty('type');
 144+ $typeMsg = wfMessage( "moodbar-type-$type" )->escaped();
 145+
 146+ // Timestamp
 147+ $now = wfTimestamp( TS_UNIX );
 148+ $timestamp = wfTimestamp( TS_UNIX, $feedbackItem->getProperty('timestamp') );
 149+ $time = $wgLang->formatTimePeriod( $now - $timestamp,
 150+ array( 'avoid' => 'avoidminutes', 'noabbrevs' => true )
 151+ );
 152+ $timeMsg = wfMessage( 'ago' )->params( $time )->escaped();
 153+
 154+ // Comment
 155+ $comment = htmlspecialchars( $feedbackItem->getProperty('comment') );
 156+
 157+ // User information
 158+ $userInfo = self::buildUserInfo( $feedbackItem );
 159+
 160+ // Tool links
 161+ $toolLinks[] = self::getPermalink( $feedbackItem );
 162+
 163+ // Continuation data
 164+ $id = $feedbackItem->getProperty('id');
 165+ $continueData = wfTimestamp( TS_MW, $timestamp ) . '|' . intval( $id );
 166+
 167+ // Now handle hiding, showing, etc
 168+ if ( $feedbackItem->getProperty('hidden-state') > 0 ) {
 169+ $toolLinks = array();
 170+ if ( !in_array('show-anyway', $params) ) {
 171+ $userInfo = wfMessage('moodbar-user-hidden')->escaped();
 172+ $comment = wfMessage('moodbar-comment-hidden')->escaped();
 173+ $type = 'hidden';
 174+ $typeMsg = '';
 175+ $classes[] = 'fbd-hidden';
 176+ }
 177+
 178+ if ( in_array('admin', $params) ) {
 179+ if ( in_array('show-anyway', $params) ) {
 180+ $toolLinks[] = self::getHiddenFooter($feedbackItem, 'shown');
 181+ } else {
 182+ $toolLinks[] = self::getHiddenFooter($feedbackItem, 'hidden');
 183+ }
 184+ }
 185+ } elseif ( in_array('admin', $params) ) {
 186+ $toolLinks[] = self::getHideLink( $feedbackItem );
 187+ }
 188+
 189+ $classes = Sanitizer::encodeAttribute( implode(' ', $classes) );
 190+ $toolLinks = implode("\n", $toolLinks );
 191+
 192+ return <<<HTML
 193+ <li class="$classes" data-mbccontinue="$continueData">
 194+ <div class="fbd-item-emoticon fbd-item-emoticon-$type">
 195+ <span class="fbd-item-emoticon-label">$typeMsg</span>
 196+ </div>
 197+ <div class="fbd-item-time">$timeMsg</div>
 198+$userInfo
 199+ <div class="fbd-item-message">$comment</div>
 200+$toolLinks
 201+ <div style="clear:both"></div>
 202+ </li>
 203+HTML;
 204+ }
 205+
 206+ /**
 207+ * Build the "user information" part of an item on the feedback dashboard.
 208+ * @param $feedbackItem MBFeedbackItem representing the feedback to show
 209+ * @return string HTML
 210+ */
 211+ protected static function buildUserInfo( $feedbackItem ) {
 212+ $user = $feedbackItem->getProperty('user');
 213+ $username = htmlspecialchars( $user->getName() );
 214+
 215+ //$links = Linker::userToolLinks( $user->getId(), $username );
 216+ // 1.17wmf1 compat
 217+ $links = $GLOBALS['wgUser']->getSkin()
 218+ ->userToolLinks( $user->getId(), $username );
 219+
 220+ $userPageUrl = htmlspecialchars($user->getUserPage()->getLocalURL());
 221+
 222+ return <<<HTML
 223+ <div class="fbd-item-userName">
 224+ <a href="$userPageUrl" class="fbd-item-userLink">$username</a>
 225+ <sup class="fbd-item-userLinks">
 226+ $links
 227+ </sup>
 228+ </div>
 229+HTML;
 230+ }
 231+
 232+ /**
 233+ * Gets a permanent link to a given feedback item
 234+ * @param $feedbackItem MBFeedbackItem to get a link for
 235+ * @return string HTML
 236+ */
 237+ protected static function getPermalink( $feedbackItem ) {
 238+ $id = $feedbackItem->getProperty('id');
 239+ $permalinkTitle = SpecialPage::getTitleFor( 'FeedbackDashboard', $id );
 240+ $permalinkText = wfMessage( 'moodbar-feedback-permalink' )->escaped();
 241+ $permalink = $GLOBALS['wgUser']->getSkin()->link( $permalinkTitle, $permalinkText );
 242+ return Xml::tags( 'div', array( 'class' => 'fbd-item-permalink' ), "($permalink)" );
 243+ }
 244+
 245+ /**
 246+ * Gets the footer for a hidden comment
 247+ * @param $feedbackItem The feedback item in question.
 248+ * @param $mode The mode to show in. Either 'shown' or 'hidden'
 249+ * @return string HTML
 250+ */
 251+ protected static function getHiddenFooter( $feedbackItem, $mode ) {
 252+ $id = $feedbackItem->getProperty('id');
 253+ $permalinkTitle = SpecialPage::getTitleFor( 'FeedbackDashboard', $id );
 254+ if ( $mode === 'shown' ) {
 255+ $linkText = wfMessage( 'moodbar-feedback-restore' )->escaped();
 256+ $query = array('restore-feedback' => '1');
 257+ $link = $GLOBALS['wgUser']->getSkin()
 258+ ->link( $permalinkTitle, $linkText, array(), $query );
 259+ $link = Xml::tags( 'span', array( 'class' => 'fbd-item-restore' ), "($link)" );
 260+
 261+ $footer = wfMessage('moodbar-hidden-footer')->rawParams($link)->escaped();
 262+ return Xml::tags( 'div', array( 'class' => 'error' ), $footer );
 263+ } elseif ( $mode === 'hidden' ) {
 264+ $linkText = wfMessage('moodbar-feedback-show')->escaped();
 265+ $query = array('show-feedback' => '1');
 266+ $link = $GLOBALS['wgUser']->getSkin()
 267+ ->link( $permalinkTitle, $linkText, array(), $query );
 268+ return Xml::tags( 'div', array( 'class' => 'fbd-item-show' ), "($link)" );
 269+ }
 270+ }
 271+
 272+ /**
 273+ * Gets a link to hide the current feedback item from view
 274+ * @param $feedbackItem The feedback item to show a hide link for
 275+ * @return string HTML
 276+ */
 277+ protected static function getHideLink( $feedbackItem ) {
 278+ $id = $feedbackItem->getProperty('id');
 279+ $permalinkTitle = SpecialPage::getTitleFor( 'FeedbackDashboard', $id );
 280+ $permalinkText = wfMessage( 'moodbar-feedback-hide' )->escaped();
 281+ $link = $GLOBALS['wgUser']->getSkin()
 282+ ->link( $permalinkTitle, $permalinkText,
 283+ array(), array('hide-feedback' => '1') );
 284+ return Xml::tags( 'div', array( 'class' => 'fbd-item-hide' ), "($link)" );
 285+ }
 286+
 287+
 288+ /**
 289+ * Build a comment list from a query result
 290+ * @param $res array Return value of doQuery()
 291+ * @return string HTML
 292+ */
 293+ public function buildList( $res ) {
 294+ global $wgRequest, $wgUser;
 295+ $list = '';
 296+
 297+ $params = array();
 298+ if ( $wgUser->isAllowed('moodbar-admin') ) {
 299+ $params[] = 'admin';
 300+
 301+ if ( $this->showHidden ) {
 302+ $params[] = 'show-anyway';
 303+ }
 304+ }
 305+
 306+ foreach ( $res['rows'] as $row ) {
 307+ $list .= self::formatListItem( $row, $params );
 308+ }
 309+
 310+ if ( $list === '' ) {
 311+ return '<div id="fbd-list">' . wfMessage( 'moodbar-feedback-noresults' )->escaped() . '</div>';
 312+ } else {
 313+ // FIXME: We also need to show the More link (hidden) if there were no results
 314+ $olderRow = $res['olderRow'];
 315+ $newerRow = $res['newerRow'];
 316+ $html = "<ul id=\"fbd-list\">$list</ul>";
 317+
 318+ // Only set for showing an individual row.
 319+ $form = null;
 320+ if ( $this->action == 'restore' ) {
 321+ $form = new MBRestoreForm( $row->mbf_id );
 322+ } elseif ( $this->action == 'hide' ) {
 323+ $form = new MBHideForm( $row->mbf_id );
 324+ }
 325+
 326+ if ( $form ) {
 327+ $result = $form->show();
 328+ if ( $result === true ) {
 329+ global $wgOut;
 330+ $title = SpecialPage::getTitleFor( 'FeedbackDashboard',
 331+ $row->mbf_id );
 332+ $wgOut->redirect( $title->getFullURL() );
 333+ } else {
 334+ $html .= "\n$result\n";
 335+ }
 336+ }
 337+
 338+ // Output the "More" link
 339+ $moreText = wfMessage( 'moodbar-feedback-more' )->escaped();
 340+ $attribs = array( 'id' => 'fbd-list-more' );
 341+ if ( !$olderRow ) {
 342+ // There are no more rows. Hide the More link
 343+ // We still need to output it because the JS may need it later
 344+ $attribs['style'] = 'display: none;';
 345+ }
 346+ $html .= Html::rawElement( 'div', $attribs, '<a href="#">' . $moreText . '</a>' );
 347+
 348+ // Paging links for no-JS clients
 349+ $olderURL = $newerURL = false;
 350+ if ( $olderRow ) {
 351+ $olderOffset = wfTimestamp( TS_MW, $olderRow->mbf_timestamp ) . '|' . intval( $olderRow->mbf_id );
 352+ $olderURL = htmlspecialchars( $this->getTitle()->getLinkURL( $this->getQuery( $olderOffset, false ) ) );
 353+ }
 354+ if ( $newerRow ) {
 355+ $newerOffset = wfTimestamp( TS_MW, $newerRow->mbf_timestamp ) . '|' . intval( $newerRow->mbf_id );
 356+ $newerURL = htmlspecialchars( $this->getTitle()->getLinkURL( $this->getQuery( $newerOffset, true ) ) );
 357+ }
 358+ $olderText = wfMessage( 'moodbar-feedback-older' )->escaped();
 359+ $newerText = wfMessage( 'moodbar-feedback-newer' )->escaped();
 360+ $html .= '<div id="fbd-list-newer-older"><div id="fbd-list-newer">';
 361+ if ( $newerURL ) {
 362+ $html .= "<a href=\"$newerURL\">$newerText</a>";
 363+ } else {
 364+ $html .= "<span class=\"fbd-page-disabled\">$newerText</span>";
 365+ }
 366+ $html .= '</div><div id="fbd-list-older">';
 367+ if ( $olderURL ) {
 368+ $html .= "<a href=\"$olderURL\">$olderText</a>";
 369+ } else {
 370+ $html .= "<span class=\"fbd-page-disabled\">$olderText</span>";
 371+ }
 372+ $html .= '</div></div><div style="clear: both;"></div>';
 373+ return $html;
 374+ }
 375+ }
 376+
 377+ /**
 378+ * Get a set of comments from the database.
 379+ *
 380+ * The way paging is handled by this function is a bit weird. $offset is taken from
 381+ * the last row that was displayed, as opposed to the first row that was not displayed.
 382+ * This means that if $offset is set, the first row in the result (the one matching $offset)
 383+ * is dropped, as well as the last row. The dropped rows are only used to detect the presence
 384+ * or absence of more rows in each direction, the offset values for paging are taken from the
 385+ * first and last row that are actually shown.
 386+ *
 387+ * $retval['olderRow'] is the row whose offset should be used to display older rows, or null if
 388+ * there are no older rows. This means that, if there are older rows, $retval['olderRow'] is set
 389+ * to the oldest row in $retval['rows']. $retval['newerRows'] is set similarly.
 390+ *
 391+ * @param $filters array Array of filters to apply. Recognized keys are 'type' (array), 'username' (string) and 'id' (int)
 392+ * @param $limit int Number of comments to fetch
 393+ * @param $offset string Query offset. Timestamp and ID of the last shown result, formatted as 'timestamp|id'
 394+ * @param $backwards bool If true, page in ascending order rather than descending order, i.e. get $limit rows after $offset rather than before $offset. The result will still be sorted in descending order
 395+ * @return array( 'rows' => array( row, row, ... ), 'olderRow' => row|null, 'newerRow' => row|null )
 396+ */
 397+ public function doQuery( $filters, $limit, $offset, $backwards ) {
 398+ global $wgUser;
 399+
 400+ $dbr = wfGetDB( DB_SLAVE );
 401+
 402+ // Set $conds based on $filters
 403+ $conds = array();
 404+ if ( isset( $filters['type'] ) ) {
 405+ $conds['mbf_type'] = $filters['type'];
 406+ }
 407+ if ( isset( $filters['username'] ) ) {
 408+ $user = User::newFromName( $filters['username'] ); // Returns false for IPs
 409+ if ( !$user || $user->isAnon() ) {
 410+ $conds['mbf_user_id'] = 0;
 411+ $conds['mbf_user_ip'] = $filters['username'];
 412+ } else {
 413+ $conds['mbf_user_id'] = $user->getID();
 414+ $conds[] = 'mbf_user_ip IS NULL';
 415+ }
 416+ }
 417+ if ( isset( $filters['id'] ) ) {
 418+ $conds['mbf_id'] = $filters['id'];
 419+ } elseif ( !$wgUser->isAllowed('moodbar-admin') ) {
 420+ $conds['mbf_hidden_state'] = 0;
 421+ }
 422+
 423+ // Process $offset
 424+ if ( $offset !== false ) {
 425+ $arr = explode( '|', $offset, 2 );
 426+ $ts = $dbr->addQuotes( $dbr->timestamp( $arr[0] ) );
 427+ $id = isset( $arr[1] ) ? intval( $arr[1] ) : 0;
 428+ $op = $backwards ? '>' : '<';
 429+ $conds[] = "mbf_timestamp $op $ts OR (mbf_timestamp = $ts AND mbf_id $op= $id)";
 430+ }
 431+
 432+ // Do the actual query
 433+ $desc = $backwards ? '' : ' DESC';
 434+ $res = $dbr->select( array( 'moodbar_feedback', 'user' ), array(
 435+ 'user_name', 'mbf_id', 'mbf_type',
 436+ 'mbf_timestamp', 'mbf_user_id', 'mbf_user_ip', 'mbf_comment',
 437+ 'mbf_anonymous', 'mbf_hidden_state',
 438+ ),
 439+ $conds,
 440+ __METHOD__,
 441+ array( 'LIMIT' => $limit + 2, 'ORDER BY' => "mbf_timestamp$desc, mbf_id$desc" ),
 442+ array( 'user' => array( 'LEFT JOIN', 'user_id=mbf_user_id' ) )
 443+ );
 444+ $rows = iterator_to_array( $res, /*$use_keys=*/false );
 445+
 446+ // Figure out whether there are newer and older rows
 447+ $olderRow = $newerRow = null;
 448+ $count = count( $rows );
 449+ if ( $offset && $count > 0 ) {
 450+ // If there is an offset, drop the first row
 451+ if ( $count > 1 ) {
 452+ array_shift( $rows );
 453+ $count--;
 454+ }
 455+ // We now know there is a previous row
 456+ $newerRow = $rows[0];
 457+ }
 458+ if ( $count > $limit ) {
 459+ // If there are rows past the limit, drop them
 460+ array_splice( $rows, $limit );
 461+ // We now know there is a next row
 462+ $olderRow = $rows[$limit - 1];
 463+ }
 464+
 465+ // If we got things backwards, reverse them
 466+ if ( $backwards ) {
 467+ $rows = array_reverse( $rows );
 468+ list( $olderRow, $newerRow ) = array( $newerRow, $olderRow );
 469+ }
 470+ return array( 'rows' => $rows, 'olderRow' => $olderRow, 'newerRow' => $newerRow );
 471+ }
 472+
 473+ /**
 474+ * Get a query string array for a given offset, using filter parameters obtained from $wgRequest.
 475+ * @param $offset string Value for &offset=
 476+ * @param $backwards bool If true, set &dir=prev
 477+ * @return array
 478+ */
 479+ protected function getQuery( $offset, $backwards ) {
 480+ global $wgRequest;
 481+ $query = array(
 482+ 'type' => $wgRequest->getArray( 'type', array() ),
 483+ 'username' => $wgRequest->getVal( 'username' ),
 484+ 'offset' => $offset,
 485+ );
 486+ if ( $backwards ) {
 487+ $query['dir'] = 'prev';
 488+ }
 489+ return $query;
 490+ }
 491+}
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/SpecialFeedbackDashboard.php
___________________________________________________________________
Added: svn:eol-style
1492 + native
Index: branches/wmf/1.18wmf1/extensions/MoodBar/DashboardForms.php
@@ -0,0 +1,194 @@
 2+<?php
 3+/**
 4+ * Contains assorted forms associated with the Feedback Dashboards
 5+ */
 6+
 7+
 8+abstract class MBDashboardForm {
 9+ /**
 10+ * Gets an HTMLForm object suitable for showing this form
 11+ */
 12+ public function getForm() {
 13+ $form = new HTMLForm( $this->getFormDescriptor() );
 14+ $form->setSubmitCallback( array( $this, 'submit' ) );
 15+
 16+ return $form;
 17+ }
 18+
 19+ /**
 20+ * Shows the form, but returns the output as HTML instead of sending it to $wgOut
 21+ */
 22+ public function show() {
 23+ global $wgOut;
 24+
 25+ $oldText = $wgOut->getHTML();
 26+ $wgOut->clearHTML();
 27+
 28+ $result = $this->getForm()->show();
 29+
 30+ $output = $wgOut->getHTML();
 31+ $wgOut->clearHTML( );
 32+ $wgOut->addHTML( $oldText );
 33+
 34+ if ( $result === true ) {
 35+ return true;
 36+ }
 37+
 38+ return $output;
 39+ }
 40+
 41+ /**
 42+ * Gets the HTMLForm form descriptor
 43+ * @return A structured array suitable for the HTMLForm constructor.
 44+ */
 45+ public abstract function getFormDescriptor();
 46+
 47+ /**
 48+ * Submits the form.
 49+ */
 50+ public abstract function submit( $data );
 51+}
 52+
 53+abstract class MBActionForm extends MBDashboardForm {
 54+ public function __construct( $id ) {
 55+ $this->id = $id;
 56+ }
 57+
 58+ public function getForm() {
 59+ $form = parent::getForm();
 60+
 61+ $title = SpecialPage::getTitleFor( 'FeedbackDashboard', $this->id );
 62+ $form->setTitle( $title );
 63+
 64+ return $form;
 65+ }
 66+
 67+ /**
 68+ * Adds an 'item' field to provide built in support for doing actions to feedback items.
 69+ */
 70+ public function getFormDescriptor() {
 71+ $template = array(
 72+ 'item' => array(
 73+ 'type' => 'hidden',
 74+ 'required' => true,
 75+ 'readonly' => 'readonly',
 76+ 'label-message' => 'moodbar-action-item',
 77+ 'default' => $this->id,
 78+ ),
 79+ 'reason' => array(
 80+ 'type' => 'text',
 81+ 'size' => '60',
 82+ 'maxlength' => '200',
 83+ 'label-message' => 'movereason',
 84+ ),
 85+ );
 86+
 87+ return $template;
 88+ }
 89+
 90+ /**
 91+ * Load our item and do our thing
 92+ */
 93+ public function submit( $data ) {
 94+ $id = $data['item'];
 95+ $dbr = wfGetDB( DB_SLAVE );
 96+
 97+ $row = $dbr->selectRow( 'moodbar_feedback', '*',
 98+ array( 'mbf_id' => $id ), __METHOD__ );
 99+
 100+ if ( ! $row ) {
 101+ return wfMessage( 'moodbar-invalid-item' )->parse();
 102+ }
 103+
 104+ $feedbackItem = MBFeedbackItem::load( $row );
 105+
 106+ $this->manipulateItem( $feedbackItem, $data );
 107+
 108+ return true;
 109+ }
 110+
 111+ /**
 112+ * Do whatever action you need to do to the $feedbackItem in this function
 113+ * @param $feedbackItem MBFeedbackItem to manipulate.
 114+ * @param $data The form data.
 115+ */
 116+ protected abstract function manipulateItem( $feedbackItem, $data );
 117+}
 118+
 119+class MBHideForm extends MBActionForm {
 120+ public function getFormDescriptor() {
 121+ $desc = parent::getFormDescriptor();
 122+ $desc += array(
 123+ 'hide-feedback' => array(
 124+ 'type' => 'hidden',
 125+ 'default' => '1',
 126+ 'name' => 'hide-feedback',
 127+ ),
 128+ );
 129+
 130+ return $desc;
 131+ }
 132+
 133+ protected function manipulateItem( $feedbackItem, $data ) {
 134+ $feedbackItem->setProperty('hidden-state', 255);
 135+ $feedbackItem->save();
 136+
 137+ $title = SpecialPage::getTitleFor( 'FeedbackDashboard',
 138+ $feedbackItem->getProperty('id') );
 139+
 140+ $logPage = new LogPage('moodbar');
 141+ $logPage->addEntry( 'hide', $title, $data['reason'] );
 142+ }
 143+
 144+ public function getForm() {
 145+ $form = parent::getForm();
 146+
 147+ $header = Html::rawElement( 'h3', null,
 148+ wfMessage( 'moodbar-hide-header' )->parse() );
 149+
 150+ $header .= wfMessage( 'moodbar-hide-intro' )->parse();
 151+
 152+ $form->addPreText( $header );
 153+
 154+ return $form;
 155+ }
 156+}
 157+
 158+class MBRestoreForm extends MBActionForm {
 159+ public function getFormDescriptor() {
 160+ $desc = parent::getFormDescriptor();
 161+ $desc += array(
 162+ 'restore-feedback' => array(
 163+ 'type' => 'hidden',
 164+ 'default' => '1',
 165+ 'name' => 'restore-feedback',
 166+ ),
 167+ );
 168+
 169+ return $desc;
 170+ }
 171+
 172+ protected function manipulateItem( $feedbackItem, $data ) {
 173+ $feedbackItem->setProperty('hidden-state', 0);
 174+ $feedbackItem->save();
 175+
 176+ $title = SpecialPage::getTitleFor( 'FeedbackDashboard',
 177+ $feedbackItem->getProperty('id') );
 178+
 179+ $logPage = new LogPage('moodbar');
 180+ $logPage->addEntry( 'restore', $title, $data['reason'] );
 181+ }
 182+
 183+ public function getForm() {
 184+ $form = parent::getForm();
 185+
 186+ $header = Html::rawElement( 'h3', null,
 187+ wfMessage( 'moodbar-restore-header' )->parse() );
 188+
 189+ $header .= wfMessage( 'moodbar-restore-intro' )->parse();
 190+
 191+ $form->addPreText( $header );
 192+
 193+ return $form;
 194+ }
 195+}
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/DashboardForms.php
___________________________________________________________________
Added: svn:eol-style
1196 + native
Index: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.i18n.php
@@ -54,6 +54,7 @@
5555 'moodbar-error-subtitle' => 'Something went wrong! Please try sharing your feedback again later.',
5656 // Special:MoodBar
5757 'right-moodbar-view' => 'View and export MoodBar feedback',
 58+ 'right-moodbar-admin' => 'Alter visibility on the feedback dashboard',
5859 'moodbar-admin-title' => 'MoodBar feedback',
5960 'moodbar-admin-intro' => 'This page allows you to view feedback submitted with the MoodBar.',
6061 'moodbar-admin-empty' => 'No results',
@@ -72,19 +73,58 @@
7374 'moodbar-header-user-editcount' => 'User edit count',
7475 'moodbar-header-namespace' => 'Namespace',
7576 'moodbar-header-own-talk' => 'Own talk page',
 77+ // Special:MoodBarFeedback
 78+ 'moodbar-feedback-title' => 'Feedback dashboard',
 79+ 'moodbar-feedback-filters' => 'Filters',
 80+ 'moodbar-feedback-filters-type' => 'Mood:',
 81+ 'moodbar-feedback-filters-type-happy' => 'Happy',
 82+ 'moodbar-feedback-filters-type-confused' => 'Confused',
 83+ 'moodbar-feedback-filters-type-sad' => 'Sad',
 84+ 'moodbar-feedback-filters-username' => 'Username',
 85+ 'moodbar-feedback-filters-button' => 'Set filters',
 86+ 'moodbar-feedback-whatis' => 'What is this feature?',
 87+ 'moodbar-feedback-permalink' => 'link to here',
 88+ 'moodbar-feedback-noresults' => 'There are no comments that match your filters.',
 89+ 'moodbar-feedback-more' => 'More',
 90+ 'moodbar-feedback-nomore' => 'There are no more results to show.',
 91+ 'moodbar-feedback-newer' => 'Newer',
 92+ 'moodbar-feedback-older' => 'Older',
 93+ 'moodbar-feedback-ajaxerror' => 'An error occurred while fetching more results.',
 94+ 'moodbar-user-hidden' => '(User hidden)',
 95+ 'moodbar-comment-hidden' => '(Feedback hidden by administrative action)',
 96+ 'moodbar-feedback-show' => 'show hidden feedback',
 97+ 'moodbar-feedback-hide' => 'hide feedback',
 98+ 'moodbar-hidden-footer' => 'Hidden Feedback $1',
 99+ 'moodbar-feedback-restore' => 'restore hidden feedback',
 100+ 'moodbar-action-item' => 'Feedback item:',
 101+ 'moodbar-hide-header' => 'Hide this item from view',
 102+ 'moodbar-hide-intro' => '',
 103+ 'moodbar-restore-header' => "Restore this item's visibility",
 104+ 'moodbar-restore-intro' => '',
 105+ 'moodbar-invalid-item' => 'The system was unable to find the correct feedback item.',
 106+ 'moodbar-feedback-action-error' => 'An error occurred when trying to perform this action.',
76107 // Mood types
77108 'moodbar-type-happy' => 'Happy',
78109 'moodbar-type-sad' => 'Sad',
79110 'moodbar-type-confused' => 'Confused',
80111 // User types
81112 'moodbar-user-anonymized' => 'Anonymized',
82 - 'moodbar-user-ip' => 'IP Address',
 113+ 'moodbar-user-ip' => 'IP address',
83114 'moodbar-user-user' => 'Registered user',
 115+ // Log types
 116+ 'moodbar-log-name' => 'Feedback log',
 117+ 'moodbar-log-header' => 'This is the log of actions taken on feedback items listed on the [[Special:FeedbackDashboard|feedback dashboard]].',
 118+ 'moodbar-log-hide' => 'hid [[$1]]',
 119+ 'moodbar-log-restore' => 'restored the visibility for [[$1]]',
84120 );
85121
86122 /** Message documentation (Message documentation)
87123 * @author Krinkle
88124 * @author SPQRobin
 125+ * @author EugeneZelenko
 126+ * @author Lloffiwr
 127+ * @author Purodha
 128+ * @author Raymond
89129 */
90130
91131 $messages['qqq'] = array(
@@ -117,13 +157,60 @@
118158 'moodbar-loading-subtitle' => 'Subtitle of Loading-screen. $1 is the SITENAME',
119159 'moodbar-success-subtitle' => 'Subtitle of screen when feedback was successfullyully submitted. $1 is the SITENAME',
120160 'moodbar-error-subtitle' => 'Subtitle of screen when an error occurred. $1 is the SITENAME',
 161+ 'moodbar-feedback-more' => 'Text of the link that the user can click to see more results. Only visible if JavaScript is enabled.',
 162+ 'moodbar-feedback-newer' => 'Text of the link that the user can click to go back to more recent results. Only visible if JavaScript is not enabled.',
 163+ 'moodbar-feedback-older' => 'Text of the link that the user can click to see less recent results. Only visible if JavaScript is not enabled.',
 164+ 'moodbar-desc' => '{{desc}}
 165+This is a feature in development. See [[mw:MoodBar 0.1/Design]] for background information.',
 166+ 'moodbar-trigger-feedback' => 'Link text of the MoodBar overlay trigger. $1 is the SITENAME.',
 167+ 'moodbar-trigger-editing' => "Link text of the MoodBar overlay trigger. \$1 is the SITENAME. The implied sentence is ''\"Using [Sitename] made me happy/sad/...\"''. See [[mw:MoodBar 0.1/Design]] for background development information.",
 168+ 'moodbar-close' => 'Link text of the close-button. Make sure to include parentheses.
 169+
 170+See also:
 171+* {{msg|parentheses}}
 172+{{Identical|Close}}',
 173+ 'moodbar-intro-feedback' => 'Intro title of the MoodBar overlay trigger. $1 is the SITENAME.',
 174+ 'moodbar-intro-editing' => '[[File:MoodBar-Step-1.png|right|200px]]
 175+Intro title of the MoodBar overlay trigger. $1 is the SITENAME.',
 176+ 'moodbar-type-happy-title' => 'No gender support ([[bugzilla:30071|bug 30071]])',
 177+ 'moodbar-type-sad-title' => 'No gender support ([[bugzilla:30071|bug 30071]])',
 178+ 'moodbar-type-confused-title' => 'No gender support ([[bugzilla:30071|bug 30071]])',
 179+ 'tooltip-moodbar-what' => 'Tooltip displayed when hovering the What-link.
 180+
 181+See also:
 182+* {{msg|moodbar-what-label}}',
 183+ 'moodbar-what-label' => 'Link text for the page where more info abut MoodBar can be found.
 184+{{Identical|What is this}}',
 185+ 'moodbar-what-content' => '$1 is the message {{msg-mw|moodbar-what-link}} which links to the page [[mw:MoodBar|MoodBar]] on MediaWiki.org.',
 186+ 'moodbar-what-link' => 'This is the link embedded as parameter $1 in {{msg-mw|moodbar-what-content}}.',
 187+ 'moodbar-privacy' => 'Parameters:
 188+*$1 - a link having the anchor text {{msg-mw|moodbar-privacy-link}}
 189+
 190+The link is to the privacy policy of the wiki.
 191+
 192+See [[Thread:Support/About MediaWiki:Moodbar-privacy/en (2)/reply (4)|discussion]].',
 193+ 'moodbar-privacy-link' => 'This is the anchor text being used in the link replacing $1 in the message {{msg-mw|moodbar-privacy}}',
 194+ 'moodbar-header-timestamp' => '{{Identical|Timestamp}}',
 195+ 'moodbar-header-type' => '{{Identical|Type}}',
 196+ 'moodbar-header-page' => '{{Identical|Page}}',
 197+ 'moodbar-header-user' => '{{Identical|User}}',
 198+ 'moodbar-header-comment' => '{{Identical|Comment}}',
 199+ 'moodbar-header-namespace' => '{{Identical|Namespace}}',
 200+ 'moodbar-type-happy' => 'No gender support ([[bugzilla:30071|bug 30071]])',
 201+ 'moodbar-type-sad' => 'No gender support ([[bugzilla:30071|bug 30071]])',
 202+ 'moodbar-type-confused' => 'No gender support ([[bugzilla:30071|bug 30071]])',
 203+ 'moodbar-user-ip' => '{{Identical|IP Address}}',
121204 );
122205
123206 /** Message documentation (Message documentation)
124207 * @author EugeneZelenko
 208+ * @author IAlex
 209+ * @author Lloffiwr
 210+ * @author McDutchie
125211 * @author Purodha
126212 * @author Raymond
127213 * @author SPQRobin
 214+ * @author Umherirrender
128215 */
129216 $messages['qqq'] = array(
130217 'moodbar-desc' => '{{desc}}
@@ -138,6 +225,9 @@
139226 'moodbar-intro-feedback' => 'Intro title of the MoodBar overlay trigger. $1 is the SITENAME.',
140227 'moodbar-intro-editing' => '[[File:MoodBar-Step-1.png|right|200px]]
141228 Intro title of the MoodBar overlay trigger. $1 is the SITENAME.',
 229+ 'moodbar-type-happy-title' => 'No gender support ([[bugzilla:30071|bug 30071]])',
 230+ 'moodbar-type-sad-title' => 'No gender support ([[bugzilla:30071|bug 30071]])',
 231+ 'moodbar-type-confused-title' => 'No gender support ([[bugzilla:30071|bug 30071]])',
142232 'tooltip-moodbar-what' => 'Tooltip displayed when hovering the What-link.
143233
144234 See also:
@@ -147,14 +237,44 @@
148238 'moodbar-what-content' => '$1 is the message {{msg-mw|moodbar-what-link}} which links to the page [[mw:MoodBar|MoodBar]] on MediaWiki.org.',
149239 'moodbar-what-link' => 'This is the link embedded as parameter $1 in {{msg-mw|moodbar-what-content}}.',
150240 'moodbar-privacy' => 'Parameters:
151 -*$1 - a link having the anchor text {{msg-mw|moodbar-privacy-link}}',
 241+*$1 - a link having the anchor text {{msg-mw|moodbar-privacy-link}}
 242+
 243+The link is to the privacy policy of the wiki.
 244+
 245+See [[Thread:Support/About MediaWiki:Moodbar-privacy/en (2)/reply (4)|discussion]].',
152246 'moodbar-privacy-link' => 'This is the anchor text being used in the link replacing $1 in the message {{msg-mw|moodbar-privacy}}',
 247+ 'moodbar-form-policy-text' => 'Text displayed below the input area.
 248+
 249+See also:
 250+* {{msg|moodbar-form-policy-label}}',
 251+ 'moodbar-form-policy-label' => 'Label text for the link to the privacy policy,.
 252+
 253+See also:
 254+* {{msg|moodbar-form-policy-text}}',
 255+ 'moodbar-loading-title' => 'Title of the screen when the widget is loading.',
 256+ 'moodbar-success-title' => 'Title of the screen after the feedback was successfully submitted.',
 257+ 'moodbar-error-title' => 'Title of the screen when after an error occurred and submission aborted.',
 258+ 'moodbar-success-subtitle' => 'Subtitle of screen when feedback was successfullyully submitted. $1 is the SITENAME',
 259+ 'moodbar-error-subtitle' => 'Subtitle of screen when an error occurred. $1 is the SITENAME',
 260+ 'right-moodbar-view' => '{{doc-right|moodbar-view}}',
 261+ 'right-moodbar-admin' => '{{doc-right|moodbar-admin}}',
153262 'moodbar-header-timestamp' => '{{Identical|Timestamp}}',
154263 'moodbar-header-type' => '{{Identical|Type}}',
155264 'moodbar-header-page' => '{{Identical|Page}}',
156265 'moodbar-header-user' => '{{Identical|User}}',
157266 'moodbar-header-comment' => '{{Identical|Comment}}',
158267 'moodbar-header-namespace' => '{{Identical|Namespace}}',
 268+ 'moodbar-feedback-filters' => '{{Identical|Filter}}',
 269+ 'moodbar-feedback-filters-type' => '{{Identical|Mood}}',
 270+ 'moodbar-feedback-filters-username' => '{{Identical|Username}}',
 271+ 'moodbar-feedback-more' => 'Text of the link that the user can click to see more results. Only visible if JavaScript is enabled.
 272+{{Identical|More}}',
 273+ 'moodbar-feedback-newer' => 'Text of the link that the user can click to go back to more recent results. Only visible if JavaScript is not enabled.',
 274+ 'moodbar-feedback-older' => 'Text of the link that the user can click to see less recent results. Only visible if JavaScript is not enabled.',
 275+ 'moodbar-hidden-footer' => '* $1 is a link to restore the item displaying {{msg-mw|moodbar-feedback-restore}}',
 276+ 'moodbar-type-happy' => 'No gender support ([[bugzilla:30071|bug 30071]])',
 277+ 'moodbar-type-sad' => 'No gender support ([[bugzilla:30071|bug 30071]])',
 278+ 'moodbar-type-confused' => 'No gender support ([[bugzilla:30071|bug 30071]])',
159279 'moodbar-user-ip' => '{{Identical|IP Address}}',
160280 );
161281
@@ -163,15 +283,152 @@
164284 */
165285 $messages['af'] = array(
166286 'moodbar-desc' => 'Laat spesifieke gebruikers toe om hulle gemoedstoestand aan die webwerf se operateur terug te stuur',
 287+ 'moodbar-trigger-editing' => 'Die wysiging van $1...',
 288+ 'moodbar-close' => '(sluit)',
 289+ 'moodbar-type-happy-title' => 'Bly',
 290+ 'moodbar-type-sad-title' => 'Afgehaal',
 291+ 'moodbar-type-confused-title' => 'Verward',
 292+ 'moodbar-what-label' => 'Wat is dit?',
 293+ 'moodbar-privacy-link' => 'voorwaardes',
 294+ 'moodbar-disable-link' => 'Ek stel nie belang nie. Deaktiveer die funksie.',
 295+ 'moodbar-form-title' => 'Omdat...',
 296+ 'moodbar-form-policy-label' => 'ons beleid',
 297+ 'moodbar-loading-title' => 'Deel...',
 298+ 'moodbar-success-title' => 'Dankie!',
 299+ 'moodbar-error-title' => 'Oeps!',
 300+ 'moodbar-admin-empty' => 'Geen resultate',
 301+ 'moodbar-header-id' => 'Terugvoer-ID',
 302+ 'moodbar-header-timestamp' => 'Tydstip',
 303+ 'moodbar-header-type' => 'Tipe',
 304+ 'moodbar-header-page' => 'Bladsy',
 305+ 'moodbar-header-usertype' => 'Gebruikerstipe',
 306+ 'moodbar-header-user' => 'Gebruiker',
 307+ 'moodbar-header-editmode' => 'Wysig-modus',
 308+ 'moodbar-header-bucket' => 'Toetgroep',
 309+ 'moodbar-header-system' => 'Stelseltipe',
 310+ 'moodbar-header-locale' => 'Lokaal',
 311+ 'moodbar-header-useragent' => 'User-agent',
 312+ 'moodbar-header-comment' => 'Opmerkings',
 313+ 'moodbar-header-namespace' => 'Naamruimte',
 314+ 'moodbar-header-own-talk' => 'Eie besprekingsblad',
 315+ 'moodbar-type-happy' => 'Bly',
 316+ 'moodbar-type-sad' => 'Afgehaal',
 317+ 'moodbar-type-confused' => 'Verward',
 318+ 'moodbar-user-anonymized' => 'Geanonimiseerd',
 319+ 'moodbar-user-ip' => 'IP-adres',
 320+ 'moodbar-user-user' => 'Geregistreerde gebruiker',
167321 );
168322
169323 /** Arabic (العربية)
 324+ * @author AwamerT
170325 * @author OsamaK
 326+ * @author زكريا
171327 */
172328 $messages['ar'] = array(
 329+ 'moodbar-desc' => 'يسمح للمستخدمين المعينين بالتعليق على خبرتهم التحريرية',
 330+ 'moodbar-trigger-feedback' => 'تعليق على التحرير',
 331+ 'moodbar-trigger-share' => 'تبادل الخبرات',
 332+ 'moodbar-trigger-editing' => 'تعديل $1...',
 333+ 'moodbar-close' => '(إغلاق)',
 334+ 'moodbar-intro-feedback' => 'تعديل $1 جعلني...',
 335+ 'moodbar-intro-share' => 'تجربتي في $1 جعلتني...',
 336+ 'moodbar-intro-editing' => 'تعديل $1 جعلني...',
 337+ 'moodbar-type-happy-title' => 'سعيد',
 338+ 'moodbar-type-sad-title' => 'حزين',
 339+ 'moodbar-type-confused-title' => 'مرتبك',
 340+ 'tooltip-moodbar-what' => 'اعرف المزيد عن هذه الخاصية',
 341+ 'moodbar-what-label' => 'ما هذا؟',
 342+ 'moodbar-what-content' => 'هذه الخاصية مخصصة لمساعدة المجتمع على إدراك الخبرة التي يتمتع بها المحررون في الموقع.
 343+لمزيد من المعلومات، زر $1.',
 344+ 'moodbar-what-link' => 'صفحة الخاصية',
 345+ 'moodbar-privacy' => 'عند الحفظ تكون قد وافقت بالشفافية على هذه $1.',
 346+ 'moodbar-privacy-link' => 'الشروط',
 347+ 'moodbar-disable-link' => 'لا أبالي. عطل الخاصية.',
 348+ 'moodbar-form-title' => 'السبب...',
 349+ 'moodbar-form-note' => '140 حرفا على الأكثر',
 350+ 'moodbar-form-note-dynamic' => '$1 عدد الأحرف المتبقية',
 351+ 'moodbar-form-submit' => 'شارك التقييم',
 352+ 'moodbar-form-policy-text' => 'عند الحفظ، $1',
 353+ 'moodbar-form-policy-label' => 'سياستنا',
 354+ 'moodbar-loading-title' => 'مشاركة...',
173355 'moodbar-success-title' => 'شكرا!',
 356+ 'moodbar-error-title' => 'آه!',
 357+ 'moodbar-success-subtitle' => 'مشاركة تجربتك التحريرية تساعدك على تحسين $1.',
 358+ 'moodbar-error-subtitle' => 'لقد حصل خطأ! كرر محاولة مشاركة التعليقات لاحقا.',
 359+ 'right-moodbar-view' => 'انظر تعليقات شريط المزاج وصدرها',
 360+ 'right-moodbar-admin' => 'غير مستوى الظهور على لوحة الملاحظات',
 361+ 'moodbar-admin-title' => 'تعليقات شريط المزاج',
 362+ 'moodbar-admin-intro' => 'تتيح هذه الصفحة الاطلاع على التعليقات المرسلة باستعمال شريط المزاج.',
 363+ 'moodbar-admin-empty' => 'لا نتائج',
 364+ 'moodbar-header-id' => 'معرف التعليقات',
 365+ 'moodbar-header-timestamp' => 'طابع زمني',
 366+ 'moodbar-header-type' => 'نوع',
 367+ 'moodbar-header-page' => 'صفحة',
 368+ 'moodbar-header-usertype' => 'نوع المستخدم',
 369+ 'moodbar-header-user' => 'مستخدم',
 370+ 'moodbar-header-editmode' => 'تعديل الوضع',
 371+ 'moodbar-header-bucket' => 'مختبر',
 372+ 'moodbar-header-system' => 'نوع النظام',
 373+ 'moodbar-header-locale' => 'موضع',
 374+ 'moodbar-header-useragent' => 'وكيل مستخدم',
 375+ 'moodbar-header-comment' => 'تعليقات',
 376+ 'moodbar-header-user-editcount' => 'عداد تعديلات المستخدم',
 377+ 'moodbar-header-namespace' => 'نطاق',
 378+ 'moodbar-header-own-talk' => 'الصفحة النقاش الخاصة',
 379+ 'moodbar-feedback-title' => 'لوحة الملاحظات',
 380+ 'moodbar-feedback-filters' => 'مرشحات',
 381+ 'moodbar-feedback-filters-type' => 'النوع:',
 382+ 'moodbar-feedback-filters-type-happy' => 'شكر',
 383+ 'moodbar-feedback-filters-type-confused' => 'إرتباك',
 384+ 'moodbar-feedback-filters-type-sad' => 'قضايا',
 385+ 'moodbar-feedback-filters-username' => 'اسم المستخدم',
 386+ 'moodbar-feedback-filters-button' => 'إضبط المرشحات',
 387+ 'moodbar-feedback-whatis' => 'ماهذه الميزة؟',
 388+ 'moodbar-feedback-permalink' => 'وصلة تصل الى هنا',
 389+ 'moodbar-feedback-noresults' => 'لا يوجد تعليقات مطابقة للمرشحات الخاصة بك.',
 390+ 'moodbar-feedback-more' => 'المزيد',
 391+ 'moodbar-feedback-nomore' => 'لا يوجد نتائج أكثر لإظهارها.',
 392+ 'moodbar-feedback-newer' => 'احدث',
 393+ 'moodbar-feedback-older' => 'أقدم',
 394+ 'moodbar-feedback-ajaxerror' => 'حدث خطأ عند المحاولة في جلب المزيد من النتائج.',
 395+ 'moodbar-user-hidden' => '(مستخدم مخفي)',
 396+ 'moodbar-comment-hidden' => '(الملاحظات مخفية بواسطة إجراءات إدارية)',
 397+ 'moodbar-feedback-show' => 'أظهر الملاحظات المخفية',
 398+ 'moodbar-feedback-hide' => 'إخف الملاحظات',
 399+ 'moodbar-hidden-footer' => 'الملاحظات المخفية$1',
 400+ 'moodbar-feedback-restore' => 'إستعد الملاحظات المخفية',
 401+ 'moodbar-action-item' => 'بند الملاحظات:',
 402+ 'moodbar-hide-header' => 'إخف هذا العنصر من الظهور',
 403+ 'moodbar-restore-header' => 'إستعد ظهور هذا العنصر',
 404+ 'moodbar-invalid-item' => 'لم يتمكن النظام من العثور على عنصر الملاحظات الصحيح.',
 405+ 'moodbar-type-happy' => 'سعيد',
 406+ 'moodbar-type-sad' => 'حزين',
 407+ 'moodbar-type-confused' => 'مرتبك',
 408+ 'moodbar-user-anonymized' => 'مجهّل',
 409+ 'moodbar-user-ip' => 'عنوان بروتوكول إنترنت',
 410+ 'moodbar-user-user' => 'مستخدم مسجل',
 411+ 'moodbar-log-name' => 'سجل الملاحظات',
 412+ 'moodbar-log-header' => 'هذا هو سجل الإجراءات المتخذة بشأن عناصر الملاحظات المدرجة في [[Special:FeedbackDashboard|feedback dashboard]].',
 413+ 'moodbar-log-hide' => 'تم إخفاء "[[$1]]"',
 414+ 'moodbar-log-restore' => 'تم استعادة الظهور لـ [[ $1 ]]',
174415 );
175416
 417+/** Azerbaijani (Azərbaycanca)
 418+ * @author Cekli829
 419+ */
 420+$messages['az'] = array(
 421+ 'moodbar-close' => '(bağlı)',
 422+ 'moodbar-type-happy-title' => 'Xoşbəxt',
 423+ 'moodbar-what-label' => 'Bu nədir?',
 424+ 'moodbar-privacy-link' => 'terminlər',
 425+ 'moodbar-success-title' => 'Təşəkkürlər!',
 426+ 'moodbar-header-type' => 'Tipi',
 427+ 'moodbar-header-page' => 'Səhifə',
 428+ 'moodbar-header-user' => 'İstifadəçi',
 429+ 'moodbar-header-comment' => 'Şərhlər',
 430+ 'moodbar-type-happy' => 'Xoşbəxt',
 431+);
 432+
176433 /** Belarusian (Taraškievica orthography) (‪Беларуская (тарашкевіца)‬)
177434 * @author EugeneZelenko
178435 * @author Jim-by
@@ -208,6 +465,7 @@
209466 'moodbar-success-subtitle' => 'Адкрыцьцё доступу да Вашага вопыту рэдагаваньня дапамагае палепшыць {{GRAMMAR:вінавальны|$1}}.',
210467 'moodbar-error-subtitle' => 'Нешта пайшло ня так! Калі ласка, паспрабуйце адкрыць доступ да вашага водгуку потым.',
211468 'right-moodbar-view' => 'прагляд і экспарт водгукаў MoodBar',
 469+ 'right-moodbar-admin' => 'зьмяненьне бачнасьці на дошцы водгукаў',
212470 'moodbar-admin-title' => 'Водгукі MoodBar',
213471 'moodbar-admin-intro' => 'Гэтая старонка дазваляе Вам праглядаць водгукі пакінутыя праз MoodBar.',
214472 'moodbar-admin-empty' => 'Вынікаў няма',
@@ -226,6 +484,23 @@
227485 'moodbar-header-user-editcount' => 'Колькасьць рэдагаваньняў удзельнікаў',
228486 'moodbar-header-namespace' => 'Прастора назваў',
229487 'moodbar-header-own-talk' => 'Уласная старонка гутарак',
 488+ 'moodbar-feedback-title' => 'Дошка водгукаў',
 489+ 'moodbar-feedback-filters' => 'Фільтры',
 490+ 'moodbar-feedback-filters-type' => 'Тып:',
 491+ 'moodbar-feedback-filters-type-happy' => 'Пахвала',
 492+ 'moodbar-feedback-filters-type-confused' => 'Блытаніна',
 493+ 'moodbar-feedback-filters-type-sad' => 'Праблемы',
 494+ 'moodbar-feedback-filters-username' => 'Імя ўдзельніка',
 495+ 'moodbar-feedback-filters-button' => 'Наладзіць фільтры',
 496+ 'moodbar-feedback-whatis' => 'Што гэта за магчымасьць?',
 497+ 'moodbar-feedback-permalink' => 'спасылка сюды',
 498+ 'moodbar-feedback-noresults' => 'Няма камэнтараў, якія адпавядаюць Вашым фільтрам.',
 499+ 'moodbar-feedback-more' => 'Болей',
 500+ 'moodbar-feedback-nomore' => 'Болей няма вынікаў для паказу.',
 501+ 'moodbar-feedback-newer' => 'Навейшыя',
 502+ 'moodbar-feedback-older' => 'Старэйшыя',
 503+ 'moodbar-feedback-ajaxerror' => 'Узьнікла памылка падчас атрыманьня дадатковых вынікаў.',
 504+ 'moodbar-user-hidden' => '(Удзельнік схаваны)',
230505 'moodbar-type-happy' => 'Шчасьлівы',
231506 'moodbar-type-sad' => 'Смутны',
232507 'moodbar-type-confused' => 'Зьмешаныя пачуцьці',
@@ -234,8 +509,153 @@
235510 'moodbar-user-user' => 'Зарэгістраваны ўдзельнік',
236511 );
237512
 513+/** Bulgarian (Български)
 514+ * @author Spiritia
 515+ */
 516+$messages['bg'] = array(
 517+ 'moodbar-what-label' => 'Какво е това?',
 518+ 'moodbar-what-content' => 'Тази функционалност е предназначена да помогне на общността да проучи опита на хората, които редактират този сайт.
 519+За повече информация посетете $1.',
 520+ 'moodbar-form-note' => 'Максимум 140 символа',
 521+ 'moodbar-form-note-dynamic' => 'Остават $1 символа',
 522+ 'moodbar-success-title' => 'Благодарим!',
 523+ 'moodbar-error-title' => 'Опа!',
 524+ 'moodbar-success-subtitle' => 'Като споделяте опита си като редактор ни помагате да подобрим $1.',
 525+ 'moodbar-error-subtitle' => 'Нещо се обърка! Моля, опитайте отново да споделите вашето мнение по-късно.',
 526+ 'moodbar-header-usertype' => 'Тип потребител',
 527+ 'moodbar-header-user' => 'Потребител',
 528+ 'moodbar-header-editmode' => 'Режим на редактиране',
 529+ 'moodbar-header-comment' => 'Коментари',
 530+ 'moodbar-header-user-editcount' => 'Брой потребителски приноси',
 531+ 'moodbar-header-namespace' => 'Именно пространство',
 532+ 'moodbar-header-own-talk' => 'Лична беседа',
 533+ 'moodbar-user-ip' => 'IP-адрес',
 534+ 'moodbar-user-user' => 'Регистриран потребител',
 535+);
 536+
 537+/** Breton (Brezhoneg)
 538+ * @author Fulup
 539+ * @author Y-M D
 540+ */
 541+$messages['br'] = array(
 542+ 'moodbar-desc' => "Talvezout a ra d'an implijerien spisaet da lavaret ar pezh o soñj goude bezañ amprouet an traoù",
 543+ 'moodbar-trigger-feedback' => 'Ho soñj war an doare da zegas kemmoù',
 544+ 'moodbar-trigger-share' => 'Rannit ho skiant-prenañ ganeomp',
 545+ 'moodbar-trigger-editing' => "Oc'h aozañ $1...",
 546+ 'moodbar-close' => '(serriñ)',
 547+ 'moodbar-intro-feedback' => 'Degas kemmoù e $1 en deus ma lakaet da vezañ...',
 548+ 'moodbar-intro-share' => 'Ma zamm troiad war $1 en deus ma lakaet da vezañ...',
 549+ 'moodbar-intro-editing' => 'Degas kemmoù e $1 en deus ma lakaet da vezañ...',
 550+ 'moodbar-type-happy-title' => 'Laouen',
 551+ 'moodbar-type-sad-title' => 'Trist',
 552+ 'moodbar-type-confused-title' => 'Trubuilhet',
 553+ 'tooltip-moodbar-what' => "Gouzout hiroc'h diwar-benn ar perzh-mañ",
 554+ 'moodbar-what-label' => 'Petra eo se ?',
 555+ 'moodbar-privacy-link' => 'termenoù',
 556+ 'moodbar-disable-link' => "N'on ket dedennet. Diweredekaat ar perzh-mañ.",
 557+ 'moodbar-form-title' => 'Peogwir...',
 558+ 'moodbar-form-note' => "140 arouezenn d'ar muiañ",
 559+ 'moodbar-form-note-dynamic' => '$1 a chom',
 560+ 'moodbar-form-policy-label' => 'hor politikerezh',
 561+ 'moodbar-loading-title' => 'O rannañ...',
 562+ 'moodbar-success-title' => 'Trugarez !',
 563+ 'moodbar-error-title' => 'Chaous !',
 564+ 'moodbar-admin-empty' => "Disoc'h ebet",
 565+ 'moodbar-header-timestamp' => 'Deiziad hag eur',
 566+ 'moodbar-header-type' => 'Seurt',
 567+ 'moodbar-header-page' => 'Pajenn',
 568+ 'moodbar-header-usertype' => 'Seurt implijer',
 569+ 'moodbar-header-user' => 'Implijer',
 570+ 'moodbar-header-editmode' => 'Mod kemmañ',
 571+ 'moodbar-header-system' => 'Seurt reizhiad',
 572+ 'moodbar-header-locale' => "Lec'hel",
 573+ 'moodbar-header-comment' => 'Evezhiadennoù',
 574+ 'moodbar-header-user-editcount' => 'Niver a gemmoù degaset gant an implijer',
 575+ 'moodbar-header-namespace' => 'Esaouenn anv',
 576+ 'moodbar-feedback-filters' => 'Siloù',
 577+ 'moodbar-feedback-filters-type' => 'Seurt :',
 578+ 'moodbar-feedback-filters-type-happy' => 'Laouen',
 579+ 'moodbar-feedback-filters-type-confused' => 'Trubuilhet',
 580+ 'moodbar-feedback-filters-type-sad' => 'Trist',
 581+ 'moodbar-feedback-filters-username' => 'Anv implijer',
 582+ 'moodbar-feedback-whatis' => 'Petra eo kement-mañ ?',
 583+ 'moodbar-feedback-more' => "Muioc'h",
 584+ 'moodbar-feedback-nomore' => "N'eus disoc'h ebet all da ziskouez.",
 585+ 'moodbar-feedback-newer' => "Nevesoc'h",
 586+ 'moodbar-feedback-older' => "Koshoc'h",
 587+ 'moodbar-feedback-ajaxerror' => "Ur fazi zo bet en ur glask disoc'hoù all.",
 588+ 'moodbar-type-happy' => 'Laouen',
 589+ 'moodbar-type-sad' => 'Trist',
 590+ 'moodbar-type-confused' => 'Trubuilhet',
 591+ 'moodbar-user-anonymized' => 'Dianavezet',
 592+ 'moodbar-user-ip' => "Chomlec'h IP",
 593+ 'moodbar-user-user' => 'Implijer enrollet',
 594+);
 595+
 596+/** Danish (Dansk)
 597+ * @author Peter Alberti
 598+ */
 599+$messages['da'] = array(
 600+ 'moodbar-desc' => 'Tillader udvalgte brugere at give feedback om deres redigeringsoplevelse',
 601+ 'moodbar-trigger-feedback' => 'Feedback om redigering',
 602+ 'moodbar-trigger-share' => 'Del din oplevelse',
 603+ 'moodbar-trigger-editing' => 'Redigerer $1...',
 604+ 'moodbar-close' => '(luk)',
 605+ 'moodbar-intro-feedback' => 'At redigere $1 gjorde mig...',
 606+ 'moodbar-intro-share' => 'Mine erfaringer med $1 gjorde mig...',
 607+ 'moodbar-intro-editing' => 'At redigere $1 gjorde mig...',
 608+ 'moodbar-type-happy-title' => 'Glad',
 609+ 'moodbar-type-sad-title' => 'Trist',
 610+ 'moodbar-type-confused-title' => 'Forvirret',
 611+ 'tooltip-moodbar-what' => 'Lær mere om denne funktion',
 612+ 'moodbar-what-label' => 'Hvad er dette?',
 613+ 'moodbar-what-content' => 'Denne funktion er beregnet til at hjælpe fællesskabet med at forstå hvordan folk oplever det at redigere denne hjemmeside.
 614+For yderligere oplysninger, besøg venligst $1.',
 615+ 'moodbar-what-link' => 'funktionsside',
 616+ 'moodbar-privacy' => 'Ved at sende, accepterer du gennemsigtighed under disse $1.',
 617+ 'moodbar-privacy-link' => 'vilkår',
 618+ 'moodbar-disable-link' => 'Jeg er ikke interesseret. Slå denne funktion fra.',
 619+ 'moodbar-form-title' => 'Fordi...',
 620+ 'moodbar-form-note' => 'maksimalt 140 tegn',
 621+ 'moodbar-form-note-dynamic' => '$1 tegn tilbage',
 622+ 'moodbar-form-submit' => 'Del Feedback',
 623+ 'moodbar-form-policy-text' => 'Ved at indsende, $1',
 624+ 'moodbar-form-policy-label' => 'vores politik',
 625+ 'moodbar-loading-title' => 'Deler...',
 626+ 'moodbar-success-title' => 'Tak!',
 627+ 'moodbar-error-title' => 'Ups!',
 628+ 'moodbar-success-subtitle' => 'Ved at dele din redigeringsoplevelse hjælper du os med at forbedre $1.',
 629+ 'moodbar-error-subtitle' => 'Noget gik galt! Prøv at dele din feedback igen senere.',
 630+ 'right-moodbar-view' => 'Se og eksporter MoodBar feedback',
 631+ 'moodbar-admin-title' => 'MoodBar feedback',
 632+ 'moodbar-admin-intro' => 'På denne side kan du se feedback, som blev indsendt med MoodBar.',
 633+ 'moodbar-admin-empty' => 'Ingen resultater',
 634+ 'moodbar-header-id' => 'Feedback-ID',
 635+ 'moodbar-header-timestamp' => 'Tidsstempel',
 636+ 'moodbar-header-type' => 'Type',
 637+ 'moodbar-header-page' => 'Side',
 638+ 'moodbar-header-usertype' => 'Brugertype',
 639+ 'moodbar-header-user' => 'Bruger',
 640+ 'moodbar-header-editmode' => 'Redigeringstilstand',
 641+ 'moodbar-header-bucket' => 'Testspand',
 642+ 'moodbar-header-system' => 'Systemtype',
 643+ 'moodbar-header-locale' => 'Sprogindstilling',
 644+ 'moodbar-header-useragent' => 'Brugeragent',
 645+ 'moodbar-header-comment' => 'Kommentarer',
 646+ 'moodbar-header-user-editcount' => 'Brugerens antal redigeringer',
 647+ 'moodbar-header-namespace' => 'Navnerum',
 648+ 'moodbar-header-own-talk' => 'Egen diskussionsside',
 649+ 'moodbar-type-happy' => 'Glad',
 650+ 'moodbar-type-sad' => 'Trist',
 651+ 'moodbar-type-confused' => 'Forvirret',
 652+ 'moodbar-user-anonymized' => 'Anonymiseret',
 653+ 'moodbar-user-ip' => 'IP-adresse',
 654+ 'moodbar-user-user' => 'Registreret bruger',
 655+);
 656+
238657 /** German (Deutsch)
239658 * @author Kghbln
 659+ * @author Metalhead64
240660 * @author Purodha
241661 */
242662 $messages['de'] = array(
@@ -270,6 +690,7 @@
271691 'moodbar-success-subtitle' => 'Uns deine Stimmung mitzuteilen hilft uns dabei $1 weiter zu verbessern.',
272692 'moodbar-error-subtitle' => 'Etwas ist schief gelaufen. Bitte versuche es später noch einmal uns deine Rückmeldung mitzuteilen.',
273693 'right-moodbar-view' => 'Rückmeldung zur Stimmung ansehen und exportieren',
 694+ 'right-moodbar-admin' => 'Sichtbarkeit auf der Übersichts- und Verwaltungsseite der Rückmeldungen ändern',
274695 'moodbar-admin-title' => 'Rückmeldung zur Stimmung',
275696 'moodbar-admin-intro' => 'Auf dieser Seite können die Rückmeldungen zur Stimmung angesehen werden',
276697 'moodbar-admin-empty' => 'Keine Ergebnisse',
@@ -288,12 +709,43 @@
289710 'moodbar-header-user-editcount' => 'Bearbeitungszähler',
290711 'moodbar-header-namespace' => 'Namensraum',
291712 'moodbar-header-own-talk' => 'Eigene Diskussionsseite',
 713+ 'moodbar-feedback-title' => 'Rückmeldungen',
 714+ 'moodbar-feedback-filters' => 'Filter',
 715+ 'moodbar-feedback-filters-type' => 'Stimmung:',
 716+ 'moodbar-feedback-filters-type-happy' => 'Glücklich',
 717+ 'moodbar-feedback-filters-type-confused' => 'Verwirrt',
 718+ 'moodbar-feedback-filters-type-sad' => 'Traurig',
 719+ 'moodbar-feedback-filters-username' => 'Benutzername',
 720+ 'moodbar-feedback-filters-button' => 'Filter setzen',
 721+ 'moodbar-feedback-whatis' => 'Über dieses Feature',
 722+ 'moodbar-feedback-permalink' => 'Nach hier verlinken',
 723+ 'moodbar-feedback-noresults' => 'Es gibt keine zutreffenden Kommentare.',
 724+ 'moodbar-feedback-more' => 'Weitere',
 725+ 'moodbar-feedback-nomore' => 'Es gibt keine weiteren Ergebnisse zum Anzeigen.',
 726+ 'moodbar-feedback-newer' => 'Aktuellere',
 727+ 'moodbar-feedback-older' => 'Ältere',
 728+ 'moodbar-feedback-ajaxerror' => 'Beim Abrufen weiterer Ergebnisse ist ein Fehler aufgetreten.',
 729+ 'moodbar-user-hidden' => '(Benutzer ausgeblendet)',
 730+ 'moodbar-comment-hidden' => '(Rückmeldung vom Administrator ausgeblendet)',
 731+ 'moodbar-feedback-show' => 'ausgeblendete Rückmeldung anzeigen',
 732+ 'moodbar-feedback-hide' => 'Rückmeldung ausblenden',
 733+ 'moodbar-hidden-footer' => 'Ausgeblendete Rückmeldung $1',
 734+ 'moodbar-feedback-restore' => 'ausgeblendete Rückmeldung wieder einblenden',
 735+ 'moodbar-action-item' => 'Teil der Rückmeldung:',
 736+ 'moodbar-hide-header' => 'diesen Teil der Rückmeldung verstecken',
 737+ 'moodbar-restore-header' => 'versteckten Teil der Rückmeldung wiederherstellen',
 738+ 'moodbar-invalid-item' => 'Das System konnte den richtigen Teil der Rückmeldung nicht finden.',
 739+ 'moodbar-feedback-action-error' => 'Während des Ausführens dieser Aktion ist ein Fehler aufgetreten.',
292740 'moodbar-type-happy' => 'glücklich',
293741 'moodbar-type-sad' => 'traurig',
294742 'moodbar-type-confused' => 'verwirrt',
295743 'moodbar-user-anonymized' => 'Anonymisiert',
296744 'moodbar-user-ip' => 'IP-Adresse',
297745 'moodbar-user-user' => 'Registrierter Benutzer',
 746+ 'moodbar-log-name' => 'Rückmeldungs-Logbuch',
 747+ 'moodbar-log-header' => 'Dies ist das Logbuch der Aktionen zu den Rückmeldungen, die auf der [[Special:FeedbackDashboard|Administrations- und Übersichtsseite]] der Rückmeldungen angezeigt werden.',
 748+ 'moodbar-log-hide' => 'blendete [[$1]] aus',
 749+ 'moodbar-log-restore' => 'blendete [[$1]] wieder ein',
298750 );
299751
300752 /** German (formal address) (‪Deutsch (Sie-Form)‬)
@@ -306,6 +758,111 @@
307759 'moodbar-error-subtitle' => 'Etwas ist schief gelaufen. Bitte versuchen Sie es später noch einmal uns Ihre Rückmeldung mitzuteilen.',
308760 );
309761
 762+/** Greek (Ελληνικά)
 763+ * @author ZaDiak
 764+ */
 765+$messages['el'] = array(
 766+ 'moodbar-trigger-feedback' => 'Ανατροφοδότηση σχετικά με την επεξεργασία',
 767+ 'moodbar-trigger-editing' => 'Επεξεργασία $1...',
 768+ 'moodbar-close' => '(κλείσιμο)',
 769+ 'moodbar-type-happy-title' => 'Χαρούμενος',
 770+ 'moodbar-type-sad-title' => 'Θλιμμένος',
 771+ 'moodbar-type-confused-title' => 'Μπερδεμένος',
 772+ 'tooltip-moodbar-what' => 'Μάθετε περισσότερα σχετικά με αυτό το χαρακτηριστικό',
 773+ 'moodbar-what-label' => 'Τι είναι αυτό;',
 774+ 'moodbar-what-link' => 'σελίδα χαρακτηριστικού',
 775+ 'moodbar-privacy-link' => 'όροι',
 776+ 'moodbar-form-title' => 'Επειδή...',
 777+ 'moodbar-form-note' => '140 χαρακτήρες το μέγιστο',
 778+ 'moodbar-form-note-dynamic' => '$1 χαρακτήρες απομένουν',
 779+ 'moodbar-form-submit' => 'Κοινοποίηση Ανατροφοδότησης',
 780+ 'moodbar-form-policy-text' => 'Με την υποβολή, $1',
 781+ 'moodbar-form-policy-label' => 'η πολιτική μας',
 782+ 'moodbar-loading-title' => 'Κοινοποίηση...',
 783+ 'moodbar-success-title' => 'Ευχαριστούμε!',
 784+ 'moodbar-error-title' => 'Ουπς!',
 785+ 'moodbar-admin-empty' => 'Κανένα αποτέλεσμα',
 786+ 'moodbar-header-id' => 'Ταυτότητα Ανατροφοδότησης',
 787+ 'moodbar-header-timestamp' => 'Ημερομηνία',
 788+ 'moodbar-header-type' => 'Τύπος',
 789+ 'moodbar-header-page' => 'Σελίδα',
 790+ 'moodbar-header-usertype' => 'Τύπος χρήστη',
 791+ 'moodbar-header-user' => 'Χρήστης',
 792+ 'moodbar-header-editmode' => 'Λειτουργία επεξεργασίας',
 793+ 'moodbar-header-system' => 'Τύπος συστήματος',
 794+ 'moodbar-header-comment' => 'Σχόλια',
 795+ 'moodbar-header-user-editcount' => 'Αριθμός επεξεργασιών χρήστη',
 796+ 'moodbar-header-namespace' => 'Περιοχή ονομάτων',
 797+ 'moodbar-header-own-talk' => 'Ίδια σελίδα συζήτησης',
 798+ 'moodbar-type-happy' => 'Χαρούμενος',
 799+ 'moodbar-type-sad' => 'Θλιμμένος',
 800+ 'moodbar-type-confused' => 'Μπερδεμένος',
 801+ 'moodbar-user-anonymized' => 'Ανώνυμα',
 802+ 'moodbar-user-ip' => 'Διεύθυνση IP',
 803+ 'moodbar-user-user' => 'Εγγεγραμμένος χρήστης',
 804+);
 805+
 806+/** Esperanto (Esperanto)
 807+ * @author Yekrats
 808+ */
 809+$messages['eo'] = array(
 810+ 'moodbar-desc' => 'Permesas al specifigitaj uzantoj por provizi opiniaron pri ties opinio de redaktado.',
 811+ 'moodbar-trigger-feedback' => 'Komentoj pri redaktado',
 812+ 'moodbar-trigger-share' => 'Komentu pri via opinio',
 813+ 'moodbar-trigger-editing' => 'Redaktante $1...',
 814+ 'moodbar-close' => '(fermi)',
 815+ 'moodbar-intro-feedback' => 'Redaktante $1 mi sentis...',
 816+ 'moodbar-intro-share' => 'Dum mia sperto en $1, mi sentis...',
 817+ 'moodbar-intro-editing' => 'Redaktante $1 mi sentis...',
 818+ 'moodbar-type-happy-title' => 'Ĝoja',
 819+ 'moodbar-type-sad-title' => 'Malĝoja',
 820+ 'moodbar-type-confused-title' => 'Konfuzita',
 821+ 'tooltip-moodbar-what' => 'Lerni pli pri ĉi tiu funkcio',
 822+ 'moodbar-what-label' => 'Kio estas?',
 823+ 'moodbar-what-content' => 'Ĉi tiu funkcio estas farita por helpi al la komunumo kompreni la opiniojn de ties redaktantojn
 824+Por pli informo, bonvolu viziti la $1n.',
 825+ 'moodbar-what-link' => 'celpaĝo',
 826+ 'moodbar-privacy' => 'Sendante, vi konsentas al travidebleco sub ĉi tiuj $1.',
 827+ 'moodbar-privacy-link' => 'kondiĉoj',
 828+ 'moodbar-disable-link' => 'Mi ne interesas. Bonvolu malŝalti ĉi tiun econ.',
 829+ 'moodbar-form-title' => 'Ĉar...',
 830+ 'moodbar-form-note' => 'Maksimumo de 140 signoj',
 831+ 'moodbar-form-note-dynamic' => '$1 signoj restas',
 832+ 'moodbar-form-submit' => 'Doni Komenton',
 833+ 'moodbar-form-policy-text' => 'Enigante $1',
 834+ 'moodbar-form-policy-label' => 'nia regularo',
 835+ 'moodbar-loading-title' => 'Komentante...',
 836+ 'moodbar-success-title' => 'Dankon!',
 837+ 'moodbar-error-title' => 'Ho ve!',
 838+ 'moodbar-success-subtitle' => 'Via opinio pri via redaktado helpos al ni plibonigi $1.',
 839+ 'moodbar-error-subtitle' => 'Io fuŝis! Bonvolu reprovu doni komenton baldaŭ.',
 840+ 'right-moodbar-view' => 'Vidi kaj eksporti opiniojn pri MoodBar',
 841+ 'moodbar-admin-title' => 'Komenti pri MoodBar',
 842+ 'moodbar-admin-intro' => 'Ĉi tiu paĝo permesas al vi por vidi opiniaron senditan de la MoodBar.',
 843+ 'moodbar-admin-empty' => 'Mankas rezultoj',
 844+ 'moodbar-header-id' => 'Identigo de komentaro',
 845+ 'moodbar-header-timestamp' => 'Tempindiko',
 846+ 'moodbar-header-type' => 'Tipo',
 847+ 'moodbar-header-page' => 'Paĝo',
 848+ 'moodbar-header-usertype' => 'Tipo de uzanto',
 849+ 'moodbar-header-user' => 'Uzanto',
 850+ 'moodbar-header-editmode' => 'Redakta reĝimo',
 851+ 'moodbar-header-bucket' => 'Testejo',
 852+ 'moodbar-header-system' => 'Tipo de sistemo',
 853+ 'moodbar-header-locale' => 'Lokaĵaro',
 854+ 'moodbar-header-useragent' => 'Klienta Aplikaĵo',
 855+ 'moodbar-header-comment' => 'Komentoj',
 856+ 'moodbar-header-user-editcount' => 'Konto de redaktoj',
 857+ 'moodbar-header-namespace' => 'Nomspaco',
 858+ 'moodbar-header-own-talk' => 'Propra diskuto-paĝo',
 859+ 'moodbar-type-happy' => 'Ĝoja',
 860+ 'moodbar-type-sad' => 'Malĝoja',
 861+ 'moodbar-type-confused' => 'Konfuzita',
 862+ 'moodbar-user-anonymized' => 'Anonima',
 863+ 'moodbar-user-ip' => 'IP-adreso',
 864+ 'moodbar-user-user' => 'Registrita Uzanto',
 865+);
 866+
310867 /** Spanish (Español)
311868 * @author Crazymadlover
312869 * @author Fitoschido
@@ -362,10 +919,133 @@
363920 'moodbar-user-user' => 'Usuario registrado',
364921 );
365922
 923+/** Persian (فارسی)
 924+ * @author Mjbmr
 925+ */
 926+$messages['fa'] = array(
 927+ 'moodbar-desc' => 'به کاربران مشخص این اجازه را می‌دهد که بازخوردی از تجربهٔ ویرایش‌هایشان، ارائه دهند',
 928+ 'moodbar-trigger-feedback' => 'بازخود دربارهٔ ویرایش کردن',
 929+ 'moodbar-trigger-share' => 'به اشتراک گذاشتن تجربهٔ خود',
 930+ 'moodbar-trigger-editing' => 'در حال ویرایش $1...',
 931+ 'moodbar-close' => '(بستن)',
 932+ 'moodbar-intro-feedback' => 'ویرایش $1 باعث شد من...',
 933+ 'moodbar-intro-share' => 'تجربه من در $1 باعث شد من...',
 934+ 'moodbar-intro-editing' => 'ویرایش $1 باعث شد من...',
 935+ 'moodbar-type-happy-title' => 'شاد',
 936+ 'moodbar-type-sad-title' => 'غمگین',
 937+ 'moodbar-type-confused-title' => 'گیج',
 938+ 'tooltip-moodbar-what' => 'دربارهٔ این ویژگی بیشتر مطالعه کنید',
 939+ 'moodbar-what-label' => 'این چیست؟',
 940+ 'moodbar-what-content' => 'این ویژگی طوری طراحی شده است که به جامعه برای فهم تجربهٔ مردم از ویرایش در این وب‌گاه کمک می‌کند.
 941+برای اطلاعات بیشتر، به $1 مراجعه کنید.',
 942+ 'moodbar-what-link' => 'صفحهٔ ویژگی',
 943+ 'moodbar-privacy' => 'با ثبت کردن، شما به شفافیت با این $1 موافقت می‌کنید.',
 944+ 'moodbar-privacy-link' => 'شرایط',
 945+ 'moodbar-disable-link' => 'من علاقه‌ای ندارم. لطفاً این ویژگی را غیرفعال کنید.',
 946+ 'moodbar-form-title' => 'زیرا...',
 947+ 'moodbar-form-note' => 'حداکثر ۱۴۰ نویسه',
 948+ 'moodbar-form-note-dynamic' => '$1 نویسه باقی مانده',
 949+ 'moodbar-form-submit' => 'اشتراک گذاشتن بازخورد',
 950+ 'moodbar-form-policy-text' => 'توسط ثبت، $1',
 951+ 'moodbar-form-policy-label' => 'سیاست ما',
 952+ 'moodbar-loading-title' => 'در حال اشتراک گذاشتن...',
 953+ 'moodbar-success-title' => 'سپاس!',
 954+ 'moodbar-error-title' => 'اوه!',
 955+ 'moodbar-success-subtitle' => 'به اشتراک گذاشتن تجربهٔ شما به ما کمک می‌کند که $1 را بهبود بخشیم.',
 956+ 'moodbar-error-subtitle' => 'چیزی اشتباه پیش رفت! لطفاً بعداً مجدد سعی به اشتراک گذاری بازخورد خود کنید.',
 957+ 'right-moodbar-view' => 'مشاهده و خروجی گرفتن از بازخورد نوار خُلق',
 958+ 'moodbar-admin-title' => 'بازخورد نوار خُلق',
 959+ 'moodbar-admin-intro' => 'این صفحه به شما اجازه می دهد که بازخوردهایی که توسط نوار خُلق ثبت شده‌اند را مشاهده نمائید.',
 960+ 'moodbar-admin-empty' => 'بدون نتیجه',
 961+ 'moodbar-header-id' => 'شماره بازخورد',
 962+ 'moodbar-header-timestamp' => 'برچسب زمان',
 963+ 'moodbar-header-type' => 'نوع',
 964+ 'moodbar-header-page' => 'صفحه',
 965+ 'moodbar-header-usertype' => 'نوع کاربر',
 966+ 'moodbar-header-user' => 'کاربر',
 967+ 'moodbar-header-editmode' => 'حالت ویرایش',
 968+ 'moodbar-header-bucket' => 'سطل آزمایش',
 969+ 'moodbar-header-system' => 'نوع سامانه',
 970+ 'moodbar-header-locale' => 'محلی',
 971+ 'moodbar-header-useragent' => 'عامل کاربر',
 972+ 'moodbar-header-comment' => 'نظرها',
 973+ 'moodbar-header-user-editcount' => 'شمار ویرایش‌های کاربر',
 974+ 'moodbar-header-namespace' => 'فضای نام',
 975+ 'moodbar-header-own-talk' => 'صفحهٔ بحث خود',
 976+ 'moodbar-type-happy' => 'شاد',
 977+ 'moodbar-type-sad' => 'غمگین',
 978+ 'moodbar-type-confused' => 'گیج',
 979+ 'moodbar-user-anonymized' => 'گمنام',
 980+ 'moodbar-user-ip' => 'نشانی آی‌پی',
 981+ 'moodbar-user-user' => 'کاربر ثبت شده',
 982+);
 983+
 984+/** Finnish (Suomi)
 985+ * @author Olli
 986+ */
 987+$messages['fi'] = array(
 988+ 'moodbar-desc' => 'Sallii tiettyjen käyttäjien antaa palautetta heidän muokkauskokemuksesta',
 989+ 'moodbar-trigger-feedback' => 'Palautetta muokkaamisesta',
 990+ 'moodbar-trigger-share' => 'Jaa kokemuksesi',
 991+ 'moodbar-trigger-editing' => 'Muokataan $1...',
 992+ 'moodbar-close' => '(sulje)',
 993+ 'moodbar-intro-feedback' => 'Sivuston $1 muokkaaminen sai minut...',
 994+ 'moodbar-intro-share' => 'Kokemukseni sivustolla $1 sai minut...',
 995+ 'moodbar-intro-editing' => 'Sivuston $1 muokkaaminen sai minut...',
 996+ 'moodbar-type-happy-title' => 'Iloiseksi',
 997+ 'moodbar-type-sad-title' => 'Surulliseksi',
 998+ 'moodbar-type-confused-title' => 'Hämmentyneeksi',
 999+ 'tooltip-moodbar-what' => 'Lue lisää tästä ominaisuudesta',
 1000+ 'moodbar-what-label' => 'Mikä tämä on?',
 1001+ 'moodbar-what-content' => 'Tämä ominaisuus on tehty, jotta yhteisö ymmärtäisi paremmin, mitä ihmiset tuntevat muokatessaan sivustoa. Saadaksesi lisätietoja, käy $1.',
 1002+ 'moodbar-what-link' => 'ominaisuussivulla',
 1003+ 'moodbar-privacy' => 'Lähettämällä, sallit avoimuuden $1 alaisena.',
 1004+ 'moodbar-privacy-link' => 'ehtojen',
 1005+ 'moodbar-disable-link' => 'En ole kiinnostunut. Poista käytöstä ominaisuus.',
 1006+ 'moodbar-form-title' => 'Koska...',
 1007+ 'moodbar-form-note' => 'Enintään 140 merkkiä',
 1008+ 'moodbar-form-note-dynamic' => '$1 merkkiä jäljellä',
 1009+ 'moodbar-form-submit' => 'Jaa palautetta',
 1010+ 'moodbar-form-policy-text' => 'Lähettämällä, $1',
 1011+ 'moodbar-form-policy-label' => 'käytäntömme',
 1012+ 'moodbar-loading-title' => 'Jakamalla...',
 1013+ 'moodbar-success-title' => 'Kiitos!',
 1014+ 'moodbar-error-title' => 'Hups!',
 1015+ 'moodbar-success-subtitle' => 'Muokkauskokemuksesi jakaminen auttaa meitä kehittämään $1.',
 1016+ 'moodbar-error-subtitle' => 'Joku meni vikaan! Yritä palautteesi jakamista myöhemmin.',
 1017+ 'right-moodbar-view' => 'Näytä ja vie MoodBar-palautetta',
 1018+ 'moodbar-admin-title' => 'MoodBar-palaute',
 1019+ 'moodbar-admin-intro' => 'Tällä sivulla voit katsella MoodBarin kautta lähetettyä palautetta.',
 1020+ 'moodbar-admin-empty' => 'Ei tuloksia',
 1021+ 'moodbar-header-id' => 'Palautteen tunnus',
 1022+ 'moodbar-header-timestamp' => 'Aikaleima',
 1023+ 'moodbar-header-type' => 'Tyyppi',
 1024+ 'moodbar-header-page' => 'Sivu',
 1025+ 'moodbar-header-usertype' => 'Käyttäjän tyyppi',
 1026+ 'moodbar-header-user' => 'Käyttäjä',
 1027+ 'moodbar-header-editmode' => 'Muokkaustila',
 1028+ 'moodbar-header-bucket' => 'Testauspaikka',
 1029+ 'moodbar-header-system' => 'Järjestelmän tyyppi',
 1030+ 'moodbar-header-locale' => 'Kieli',
 1031+ 'moodbar-header-useragent' => 'Selain',
 1032+ 'moodbar-header-comment' => 'Kommentit',
 1033+ 'moodbar-header-user-editcount' => 'Käyttäjän muokkausmäärä',
 1034+ 'moodbar-header-namespace' => 'Nimiavaruus',
 1035+ 'moodbar-header-own-talk' => 'Oma keskustelusivu',
 1036+ 'moodbar-type-happy' => 'Iloinen',
 1037+ 'moodbar-type-sad' => 'Surullinen',
 1038+ 'moodbar-type-confused' => 'Hämmentynyt',
 1039+ 'moodbar-user-anonymized' => 'Nimetön',
 1040+ 'moodbar-user-ip' => 'IP-osoite',
 1041+ 'moodbar-user-user' => 'Rekisteröitynyt käyttäjä',
 1042+);
 1043+
3661044 /** French (Français)
 1045+ * @author ChrisPtDe
3671046 * @author Crochet.david
3681047 * @author Gomoko
3691048 * @author Hashar
 1049+ * @author IAlex
3701050 * @author Tpt
3711051 */
3721052 $messages['fr'] = array(
@@ -400,6 +1080,7 @@
4011081 'moodbar-success-subtitle' => 'Partager votre expérience nous aide à améliorer $1.',
4021082 'moodbar-error-subtitle' => "Quelque chose s'est mal passé ! Essayer de partager vos commentaires plus tard.",
4031083 'right-moodbar-view' => 'Afficher et exporter vos ressentis MoodBar',
 1084+ 'right-moodbar-admin' => 'Modifier la visibilité sur le tableau de bord des commentaires',
4041085 'moodbar-admin-title' => 'Ressenti MoodBar',
4051086 'moodbar-admin-intro' => "Cette page vous permet d'afficher les ressentis fournis avec ModdBar.",
4061087 'moodbar-admin-empty' => 'Aucun résultat',
@@ -418,43 +1099,126 @@
4191100 'moodbar-header-user-editcount' => "Compteur d'édition",
4201101 'moodbar-header-namespace' => 'Espace de noms',
4211102 'moodbar-header-own-talk' => 'Page de discussion personnelle',
 1103+ 'moodbar-feedback-title' => 'Tableau de bord des ressentis',
 1104+ 'moodbar-feedback-filters' => 'Filtres',
 1105+ 'moodbar-feedback-filters-type' => 'Humeur:',
 1106+ 'moodbar-feedback-filters-type-happy' => 'Heureux',
 1107+ 'moodbar-feedback-filters-type-confused' => 'Confus',
 1108+ 'moodbar-feedback-filters-type-sad' => 'Triste',
 1109+ 'moodbar-feedback-filters-username' => "Nom d'utilisateur",
 1110+ 'moodbar-feedback-filters-button' => 'Positionner les filtres',
 1111+ 'moodbar-feedback-whatis' => "Qu'est-ce que cette fonctionnalité?",
 1112+ 'moodbar-feedback-permalink' => 'faire un lien vers ici',
 1113+ 'moodbar-feedback-noresults' => "Il n'y a aucun commentaire qui correspond à vos filtres.",
 1114+ 'moodbar-feedback-more' => 'Plus',
 1115+ 'moodbar-feedback-nomore' => "Il n'y a plus de résultats à afficher.",
 1116+ 'moodbar-feedback-newer' => 'Plus récent',
 1117+ 'moodbar-feedback-older' => 'Plus ancien',
 1118+ 'moodbar-feedback-ajaxerror' => "Une erreur s'est produite en recherchant plus de résultats.",
 1119+ 'moodbar-user-hidden' => '(Utilisateur caché)',
 1120+ 'moodbar-comment-hidden' => '(Commentaire caché par mesure administrative)',
 1121+ 'moodbar-feedback-show' => 'afficher les commentaires cachés',
 1122+ 'moodbar-feedback-hide' => 'masquer les commentaires',
 1123+ 'moodbar-hidden-footer' => 'Commentaire caché, $1',
 1124+ 'moodbar-feedback-restore' => 'restaurer les commentaires cachés',
 1125+ 'moodbar-action-item' => 'Objet du commentaire :',
 1126+ 'moodbar-hide-header' => "Cacher cet élément de l'affichage",
 1127+ 'moodbar-restore-header' => 'Restaurer la visibilité de cet élément',
 1128+ 'moodbar-invalid-item' => 'Le système a été incapable de trouver le commentaire correct.',
4221129 'moodbar-type-happy' => 'Heureux',
4231130 'moodbar-type-sad' => 'Triste',
4241131 'moodbar-type-confused' => 'Confus',
4251132 'moodbar-user-anonymized' => 'Anonymisé',
4261133 'moodbar-user-ip' => 'Adresse IP',
4271134 'moodbar-user-user' => 'Utilisateur enregistré',
 1135+ 'moodbar-log-name' => 'Journal des commentaires',
 1136+ 'moodbar-log-header' => 'Ceci est le journal des actions prises sur les commentaires listés sur [[Special:FeedbackDashboard|tableau de bord de commentaires]].',
 1137+ 'moodbar-log-hide' => 'a caché [[$1]]',
 1138+ 'moodbar-log-restore' => 'a restauré la visibilité de [[$1]]',
4281139 );
4291140
4301141 /** Franco-Provençal (Arpetan)
4311142 * @author ChrisPtDe
4321143 */
4331144 $messages['frp'] = array(
 1145+ 'moodbar-desc' => 'Pèrmèt ux utilisators spècefiâs de balyér lor avis sur lor èxpèrience d’èdicion.',
 1146+ 'moodbar-trigger-feedback' => 'Voutros avis sur lo changement',
 1147+ 'moodbar-trigger-share' => 'Partagiéd voutra èxpèrience',
4341148 'moodbar-trigger-editing' => 'Changement de $1...',
4351149 'moodbar-close' => '(cllôre)',
 1150+ 'moodbar-intro-feedback' => 'Changiér $1 m’at rendu...',
 1151+ 'moodbar-intro-share' => 'Mon èxpèrience dessus $1 m’at rendu...',
 1152+ 'moodbar-intro-editing' => 'Changiér $1 m’at rendu...',
4361153 'moodbar-type-happy-title' => 'Herox',
4371154 'moodbar-type-sad-title' => 'Tristo',
4381155 'moodbar-type-confused-title' => 'Confondu',
 1156+ 'tooltip-moodbar-what' => 'Nen savêr més sur cela fonccionalitât',
4391157 'moodbar-what-label' => 'Qu’est-o qu’il est ?',
 1158+ 'moodbar-what-content' => 'Ceta fonccionalitât est conçua por édiér la comunôtât a comprendre l’èxpèrience a les gens que chanjont lo seto.
 1159+Por més d’enformacions, volyéd visitar la $1.',
4401160 'moodbar-what-link' => 'pâge que dècrit la fonccion',
 1161+ 'moodbar-privacy' => 'En sometent, vos accèptâd una transparence en acôrd avouéc cetes $1.',
 1162+ 'moodbar-privacy-link' => 'condicions',
 1163+ 'moodbar-disable-link' => 'Su pas entèrèssiê. Volyéd dèsactivar cela fonccionalitât.',
4411164 'moodbar-form-title' => 'Perce que ...',
 1165+ 'moodbar-form-note' => '140 caractèros u més',
 1166+ 'moodbar-form-note-dynamic' => '$1 caractèros que réstont',
 1167+ 'moodbar-form-submit' => 'Partagiér voutron avis',
 1168+ 'moodbar-form-policy-text' => 'En sometent, $1',
 1169+ 'moodbar-form-policy-label' => 'noutra politica',
 1170+ 'moodbar-loading-title' => 'Partagiér...',
4421171 'moodbar-success-title' => 'Grant-marci !',
4431172 'moodbar-error-title' => 'Crenom !',
 1173+ 'moodbar-success-subtitle' => 'Partagiér voutra èxpèrience nos éde a mèlyorar $1.',
 1174+ 'moodbar-error-subtitle' => 'Quârque-ren s’est mâl passâ ! Volyéd tornar tâchiér de partagiér voutros avis ples târd.',
 1175+ 'right-moodbar-view' => 'Fâre vêre et èxportar voutros avis MoodBar',
 1176+ 'moodbar-admin-title' => 'Avis MoodBar',
 1177+ 'moodbar-admin-intro' => 'Ceta pâge vos pèrmèt de fâre vêre los avis balyês avouéc MoodBar.',
4441178 'moodbar-admin-empty' => 'Gins de rèsultat',
 1179+ 'moodbar-header-id' => 'Numerô d’avis',
4451180 'moodbar-header-timestamp' => 'Dâta et hora',
4461181 'moodbar-header-type' => 'Tipo',
4471182 'moodbar-header-page' => 'Pâge',
 1183+ 'moodbar-header-usertype' => 'Tipo d’utilisator',
4481184 'moodbar-header-user' => 'Utilisator',
 1185+ 'moodbar-header-editmode' => 'Fôrma èdicion',
 1186+ 'moodbar-header-bucket' => 'Ensemblo d’èprôva',
 1187+ 'moodbar-header-system' => 'Tipo de sistèmo',
 1188+ 'moodbar-header-locale' => 'Règ·ionâl',
4491189 'moodbar-header-useragent' => 'Agent utilisator',
4501190 'moodbar-header-comment' => 'Comentèros',
 1191+ 'moodbar-header-user-editcount' => 'Comptor de changements a l’utilisator',
4511192 'moodbar-header-namespace' => 'Èspâço de noms',
4521193 'moodbar-header-own-talk' => 'Pâge de discussion a sè',
 1194+ 'moodbar-feedback-title' => 'Tablô de bôrd des avis',
 1195+ 'moodbar-feedback-filters' => 'Filtros',
 1196+ 'moodbar-feedback-filters-type' => 'Caractèro :',
 1197+ 'moodbar-feedback-filters-type-happy' => 'Herox',
 1198+ 'moodbar-feedback-filters-type-confused' => 'Confondu',
 1199+ 'moodbar-feedback-filters-type-sad' => 'Tristo',
 1200+ 'moodbar-feedback-filters-username' => 'Nom d’utilisator',
 1201+ 'moodbar-feedback-filters-button' => 'Posicionar los filtros',
 1202+ 'moodbar-feedback-whatis' => 'Qu’est-o que cela fonccionalitât ?',
 1203+ 'moodbar-feedback-permalink' => 'fâre un lim de vers ique',
 1204+ 'moodbar-feedback-more' => 'Més',
 1205+ 'moodbar-feedback-newer' => 'Ples novél',
 1206+ 'moodbar-feedback-older' => 'Ples viely',
 1207+ 'moodbar-user-hidden' => '(Cachiê per utilisator)',
 1208+ 'moodbar-comment-hidden' => '(Avis cachiê per mesera administrativa)',
 1209+ 'moodbar-feedback-show' => 'fâre vêre los avis cachiês',
 1210+ 'moodbar-feedback-hide' => 'cachiér los avis',
 1211+ 'moodbar-hidden-footer' => 'Avis cachiê, $1',
 1212+ 'moodbar-feedback-restore' => 'refâre los avis cachiês',
 1213+ 'moodbar-action-item' => 'Chousa de l’avis :',
4531214 'moodbar-type-happy' => 'Herox',
4541215 'moodbar-type-sad' => 'Tristo',
4551216 'moodbar-type-confused' => 'Confondu',
4561217 'moodbar-user-anonymized' => 'Anonimisâ',
4571218 'moodbar-user-ip' => 'Adrèce IP',
4581219 'moodbar-user-user' => 'Utilisator encartâ',
 1220+ 'moodbar-log-name' => 'Jornal des avis',
 1221+ 'moodbar-log-hide' => 'at cachiê [[$1]]',
 1222+ 'moodbar-log-restore' => 'at refêt la visibilitât de [[$1]]',
4591223 );
4601224
4611225 /** Galician (Galego)
@@ -492,6 +1256,7 @@
4931257 'moodbar-success-subtitle' => 'Compartir a súa experiencia na edición axúdanos a mellorar $1.',
4941258 'moodbar-error-subtitle' => 'Algo foi mal! Intente compartir os seus comentarios máis tarde.',
4951259 'right-moodbar-view' => 'Ver e exportar a barra de comentarios',
 1260+ 'right-moodbar-admin' => 'Alterar a visibilidade no taboleiro de comentarios',
4961261 'moodbar-admin-title' => 'Barra de comentarios',
4971262 'moodbar-admin-intro' => 'Esta páxina permite ver as valoracións enviadas a través da barra de comentarios.',
4981263 'moodbar-admin-empty' => 'Sen resultados',
@@ -510,12 +1275,42 @@
5111276 'moodbar-header-user-editcount' => 'Número de edición do usuario',
5121277 'moodbar-header-namespace' => 'Espazo de nomes',
5131278 'moodbar-header-own-talk' => 'Páxina de conversa propia',
 1279+ 'moodbar-feedback-title' => 'Comentarios sobre o taboleiro',
 1280+ 'moodbar-feedback-filters' => 'Filtros',
 1281+ 'moodbar-feedback-filters-type' => 'Humor:',
 1282+ 'moodbar-feedback-filters-type-happy' => 'Contento',
 1283+ 'moodbar-feedback-filters-type-confused' => 'Confuso',
 1284+ 'moodbar-feedback-filters-type-sad' => 'Triste',
 1285+ 'moodbar-feedback-filters-username' => 'Nome de usuario',
 1286+ 'moodbar-feedback-filters-button' => 'Definir os filtros',
 1287+ 'moodbar-feedback-whatis' => 'Que é isto?',
 1288+ 'moodbar-feedback-permalink' => 'ligazón cara aquí',
 1289+ 'moodbar-feedback-noresults' => 'Non hai ningún comentario que coincida cos seus filtros.',
 1290+ 'moodbar-feedback-more' => 'Máis',
 1291+ 'moodbar-feedback-nomore' => 'Non hai máis resultados que mostrar.',
 1292+ 'moodbar-feedback-newer' => 'Máis novos',
 1293+ 'moodbar-feedback-older' => 'Máis vellos',
 1294+ 'moodbar-feedback-ajaxerror' => 'Houbo un erro ao procurar máis resultados.',
 1295+ 'moodbar-user-hidden' => '(Usuario agochado)',
 1296+ 'moodbar-comment-hidden' => '(Comentario agochado por un administrador)',
 1297+ 'moodbar-feedback-show' => 'mostrar o comentario agochado',
 1298+ 'moodbar-feedback-hide' => 'agochar o comentario',
 1299+ 'moodbar-hidden-footer' => 'Comentario agochado $1',
 1300+ 'moodbar-feedback-restore' => 'restaurar o comentario agochado',
 1301+ 'moodbar-action-item' => 'Elemento de valoración:',
 1302+ 'moodbar-hide-header' => 'Agochar este elemento da vista',
 1303+ 'moodbar-restore-header' => 'Restaurar a visibilidade deste elemento',
 1304+ 'moodbar-invalid-item' => 'O sistema non puido atopar o elemento de valoración correcto.',
5141305 'moodbar-type-happy' => 'Contento',
5151306 'moodbar-type-sad' => 'Triste',
5161307 'moodbar-type-confused' => 'Confuso',
5171308 'moodbar-user-anonymized' => 'Anónimo',
5181309 'moodbar-user-ip' => 'Enderezo IP',
5191310 'moodbar-user-user' => 'Usuario rexistrado',
 1311+ 'moodbar-log-name' => 'Rexistro de comentarios',
 1312+ 'moodbar-log-header' => 'Este é o rexistro das accións levadas a cabo nos elementos de valoración listados no [[Special:FeedbackDashboard|taboleiro de comentarios]].',
 1313+ 'moodbar-log-hide' => 'agochou "[[$1]]"',
 1314+ 'moodbar-log-restore' => 'restaurou a visibilidade de "[[$1]]"',
5201315 );
5211316
5221317 /** Hebrew (עברית)
@@ -553,6 +1348,7 @@
5541349 'moodbar-success-subtitle' => 'שיתוף חוויית המשתמש שלך עוזר לנו לשפר את $1.',
5551350 'moodbar-error-subtitle' => 'משהו השתבש! נא לנסות לשתף אותנו במשוב שלך מאוחר יותר.',
5561351 'right-moodbar-view' => 'הצגה וייצוא של משוב מסרגל מצב הרוח',
 1352+ 'right-moodbar-admin' => 'לשנות נראוּת בלוח הבקרה של המשוב',
5571353 'moodbar-admin-title' => 'משוב על סרגל מצב הרוח',
5581354 'moodbar-admin-intro' => 'הדף הזה מאפשר לך לראות משוב שנשלח באמצעות סרגל מצב הרוח.',
5591355 'moodbar-admin-empty' => 'אין תוצאות',
@@ -571,12 +1367,43 @@
5721368 'moodbar-header-user-editcount' => 'מספר עריכות',
5731369 'moodbar-header-namespace' => 'מרחב שם',
5741370 'moodbar-header-own-talk' => 'דף שיחה של עצמי',
 1371+ 'moodbar-feedback-title' => 'לוח בקרה של משובים',
 1372+ 'moodbar-feedback-filters' => 'מסננים',
 1373+ 'moodbar-feedback-filters-type' => 'מצב רוח:',
 1374+ 'moodbar-feedback-filters-type-happy' => 'שמחה',
 1375+ 'moodbar-feedback-filters-type-confused' => 'בלבול',
 1376+ 'moodbar-feedback-filters-type-sad' => 'עצב',
 1377+ 'moodbar-feedback-filters-username' => 'שם משתמש',
 1378+ 'moodbar-feedback-filters-button' => 'הגדרת מסננים',
 1379+ 'moodbar-feedback-whatis' => 'מהי התכונה הזו?',
 1380+ 'moodbar-feedback-permalink' => 'קישור לכאן',
 1381+ 'moodbar-feedback-noresults' => 'אין עוד תגובות שתואמות את המסננים שלך.',
 1382+ 'moodbar-feedback-more' => '
 1383+עוד',
 1384+ 'moodbar-feedback-nomore' => 'אין עוד תוצאות להציג.',
 1385+ 'moodbar-feedback-newer' => 'חדשות יותר',
 1386+ 'moodbar-feedback-older' => 'ישנות יותר',
 1387+ 'moodbar-feedback-ajaxerror' => 'אירעה שגיאה בעת אחזור תוצאות נוספות.',
 1388+ 'moodbar-user-hidden' => '(חשבון מוסתר)',
 1389+ 'moodbar-comment-hidden' => '(המשוב הוסתר על־ידי פעולת מנהל)',
 1390+ 'moodbar-feedback-show' => 'הצגת משוב מוסתר',
 1391+ 'moodbar-feedback-hide' => 'הסתרת משוב',
 1392+ 'moodbar-hidden-footer' => 'משוב מוסתר $1',
 1393+ 'moodbar-feedback-restore' => 'שחזור משוב מוסתר',
 1394+ 'moodbar-action-item' => 'פריט משוב:',
 1395+ 'moodbar-hide-header' => 'הסתרת הפריט הזה מהתצוגה',
 1396+ 'moodbar-restore-header' => 'שחזור הנראוּת של הפריט הזה',
 1397+ 'moodbar-invalid-item' => 'המערכת לא הצליחה למצא את פריט המשוב הנכון.',
5751398 'moodbar-type-happy' => 'שמחה',
5761399 'moodbar-type-sad' => 'עצב',
5771400 'moodbar-type-confused' => 'בלבול',
5781401 'moodbar-user-anonymized' => 'ללא פרטים מזהים',
5791402 'moodbar-user-ip' => 'כתובת IP',
5801403 'moodbar-user-user' => 'משתמש רשום',
 1404+ 'moodbar-log-name' => 'יומן משוב',
 1405+ 'moodbar-log-header' => 'זהו יומן של פעולות שנעשו על פריטי משוב שרשומים ב[[Special:FeedbackDashboard|לוח הבקרה של המשוב]].',
 1406+ 'moodbar-log-hide' => 'הסתיר את [[$1]]',
 1407+ 'moodbar-log-restore' => 'שחזר את הנראוּת של [[$1]]',
5811408 );
5821409
5831410 /** Interlingua (Interlingua)
@@ -599,7 +1426,7 @@
6001427 'moodbar-what-content' => 'Iste function es concipite pro adjutar le communitate a comprender le experientia del personas qui modifica le sito.
6011428 Pro ulterior information, per favor visita le $1.',
6021429 'moodbar-what-link' => 'pagina de function',
603 - 'moodbar-privacy' => 'Per submitter, tu te declara de accordo que tu contribution sia public in concordantia con iste $1.',
 1430+ 'moodbar-privacy' => 'Per submitter, tu accepta que tu contribution essera usate publicamente sub iste $1.',
6041431 'moodbar-privacy-link' => 'conditiones',
6051432 'moodbar-disable-link' => 'Isto non me interessa. Per favor disactiva iste function.',
6061433 'moodbar-form-title' => 'Perque...',
@@ -614,6 +1441,7 @@
6151442 'moodbar-success-subtitle' => 'Per specificar tu experientia durante le modification, tu nos adjuta a meliorar $1.',
6161443 'moodbar-error-subtitle' => 'Un problema ha occurrite! Per favor tenta specificar tu retroaction de novo plus tarde.',
6171444 'right-moodbar-view' => 'Vider e exportar reactiones del Barra de Humor',
 1445+ 'right-moodbar-admin' => 'Alterar le visibilitate sur le pannello de retroaction',
6181446 'moodbar-admin-title' => 'Reactiones del Barra de Humor',
6191447 'moodbar-admin-intro' => 'Iste pagina permitte vider reactiones submittite con le Barra de Humor',
6201448 'moodbar-admin-empty' => 'Nulle resultato',
@@ -632,12 +1460,42 @@
6331461 'moodbar-header-user-editcount' => 'Numero de modificationes del usator',
6341462 'moodbar-header-namespace' => 'Spatio de nomines',
6351463 'moodbar-header-own-talk' => 'Pagina de discussion proprie',
 1464+ 'moodbar-feedback-title' => 'Pannello de retroaction',
 1465+ 'moodbar-feedback-filters' => 'Filtros',
 1466+ 'moodbar-feedback-filters-type' => 'Humor:',
 1467+ 'moodbar-feedback-filters-type-happy' => 'Felice',
 1468+ 'moodbar-feedback-filters-type-confused' => 'Confuse',
 1469+ 'moodbar-feedback-filters-type-sad' => 'Triste',
 1470+ 'moodbar-feedback-filters-username' => 'Nomine de usator',
 1471+ 'moodbar-feedback-filters-button' => 'Definir filtros',
 1472+ 'moodbar-feedback-whatis' => 'Que es isto?',
 1473+ 'moodbar-feedback-permalink' => 'ligamine a hic',
 1474+ 'moodbar-feedback-noresults' => 'Il non ha commentos que corresponde con tu filtros.',
 1475+ 'moodbar-feedback-more' => 'Plus',
 1476+ 'moodbar-feedback-nomore' => 'Il non ha plus resultatos a monstrar.',
 1477+ 'moodbar-feedback-newer' => 'Plus nove',
 1478+ 'moodbar-feedback-older' => 'Plus ancian',
 1479+ 'moodbar-feedback-ajaxerror' => 'Un error ha occurrite durante le obtention de altere resultatos.',
 1480+ 'moodbar-user-hidden' => '(Usator celate)',
 1481+ 'moodbar-comment-hidden' => '(Commentario celate per action administrative)',
 1482+ 'moodbar-feedback-show' => 'monstrar commentario celate',
 1483+ 'moodbar-feedback-hide' => 'celar commentario',
 1484+ 'moodbar-hidden-footer' => 'Commentario celate $1',
 1485+ 'moodbar-feedback-restore' => 'restaurar commentario celate',
 1486+ 'moodbar-action-item' => 'Elemento de retroaction:',
 1487+ 'moodbar-hide-header' => 'Render iste elemento invisibile',
 1488+ 'moodbar-restore-header' => 'Restaurar le visibilitate de iste elemento',
 1489+ 'moodbar-invalid-item' => 'Le systema non poteva trovar le elemento de retroaction correcte.',
6361490 'moodbar-type-happy' => 'Felice',
6371491 'moodbar-type-sad' => 'Triste',
6381492 'moodbar-type-confused' => 'Confuse',
6391493 'moodbar-user-anonymized' => 'Anonymisate',
6401494 'moodbar-user-ip' => 'Adresse IP',
6411495 'moodbar-user-user' => 'Usator registrate',
 1496+ 'moodbar-log-name' => 'Registro de retroaction',
 1497+ 'moodbar-log-header' => 'Isto es le registro de actiones prendite sur elementos de retroaction listate in le [[Special:FeedbackDashboard|pannello de retroaction]].',
 1498+ 'moodbar-log-hide' => 'celava [[$1]]',
 1499+ 'moodbar-log-restore' => 'restaurava le visibilitate de [[$1]]',
6421500 );
6431501
6441502 /** Colognian (Ripoarisch)
@@ -645,7 +1503,7 @@
6461504 */
6471505 $messages['ksh'] = array(
6481506 'moodbar-close' => '(zohmaache)',
649 - 'moodbar-privacy' => 'Wä heh jät enjitt, moß met dä $1 enverschtande sen, söns moß mer et sennlohße.',
 1507+ 'moodbar-privacy' => 'Wä heh jät enjitt, moß met dä $1 enverschtande sen, söns moß mer et blieve lohße.',
6501508 'moodbar-privacy-link' => 'Begengonge',
6511509 'moodbar-success-title' => 'Mer bedanke uns.',
6521510 );
@@ -689,10 +1547,30 @@
6901548 'moodbar-header-usertype' => 'Benotzer-Typ',
6911549 'moodbar-header-user' => 'Benotzer',
6921550 'moodbar-header-editmode' => 'Ännerungsmodus',
 1551+ 'moodbar-header-useragent' => 'Browser',
6931552 'moodbar-header-comment' => 'Bemierkungen',
6941553 'moodbar-header-user-editcount' => 'Compteur vun den Ännerunge pro Benotzer',
6951554 'moodbar-header-namespace' => 'Nummraum',
6961555 'moodbar-header-own-talk' => 'Eegen Diskussiounssäit',
 1556+ 'moodbar-feedback-filters' => 'Filteren',
 1557+ 'moodbar-feedback-filters-type' => 'Stëmmung:',
 1558+ 'moodbar-feedback-filters-type-happy' => 'Glécklech',
 1559+ 'moodbar-feedback-filters-type-confused' => 'Duercherneen',
 1560+ 'moodbar-feedback-filters-type-sad' => 'Traureg',
 1561+ 'moodbar-feedback-filters-username' => 'Benotzernumm',
 1562+ 'moodbar-feedback-filters-button' => 'Filtere setzen',
 1563+ 'moodbar-feedback-whatis' => 'Wéi dës Fonctioun fonctionnéiert.',
 1564+ 'moodbar-feedback-permalink' => 'Heihi verlinken',
 1565+ 'moodbar-feedback-noresults' => 'Et gëtt keng Bemierkungen déi op Är Filtere passen.',
 1566+ 'moodbar-feedback-more' => 'Méi',
 1567+ 'moodbar-feedback-nomore' => 'Et gëtt ne tméi Resultater fir ze weisen.',
 1568+ 'moodbar-feedback-newer' => 'Méi rezent',
 1569+ 'moodbar-feedback-older' => 'Méi al',
 1570+ 'moodbar-feedback-ajaxerror' => 'Am Sichen no méi Resultater ass e Feeler geschitt.',
 1571+ 'moodbar-user-hidden' => '(Benotzer verstoppt)',
 1572+ 'moodbar-feedback-show' => 'verstoppte Feedback weisen',
 1573+ 'moodbar-feedback-hide' => 'Feedback verstoppen',
 1574+ 'moodbar-hidden-footer' => 'Verstoppte Feedback $1',
6971575 'moodbar-type-happy' => 'Glécklech',
6981576 'moodbar-type-sad' => 'Traureg',
6991577 'moodbar-type-confused' => 'Duercherneen',
@@ -701,11 +1579,46 @@
7021580 'moodbar-user-user' => 'Registréierte Benotzer',
7031581 );
7041582
 1583+/** Lithuanian (Lietuvių)
 1584+ * @author Eitvys200
 1585+ */
 1586+$messages['lt'] = array(
 1587+ 'moodbar-trigger-share' => 'Pasidalinkite savo patirtimi',
 1588+ 'moodbar-trigger-editing' => 'Taisoma $1...',
 1589+ 'moodbar-close' => '(uždaryti)',
 1590+ 'moodbar-type-happy-title' => 'Laimingas',
 1591+ 'moodbar-type-sad-title' => 'Liūdnas',
 1592+ 'moodbar-type-confused-title' => 'Sutrikęs',
 1593+ 'tooltip-moodbar-what' => 'Sužinokite daugiau apie šią funkciją',
 1594+ 'moodbar-what-label' => 'Kas tai?',
 1595+ 'moodbar-privacy-link' => 'sąlygos',
 1596+ 'moodbar-form-title' => 'Nes...',
 1597+ 'moodbar-form-note' => '140 simbolių daugiausia',
 1598+ 'moodbar-form-policy-label' => 'mūsų politika',
 1599+ 'moodbar-loading-title' => 'Dalijimasis ...',
 1600+ 'moodbar-success-title' => 'Ačiū!',
 1601+ 'moodbar-error-title' => 'Oi!',
 1602+ 'moodbar-admin-empty' => 'Nėra rezultatų',
 1603+ 'moodbar-header-id' => 'Atsiliepimo ID',
 1604+ 'moodbar-header-timestamp' => 'Laiko žymė',
 1605+ 'moodbar-header-type' => 'Tipas',
 1606+ 'moodbar-header-page' => 'Puslapis',
 1607+ 'moodbar-header-usertype' => 'Vartotojo tipas',
 1608+ 'moodbar-header-user' => 'Vartotojas',
 1609+ 'moodbar-header-editmode' => 'Redagavimo režimas',
 1610+ 'moodbar-header-bucket' => 'Testavimo kibiras',
 1611+ 'moodbar-header-system' => 'Sistemos tipas',
 1612+ 'moodbar-header-comment' => 'Komentarai',
 1613+ 'moodbar-type-happy' => 'Laimingas',
 1614+ 'moodbar-type-sad' => 'Liūdnas',
 1615+ 'moodbar-user-ip' => 'IP Adresas',
 1616+);
 1617+
7051618 /** Macedonian (Македонски)
7061619 * @author Bjankuloski06
7071620 */
7081621 $messages['mk'] = array(
709 - 'moodbar-desc' => '!Им овозможува на одредени корисници да даваат мислење за уредувањето',
 1622+ 'moodbar-desc' => 'Им овозможува на одредени корисници да даваат мислење за уредувањето',
7101623 'moodbar-trigger-feedback' => 'Мислења за уредувањето',
7111624 'moodbar-trigger-share' => 'Споделете го вашето искуство',
7121625 'moodbar-trigger-editing' => 'Уредување на $1...',
@@ -736,6 +1649,7 @@
7371650 'moodbar-success-subtitle' => 'Споделувајќи го вашето уредувачко искуство ни помагате да ја подобриме $1.',
7381651 'moodbar-error-subtitle' => 'Нешто не е во ред! Обидете се да го споделите вашето мислење подоцна.',
7391652 'right-moodbar-view' => 'Преглед и извоз на мислења од MoodBar',
 1653+ 'right-moodbar-admin' => 'Менување на видливоста на таблата за мислења',
7401654 'moodbar-admin-title' => 'Мислења со MoodBar',
7411655 'moodbar-admin-intro' => 'Оваа страница служи за преглед на мислења поднесени со MoodBar',
7421656 'moodbar-admin-empty' => 'Нема резултати',
@@ -754,12 +1668,42 @@
7551669 'moodbar-header-user-editcount' => 'Бр. на кориснички уредувања',
7561670 'moodbar-header-namespace' => 'Именски простор',
7571671 'moodbar-header-own-talk' => 'Сопствена страница за разговор',
 1672+ 'moodbar-feedback-title' => 'Табла за мислења',
 1673+ 'moodbar-feedback-filters' => 'Филтри',
 1674+ 'moodbar-feedback-filters-type' => 'Расположение:',
 1675+ 'moodbar-feedback-filters-type-happy' => 'Среќни',
 1676+ 'moodbar-feedback-filters-type-confused' => 'Збунети',
 1677+ 'moodbar-feedback-filters-type-sad' => 'Тажни',
 1678+ 'moodbar-feedback-filters-username' => 'Корисничко име',
 1679+ 'moodbar-feedback-filters-button' => 'Задај филтри',
 1680+ 'moodbar-feedback-whatis' => 'Што прави оваа функција?',
 1681+ 'moodbar-feedback-permalink' => 'врска до страницава',
 1682+ 'moodbar-feedback-noresults' => 'Нема коментари што се совпаѓаат со филтрите.',
 1683+ 'moodbar-feedback-more' => 'Повеќе',
 1684+ 'moodbar-feedback-nomore' => 'Нема повеќе резултати за прикажување.',
 1685+ 'moodbar-feedback-newer' => 'Понови',
 1686+ 'moodbar-feedback-older' => 'Постари',
 1687+ 'moodbar-feedback-ajaxerror' => 'Се појави грешка при обидот да добијам повеќе резултати.',
 1688+ 'moodbar-user-hidden' => '(Корисникот е скриен)',
 1689+ 'moodbar-comment-hidden' => '(Мислењата се скриени од администратор)',
 1690+ 'moodbar-feedback-show' => 'прикажи скриени мислења',
 1691+ 'moodbar-feedback-hide' => 'скриј мислења',
 1692+ 'moodbar-hidden-footer' => 'Скриено мислење $1',
 1693+ 'moodbar-feedback-restore' => 'поврати скриени мислења',
 1694+ 'moodbar-action-item' => 'Мислење:',
 1695+ 'moodbar-hide-header' => 'Скриј го мислењето',
 1696+ 'moodbar-restore-header' => 'Врати ја видливоста на мислењето',
 1697+ 'moodbar-invalid-item' => 'Системот не можеше да го најде бараното мислење',
7581698 'moodbar-type-happy' => 'Среќен',
7591699 'moodbar-type-sad' => 'Тажен',
7601700 'moodbar-type-confused' => 'Збунет',
7611701 'moodbar-user-anonymized' => 'Анонимизирано',
7621702 'moodbar-user-ip' => 'IP-адреса',
7631703 'moodbar-user-user' => 'Регистриран корисник',
 1704+ 'moodbar-log-name' => 'Дневник на мислења',
 1705+ 'moodbar-log-header' => 'Ова е дневник на дејства што се однесуваат на мислењата искажани на [[Special:FeedbackDashboard|таблата за мислења и коментари]].',
 1706+ 'moodbar-log-hide' => 'скриено [[$1]]',
 1707+ 'moodbar-log-restore' => 'вратена видливоста на [[$1]]',
7641708 );
7651709
7661710 /** Malayalam (മലയാളം)
@@ -801,11 +1745,19 @@
8021746 'moodbar-header-usertype' => 'ഉപയോക്തൃതരം',
8031747 'moodbar-header-user' => 'ഉപയോക്താവ്',
8041748 'moodbar-header-editmode' => 'തിരുത്തൽ രൂപം',
 1749+ 'moodbar-header-bucket' => 'പരീക്ഷണ തൊട്ടി',
8051750 'moodbar-header-system' => 'സിസ്റ്റം തരം',
8061751 'moodbar-header-comment' => 'അഭിപ്രായങ്ങൾ',
8071752 'moodbar-header-user-editcount' => 'ഉപയോക്തൃ തിരുത്തലുകളുടെ എണ്ണം',
8081753 'moodbar-header-namespace' => 'നാമമേഖല',
8091754 'moodbar-header-own-talk' => 'സ്വന്തം സം‌വാദം താൾ',
 1755+ 'moodbar-feedback-filters-type' => 'തരം:',
 1756+ 'moodbar-feedback-filters-username' => 'ഉപയോക്തൃനാമം',
 1757+ 'moodbar-feedback-more' => 'കൂടുതൽ',
 1758+ 'moodbar-feedback-newer' => 'പുതിയവ',
 1759+ 'moodbar-feedback-older' => 'പഴയവ',
 1760+ 'moodbar-feedback-ajaxerror' => 'കൂടുതൽ ഫലങ്ങൾ ശേഖരിക്കുന്നതിനിടെ പിഴവുണ്ടയി.',
 1761+ 'moodbar-user-hidden' => '(ഉപയോക്താവ് മറയ്ക്കപ്പെട്ടിരിക്കുന്നു)',
8101762 'moodbar-type-happy' => 'സന്തോഷം',
8111763 'moodbar-type-sad' => 'ദുഃഖം',
8121764 'moodbar-type-confused' => 'ആശയക്കുഴപ്പം',
@@ -849,6 +1801,7 @@
8501802 'moodbar-success-subtitle' => 'Berkongsi pengalaman menyunting anda membantu kami meningkatkan $1.',
8511803 'moodbar-error-subtitle' => 'Ada yang tak kena! Sila cuba berkongsi maklum balas anda kemudian.',
8521804 'right-moodbar-view' => 'Lihat dan eksport maklum balas MoodBar',
 1805+ 'right-moodbar-admin' => 'Mengubah keterlihatan di papan pemuka maklum balas',
8531806 'moodbar-admin-title' => 'Maklum balas MoodBar',
8541807 'moodbar-admin-intro' => 'Laman ini membolehkan anda melihat maklum balas yang dihantar bersama MoodBar.',
8551808 'moodbar-admin-empty' => 'Tiada hasil',
@@ -861,18 +1814,48 @@
8621815 'moodbar-header-editmode' => 'Mod sunting',
8631816 'moodbar-header-bucket' => 'Timba ujian',
8641817 'moodbar-header-system' => 'Jenis sistem',
865 - 'moodbar-header-locale' => 'Lokal',
 1818+ 'moodbar-header-locale' => 'Tempat',
8661819 'moodbar-header-useragent' => 'Ejen Pengguna',
8671820 'moodbar-header-comment' => 'Komen',
8681821 'moodbar-header-user-editcount' => 'Kiraan suntingan pengguna',
8691822 'moodbar-header-namespace' => 'Ruang nama',
8701823 'moodbar-header-own-talk' => 'Laman perbincangan sendiri',
 1824+ 'moodbar-feedback-title' => 'Papan pemuka maklum balas',
 1825+ 'moodbar-feedback-filters' => 'Penapis',
 1826+ 'moodbar-feedback-filters-type' => 'Angin:',
 1827+ 'moodbar-feedback-filters-type-happy' => 'Gembira',
 1828+ 'moodbar-feedback-filters-type-confused' => 'Keliru',
 1829+ 'moodbar-feedback-filters-type-sad' => 'Sedih',
 1830+ 'moodbar-feedback-filters-username' => 'Nama pengguna',
 1831+ 'moodbar-feedback-filters-button' => 'Tetapkan penapis',
 1832+ 'moodbar-feedback-whatis' => 'Ciri ini apa?',
 1833+ 'moodbar-feedback-permalink' => 'pautkan ke sini',
 1834+ 'moodbar-feedback-noresults' => 'Tiada komen yang sepadan dengan tapisan anda.',
 1835+ 'moodbar-feedback-more' => 'Lagi',
 1836+ 'moodbar-feedback-nomore' => 'Tiada lagi hasil untuk ditunjukkan.',
 1837+ 'moodbar-feedback-newer' => 'Lebih baru',
 1838+ 'moodbar-feedback-older' => 'Lebih lama',
 1839+ 'moodbar-feedback-ajaxerror' => 'Ralat berlaku ketika mengambil lebih banyak hasil.',
 1840+ 'moodbar-user-hidden' => '(Pengguna tersorok)',
 1841+ 'moodbar-comment-hidden' => '(Maklum balas disorokkan oleh tindakan pentadbiran)',
 1842+ 'moodbar-feedback-show' => 'tunjukkan maklum balas tersorok',
 1843+ 'moodbar-feedback-hide' => 'sorokkan maklum balas',
 1844+ 'moodbar-hidden-footer' => 'Maklum Balas Tersorok $1',
 1845+ 'moodbar-feedback-restore' => 'pulihkan maklum balas tersorok',
 1846+ 'moodbar-action-item' => 'Butiran maklum balas:',
 1847+ 'moodbar-hide-header' => 'Sorokkan butiran ini dari pandangan',
 1848+ 'moodbar-restore-header' => 'Perlihatkan semula butiran ini',
 1849+ 'moodbar-invalid-item' => 'Sistem tidak dapat mencari butiran maklum balas yang betul.',
8711850 'moodbar-type-happy' => 'Gembira',
8721851 'moodbar-type-sad' => 'Sedih',
8731852 'moodbar-type-confused' => 'Keliru',
8741853 'moodbar-user-anonymized' => 'Rahsia',
8751854 'moodbar-user-ip' => 'Alamat IP',
8761855 'moodbar-user-user' => 'Pengguna berdaftar',
 1856+ 'moodbar-log-name' => 'Log maklum balas',
 1857+ 'moodbar-log-header' => 'Inilah log tindakan kepada butiran maklum balas yang tersenarai dalam [[Special:FeedbackDashboard|papan pemuka maklum balas]].',
 1858+ 'moodbar-log-hide' => 'menyorokkan [[$1]]',
 1859+ 'moodbar-log-restore' => 'memperlihatkan semula [[$1]]',
8771860 );
8781861
8791862 /** Dutch (Nederlands)
@@ -893,7 +1876,7 @@
8941877 'moodbar-type-confused-title' => 'Verward',
8951878 'tooltip-moodbar-what' => 'Meer informatie over deze functie',
8961879 'moodbar-what-label' => 'Wat is dit?',
897 - 'moodbar-what-content' => 'Deze functie is ontworpen om de gemeenschap de ervaring van mensen die de site bewerken, te helpen begrijpen.
 1880+ 'moodbar-what-content' => 'Deze functie is ontworpen om de ervaring van mensen die de site bewerken te helpen begrijpen.
8981881 Ga naar de $1 voor mee informatie.',
8991882 'moodbar-what-link' => 'pagina over deze functie',
9001883 'moodbar-privacy' => 'Door te delen gaat u akkoord met transparantie onder deze $1.',
@@ -911,6 +1894,7 @@
9121895 'moodbar-success-subtitle' => 'Door het delen van uw ervaringen bij het bewerken, helpt u mee $1 te verbeteren.',
9131896 'moodbar-error-subtitle' => 'Er is iets misgegaan! Probeer later opnieuw uw terugkoppeling te delen.',
9141897 'right-moodbar-view' => 'MoodBar-terugkoppeling bekijken en exporteren',
 1898+ 'right-moodbar-admin' => 'Zichtbaarheid van de terugkoppelingsdashboard wijzigen',
9151899 'moodbar-admin-title' => 'MoodBar-terugkoppeling',
9161900 'moodbar-admin-intro' => 'Deze pagina laat u toe om terugkoppeling die met de MoodBar is verzonden, te bekijken',
9171901 'moodbar-admin-empty' => 'Geen resultaten',
@@ -929,18 +1913,61 @@
9301914 'moodbar-header-user-editcount' => 'Aantal bewerkingen van de gebruiker',
9311915 'moodbar-header-namespace' => 'Naamruimte',
9321916 'moodbar-header-own-talk' => 'Eigen overlegpagina',
 1917+ 'moodbar-feedback-title' => 'Dashboard voor terugkoppeling',
 1918+ 'moodbar-feedback-filters' => 'Filters',
 1919+ 'moodbar-feedback-filters-type' => 'Stemming:',
 1920+ 'moodbar-feedback-filters-type-happy' => 'Blij',
 1921+ 'moodbar-feedback-filters-type-confused' => 'Verward',
 1922+ 'moodbar-feedback-filters-type-sad' => 'Triest',
 1923+ 'moodbar-feedback-filters-username' => 'Gebruikersnaam',
 1924+ 'moodbar-feedback-filters-button' => 'Filters instellen',
 1925+ 'moodbar-feedback-whatis' => 'Wat doet deze functie?',
 1926+ 'moodbar-feedback-permalink' => 'hierheen verwijzen',
 1927+ 'moodbar-feedback-noresults' => 'Er zijn geen opmerkingen die voldoen aan uw filters.',
 1928+ 'moodbar-feedback-more' => 'Meer',
 1929+ 'moodbar-feedback-nomore' => 'Er zijn niet meer weer te geven resultaten.',
 1930+ 'moodbar-feedback-newer' => 'Nieuwere',
 1931+ 'moodbar-feedback-older' => 'Oudere',
 1932+ 'moodbar-feedback-ajaxerror' => 'Er is een fout opgetreden bij het ophalen van meer resultaten.',
 1933+ 'moodbar-user-hidden' => '(Gebruiker verborgen)',
 1934+ 'moodbar-comment-hidden' => '(Terugkoppeling verborgen door een administratieve handeling)',
 1935+ 'moodbar-feedback-show' => 'verborgen terugkoppeling weergeven',
 1936+ 'moodbar-feedback-hide' => 'terugkoppeling verbergen',
 1937+ 'moodbar-hidden-footer' => 'Verborgen terugkoppeling $1',
 1938+ 'moodbar-feedback-restore' => 'verborgen terugkoppeling herstellen',
 1939+ 'moodbar-action-item' => 'Terugkoppelingsitem:',
 1940+ 'moodbar-hide-header' => 'Dit item verbergen uit weergave',
 1941+ 'moodbar-restore-header' => 'De zichtbaarheid van dit item herstellen',
 1942+ 'moodbar-invalid-item' => 'Het systeem kon het juiste terugkoppelingsitem niet vinden.',
9331943 'moodbar-type-happy' => 'Blij',
9341944 'moodbar-type-sad' => 'Triest',
9351945 'moodbar-type-confused' => 'Verward',
9361946 'moodbar-user-anonymized' => 'Geanonimiseerd',
9371947 'moodbar-user-ip' => 'IP-adres',
9381948 'moodbar-user-user' => 'Geregistreerde gebruiker',
 1949+ 'moodbar-log-name' => 'Terugkoppelingslogboek',
 1950+ 'moodbar-log-header' => 'Dit is een logboek met uitgevoerde handelingen op items uit het [[Special:FeedbackDashboard|terugkoppelingsdashboard]].',
 1951+ 'moodbar-log-hide' => 'heeft [[$1]] verborgen',
 1952+ 'moodbar-log-restore' => 'herstelde de zichtbaarheid voor [[$1]]',
9391953 );
9401954
9411955 /** Norwegian (bokmål)‬ (‪Norsk (bokmål)‬)
9421956 * @author Event
 1957+ * @author Nghtwlkr
9431958 */
9441959 $messages['no'] = array(
 1960+ 'moodbar-close' => '(lukk)',
 1961+ 'moodbar-type-happy-title' => 'Glad',
 1962+ 'moodbar-type-sad-title' => 'Trist',
 1963+ 'moodbar-type-confused-title' => 'Forvirret',
 1964+ 'moodbar-form-title' => 'Fordi...',
 1965+ 'moodbar-form-note' => 'maksimum 140 tegn',
 1966+ 'moodbar-form-note-dynamic' => '$1 tegn igjen',
 1967+ 'moodbar-success-title' => 'Takk!',
 1968+ 'moodbar-error-title' => 'Ups!',
 1969+ 'moodbar-admin-empty' => 'Ingen resultater',
 1970+ 'moodbar-header-type' => 'Type',
 1971+ 'moodbar-header-page' => 'Side',
9451972 'moodbar-header-user' => 'Bruker',
9461973 'moodbar-header-editmode' => 'Redigeringsmodus',
9471974 'moodbar-header-bucket' => 'Testebøtte',
@@ -957,13 +1984,22 @@
9581985 'moodbar-user-user' => 'Registrert bruker',
9591986 );
9601987
 1988+/** Oriya (ଓଡ଼ିଆ)
 1989+ * @author Psubhashish
 1990+ */
 1991+$messages['or'] = array(
 1992+ 'moodbar-header-timestamp' => 'ସମୟଚିହ୍ନ',
 1993+);
 1994+
9611995 /** Polish (Polski)
 1996+ * @author Leinad
 1997+ * @author Masti
9621998 * @author Sp5uhe
9631999 */
9642000 $messages['pl'] = array(
9652001 'moodbar-desc' => 'Pozwala określonym użytkownikom na wyrażenie opinii o posiadanym doświadczeniu w edytowaniu',
9662002 'moodbar-trigger-feedback' => 'Opinia na temat edytowania',
967 - 'moodbar-trigger-share' => 'Podziel się swoim doświadczeniem',
 2003+ 'moodbar-trigger-share' => 'Podziel się swoimi wrażeniami',
9682004 'moodbar-trigger-editing' => 'Edytowanie {{GRAMMAR:D.lp|$1}}...',
9692005 'moodbar-close' => '(zamknij)',
9702006 'moodbar-intro-feedback' => 'Edytowanie {{GRAMMAR:D.lp|$1}} przyniosło mi...',
@@ -974,9 +2010,9 @@
9752011 'moodbar-type-confused-title' => 'mieszane uczucia',
9762012 'tooltip-moodbar-what' => 'Więcej informacji na temat tej funkcji',
9772013 'moodbar-what-label' => 'O co tu chodzi?',
978 - 'moodbar-what-content' => 'Ten dodatek pomaga społeczności zrozumieć doświadczenia osób edytujących projekt.
 2014+ 'moodbar-what-content' => 'To narzędzie pomaga społeczności zrozumieć doświadczenia osób edytujących projekt.
9792015 Więcej informacji uzyskasz na $1.',
980 - 'moodbar-what-link' => 'tej stronie',
 2016+ 'moodbar-what-link' => 'stronie opisu tego narzędzia',
9812017 'moodbar-privacy' => 'Przesyłając, wyrażasz zgodę na udostępnienie na następujących $1.',
9822018 'moodbar-privacy-link' => 'warunkach',
9832019 'moodbar-disable-link' => 'Nie jestem zainteresowany. Proszę wyłączyć tę funkcję.',
@@ -992,6 +2028,7 @@
9932029 'moodbar-success-subtitle' => 'Wymiana doświadczeń w edytowaniu pomaga udoskonalać {{GRAMMAR:MS.lp|$1}}.',
9942030 'moodbar-error-subtitle' => 'Coś poszło źle! Spróbuj udostępnić swoją opinię ponownie za jakiś czas.',
9952031 'right-moodbar-view' => 'Widok i eksport opinii MoodBar',
 2032+ 'right-moodbar-admin' => 'Zmiana widoczności elementów na tablicy otrzymanych opinii',
9962033 'moodbar-admin-title' => 'Opinie MoodBar',
9972034 'moodbar-admin-intro' => 'Strona umożliwia przeglądanie opinii zapisanych przy pomocy MoodBar.',
9982035 'moodbar-admin-empty' => 'Brak wyników',
@@ -1010,6 +2047,27 @@
10112048 'moodbar-header-user-editcount' => 'Licznik edycji użytkownika',
10122049 'moodbar-header-namespace' => 'Przestrzeń nazw',
10132050 'moodbar-header-own-talk' => 'Własna strona dyskusji',
 2051+ 'moodbar-feedback-title' => 'Tablica z otrzymanymi opiniami',
 2052+ 'moodbar-feedback-filters' => 'Filtrowanie',
 2053+ 'moodbar-feedback-filters-type' => 'Nastrój',
 2054+ 'moodbar-feedback-filters-type-happy' => 'szczęśliwy',
 2055+ 'moodbar-feedback-filters-type-confused' => 'mieszane uczucia',
 2056+ 'moodbar-feedback-filters-type-sad' => 'smutny',
 2057+ 'moodbar-feedback-filters-username' => 'Nazwa użytkownika',
 2058+ 'moodbar-feedback-filters-button' => 'Filtruj',
 2059+ 'moodbar-feedback-whatis' => 'Jak działa to narzędzie?',
 2060+ 'moodbar-feedback-permalink' => 'link do tej opinii',
 2061+ 'moodbar-feedback-noresults' => 'Brak opinii pasujących do wybranego filtru.',
 2062+ 'moodbar-feedback-more' => 'Więcej',
 2063+ 'moodbar-feedback-nomore' => 'Nie ma więcej opinii do wyświetlenia.',
 2064+ 'moodbar-feedback-newer' => 'Nowsze',
 2065+ 'moodbar-feedback-older' => 'Starsze',
 2066+ 'moodbar-feedback-ajaxerror' => 'Wystąpił błąd przy pobieraniu kolejnych wyników.',
 2067+ 'moodbar-user-hidden' => '(Użytkownik ukryty)',
 2068+ 'moodbar-comment-hidden' => '(Opinia ukryta na skutek działania administracyjnego)',
 2069+ 'moodbar-feedback-show' => 'pokaż ukrytą opinię',
 2070+ 'moodbar-feedback-hide' => 'ukryj opinię',
 2071+ 'moodbar-feedback-restore' => 'przywróć ukrytą opinię',
10142072 'moodbar-type-happy' => 'Szczęśliwy',
10152073 'moodbar-type-sad' => 'Smutny',
10162074 'moodbar-type-confused' => 'Zmieszany',
@@ -1018,6 +2076,88 @@
10192077 'moodbar-user-user' => 'Zarejestrowany użytkownik',
10202078 );
10212079
 2080+/** Piedmontese (Piemontèis)
 2081+ * @author Borichèt
 2082+ * @author Dragonòt
 2083+ */
 2084+$messages['pms'] = array(
 2085+ 'moodbar-desc' => "A përmët a j'utent spessificà ëd dé soa opinion su soa esperiensa ëd modìfica",
 2086+ 'moodbar-trigger-feedback' => 'Coment an sla modìfica',
 2087+ 'moodbar-trigger-share' => "Ch'a partagia soa esperiensa",
 2088+ 'moodbar-trigger-editing' => 'Modifiché $1...',
 2089+ 'moodbar-close' => '(saré)',
 2090+ 'moodbar-intro-feedback' => "Modifiché $1 a l'ha fame...",
 2091+ 'moodbar-intro-share' => "Mia esperiensa su $1 a l'ha fame...",
 2092+ 'moodbar-intro-editing' => "Modifiché $1 a l'ha fame...",
 2093+ 'moodbar-type-happy-title' => 'Content',
 2094+ 'moodbar-type-sad-title' => 'Scontent',
 2095+ 'moodbar-type-confused-title' => 'Confus',
 2096+ 'tooltip-moodbar-what' => 'Amprende ëd pi su sta funsionalità',
 2097+ 'moodbar-what-label' => "Lòn ch'a l'é sossì?",
 2098+ 'moodbar-what-content' => "Sta funsionalità a l'é progetà për giuté la comunità a capì l'esperiensa ëd përson-e ch'a modifico ël sit.
 2099+Për savèjne ëd pi, për piasì vìsita ël $1.",
 2100+ 'moodbar-what-link' => 'pàgina ëd funsionalità',
 2101+ 'moodbar-privacy' => 'An sgnacand, a aceta na trasparensa conforma a coste $1.',
 2102+ 'moodbar-privacy-link' => 'condission',
 2103+ 'moodbar-disable-link' => 'I son pa anteressà. Për piasì disabìlita sta funsionalità-sì.',
 2104+ 'moodbar-form-title' => 'Përchè...',
 2105+ 'moodbar-form-note' => '140 caràter al pi',
 2106+ 'moodbar-form-note-dynamic' => "$1 caràter ch'a resto",
 2107+ 'moodbar-form-submit' => 'Partagé soa opinion',
 2108+ 'moodbar-form-policy-text' => 'An sgnacand, $1',
 2109+ 'moodbar-form-policy-label' => 'nòstre régole',
 2110+ 'moodbar-loading-title' => 'Partagé...',
 2111+ 'moodbar-success-title' => 'Mersì!',
 2112+ 'moodbar-error-title' => 'Contacc!',
 2113+ 'moodbar-success-subtitle' => 'Partagé soa esperiensa ëd modìfica an giuta a amelioré $1.',
 2114+ 'moodbar-error-subtitle' => "Quaicòs a l'é andàit mal! Për piasì, ch'a preuva a partagé ij tò coment torna pi tard.",
 2115+ 'right-moodbar-view' => "Smon-e e esporté lòn ch'a pensa ëd MoodBar",
 2116+ 'moodbar-admin-title' => 'Opinion MoodBar',
 2117+ 'moodbar-admin-intro' => "Costa pàgina a-j përmët ëd vëdde j'opinion mandà con ël MoodBar.",
 2118+ 'moodbar-admin-empty' => 'Gnun arzultà',
 2119+ 'moodbar-header-id' => "ID d'opinion",
 2120+ 'moodbar-header-timestamp' => 'Stampin data e ora',
 2121+ 'moodbar-header-type' => 'Sòrt',
 2122+ 'moodbar-header-page' => 'Pàgina',
 2123+ 'moodbar-header-usertype' => "Sòrt d'utent",
 2124+ 'moodbar-header-user' => 'Utent',
 2125+ 'moodbar-header-editmode' => 'Manera ëd modìfica',
 2126+ 'moodbar-header-bucket' => 'Ansema ëd preuva',
 2127+ 'moodbar-header-system' => 'Sòrt ëd sistema',
 2128+ 'moodbar-header-locale' => 'Local',
 2129+ 'moodbar-header-useragent' => 'Agent-Utent',
 2130+ 'moodbar-header-comment' => 'Coment',
 2131+ 'moodbar-header-user-editcount' => "Conteur ëd le modìfiche dl'utent",
 2132+ 'moodbar-header-namespace' => 'Spassi nominal',
 2133+ 'moodbar-header-own-talk' => 'Pàgina ëd discussion përsonal',
 2134+ 'moodbar-type-happy' => 'Content',
 2135+ 'moodbar-type-sad' => 'Scontent',
 2136+ 'moodbar-type-confused' => 'Confus',
 2137+ 'moodbar-user-anonymized' => 'Anonimisà',
 2138+ 'moodbar-user-ip' => 'Adrëssa IP',
 2139+ 'moodbar-user-user' => 'Utent registrà',
 2140+);
 2141+
 2142+/** Pashto (پښتو)
 2143+ * @author Ahmed-Najib-Biabani-Ibrahimkhel
 2144+ */
 2145+$messages['ps'] = array(
 2146+ 'moodbar-close' => '(تړل)',
 2147+ 'moodbar-type-happy-title' => 'خوښ',
 2148+ 'moodbar-type-sad-title' => 'خپه',
 2149+ 'moodbar-what-label' => 'دا څه دی؟',
 2150+ 'moodbar-form-title' => 'د دې پخاطر...',
 2151+ 'moodbar-success-title' => 'مننه!',
 2152+ 'moodbar-admin-empty' => 'بې پايلو',
 2153+ 'moodbar-header-page' => 'مخ',
 2154+ 'moodbar-header-user' => 'کارن',
 2155+ 'moodbar-feedback-filters' => 'چاڼګرونه',
 2156+ 'moodbar-feedback-filters-type-happy' => 'خوښ',
 2157+ 'moodbar-feedback-filters-username' => 'کارن-نوم',
 2158+ 'moodbar-type-happy' => 'خوښ',
 2159+ 'moodbar-type-sad' => 'خپه',
 2160+);
 2161+
10222162 /** Portuguese (Português)
10232163 * @author Hamilton Abreu
10242164 */
@@ -1079,7 +2219,182 @@
10802220 'moodbar-user-user' => 'Utilizador registado',
10812221 );
10822222
 2223+/** Brazilian Portuguese (Português do Brasil)
 2224+ * @author MetalBrasil
 2225+ */
 2226+$messages['pt-br'] = array(
 2227+ 'moodbar-desc' => 'Permite que usuários específicados enviem ao operador do site uma indicação da sua experiência em edição',
 2228+ 'moodbar-trigger-feedback' => 'Comentários sobre edição',
 2229+ 'moodbar-trigger-share' => 'Partilhe sua experiência',
 2230+ 'moodbar-trigger-editing' => 'Editando $1...',
 2231+ 'moodbar-close' => '(fechar)',
 2232+ 'moodbar-intro-feedback' => 'Editar a $1 fez-me sentir...',
 2233+ 'moodbar-intro-share' => 'A minha experiência em $1 fez-me sentir...',
 2234+ 'moodbar-intro-editing' => 'Editar a $1 fez-me sentir...',
 2235+ 'moodbar-type-happy-title' => 'Feliz',
 2236+ 'moodbar-type-sad-title' => 'Triste',
 2237+ 'moodbar-type-confused-title' => 'Confuso',
 2238+ 'tooltip-moodbar-what' => 'Saiba mais sobre esta função',
 2239+ 'moodbar-what-label' => 'O que é isto?',
 2240+ 'moodbar-what-content' => 'Este recurso foi programado para ajudar a comunidade a entender a experiência das pessoas que editam o site. Para mais informações, por favor, visite $1.',
 2241+ 'moodbar-what-link' => 'Página do recurso',
 2242+ 'moodbar-privacy' => 'Ao enviar, você estará concordando com a transparência nestas $1',
 2243+ 'moodbar-privacy-link' => 'Termos',
 2244+ 'moodbar-disable-link' => 'Não estou interessado. Por favor, desative este recurso.',
 2245+ 'moodbar-form-title' => 'Porque...',
 2246+ 'moodbar-form-note' => '140 caracteres no máximo',
 2247+ 'moodbar-form-note-dynamic' => ' restam $1 caracteres',
 2248+ 'moodbar-form-submit' => 'Compartilhar comentários',
 2249+ 'moodbar-form-policy-text' => 'Ao enviar, $1',
 2250+ 'moodbar-form-policy-label' => 'A nossa política',
 2251+ 'moodbar-loading-title' => 'Compartilhando...',
 2252+ 'moodbar-success-title' => 'Obrigado!',
 2253+ 'moodbar-error-title' => 'Erro!',
 2254+ 'moodbar-success-subtitle' => 'Compartilhar sua experiência de edição nos ajuda a melhorar $1.',
 2255+ 'moodbar-error-subtitle' => 'Algo deu errado! Por favor, tente enviar o seus comentários de novo mais tarde.',
 2256+ 'right-moodbar-view' => 'Visualizar e exportar os comentários da MoodBar',
 2257+ 'moodbar-admin-title' => 'Comentários da MoodBar',
 2258+ 'moodbar-admin-intro' => 'Essa página permite que você visualize comentários enviados com a MoodBar.',
 2259+ 'moodbar-admin-empty' => 'Nenhum resultado.',
 2260+ 'moodbar-header-id' => 'ID do comentário',
 2261+ 'moodbar-header-timestamp' => 'Data e hora',
 2262+ 'moodbar-header-type' => 'Tipo',
 2263+ 'moodbar-header-page' => 'Página',
 2264+ 'moodbar-header-usertype' => 'Tipo de usuário',
 2265+ 'moodbar-header-user' => 'Usuário',
 2266+ 'moodbar-header-editmode' => 'Modo de edição',
 2267+ 'moodbar-header-bucket' => 'Zona de testes',
 2268+ 'moodbar-header-system' => 'Tipo de sistema',
 2269+ 'moodbar-header-locale' => 'Local',
 2270+ 'moodbar-header-useragent' => 'Agente usuário',
 2271+ 'moodbar-header-comment' => 'Comentários',
 2272+ 'moodbar-header-user-editcount' => 'Contador de edições do usuário',
 2273+ 'moodbar-header-namespace' => 'Espaço nominal',
 2274+ 'moodbar-header-own-talk' => 'Página de conversa própria',
 2275+ 'moodbar-type-happy' => 'Feliz',
 2276+ 'moodbar-type-sad' => 'Triste',
 2277+ 'moodbar-type-confused' => 'Confuso',
 2278+ 'moodbar-user-anonymized' => 'Tornado anônimo',
 2279+ 'moodbar-user-ip' => 'Endereço de IP',
 2280+ 'moodbar-user-user' => 'Usuário cadastrado',
 2281+);
 2282+
 2283+/** Romanian (Română)
 2284+ * @author Firilacroco
 2285+ */
 2286+$messages['ro'] = array(
 2287+ 'moodbar-desc' => 'Permite utilizatorilor specificați să își trimită părerea despre experiența lor din timpul editării',
 2288+ 'moodbar-trigger-feedback' => 'Părerea dumneavoastră despre modificare',
 2289+ 'moodbar-trigger-share' => 'Împărtășiți experiența dumneavoastră',
 2290+ 'moodbar-trigger-editing' => 'Modificare $1...',
 2291+ 'moodbar-close' => '(închide)',
 2292+ 'moodbar-intro-feedback' => 'Contribuirea pe $1 m-a făcut...',
 2293+ 'moodbar-intro-share' => 'Experiența mea pe $1 m-a făcut...',
 2294+ 'moodbar-intro-editing' => 'Contribuirea la $1 m-a făcut...',
 2295+ 'moodbar-type-happy-title' => 'Fericit',
 2296+ 'moodbar-type-sad-title' => 'Trist',
 2297+ 'moodbar-type-confused-title' => 'Confuz',
 2298+ 'tooltip-moodbar-what' => 'Aflați mai multe despre această funcție',
 2299+ 'moodbar-what-label' => 'Ce este aceasta?',
 2300+ 'moodbar-what-content' => 'Această funcție este concepută să ajute comunitatea să înțeleagă experiențele oamenilor din timpul modificării site-ului.
 2301+Pentru mai multe informații, vizitați $1.',
 2302+ 'moodbar-what-link' => 'pagina funcției',
 2303+ 'moodbar-privacy' => 'Prin trimitere, sunteți de acord cu acești $1.',
 2304+ 'moodbar-privacy-link' => 'termeni',
 2305+ 'moodbar-disable-link' => 'Nu sunt interesat. Dezactivează această funcție.',
 2306+ 'moodbar-form-title' => 'Deoarece...',
 2307+ 'moodbar-form-note' => 'maximum 140 de caractere',
 2308+ 'moodbar-form-note-dynamic' => '$1 caractere rămase',
 2309+ 'moodbar-form-submit' => 'Trimite părerea',
 2310+ 'moodbar-form-policy-text' => 'Prin trimitere, $1',
 2311+ 'moodbar-form-policy-label' => 'politica noastră',
 2312+ 'moodbar-loading-title' => 'Partajare...',
 2313+ 'moodbar-success-title' => 'Mulțumesc!',
 2314+ 'moodbar-error-title' => 'Ups!',
 2315+ 'moodbar-success-subtitle' => 'Împărtășindu-ne experiența dumneavoastră ne ajutați să îmbunătățim $1.',
 2316+ 'moodbar-error-subtitle' => 'Ceva nu a mers bine! Încercați din nou mai târziu.',
 2317+ 'right-moodbar-view' => 'Vizualizați și exportați părerile trimise prin MoodBar',
 2318+ 'moodbar-admin-title' => 'Feedback MoodBar',
 2319+ 'moodbar-admin-intro' => 'Această pagină vă permite să vizualizați părerile trimise cu MoodBar.',
 2320+ 'moodbar-admin-empty' => 'Niciun rezultat',
 2321+ 'moodbar-header-id' => 'ID părere',
 2322+ 'moodbar-header-timestamp' => 'Data și ora',
 2323+ 'moodbar-header-type' => 'Tip',
 2324+ 'moodbar-header-page' => 'Pagină',
 2325+ 'moodbar-header-usertype' => 'Tip de utilizator',
 2326+ 'moodbar-header-user' => 'Utilizator',
 2327+ 'moodbar-header-editmode' => 'Modul de editare',
 2328+ 'moodbar-header-system' => 'Tipul de sistem',
 2329+ 'moodbar-header-locale' => 'Regional',
 2330+ 'moodbar-header-useragent' => 'Agent utilizator',
 2331+ 'moodbar-header-comment' => 'Comentarii',
 2332+ 'moodbar-header-user-editcount' => 'Număr contribuții utilizator',
 2333+ 'moodbar-header-namespace' => 'Spațiu de nume',
 2334+ 'moodbar-header-own-talk' => 'Pagina proprie de discuții',
 2335+ 'moodbar-type-happy' => 'Fericit',
 2336+ 'moodbar-type-sad' => 'Trist',
 2337+ 'moodbar-type-confused' => 'Confuz',
 2338+ 'moodbar-user-anonymized' => 'Transmise anonime',
 2339+ 'moodbar-user-ip' => 'Adresă IP',
 2340+ 'moodbar-user-user' => 'Utilizator înregistrat',
 2341+);
 2342+
 2343+/** Tarandíne (Tarandíne)
 2344+ * @author Joetaras
 2345+ */
 2346+$messages['roa-tara'] = array(
 2347+ 'moodbar-trigger-feedback' => 'Feedback sus a le cangiaminde',
 2348+ 'moodbar-trigger-share' => "Condivide l'esperienza toje",
 2349+ 'moodbar-trigger-editing' => 'Stoche a cange $1 ...',
 2350+ 'moodbar-close' => '(chiude)',
 2351+ 'moodbar-intro-feedback' => 'Cangiamende de $1 fatte da me...',
 2352+ 'moodbar-intro-editing' => 'Cangiamende de $1 fatte da me...',
 2353+ 'moodbar-type-happy-title' => 'Felice',
 2354+ 'moodbar-type-sad-title' => 'Triste',
 2355+ 'moodbar-type-confused-title' => 'Confuse',
 2356+ 'moodbar-what-label' => 'Ce jè quiste?',
 2357+ 'moodbar-what-link' => 'pàgene de dettaglie',
 2358+ 'moodbar-privacy-link' => 'termine',
 2359+ 'moodbar-form-title' => 'Purcé...',
 2360+ 'moodbar-form-note' => '140 carattere massime',
 2361+ 'moodbar-form-note-dynamic' => '$1 carattere rumaste',
 2362+ 'moodbar-form-submit' => "Condivide 'u feedback",
 2363+ 'moodbar-form-policy-text' => 'Da confermà, $1',
 2364+ 'moodbar-form-policy-label' => 'le reghele nuèstre',
 2365+ 'moodbar-loading-title' => 'Stoche a condivide...',
 2366+ 'moodbar-success-title' => 'Grazie!',
 2367+ 'moodbar-error-title' => "Ohhhhh! C'è scritte!",
 2368+ 'right-moodbar-view' => "Vide e esporte 'u feedbacl de MoodBar",
 2369+ 'moodbar-admin-title' => 'Feedback de MoodBar',
 2370+ 'moodbar-admin-intro' => "Sta pàgene te face vedè le feedback tune confermate cu 'a MoodBar.",
 2371+ 'moodbar-admin-empty' => 'Nisciune resultate',
 2372+ 'moodbar-header-id' => "ID d'u feedback",
 2373+ 'moodbar-header-timestamp' => 'Orarie de stambe',
 2374+ 'moodbar-header-type' => 'Tipe',
 2375+ 'moodbar-header-page' => 'Pàgene',
 2376+ 'moodbar-header-usertype' => "Tipe d'utende",
 2377+ 'moodbar-header-user' => 'Utende',
 2378+ 'moodbar-header-editmode' => 'Mode pu cangiamende',
 2379+ 'moodbar-header-bucket' => "Stoche a test 'u secchie",
 2380+ 'moodbar-header-system' => 'Tipe de sisteme',
 2381+ 'moodbar-header-locale' => 'Locale',
 2382+ 'moodbar-header-useragent' => 'Utende agente',
 2383+ 'moodbar-header-comment' => 'Commende',
 2384+ 'moodbar-header-user-editcount' => "Condatore de le cangiaminde de l'utende",
 2385+ 'moodbar-header-namespace' => 'Namespace',
 2386+ 'moodbar-header-own-talk' => "Pàgene de le 'ngazzaminde meje",
 2387+ 'moodbar-feedback-filters-username' => "Nome de l'utende",
 2388+ 'moodbar-type-happy' => 'Felice',
 2389+ 'moodbar-type-sad' => 'Triste',
 2390+ 'moodbar-type-confused' => 'Confuse',
 2391+ 'moodbar-user-anonymized' => 'Anonimate',
 2392+ 'moodbar-user-ip' => 'Indirizze IP',
 2393+ 'moodbar-user-user' => 'Utende reggistrate',
 2394+ 'moodbar-log-hide' => 'scunne "[[$1]]"',
 2395+);
 2396+
10832397 /** Russian (Русский)
 2398+ * @author Engineering
10842399 * @author Александр Сигачёв
10852400 */
10862401 $messages['ru'] = array(
@@ -1114,6 +2429,7 @@
11152430 'moodbar-success-subtitle' => 'Поделившись своим опытом, вы поможете нам улучшить $1.',
11162431 'moodbar-error-subtitle' => 'Что-то пошло не так! Пожалуйста, попробуйте отправить ваш отзыв позднее.',
11172432 'right-moodbar-view' => 'Просмотр и экспорт отзывов MoodBar',
 2433+ 'right-moodbar-admin' => 'Изменить видимость на панели отзывов',
11182434 'moodbar-admin-title' => 'Отзыв MoodBar',
11192435 'moodbar-admin-intro' => 'Эта страница позволяет просматривать отзывы, отправленные с помощью MoodBar.',
11202436 'moodbar-admin-empty' => 'Нет данных',
@@ -1132,14 +2448,105 @@
11332449 'moodbar-header-user-editcount' => 'Число правок участника',
11342450 'moodbar-header-namespace' => 'Пространство имён',
11352451 'moodbar-header-own-talk' => 'Собственная страница обсуждения',
 2452+ 'moodbar-feedback-title' => 'Панель отзывов',
 2453+ 'moodbar-feedback-filters' => 'Фильтры',
 2454+ 'moodbar-feedback-filters-type' => 'Настроение:',
 2455+ 'moodbar-feedback-filters-type-happy' => 'Радость',
 2456+ 'moodbar-feedback-filters-type-confused' => 'Замешательство',
 2457+ 'moodbar-feedback-filters-type-sad' => 'Грусть',
 2458+ 'moodbar-feedback-filters-username' => 'Имя участника',
 2459+ 'moodbar-feedback-filters-button' => 'Установка фильтров',
 2460+ 'moodbar-feedback-whatis' => 'Что это за функции?',
 2461+ 'moodbar-feedback-permalink' => 'ссылка сюда',
 2462+ 'moodbar-feedback-noresults' => 'Нет комментариев, соответствующих вашим фильтрам.',
 2463+ 'moodbar-feedback-more' => 'Ещё',
 2464+ 'moodbar-feedback-nomore' => 'Больше нет данных для отображения.',
 2465+ 'moodbar-feedback-newer' => 'Более новые',
 2466+ 'moodbar-feedback-older' => 'Более старые',
 2467+ 'moodbar-feedback-ajaxerror' => 'Произошла ошибка при получении дополнительных данных.',
 2468+ 'moodbar-user-hidden' => '(Участник скрыт)',
 2469+ 'moodbar-comment-hidden' => '(Отзыв скрыт администратором)',
 2470+ 'moodbar-feedback-show' => 'показать скрытый отзыв',
 2471+ 'moodbar-feedback-hide' => 'скрыть отзыв',
 2472+ 'moodbar-hidden-footer' => 'Скрытый отзыв $1',
 2473+ 'moodbar-feedback-restore' => 'восстановить скрытый отзыв',
 2474+ 'moodbar-action-item' => 'Пункт Обратная связь:',
 2475+ 'moodbar-hide-header' => 'Скрыть этот элемент из представления',
 2476+ 'moodbar-restore-header' => 'Восстановить видимость этого пункта',
 2477+ 'moodbar-invalid-item' => 'Системе не удалось найти правильного элемента обратной связи.',
11362478 'moodbar-type-happy' => 'Радость',
11372479 'moodbar-type-sad' => 'Грусть',
11382480 'moodbar-type-confused' => 'Замешательство',
11392481 'moodbar-user-anonymized' => 'Аноним',
11402482 'moodbar-user-ip' => 'IP-адрес',
11412483 'moodbar-user-user' => 'Зарегистрированный участник',
 2484+ 'moodbar-log-name' => 'Журнал обратной связи',
 2485+ 'moodbar-log-header' => 'Это журнал действий, связанных с обратной связью, см. список на [[Специальный: FeedbackDashboard|панели обратной связи]].',
 2486+ 'moodbar-log-hide' => 'скрыть [[$1]]',
 2487+ 'moodbar-log-restore' => 'восстановил видимость для [[$1]]',
11422488 );
11432489
 2490+/** Rusyn (Русиньскый)
 2491+ * @author Gazeb
 2492+ */
 2493+$messages['rue'] = array(
 2494+ 'moodbar-desc' => 'Доволює становленым хоснователям придати одозву з їх скусеностей з едітованя',
 2495+ 'moodbar-trigger-feedback' => 'Одозва про едітованя',
 2496+ 'moodbar-trigger-share' => 'Здїляти вашы скусености',
 2497+ 'moodbar-trigger-editing' => 'Едітованя $1...',
 2498+ 'moodbar-close' => '(заперти)',
 2499+ 'moodbar-intro-feedback' => 'Едітованя $1 ня зробило...',
 2500+ 'moodbar-intro-share' => 'Моя скусеность на $1 ня зробила...',
 2501+ 'moodbar-intro-editing' => 'Едітованя $1 ня зробило...',
 2502+ 'moodbar-type-happy-title' => 'Щастливый',
 2503+ 'moodbar-type-sad-title' => 'Смутный',
 2504+ 'moodbar-type-confused-title' => 'Ошаленый',
 2505+ 'tooltip-moodbar-what' => 'Дізнайте ся веце про тоту функцію',
 2506+ 'moodbar-what-label' => 'Што є тото?',
 2507+ 'moodbar-what-content' => 'Тота функція є становлена про поміч комунітї порозуміти скусености людей, котры едітують сайт.
 2508+Про веце інформацій навщівте $1.',
 2509+ 'moodbar-what-link' => 'наступну сторінку',
 2510+ 'moodbar-privacy' => 'Одосланём сьте згодны з публічностёв дат під $1.',
 2511+ 'moodbar-privacy-link' => 'условіях',
 2512+ 'moodbar-disable-link' => 'Я не мам інтерес. Прошу выпнийте тоту функцію.',
 2513+ 'moodbar-form-title' => 'Зато же...',
 2514+ 'moodbar-form-note' => 'не веце 140 сімболів.',
 2515+ 'moodbar-form-note-dynamic' => '$1 сімболів зістало',
 2516+ 'moodbar-form-submit' => 'Подїлити ся одозвов',
 2517+ 'moodbar-form-policy-text' => 'Посылаючі, $1',
 2518+ 'moodbar-form-policy-label' => 'нашы правила',
 2519+ 'moodbar-loading-title' => 'Здїляня...',
 2520+ 'moodbar-success-title' => 'Дякуєме!',
 2521+ 'moodbar-error-title' => 'Оёёй!',
 2522+ 'moodbar-success-subtitle' => 'Здїляня вашых скусеностей з едітованём на поможе вылїпшыти $1.',
 2523+ 'moodbar-error-subtitle' => 'Штось не добрї пішло! Просиме, спробуйте здїляти одозву знову пізнїше.',
 2524+ 'right-moodbar-view' => 'Нагляд і експорт одозвы про MoodBar',
 2525+ 'moodbar-admin-title' => 'Одозвы про MoodBar',
 2526+ 'moodbar-admin-intro' => 'Тота сторінка доволює відїти одозвы посланы за помочі MoodBar.',
 2527+ 'moodbar-admin-empty' => 'Жадны резултаты',
 2528+ 'moodbar-header-id' => 'Ідентіфікатор одозвы',
 2529+ 'moodbar-header-timestamp' => 'Часова значка',
 2530+ 'moodbar-header-type' => 'Тіп',
 2531+ 'moodbar-header-page' => 'Сторінка',
 2532+ 'moodbar-header-usertype' => 'Тіп хоснователя',
 2533+ 'moodbar-header-user' => 'Хоснователь',
 2534+ 'moodbar-header-editmode' => 'Режім едітованя',
 2535+ 'moodbar-header-bucket' => 'Область перевіркы',
 2536+ 'moodbar-header-system' => 'Тіп сістемы',
 2537+ 'moodbar-header-locale' => 'Локалны',
 2538+ 'moodbar-header-useragent' => 'Кліентьскый проґрам',
 2539+ 'moodbar-header-comment' => 'Коментарї',
 2540+ 'moodbar-header-user-editcount' => 'Чісло едітовань хоснователя',
 2541+ 'moodbar-header-namespace' => 'Простор назв',
 2542+ 'moodbar-header-own-talk' => 'Властна сторінка діскузії',
 2543+ 'moodbar-type-happy' => 'Щастливый',
 2544+ 'moodbar-type-sad' => 'Смутный',
 2545+ 'moodbar-type-confused' => 'Ошаленый',
 2546+ 'moodbar-user-anonymized' => 'Анонім',
 2547+ 'moodbar-user-ip' => 'IP адреса',
 2548+ 'moodbar-user-user' => 'Реґістрованый хоснователь',
 2549+);
 2550+
11442551 /** Slovenian (Slovenščina)
11452552 * @author Dbc334
11462553 */
@@ -1175,6 +2582,7 @@
11762583 'moodbar-success-subtitle' => 'Deljenje vaše urejevalne izkušnje nam pomaga izboljšati $1.',
11772584 'moodbar-error-subtitle' => 'Nekaj je šlo narobe! Prosimo, poskusite znova deliti svojo povratno informacijo pozneje.',
11782585 'right-moodbar-view' => 'Ogled in izvoz povratnih informacij MoodBar',
 2586+ 'right-moodbar-admin' => 'Spreminjanje vidnosti na pregledni plošči povratnih informacij',
11792587 'moodbar-admin-title' => 'Povratne informacije MoodBar',
11802588 'moodbar-admin-intro' => 'Ta stran vam omogoča ogled povratnih informacij, poslanih z MoodBar.',
11812589 'moodbar-admin-empty' => 'Ni zadetkov',
@@ -1193,16 +2601,47 @@
11942602 'moodbar-header-user-editcount' => 'Števec urejanj uporabnika',
11952603 'moodbar-header-namespace' => 'Imenski prostor',
11962604 'moodbar-header-own-talk' => 'Lastna pogovorna stran',
 2605+ 'moodbar-feedback-title' => 'Pregledna plošča povratnih informacij',
 2606+ 'moodbar-feedback-filters' => 'Filtri',
 2607+ 'moodbar-feedback-filters-type' => 'Razpoloženje:',
 2608+ 'moodbar-feedback-filters-type-happy' => 'Veselo',
 2609+ 'moodbar-feedback-filters-type-confused' => 'Zmedeno',
 2610+ 'moodbar-feedback-filters-type-sad' => 'Žalostno',
 2611+ 'moodbar-feedback-filters-username' => 'Uporabniško ime',
 2612+ 'moodbar-feedback-filters-button' => 'Nastavi filtre',
 2613+ 'moodbar-feedback-whatis' => 'Kaj je ta funkcija?',
 2614+ 'moodbar-feedback-permalink' => 'povezava do sem',
 2615+ 'moodbar-feedback-noresults' => 'Vašemu filtru ne ustrezajo nobene pripombe.',
 2616+ 'moodbar-feedback-more' => 'Več',
 2617+ 'moodbar-feedback-nomore' => 'Ni več rezultatov za prikaz.',
 2618+ 'moodbar-feedback-newer' => 'Novejše',
 2619+ 'moodbar-feedback-older' => 'Starejše',
 2620+ 'moodbar-feedback-ajaxerror' => 'Med pridobivanjem več rezultatov je prišlo do napake.',
 2621+ 'moodbar-user-hidden' => '(Uporabnik je skrit)',
 2622+ 'moodbar-comment-hidden' => '(Povratno informacijo je skril ukrep administratorja)',
 2623+ 'moodbar-feedback-show' => 'prikaži skrito povratno informacijo',
 2624+ 'moodbar-feedback-hide' => 'skrij povratno informacijo',
 2625+ 'moodbar-hidden-footer' => 'Skrite povratne informacije $1',
 2626+ 'moodbar-feedback-restore' => 'obnovi skrito povratno informacijo',
 2627+ 'moodbar-action-item' => 'Predmet povratne informacije:',
 2628+ 'moodbar-hide-header' => 'Skrij ta predmet iz pogleda',
 2629+ 'moodbar-restore-header' => 'Obnovi vidljivost tega predmeta',
 2630+ 'moodbar-invalid-item' => 'Sistem ni mogel najti ustreznega predmeta povratne informacije.',
11972631 'moodbar-type-happy' => 'Veselega',
11982632 'moodbar-type-sad' => 'Žalostnega',
11992633 'moodbar-type-confused' => 'Zmedenega',
12002634 'moodbar-user-anonymized' => 'Brezimen',
12012635 'moodbar-user-ip' => 'IP-naslov',
12022636 'moodbar-user-user' => 'Registriran uporabnik',
 2637+ 'moodbar-log-name' => 'Dnevnik povratnih informacij',
 2638+ 'moodbar-log-header' => 'To je dnevnik dejanj, izvedenih na predmetih povratnih informacij, navedenih na [[Special:FeedbackDashboard|pregledni plošči povratnih informacij]].',
 2639+ 'moodbar-log-hide' => 'je skril(-a) [[$1]]',
 2640+ 'moodbar-log-restore' => 'je obnovil(-a) vidljivost [[$1]]',
12032641 );
12042642
12052643 /** Swedish (Svenska)
12062644 * @author Ainali
 2645+ * @author Diupwijk
12072646 * @author Lokal Profil
12082647 */
12092648 $messages['sv'] = array(
@@ -1255,6 +2694,9 @@
12562695 'moodbar-header-user-editcount' => 'Användarens antal redigeringar',
12572696 'moodbar-header-namespace' => 'Namnrymd',
12582697 'moodbar-header-own-talk' => 'Egen diskussionssida',
 2698+ 'moodbar-feedback-filters-username' => 'Användarnamn',
 2699+ 'moodbar-feedback-newer' => 'Nyare',
 2700+ 'moodbar-feedback-older' => 'Äldre',
12592701 'moodbar-type-happy' => 'Glad',
12602702 'moodbar-type-sad' => 'Ledsen',
12612703 'moodbar-type-confused' => 'Förvirrad',
@@ -1263,6 +2705,79 @@
12642706 'moodbar-user-user' => 'Registrerad användare',
12652707 );
12662708
 2709+/** Telugu (తెలుగు)
 2710+ * @author Veeven
 2711+ */
 2712+$messages['te'] = array(
 2713+ 'moodbar-what-label' => 'ఇది ఏమిటి?',
 2714+ 'moodbar-success-title' => 'కృతజ్ఞతలు!',
 2715+ 'moodbar-header-type' => 'రకం',
 2716+ 'moodbar-header-page' => 'పుట',
 2717+ 'moodbar-header-usertype' => 'వాడుకరి రకం',
 2718+ 'moodbar-header-user' => 'వాడుకరి',
 2719+);
 2720+
 2721+/** Ukrainian (Українська)
 2722+ * @author Dim Grits
 2723+ */
 2724+$messages['uk'] = array(
 2725+ 'moodbar-desc' => 'Дозволяє певним користувачам розміщувати відгуки про власний досвід редагування',
 2726+ 'moodbar-trigger-feedback' => 'Відгук про редагування',
 2727+ 'moodbar-trigger-share' => 'Поділіться власним досвідом',
 2728+ 'moodbar-trigger-editing' => 'Редагування $1...',
 2729+ 'moodbar-close' => '(закрити)',
 2730+ 'moodbar-intro-feedback' => 'Редагування $1 зробило мене...',
 2731+ 'moodbar-intro-share' => 'Мій досвід на $1 зробив мене...',
 2732+ 'moodbar-intro-editing' => 'Редагування $1 зробило мене...',
 2733+ 'moodbar-type-happy-title' => 'Щасливий',
 2734+ 'moodbar-type-sad-title' => 'Сумний',
 2735+ 'moodbar-type-confused-title' => 'Сконфужений',
 2736+ 'tooltip-moodbar-what' => 'Дізнайтеся більше про цю функцію',
 2737+ 'moodbar-what-label' => 'Що це?',
 2738+ 'moodbar-what-content' => 'Ця функція призначена задля усвідомлення співтовариством досвіду людей, що редагують на сайті.
 2739+Для отримання додаткової інформації, будь ласка, відвідайте $1.',
 2740+ 'moodbar-what-link' => 'наступну сторінку',
 2741+ 'moodbar-privacy' => 'Відправляючи, ви погоджуєтесь з публічністю даних на $1.',
 2742+ 'moodbar-privacy-link' => 'умовах',
 2743+ 'moodbar-disable-link' => 'Я не зацікавлений. Будь ласка, вимкніть цю функцію.',
 2744+ 'moodbar-form-title' => 'Тому що...',
 2745+ 'moodbar-form-note' => 'не більше 140 символів.',
 2746+ 'moodbar-form-note-dynamic' => '$1 символів залишилося',
 2747+ 'moodbar-form-submit' => 'Поділитись власними думками',
 2748+ 'moodbar-form-policy-text' => 'Надсилаючи, $1',
 2749+ 'moodbar-form-policy-label' => 'Наші правила',
 2750+ 'moodbar-loading-title' => 'Спільне використання...',
 2751+ 'moodbar-success-title' => 'Дякуємо!',
 2752+ 'moodbar-error-title' => 'Йой!',
 2753+ 'moodbar-success-subtitle' => 'Ваш досвід допоможе нам покращити $1.',
 2754+ 'moodbar-error-subtitle' => 'Щось пішло не так! Будь ласка, спробуйте відправити відгук пізніше.',
 2755+ 'right-moodbar-view' => 'Перегляд і експорт відгуків MoodBar',
 2756+ 'moodbar-admin-title' => 'Відгуки MoodBar',
 2757+ 'moodbar-admin-intro' => 'Ця сторінка дозволяє переглянути відгуки, надіслані за допомогою MoodBar.',
 2758+ 'moodbar-admin-empty' => 'Результатів не знайдено',
 2759+ 'moodbar-header-id' => "Ідентифікатор зворотнього зв'язку",
 2760+ 'moodbar-header-timestamp' => 'Дата / час',
 2761+ 'moodbar-header-type' => 'Тип',
 2762+ 'moodbar-header-page' => 'Сторінка',
 2763+ 'moodbar-header-usertype' => 'Тип користувача',
 2764+ 'moodbar-header-user' => 'Користувач',
 2765+ 'moodbar-header-editmode' => 'Режим редагування',
 2766+ 'moodbar-header-bucket' => 'Область перевірки',
 2767+ 'moodbar-header-system' => 'Тип системи',
 2768+ 'moodbar-header-locale' => 'Локальні',
 2769+ 'moodbar-header-useragent' => 'Клієнтська програма',
 2770+ 'moodbar-header-comment' => 'Коментарі',
 2771+ 'moodbar-header-user-editcount' => 'Кількість правок користувача',
 2772+ 'moodbar-header-namespace' => 'Простір імен',
 2773+ 'moodbar-header-own-talk' => 'Власна сторінка обговорення',
 2774+ 'moodbar-type-happy' => 'Щасливий',
 2775+ 'moodbar-type-sad' => 'Сумний',
 2776+ 'moodbar-type-confused' => 'Сконфужений',
 2777+ 'moodbar-user-anonymized' => 'Анонім',
 2778+ 'moodbar-user-ip' => 'IP-адреса',
 2779+ 'moodbar-user-user' => 'Зареєстрований користувач',
 2780+);
 2781+
12672782 /** Vietnamese (Tiếng Việt)
12682783 * @author Minh Nguyen
12692784 */
@@ -1298,6 +2813,7 @@
12992814 'moodbar-success-subtitle' => 'Việc chia sẻ những ấn tượng về quá trình sửa đổi giúp chúng tôi cải thiện $1.',
13002815 'moodbar-error-subtitle' => 'Oái, đã bị trục trặc! Xin vui lòng chia sẻ phản hồi của bạn lát nữa.',
13012816 'right-moodbar-view' => 'Xem và xuất phản hồi MoodBar',
 2817+ 'right-moodbar-admin' => 'Thay đổi mức hiển thị dùng bảng điều khiển phản hồi',
13022818 'moodbar-admin-title' => 'Phản hồi về MoodBar',
13032819 'moodbar-admin-intro' => 'Trang này cho phép đọc các phản hồi được gửi dùng MoodBar.',
13042820 'moodbar-admin-empty' => 'Không có kết quả',
@@ -1316,12 +2832,42 @@
13172833 'moodbar-header-user-editcount' => 'Số lần sửa đổi của người dùng',
13182834 'moodbar-header-namespace' => 'Không gian tên',
13192835 'moodbar-header-own-talk' => 'Trang thảo luận của chính mình',
 2836+ 'moodbar-feedback-title' => 'Bảng điều khiển phản hồi',
 2837+ 'moodbar-feedback-filters' => 'Bộ lọc',
 2838+ 'moodbar-feedback-filters-type' => 'Tâm trạng:',
 2839+ 'moodbar-feedback-filters-type-happy' => 'Hài lòng',
 2840+ 'moodbar-feedback-filters-type-confused' => 'Bối rối',
 2841+ 'moodbar-feedback-filters-type-sad' => 'Bực mình',
 2842+ 'moodbar-feedback-filters-username' => 'Tên người dùng',
 2843+ 'moodbar-feedback-filters-button' => 'Áp dụng bộ lọc',
 2844+ 'moodbar-feedback-whatis' => 'Tính năng này làm gì?',
 2845+ 'moodbar-feedback-permalink' => 'liên kết đến đây',
 2846+ 'moodbar-feedback-noresults' => 'Không có bình luận nào khớp với các bộ lọc của bạn.',
 2847+ 'moodbar-feedback-more' => 'Thêm',
 2848+ 'moodbar-feedback-nomore' => 'Không có thêm kết quả để hiển thị.',
 2849+ 'moodbar-feedback-newer' => 'Mới hơn',
 2850+ 'moodbar-feedback-older' => 'Cũ hơn',
 2851+ 'moodbar-feedback-ajaxerror' => 'Lỗi đã xảy ra khi lấy thêm kết quả.',
 2852+ 'moodbar-user-hidden' => '(Người dùng được ẩn)',
 2853+ 'moodbar-comment-hidden' => '(Phản hồi được bảo quản viên ẩn)',
 2854+ 'moodbar-feedback-show' => 'hiện phản hồi đã ẩn',
 2855+ 'moodbar-feedback-hide' => 'ẩn phản hồi',
 2856+ 'moodbar-hidden-footer' => 'Phản hồi ẩn $1',
 2857+ 'moodbar-feedback-restore' => 'phục hồi phản hồi đã ẩn',
 2858+ 'moodbar-action-item' => 'Khoản mục phản hồi:',
 2859+ 'moodbar-hide-header' => 'Ẩn khoản mục này khỏi danh sách',
 2860+ 'moodbar-restore-header' => 'Phục hồi mức hiển thị của khoản mục này',
 2861+ 'moodbar-invalid-item' => 'Không tìm thấy khoản mục phản hồi đúng.',
13202862 'moodbar-type-happy' => 'Hài lòng',
13212863 'moodbar-type-sad' => 'Bực mình',
13222864 'moodbar-type-confused' => 'Bối rối',
13232865 'moodbar-user-anonymized' => 'Ẩn danh',
13242866 'moodbar-user-ip' => 'Địa chỉ IP',
13252867 'moodbar-user-user' => 'Người dùng đăng ký',
 2868+ 'moodbar-log-name' => 'Nhật trình phản hồi',
 2869+ 'moodbar-log-header' => 'Nhật trình này liệt kê các tác vụ được thực hiện do các khoản mục phản hồi trên [[Special:FeedbackDashboard|bảng điều khiển phản hồi]].',
 2870+ 'moodbar-log-hide' => 'đã ẩn [[$1]]',
 2871+ 'moodbar-log-restore' => 'đã phục hồi mức hiển thị của [[$1]]',
13262872 );
13272873
13282874 /** Yiddish (ייִדיש)
@@ -1334,6 +2880,7 @@
13352881 );
13362882
13372883 /** Simplified Chinese (‪中文(简体)‬)
 2884+ * @author Bencmq
13382885 * @author PhiLiP
13392886 */
13402887 $messages['zh-hans'] = array(
@@ -1385,6 +2932,22 @@
13862933 'moodbar-header-user-editcount' => '用户编辑次数',
13872934 'moodbar-header-namespace' => '名字空间',
13882935 'moodbar-header-own-talk' => '自己的讨论页',
 2936+ 'moodbar-feedback-title' => '反馈面板',
 2937+ 'moodbar-feedback-filters' => '过滤器',
 2938+ 'moodbar-feedback-filters-type' => '类型:',
 2939+ 'moodbar-feedback-filters-type-happy' => '表扬',
 2940+ 'moodbar-feedback-filters-type-confused' => '困惑',
 2941+ 'moodbar-feedback-filters-type-sad' => '问题',
 2942+ 'moodbar-feedback-filters-username' => '用户名',
 2943+ 'moodbar-feedback-filters-button' => '设置过滤器',
 2944+ 'moodbar-feedback-whatis' => '这是什么功能?',
 2945+ 'moodbar-feedback-permalink' => '本页链接',
 2946+ 'moodbar-feedback-noresults' => '没有符合您过滤器设置的评论。',
 2947+ 'moodbar-feedback-more' => '更多',
 2948+ 'moodbar-feedback-nomore' => '没有更多的结果。',
 2949+ 'moodbar-feedback-newer' => '较新的',
 2950+ 'moodbar-feedback-older' => '更早的',
 2951+ 'moodbar-feedback-ajaxerror' => '获取更多的结果时出错。',
13892952 'moodbar-type-happy' => '开心',
13902953 'moodbar-type-sad' => '不快',
13912954 'moodbar-type-confused' => '困惑',
@@ -1393,3 +2956,63 @@
13942957 'moodbar-user-user' => '注册用户',
13952958 );
13962959
 2960+/** Traditional Chinese (‪中文(繁體)‬)
 2961+ * @author Anakmalaysia
 2962+ */
 2963+$messages['zh-hant'] = array(
 2964+ 'moodbar-desc' => '允許指定的用戶提供編輯體驗反饋',
 2965+ 'moodbar-trigger-feedback' => '有關編輯的反饋',
 2966+ 'moodbar-trigger-share' => '分享你的經驗',
 2967+ 'moodbar-trigger-editing' => '編輯 $1……',
 2968+ 'moodbar-close' => '(關閉)',
 2969+ 'moodbar-intro-feedback' => '編輯$1使我……',
 2970+ 'moodbar-intro-share' => '我在$1上的經歷使我……',
 2971+ 'moodbar-intro-editing' => '編輯$1使我……',
 2972+ 'moodbar-type-happy-title' => '開心',
 2973+ 'moodbar-type-sad-title' => '不快',
 2974+ 'moodbar-type-confused-title' => '困惑',
 2975+ 'tooltip-moodbar-what' => '了解有關此功能的詳細信息',
 2976+ 'moodbar-what-label' => '這是什麼?',
 2977+ 'moodbar-what-content' => '此功能可以幫助社區了解人們在編輯此網站時的體驗。詳細信息請訪問$1。',
 2978+ 'moodbar-what-link' => '功能頁面',
 2979+ 'moodbar-privacy' => '提交後,您將同意在$1下的透明度。',
 2980+ 'moodbar-privacy-link' => '條款',
 2981+ 'moodbar-disable-link' => '我不感興趣,請禁用此功能。',
 2982+ 'moodbar-form-title' => '因為……',
 2983+ 'moodbar-form-note' => '最多140字',
 2984+ 'moodbar-form-note-dynamic' => '剩餘$1字',
 2985+ 'moodbar-form-submit' => '分享反饋',
 2986+ 'moodbar-form-policy-text' => '提交後,$1',
 2987+ 'moodbar-form-policy-label' => '我們的政策',
 2988+ 'moodbar-loading-title' => '分享中……',
 2989+ 'moodbar-success-title' => '謝謝!',
 2990+ 'moodbar-error-title' => '糟糕!',
 2991+ 'moodbar-success-subtitle' => '分享您的編輯體驗,幫助我們改善$1。',
 2992+ 'moodbar-error-subtitle' => '出錯了!請重試分享您的反饋意見。',
 2993+ 'right-moodbar-view' => '查看和導出MoodBar反饋',
 2994+ 'moodbar-admin-title' => 'MoodBar反饋',
 2995+ 'moodbar-admin-intro' => '此頁面允許你查看通過MoodBar提交的反饋。',
 2996+ 'moodbar-admin-empty' => '沒有結果',
 2997+ 'moodbar-header-id' => '反饋ID',
 2998+ 'moodbar-header-timestamp' => '時間戳',
 2999+ 'moodbar-header-type' => '類型',
 3000+ 'moodbar-header-page' => '頁面',
 3001+ 'moodbar-header-usertype' => '用戶類型',
 3002+ 'moodbar-header-user' => '用戶',
 3003+ 'moodbar-header-editmode' => '編輯模式',
 3004+ 'moodbar-header-bucket' => '分桶測試',
 3005+ 'moodbar-header-system' => '系統類型',
 3006+ 'moodbar-header-locale' => '地區',
 3007+ 'moodbar-header-useragent' => '用戶客戶端',
 3008+ 'moodbar-header-comment' => '評論',
 3009+ 'moodbar-header-user-editcount' => '用戶編輯次數',
 3010+ 'moodbar-header-namespace' => '名字空間',
 3011+ 'moodbar-header-own-talk' => '自己的討論頁',
 3012+ 'moodbar-type-happy' => '開心',
 3013+ 'moodbar-type-sad' => '不快',
 3014+ 'moodbar-type-confused' => '困惑',
 3015+ 'moodbar-user-anonymized' => '匿名',
 3016+ 'moodbar-user-ip' => 'IP位址',
 3017+ 'moodbar-user-user' => '註冊用戶',
 3018+);
 3019+
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.init.js
@@ -18,7 +18,7 @@
1919 var browserDisabled = false;
2020 var clientInfo = $.client.profile();
2121
22 - if ( clientInfo.name == 'msie' && clientInfo.versionNumber < 9 ) {
 22+ if ( clientInfo.name == 'msie' && clientInfo.versionNumber < 7 ) {
2323 browserDisabled = true;
2424 }
2525
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.core.css
@@ -40,17 +40,23 @@
4141 }
4242
4343 .mw-moodBar-types {
44 - overflow: hidden; /* clear */
45 - margin: 0 30px;
 44+ margin: 0 auto;
 45+ width: auto;
 46+ display: inline-block;
 47+/* display: inline;*/
4648 }
4749
4850 .mw-moodBar-type {
49 - float: left;
5051 min-width: 42px;
5152 margin: 15px;
5253 padding: 42px 0 5px 0;
5354 /* @embed */
5455 background: transparent url(images/type-unknown.png) center top no-repeat;
 56+ display: inline-block;
 57+ /*display: inline;*/
 58+}
 59+
 60+.mw-moodBar-types-container {
5561 text-align: center;
5662 }
5763
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/ext.moodBar.core.js
@@ -16,8 +16,10 @@
1717 <div class="mw-moodBar-overlayContent"></div>\
1818 </div></div>',
1919 userinput: '\
20 - <div class="mw-moodBar-overlayTitle"><html:msg key="INTROTITLE" /></div>\
21 - <div class="mw-moodBar-types"></div>\
 20+ <div class="mw-moodBar-overlayTitle"><span><html:msg key="INTROTITLE" /></span></div>\
 21+ <div class="mw-moodBar-types-container">\
 22+ <div class="mw-moodBar-types"></div>\
 23+ </div>\
2224 <div class="mw-moodBar-form">\
2325 <div class="mw-moodBar-formTitle">\
2426 <span class="mw-moodBar-formNote"><html:msg key="moodbar-form-note" /></span>\
@@ -37,9 +39,9 @@
3840 <div class="mw-moodBar-overlayWhatContent"></div>\
3941 </span>',
4042 type: '\
41 - <div class="mw-moodBar-type mw-moodBar-type-$1" rel="$1">\
 43+ <span class="mw-moodBar-type mw-moodBar-type-$1" rel="$1">\
4244 <span class="mw-moodBar-typeTitle"><html:msg key="moodbar-type-$1-title" /></span>\
43 - </div>',
 45+ </span>',
4446 loading: '\
4547 <div class="mw-moodBar-state mw-moodBar-state-loading">\
4648 <div class="mw-moodBar-state-title"><html:msg key="moodbar-loading-title" /></div>\
@@ -227,13 +229,26 @@
228230 .end();
229231 mb.swapContent( mb.tpl.userinput );
230232
231 - mb.ui.overlay
232 - // Inject overlay
233 - .appendTo( 'body' )
234 - // Fix the width after the icons and titles are localized and inserted
235 - .width( function( i, width ) {
236 - return width + 10;
237 - } );
 233+ mb.ui.overlay.appendTo( 'body' );
 234+ mb.ui.overlay.show();
 235+
 236+ // Get the width of the types element, and add 100px
 237+ // 52px in known margins, 58px seems to be a necessary
 238+ // fudge factor, plus 30px so the close button doesn't collide
 239+ // with the rounded corners
 240+ var newWidth = mb.ui.overlay
 241+ .find('.mw-moodBar-types')
 242+ .width() + 140;
 243+ var titleWidth = mb.ui.overlay
 244+ .find('.mw-moodBar-overlayTitle span')
 245+ .width() + 100;
 246+
 247+ if ( newWidth < titleWidth ) {
 248+ newWidth = titleWidth;
 249+ }
 250+
 251+ mb.ui.overlay.width(newWidth);
 252+ mb.ui.overlay.hide();
238253
239254 // Bind triger
240255 mb.ui.trigger.click( mb.event.trigger );
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar/images/ajax-spinner.gif
___________________________________________________________________
Modified: svn:mime-type
241256 - application/octet-stream
242257 + image/gif
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.css
@@ -0,0 +1,240 @@
 2+/* Filters */
 3+
 4+#fbd-filters {
 5+ position: absolute;
 6+ width: 12em;
 7+}
 8+
 9+#fbd-filters form {
 10+ margin: 0;
 11+ padding: 1em;
 12+ background-color: #e8f2f8;
 13+}
 14+
 15+#fbd-about {
 16+ display: inline-block;
 17+ font-size: 0.8em;
 18+ margin-top: 0.5em;
 19+}
 20+
 21+#fbd-filters-title {
 22+ font-size: 1.2em;
 23+ margin: 0;
 24+ padding: 0;
 25+ border-bottom: solid 1px black;
 26+}
 27+
 28+#fbd-filters-types {
 29+ margin: 0.5em 0 0 0;
 30+ padding: 0;
 31+ border: none;
 32+}
 33+
 34+.fbd-filters-label {
 35+ display: block;
 36+ margin: 0.5em 0 0 0;
 37+ padding: 0;
 38+ font-weight: bold;
 39+}
 40+
 41+.fbd-filters-input {
 42+ margin: 0.25em 0 0.25em 0.75em;
 43+ width: 10em;
 44+}
 45+
 46+#fbd-filters-types ul {
 47+ margin: 0;
 48+ padding: 0;
 49+ list-style: none;
 50+}
 51+
 52+#fbd-filters-types li {
 53+ margin: 0 0 0 0.75em;
 54+ padding: 0;
 55+ list-style: none;
 56+}
 57+
 58+#fbd-filters-types label {
 59+ padding-left: 18px;
 60+ background-position: left 45%;
 61+ background-repeat: no-repeat;
 62+}
 63+
 64+#fbd-filters-type-praise-label {
 65+ /* @embed */
 66+ background-image: url(images/filter-praise.png);
 67+}
 68+
 69+#fbd-filters-type-confusion-label {
 70+ /* @embed */
 71+ background-image: url(images/filter-confusion.png);
 72+}
 73+
 74+#fbd-filters-type-issues-label {
 75+ /* @embed */
 76+ background-image: url(images/filter-issues.png);
 77+}
 78+
 79+#fbd-filters-set {
 80+ margin: 1em 0 0 0;
 81+}
 82+
 83+/* List */
 84+
 85+#fbd-list {
 86+ margin: 0 0 0 13em;
 87+ padding: 0;
 88+ min-height: 20em;
 89+ list-style: none;
 90+}
 91+
 92+.client-nojs #fbd-list-more {
 93+ display: none;
 94+}
 95+
 96+.client-js #fbd-list-newer-older {
 97+ display: none;
 98+}
 99+
 100+#fbd-list-more, #fbd-list-newer-older {
 101+ margin: 1em 0 0 13em;
 102+ padding: 0.5em;
 103+ background-color: #e8f2f8;
 104+}
 105+
 106+#fbd-list-more a, #fbd-list-more span,
 107+#fbd-list-newer a, #fbd-list-older a,
 108+#fbd-list-newer .fbd-page-disabled, #fbd-list-older .fbd-page-disabled {
 109+ font-size: 1.4em;
 110+ background-repeat: no-repeat;
 111+}
 112+
 113+#fbd-list-more {
 114+ text-align: center;
 115+}
 116+
 117+#fbd-list-more a {
 118+ /* @embed */
 119+ background-image: url(images/page-more.png);
 120+ background-position: left center;
 121+ padding-left: 20px;
 122+}
 123+
 124+#fbd-list-newer {
 125+ float: left;
 126+}
 127+
 128+#fbd-list-newer a, #fbd-list-newer .fbd-page-disabled {
 129+ background-position: left center;
 130+ padding-left: 20px;
 131+}
 132+
 133+#fbd-list-more.mw-ajax-loader {
 134+ /* Undo the repositioning done in shared.css. Padding is set to 0.5em above. */
 135+ position: static;
 136+}
 137+
 138+/* The images here are named -ltr instead of -left and -rtl instead of -right
 139+ * because ResourceLoader flips -ltr and -rtl in URLs, but not -left and -right
 140+ */
 141+#fbd-list-newer a {
 142+ /* @embed */
 143+ background-image: url(images/page-active-ltr.png);
 144+}
 145+
 146+#fbd-list-newer .fbd-page-disabled {
 147+ /* @embed */
 148+ background-image: url(images/page-disabled-ltr.png);
 149+}
 150+
 151+#fbd-list-older {
 152+ float: right;
 153+}
 154+
 155+#fbd-list-older a, #fbd-list-older .fbd-page-disabled {
 156+ background-position: right center;
 157+ padding-right: 20px;
 158+}
 159+
 160+#fbd-list-older a {
 161+ /* @embed */
 162+ background-image: url(images/page-active-rtl.png);
 163+}
 164+
 165+#fbd-list-older .fbd-page-disabled {
 166+ /* @embed */
 167+ background-image: url(images/page-disabled-rtl.png);
 168+}
 169+
 170+.fbd-page-disabled {
 171+ color: #c6c6c6;
 172+}
 173+
 174+.fbd-item {
 175+ border-bottom: solid 1px silver;
 176+ position: relative;
 177+}
 178+
 179+.fbd-item-emoticon {
 180+ float: left;
 181+ margin-right: 0.5em;
 182+ width: 75px;
 183+ height: 90px;
 184+ background-position: center top;
 185+ background-repeat: no-repeat;
 186+}
 187+
 188+.fbd-item-emoticon-label {
 189+ display: block;
 190+ margin-top: 60px;
 191+ text-align: center;
 192+}
 193+
 194+.fbd-item-emoticon-happy {
 195+ /* @embed */
 196+ background-image: url(images/emoticon-happy.png);
 197+}
 198+.fbd-item-emoticon-confused {
 199+ /* @embed */
 200+ background-image: url(images/emoticon-confused.png);
 201+}
 202+.fbd-item-emoticon-sad {
 203+ /* @embed */
 204+ background-image: url(images/emoticon-sad.png);
 205+}
 206+
 207+.fbd-item-userName {
 208+ font-size: 1.2em;
 209+ margin: 0;
 210+ padding: 0;
 211+}
 212+
 213+.fbd-item-userLinks {
 214+ font-size: 0.5em;
 215+}
 216+
 217+.fbd-item-time {
 218+ font-size: 1.2em;
 219+ float: right;
 220+}
 221+
 222+.fbd-item-message {
 223+ font-size: 1.4em;
 224+ margin-top: 0.25em;
 225+}
 226+
 227+.fbd-item-permalink,
 228+.fbd-item-show,
 229+.fbd-item-hide {
 230+ float: right;
 231+ font-size: 0.8em;
 232+}
 233+
 234+.fbd-item-restore {
 235+ font-size: 0.8em;
 236+ color: silver;
 237+}
 238+
 239+.fbd-hidden {
 240+ color: silver;
 241+}
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.css
___________________________________________________________________
Added: svn:eol-style
1242 + native
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.js
@@ -0,0 +1,360 @@
 2+/**
 3+ * AJAX code for Special:MoodBarFeedback
 4+ */
 5+jQuery( function( $ ) {
 6+ /**
 7+ * Saved form state
 8+ */
 9+ var formState = { types: [], username: '' };
 10+
 11+ /**
 12+ * Save the current form state to formState
 13+ */
 14+ function saveFormState() {
 15+ formState.types = getSelectedTypes();
 16+ formState.username = $( '#fbd-filters-username' ).val();
 17+ }
 18+
 19+ /**
 20+ * Figure out which comment type filters have been selected.
 21+ * @return array of comment types
 22+ */
 23+ function getSelectedTypes() {
 24+ var types = [];
 25+ $( '#fbd-filters-type-praise, #fbd-filters-type-confusion, #fbd-filters-type-issues' ).each( function() {
 26+ if ( $(this).prop( 'checked' ) ) {
 27+ types.push( $(this).val() );
 28+ }
 29+ } );
 30+ return types;
 31+ }
 32+
 33+ /**
 34+ * Set the moodbar-feedback-types and moodbar-feedback-username cookies based on formState.
 35+ * This function uses the form state saved in formState, so you may want to call saveFormState() first.
 36+ */
 37+ function setCookies() {
 38+ $.cookie( 'moodbar-feedback-types', formState.types.join( '|' ), { 'path': '/', 'expires': 7 } );
 39+ $.cookie( 'moodbar-feedback-username', formState.username, { 'path': '/', 'expires': 7 } );
 40+ }
 41+
 42+ /**
 43+ * Load the form state from the moodbar-feedback-types and moodbar-feedback-username cookies.
 44+ * This assumes the form is currently blank.
 45+ * @return bool True if the form is no longer blank (i.e. at least one value was changed), false otherwise
 46+ */
 47+ function loadFromCookies() {
 48+ var cookieTypes = $.cookie( 'moodbar-feedback-types' ),
 49+ $username = $( '#fbd-filters-username' ),
 50+ changed = false;
 51+ if ( $username.val() == '' ) {
 52+ var cookieUsername = $.cookie( 'moodbar-feedback-username' );
 53+ if ( cookieUsername != '' && cookieUsername !== null ) {
 54+ $username.val( cookieUsername );
 55+ changed = true;
 56+ }
 57+ }
 58+
 59+ if ( cookieTypes ) {
 60+ // Because calling .indexOf() on an array doesn't work in all browsers,
 61+ // we'll use cookieTypes.indexOf( '|valueWereLookingFor' ) . In order for
 62+ // that to work, we need to prepend a pipe first.
 63+ cookieTypes = '|' + cookieTypes;
 64+ $( '#fbd-filters-type-praise, #fbd-filters-type-confusion, #fbd-filters-type-issues' ).each( function() {
 65+ if ( !$(this).prop( 'checked' ) && cookieTypes.indexOf( '|' + $(this).val() ) != -1 ) {
 66+ $(this).prop( 'checked', true );
 67+ changed = true;
 68+ }
 69+ } );
 70+ }
 71+ return changed;
 72+ }
 73+
 74+ /**
 75+ * Show a message in the box that normally contains the More link.
 76+ * This will hide the more link, remove any existing <span>s,
 77+ * and add a <span> with the supplied text.
 78+ * @param text string Message text
 79+ */
 80+ function showMessage( text ) {
 81+ $( '#fbd-list-more' )
 82+ .children( 'a' )
 83+ .hide()
 84+ .end()
 85+ .children( 'span' )
 86+ .remove() // Remove any previous messages
 87+ .end()
 88+ .append( $( '<span>' ).text( text ) );
 89+ }
 90+
 91+ /**
 92+ * Load a set of 20 comments into the list. In 'filter' mode, the list is
 93+ * blanked before the new comments are loaded. In 'more' mode, the comments are
 94+ * loaded at the end of the existing set.
 95+ *
 96+ * This function uses the form state saved in formState, so you may want to call saveFormState() first.
 97+ *
 98+ * @param mode string Either 'filter' or 'more'
 99+ */
 100+ function loadComments( mode ) {
 101+ var limit = 20,
 102+ reqData;
 103+
 104+ if ( mode == 'filter' ) {
 105+ $( '#fbd-list' ).empty();
 106+ }
 107+ // Hide the "More" link and put in a spinner
 108+ $( '#fbd-list-more' )
 109+ .show() // may have been output with display: none;
 110+ .addClass( 'mw-ajax-loader' )
 111+ .children( 'a' )
 112+ .css( 'visibility', 'hidden' ) // using .hide() cuts off the spinner
 113+ .show() // showMessage() may have called .hide()
 114+ .end()
 115+ .children( 'span' )
 116+ .remove(); // Remove any message added by showMessage()
 117+
 118+ // Build the API request
 119+ // FIXME: in 'more' mode, changing the filters then clicking More will use the wrong criteria
 120+ reqData = {
 121+ 'action': 'query',
 122+ 'list': 'moodbarcomments',
 123+ 'format': 'json',
 124+ 'mbcprop': 'formatted',
 125+ 'mbclimit': limit + 2 // we drop the first and last result
 126+ };
 127+ if ( mode == 'more' ) {
 128+ reqData['mbccontinue'] = $( '#fbd-list').find( 'li:last' ).data( 'mbccontinue' );
 129+ }
 130+ if ( formState.types.length ) {
 131+ reqData['mbctype'] = formState.types.join( '|' );
 132+ }
 133+ if ( formState.username.length ) {
 134+ reqData['mbcuser'] = formState.username;
 135+ }
 136+
 137+ $.ajax( {
 138+ 'url': mw.util.wikiScript( 'api' ),
 139+ 'data': reqData,
 140+ 'success': function( data ) {
 141+ // Remove the spinner and restore the "More" link
 142+ $( '#fbd-list-more' )
 143+ .removeClass( 'mw-ajax-loader' )
 144+ .children( 'a' )
 145+ .css( 'visibility', 'visible' ); // Undo visibility: hidden;
 146+
 147+ if ( !data || !data.query || !data.query.moodbarcomments ) {
 148+ showMessage( mw.msg( 'moodbar-feedback-ajaxerror' ) );
 149+ return;
 150+ }
 151+
 152+ var comments = data.query.moodbarcomments,
 153+ len = comments.length,
 154+ $ul = $( '#fbd-list' ),
 155+ moreResults = false,
 156+ i;
 157+ if ( len == 0 ) {
 158+ if ( mode == 'more' ) {
 159+ showMessage( mw.msg( 'moodbar-feedback-nomore' ) );
 160+ } else {
 161+ showMessage( mw.msg( 'moodbar-feedback-noresults' ) );
 162+ }
 163+ return;
 164+ }
 165+
 166+ if ( mode == 'more' ) {
 167+ // Drop the first element because it duplicates the last shown one
 168+ comments.shift();
 169+ len--;
 170+ }
 171+ if ( len > limit ) {
 172+ // Drop any elements past the limit. We do know there are more results now
 173+ len = limit;
 174+ moreResults = true;
 175+ }
 176+
 177+ for ( i = 0; i < len; i++ ) {
 178+ $ul.append( comments[i].formatted );
 179+ }
 180+
 181+ if ( !moreResults ) {
 182+ if ( mode == 'more' ) {
 183+ showMessage( mw.msg( 'moodbar-feedback-nomore' ) );
 184+ } else {
 185+ $( '#fbd-list-more' ).hide();
 186+ }
 187+ }
 188+ },
 189+ 'error': function( jqXHR, textStatus, errorThrown ) {
 190+ $( '#fbd-list-more' ).removeClass( 'mw-ajax-loader' );
 191+ showMessage( mw.msg( 'moodbar-feedback-ajaxerror' ) );
 192+ },
 193+ 'dataType': 'json'
 194+ } );
 195+ }
 196+
 197+ /**
 198+ * Reload a comment, showing hidden comments if necessary
 199+ * @param $item jQuery item containing the .fbd-item
 200+ * @param show Set to true to show the comment despite its hidden status
 201+ */
 202+ function reloadItem( $item, show ) {
 203+ var cont = $item.data('mbccontinue');
 204+
 205+ var request = {
 206+ 'action' : 'query',
 207+ 'list' : 'moodbarcomments',
 208+ 'format' : 'json',
 209+ 'mbcprop' : 'formatted',
 210+ 'mbclimit' : 1,
 211+ 'mbccontinue' : cont
 212+ };
 213+
 214+ if ( show ) {
 215+ request.mbcprop = 'formatted|hidden';
 216+ }
 217+
 218+ $.post( mw.util.wikiScript('api'), request,
 219+ function( data ) {
 220+ if ( data && data.query && data.query.moodbarcomments &&
 221+ data.query.moodbarcomments.length > 0
 222+ ) {
 223+ var $content = $j(data.query.moodbarcomments[0].formatted);
 224+ $item.replaceWith($content);
 225+ } else {
 226+ // Failure, just remove the link.
 227+ $item.find('.fbd-item-show').remove();
 228+ $item.find('.mw-ajax-loader').remove();
 229+ showItemError( $item );
 230+ }
 231+ }, 'json' )
 232+ .error( function() { showItemError( $item ); } );
 233+ }
 234+
 235+ /**
 236+ * Show a hidden comment
 237+ */
 238+ function showHiddenItem(e) {
 239+ var $item = $(this).closest('.fbd-item');
 240+
 241+ var $spinner = $('<span class="mw-ajax-loader">&nbsp;</span>');
 242+ $item.find('.fbd-item-show').empty().append( $spinner );
 243+
 244+ reloadItem( $item, true );
 245+
 246+ e.preventDefault();
 247+ }
 248+
 249+ /**
 250+ * Show an error on an individual item
 251+ * @param $item The .fbd-item to show the message on
 252+ * @param message The message to show (currently ignored)
 253+ */
 254+ function showItemError( $item, message ) {
 255+ $item.find('.mw-ajax-loader').remove();
 256+ $('<div class="error"/>')
 257+ .text( mw.msg('moodbar-feedback-action-error') )
 258+ .prependTo($item);
 259+ }
 260+
 261+ /**
 262+ * Execute an action on an item
 263+ */
 264+ function doAction( params, $item ) {
 265+ var item_id = $item.data('mbccontinue').split('|')[1];
 266+
 267+ var errorHandler = function(error_str) {
 268+ showItemError( $item, error_str );
 269+ };
 270+
 271+ $.post( mw.util.wikiScript('api'),
 272+ $.extend( {
 273+ 'action' : 'feedbackdashboard',
 274+ 'token' : mw.user.tokens.get('editToken'),
 275+ 'item' : item_id,
 276+ 'format' : 'json'
 277+ }, params ),
 278+ function(response) {
 279+ if ( response && response.feedbackdashboard ) {
 280+ if ( response.feedbackdashboard.result == 'success' ) {
 281+ reloadItem( $item );
 282+ } else {
 283+ errorHandler( response.feedbackdashboard.error );
 284+ }
 285+ } else if ( response && response.error ) {
 286+ errorHandler( response.error.message );
 287+ } else {
 288+ errorHandler();
 289+ }
 290+ } )
 291+ .error( errorHandler );
 292+ }
 293+
 294+ /**
 295+ * Restore a hidden item to full visibility (event handler)
 296+ */
 297+ function restoreItem(e) {
 298+ var $item = $(this).closest('.fbd-item');
 299+
 300+ var $spinner = $('<span class="mw-ajax-loader">&nbsp;</span>');
 301+ $item.find('.fbd-item-restore').empty().append( $spinner );
 302+
 303+ doAction( { 'mbaction' : 'restore' }, $item );
 304+
 305+ e.preventDefault();
 306+ }
 307+
 308+ /**
 309+ * Hide a item from view (event handler)
 310+ */
 311+ function hideItem(e) {
 312+ var $item = $(this).closest('.fbd-item');
 313+
 314+ var $spinner = $('<span class="mw-ajax-loader">&nbsp;</span>');
 315+ $item.find('.fbd-item-hide').empty().append( $spinner );
 316+
 317+ doAction( { 'mbaction' : 'hide' }, $item );
 318+
 319+ e.preventDefault();
 320+ }
 321+
 322+ // On-load stuff
 323+
 324+ $('.fbd-item-show a').live( 'click', showHiddenItem );
 325+
 326+ $('.fbd-item-hide a').live( 'click', hideItem );
 327+
 328+ $('.fbd-item-restore').live( 'click', restoreItem );
 329+
 330+ $( '#fbd-filters' ).children( 'form' ).submit( function( e ) {
 331+ e.preventDefault();
 332+ saveFormState();
 333+ setCookies();
 334+ loadComments( 'filter' );
 335+ } );
 336+
 337+ $( '.fbd-item-userLink' ).live( 'click', function( e ) {
 338+ e.preventDefault();
 339+ $('#fbd-filters-username').val( $(this).text() );
 340+ $('#fbd-filters').children('form').submit();
 341+ } );
 342+
 343+ $( '#fbd-list-more' ).children( 'a' ).click( function( e ) {
 344+ e.preventDefault();
 345+ // We don't call saveFormState() here because we want to use the state of the form
 346+ // at the time it was last filtered. Otherwise, you would see strange behavior if
 347+ // you changed the form state then clicked More.
 348+ loadComments( 'more' );
 349+ } );
 350+
 351+ saveFormState();
 352+ var filterType = $( '#fbd-filters' ).children( 'form' ).data( 'filtertype' );
 353+ // If filtering already happened on the PHP side, don't load the form state from cookies
 354+ if ( filterType != 'filtered' ) {
 355+ // Don't do an AJAX filter if we're on an ID view, or if the form is still blank after loadFromCookies()
 356+ if ( loadFromCookies() && filterType != 'id' ) {
 357+ saveFormState();
 358+ loadComments( 'filter' );
 359+ }
 360+ }
 361+} );
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/ext.moodBar.dashboard.js
___________________________________________________________________
Added: svn:eol-style
1362 + native
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-happy.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-happy.png
___________________________________________________________________
Added: svn:mime-type
2363 + application/octet-stream
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-more.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-more.png
___________________________________________________________________
Added: svn:mime-type
3364 + application/octet-stream
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-issues.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-issues.png
___________________________________________________________________
Added: svn:mime-type
4365 + application/octet-stream
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-disabled-ltr.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-disabled-ltr.png
___________________________________________________________________
Added: svn:mime-type
5366 + image/png
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-disabled-rtl.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-disabled-rtl.png
___________________________________________________________________
Added: svn:mime-type
6367 + image/png
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-confused.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-confused.png
___________________________________________________________________
Added: svn:mime-type
7368 + application/octet-stream
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-sad.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/emoticon-sad.png
___________________________________________________________________
Added: svn:mime-type
8369 + application/octet-stream
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-active-ltr.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-active-ltr.png
___________________________________________________________________
Added: svn:mime-type
9370 + image/png
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-active-rtl.png
Cannot display: file marked as a binary type.
svn:mime-type = image/png
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/page-active-rtl.png
___________________________________________________________________
Added: svn:mime-type
10371 + image/png
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-confusion.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-confusion.png
___________________________________________________________________
Added: svn:mime-type
11372 + application/octet-stream
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-praise.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/filter-praise.png
___________________________________________________________________
Added: svn:mime-type
12373 + application/octet-stream
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/button-white.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/button-white.png
___________________________________________________________________
Added: svn:mime-type
13374 + application/octet-stream
Index: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/button-gray.png
Cannot display: file marked as a binary type.
svn:mime-type = application/octet-stream
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/modules/ext.moodBar.dashboard/images/button-gray.png
___________________________________________________________________
Added: svn:mime-type
14375 + application/octet-stream
Index: branches/wmf/1.18wmf1/extensions/MoodBar/FeedbackItem.php
@@ -18,6 +18,7 @@
1919 'timestamp',
2020 'user', // User object who submitted the feedback
2121 'anonymize',
 22+ 'hidden-state',
2223
2324 // Statistics
2425 'useragent',
@@ -41,13 +42,14 @@
4243 // Non-nullable boolean fields
4344 $this->setProperty('anonymize', false);
4445 $this->setProperty('editmode', false);
 46+ $this->setProperty('hidden-state', 0 );
4547 }
4648
4749 /**
4850 * Factory function to create a new MBFeedbackItem
4951 * @param $info Associative array of values
5052 * Valid keys: type, user, comment, page, flags, timestamp,
51 - * useragent, system, locale, bucket, anonymize
 53+ * useragent, system, locale, bucket, anonymize, hidden-state
5254 * @return MBFeedbackItem object.
5355 */
5456 public static function create( $info ) {
@@ -90,27 +92,38 @@
9193 * @see MBFeedbackItem::load
9294 */
9395 protected function initialiseFromRow( $row ) {
94 - $properties = array(
95 - 'id' => $row->mbf_id,
96 - 'type' => $row->mbf_type,
97 - 'comment' => $row->mbf_comment,
98 - 'timestamp' => $row->mbf_timestamp,
99 - 'anonymize' => $row->mbf_anonymous,
100 - 'useragent' => $row->mbf_user_agent,
101 - 'system' => $row->mbf_system_type,
102 - 'locale' => $row->mbf_locale,
103 - 'bucket' => $row->mbf_bucket,
104 - 'editmode' => $row->mbf_editing,
105 - 'user-editcount' => $row->mbf_user_editcount,
 96+ static $propMappings = array(
 97+ 'id' => 'mbf_id',
 98+ 'type' => 'mbf_type',
 99+ 'comment' => 'mbf_comment',
 100+ 'timestamp' => 'mbf_timestamp',
 101+ 'anonymize' => 'mbf_anonymous',
 102+ 'useragent' => 'mbf_user_agent',
 103+ 'system' => 'mbf_system_type',
 104+ 'locale' => 'mbf_locale',
 105+ 'bucket' => 'mbf_bucket',
 106+ 'editmode' => 'mbf_editing',
 107+ 'user-editcount' => 'mbf_user_editcount',
 108+ 'hidden-state' => 'mbf_hidden_state',
106109 );
 110+
 111+ $properties = array();
 112+
 113+ foreach( $propMappings as $property => $field ) {
 114+ if ( isset( $row->$field ) ) {
 115+ $properties[$property] = $row->$field;
 116+ }
 117+ }
107118
108 - $properties['page'] = Title::makeTitleSafe( $row->mbf_namespace, $row->mbf_title );
 119+ if ( isset( $row->mbf_namespace ) && isset( $row->mbf_title ) ) {
 120+ $properties['page'] = Title::makeTitleSafe( $row->mbf_namespace, $row->mbf_title );
 121+ }
109122
110123 if ( !empty($row->user_id) ) {
111124 $properties['user'] = User::newFromRow( $row );
112125 } elseif ( $row->mbf_user_id > 0 ) {
113126 $properties['user'] = User::newFromId( $row->mbf_user_id );
114 - } else {
 127+ } elseif ( $row->mbf_user_ip ) {
115128 $properties['user'] = User::newFromName( $row->mbf_user_ip );
116129 }
117130
@@ -192,11 +205,6 @@
193206 * @return The MBFeedbackItem's new ID.
194207 */
195208 public function save() {
196 -
197 - if ( $this->getProperty('id') ) {
198 - throw new MWException( "This ".__CLASS__." is already in the database." );
199 - }
200 -
201209 // Add edit count if necessary
202210 if ( $this->getProperty('user-editcount') === null &&
203211 $this->getProperty('user') )
@@ -213,7 +221,6 @@
214222 $dbw = wfGetDB( DB_MASTER );
215223
216224 $row = array(
217 - 'mbf_id' => $dbw->nextSequenceValue( 'moodbar_feedback_mbf_id' ),
218225 'mbf_type' => $this->getProperty('type'),
219226 'mbf_comment' => $this->getProperty('comment'),
220227 'mbf_timestamp' => $dbw->timestamp($this->getProperty('timestamp')),
@@ -224,6 +231,7 @@
225232 'mbf_bucket' => $this->getProperty('bucket'),
226233 'mbf_editing' => $this->getProperty('editmode'),
227234 'mbf_user_editcount' => $this->getProperty('user-editcount'),
 235+ 'mbf_hidden_state' => $this->getProperty('hidden-state'),
228236 );
229237
230238 $user = $this->getProperty('user');
@@ -240,10 +248,15 @@
241249 $row['mbf_title'] = $page->getDBkey();
242250 }
243251
244 - $dbw->insert( 'moodbar_feedback', $row, __METHOD__ );
 252+ if ( $this->getProperty('id') ) {
 253+ $row['mbf_id'] = $this->getProperty('id');
 254+ $dbw->replace( 'moodbar_feedback', array('mbf_id'), $row, __METHOD__ );
 255+ } else {
 256+ $row['mbf_id'] = $dbw->nextSequenceValue( 'moodbar_feedback_mbf_id' );
 257+ $dbw->insert( 'moodbar_feedback', $row, __METHOD__ );
 258+ $this->setProperty( 'id', $dbw->insertId() );
 259+ }
245260
246 - $this->setProperty( 'id', $dbw->insertId() );
247 -
248261 return $this->getProperty('id');
249262 }
250263
Index: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.php
@@ -20,6 +20,10 @@
2121 // API
2222 $wgAutoloadClasses['ApiMoodBar'] = dirname(__FILE__).'/ApiMoodBar.php';
2323 $wgAPIModules['moodbar'] = 'ApiMoodBar';
 24+$wgAutoloadClasses['ApiQueryMoodBarComments'] = dirname( __FILE__ ). '/ApiQueryMoodBarComments.php';
 25+$wgAPIListModules['moodbarcomments'] = 'ApiQueryMoodBarComments';
 26+$wgAutoloadClasses['ApiFeedbackDashboard'] = dirname(__FILE__).'/ApiFeedbackDashboard.php';
 27+$wgAPIModules['feedbackdashboard'] = 'ApiFeedbackDashboard';
2428
2529 // Hooks
2630 $wgAutoloadClasses['MoodBarHooks'] = dirname(__FILE__).'/MoodBar.hooks.php';
@@ -28,15 +32,35 @@
2933 $wgHooks['MakeGlobalVariablesScript'][] = 'MoodBarHooks::makeGlobalVariablesScript';
3034 $wgHooks['LoadExtensionSchemaUpdates'][] = 'MoodBarHooks::onLoadExtensionSchemaUpdates';
3135
32 -// Special page
 36+// Special pages
3337 $wgAutoloadClasses['SpecialMoodBar'] = dirname(__FILE__).'/SpecialMoodBar.php';
3438 $wgSpecialPages['MoodBar'] = 'SpecialMoodBar';
 39+$wgAutoloadClasses['SpecialFeedbackDashboard'] = dirname( __FILE__ ) . '/SpecialFeedbackDashboard.php';
 40+$wgSpecialPages['FeedbackDashboard'] = 'SpecialFeedbackDashboard';
3541
 42+$dashboardFormsPath = dirname(__FILE__) . '/DashboardForms.php';
 43+$wgAutoloadClasses['MBDashboardForm'] = $dashboardFormsPath;
 44+$wgAutoloadClasses['MBActionForm'] = $dashboardFormsPath;
 45+$wgAutoloadClasses['MBHideForm'] = $dashboardFormsPath;
 46+$wgAutoloadClasses['MBRestoreForm'] = $dashboardFormsPath;
 47+
 48+$wgLogTypes[] = 'moodbar';
 49+$wgLogNames['moodbar'] = 'moodbar-log-name';
 50+$wgLogHeaders['moodbar'] = 'moodbar-log-header';
 51+$wgLogActions += array(
 52+ 'moodbar/hide' => 'moodbar-log-hide',
 53+ 'moodbar/restore' => 'moodbar-log-restore',
 54+);
 55+
3656 // User rights
3757 $wgAvailableRights[] = 'moodbar-view';
 58+$wgAvailableRights[] = 'moodbar-admin';
3859
 60+$wgGroupPermissions['sysop']['moodbar-admin'] = true;
 61+
3962 // Internationalisation
4063 $wgExtensionMessagesFiles['MoodBar'] = dirname(__FILE__).'/MoodBar.i18n.php';
 64+$wgExtensionMessagesFiles['MoodBarAliases'] = dirname( __FILE__ ) . '/MoodBar.alias.php';
4165
4266 // Resources
4367 $mbResourceTemplate = array(
@@ -111,7 +135,21 @@
112136 'position' => 'bottom',
113137 );
114138
 139+$wgResourceModules['ext.moodBar.dashboard'] = $mbResourceTemplate + array(
 140+ 'scripts' => 'ext.moodBar.dashboard/ext.moodBar.dashboard.js',
 141+ 'dependencies' => array( 'mediawiki.util' ),
 142+ 'messages' => array(
 143+ 'moodbar-feedback-nomore',
 144+ 'moodbar-feedback-noresults',
 145+ 'moodbar-feedback-ajaxerror',
 146+ 'moodbar-feedback-action-error',
 147+ ),
 148+);
115149
 150+$wgResourceModules['ext.moodBar.dashboard.styles'] = $mbResourceTemplate + array(
 151+ 'styles' => 'ext.moodBar.dashboard/ext.moodBar.dashboard.css',
 152+);
 153+
116154 $wgResourceModules['jquery.moodBar'] = $mbResourceTemplate + array(
117155 'scripts' => 'jquery.moodBar/jquery.moodBar.js',
118156 'dependencies' => array(
Index: branches/wmf/1.18wmf1/extensions/MoodBar/SpecialMoodBar.php
@@ -22,6 +22,10 @@
2323 parent::__construct( 'MoodBar', 'moodbar-view' );
2424 }
2525
 26+ function getDescription() {
 27+ return wfMessage( 'moodbar-admin-title' )->plain();
 28+ }
 29+
2630 function execute($par) {
2731 global $wgUser, $wgOut;
2832
Index: branches/wmf/1.18wmf1/extensions/MoodBar/MoodBar.hooks.php
@@ -74,6 +74,25 @@
7575 $updater->addExtensionUpdate( array( 'addField', 'moodbar_feedback',
7676 'mbf_user_editcount', dirname(__FILE__).'/sql/mbf_user_editcount.sql', true )
7777 );
 78+
 79+ $db = $updater->getDB();
 80+ if ( $db->tableExists( 'moodbar_feedback' ) &&
 81+ $db->indexExists( 'moodbar_feedback', 'type_timestamp', __METHOD__ ) )
 82+ {
 83+ $updater->addExtensionUpdate( array( 'addIndex', 'moodbar_feedback',
 84+ 'mbf_type_timestamp_id', dirname( __FILE__ ) . '/sql/AddIDToIndexes.sql', true )
 85+ );
 86+ }
 87+ $updater->addExtensionUpdate( array( 'dropIndex', 'moodbar_feedback',
 88+ 'mbf_timestamp', dirname( __FILE__ ) . '/sql/AddIDToIndexes2.sql', true )
 89+ );
 90+
 91+ $updater->addExtensionUpdate( array( 'addIndex', 'moodbar_feedback',
 92+ 'mbf_timestamp_id', dirname( __FILE__ ) . '/sql/mbf_timestamp_id.sql', true )
 93+ );
 94+
 95+ $updater->addExtensionUpdate( array( 'addField', 'moodbar_feedback',
 96+ 'mbf_hidden_state', dirname(__FILE__).'/sql/mbf_hidden_state.sql', true ) );
7897
7998 return true;
8099 }
Index: branches/wmf/1.18wmf1/extensions/MoodBar/ApiFeedbackDashboard.php
@@ -0,0 +1,90 @@
 2+<?php
 3+
 4+class ApiFeedbackDashboard extends ApiBase {
 5+ public function execute() {
 6+ global $wgUser;
 7+ if ( ! $wgUser->isAllowed('moodbar-admin') ) {
 8+ $this->dieUsage( "You don't have permission to do that", 'permission-denied' );
 9+ }
 10+
 11+ $params = $this->extractRequestParams();
 12+ $form = null;
 13+
 14+ if ( $params['mbaction'] == 'hide' ) {
 15+ $form = new MBHideForm( $params['item'] );
 16+ } elseif ( $params['mbaction'] == 'restore' ) {
 17+ $form = new MBRestoreForm( $params['item'] );
 18+ } else {
 19+ throw new MWException( "Action {$params['action']} not implemented" );
 20+ }
 21+
 22+ $data = array(
 23+ 'reason' => $params['reason'],
 24+ 'item' => $params['item'],
 25+ );
 26+
 27+ $result = null;
 28+ $output = $form->submit( $data );
 29+ if ( $output === true ) {
 30+ $result = array( 'result' => 'success' );
 31+ } else {
 32+ $result = array( 'result' => 'error', 'error' => $output );
 33+ }
 34+
 35+ $this->getResult()->addValue( null, $this->getModuleName(), $result );
 36+ }
 37+
 38+ public function needsToken() {
 39+ return true;
 40+ }
 41+
 42+ public function getTokenSalt() {
 43+ return '';
 44+ }
 45+
 46+ public function getAllowedParams() {
 47+ return array(
 48+ 'mbaction' => array(
 49+ ApiBase::PARAM_REQUIRED => true,
 50+ ApiBase::PARAM_TYPE => array(
 51+ 'hide',
 52+ 'restore',
 53+ ),
 54+ ),
 55+
 56+ 'item' => array(
 57+ ApiBase::PARAM_REQUIRED => true,
 58+ ApiBase::PARAM_TYPE => 'integer',
 59+ ),
 60+
 61+ 'reason' => null,
 62+ 'token' => array(
 63+ ApiBase::PARAM_REQUIRED => true,
 64+ ),
 65+ );
 66+ }
 67+
 68+ public function mustBePosted() {
 69+ return true;
 70+ }
 71+
 72+ public function isWriteMode() {
 73+ return true;
 74+ }
 75+
 76+ public function getVersion() {
 77+ return __CLASS__ . ': $Id$';
 78+ }
 79+
 80+ public function getParamDescription() {
 81+ return array(
 82+ 'mbaction' => 'The action to take',
 83+ 'item' => 'The feedback item to apply it to',
 84+ 'reason' => 'The reason to specify in the log',
 85+ );
 86+ }
 87+
 88+ public function getDescription() {
 89+ return 'Allows administrators to manage submissions to the feedback dashboard';
 90+ }
 91+}
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar/ApiFeedbackDashboard.php
___________________________________________________________________
Added: svn:eol-style
192 + native
Added: svn:keywords
293 + Id
Property changes on: branches/wmf/1.18wmf1/extensions/MoodBar
___________________________________________________________________
Modified: svn:mergeinfo
394 Merged /trunk/extensions/MoodBar:r95896-101006

Status & tagging log