jenkins-bot has submitted this change and it was merged.
Change subject: New Wikidata Build - 2016-01-29T10:00:01+0000
......................................................................
New Wikidata Build - 2016-01-29T10:00:01+0000
Change-Id: I0310bdd96308e0b20a5e373de8b16e8512a5d9a5
---
M composer.lock
M extensions/Wikibase/client/i18n/gsw.json
A extensions/Wikibase/client/i18n/jam.json
M extensions/Wikibase/client/i18n/lzh.json
M extensions/Wikibase/lib/i18n/de.json
M extensions/Wikibase/lib/i18n/en.json
M extensions/Wikibase/lib/i18n/qqq.json
M extensions/Wikibase/lib/includes/formatters/ErrorHandlingSnakFormatter.php
M extensions/Wikibase/lib/includes/formatters/PropertyValueSnakFormatter.php
M
extensions/Wikibase/lib/tests/phpunit/formatters/ErrorHandlingSnakFormatterTest.php
M
extensions/Wikibase/lib/tests/phpunit/formatters/PropertyValueSnakFormatterTest.php
M extensions/Wikibase/repo/i18n/de.json
M extensions/Wikibase/repo/i18n/eml.json
M extensions/Wikibase/repo/i18n/en.json
M extensions/Wikibase/repo/i18n/frr.json
A extensions/Wikibase/repo/i18n/jam.json
M extensions/Wikibase/repo/i18n/pl.json
M extensions/Wikibase/repo/i18n/qqq.json
M extensions/Wikibase/repo/includes/Validators/SnakValidator.php
M extensions/Wikibase/repo/includes/api/CreateClaim.php
M extensions/Wikibase/repo/includes/api/ModifyClaim.php
M extensions/Wikibase/repo/includes/api/RemoveClaims.php
M extensions/Wikibase/repo/includes/api/RemoveQualifiers.php
M extensions/Wikibase/repo/includes/api/RemoveReferences.php
M extensions/Wikibase/repo/includes/api/SetClaim.php
M extensions/Wikibase/repo/includes/api/SetClaimValue.php
M extensions/Wikibase/repo/includes/api/SetQualifier.php
M extensions/Wikibase/repo/includes/api/SetReference.php
M extensions/Wikibase/repo/includes/specials/SpecialNewProperty.php
M
extensions/Wikibase/repo/tests/phpunit/includes/Validators/SnakValidatorTest.php
M
extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js
M
extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js
M extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.listview.js
M
extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js
M
extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js
M
extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementlistview.js
M extensions/Wikibase/view/resources/jquery/wikibase/resources.php
M
extensions/Wikibase/view/resources/jquery/wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css
M
extensions/Wikibase/view/resources/jquery/wikibase/toolbar/controller/definitions/removetoolbar/statementview-snakview.js
M extensions/Wikibase/view/resources/wikibase/view/ViewFactory.js
M extensions/Wikibase/view/src/PropertyView.php
M
extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js
M
extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsview.tests.js
M
extensions/Wikibase/view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.movetoolbar.tests.js
M extensions/Wikibase/view/tests/qunit/wikibase/view/ViewFactory.tests.js
M vendor/composer/installed.json
46 files changed, 558 insertions(+), 215 deletions(-)
Approvals:
JanZerebecki: Looks good to me, approved
jenkins-bot: Verified
diff --git a/composer.lock b/composer.lock
index dfca68e..98d55f3 100644
--- a/composer.lock
+++ b/composer.lock
@@ -1449,12 +1449,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "42433e84d5a3ef35b6c7e3e2e7c0b25c30ec72cb"
+ "reference": "578154d93f7e76b51aabebf58a65a98f70aaae1b"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/42433e84d5a3ef35b6c7e3e2e7c0b25c30ec72cb",
- "reference": "42433e84d5a3ef35b6c7e3e2e7c0b25c30ec72cb",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/578154d93f7e76b51aabebf58a65a98f70aaae1b",
+ "reference": "578154d93f7e76b51aabebf58a65a98f70aaae1b",
"shasum": ""
},
"require": {
@@ -1525,7 +1525,7 @@
"wikibaserepo",
"wikidata"
],
- "time": "2016-01-27 20:46:43"
+ "time": "2016-01-28 20:11:28"
},
{
"name": "wikibase/wikimedia-badges",
diff --git a/extensions/Wikibase/client/i18n/gsw.json
b/extensions/Wikibase/client/i18n/gsw.json
index e06fc66..7dcb2c0 100644
--- a/extensions/Wikibase/client/i18n/gsw.json
+++ b/extensions/Wikibase/client/i18n/gsw.json
@@ -12,11 +12,19 @@
"wikibase-dataitem": "{{WBREPONAME}}-Datenobjäkt",
"wikibase-editlinks": "Links bearbeite",
"wikibase-editlinkstitle": "Sprachibergryfigi Link bearbeite",
+ "wikibase-linkitem-addlinks": "Link zuefiege",
+ "wikibase-linkitem-close": "Dialog zuemache un d Syte nei lade",
+ "wikibase-linkitem-linkpage": "Mit ere Syte verlinke",
+ "wikibase-linkitem-selectlink": "Bitte wehl e Websyte un e Syte uus, wu
mit därte Syte witt verchnipfe.",
+ "wikibase-linkitem-confirmitem-text": "Di uusgwehlt Syte isch scho mit
eme [$1 Objäkt in unsrem zäntrale Daterepositorium] verchnipft. Bitte due
bstetige, ass d Syte, wu unte {{PLURAL:$2|stoht, die isch|stehn, die sin}}, wu
Du mit däre Syte witt verlinke.",
+ "wikibase-linkitem-confirmitem-button": "Bstetige",
+ "wikibase-linkitem-success-link": "D Syte sin erfolgrych verlinkt wore.
Du findsch s Objäkt, wu s d Link din het, in unsrem [$1 zäntrale
Daterepositorium].",
"wikibase-rc-hide-wikidata": "{{WBREPONAME}} $1",
"wikibase-rc-hide-wikidata-hide": "uusblände",
"wikibase-rc-hide-wikidata-show": "aazeige",
"wikibase-rc-wikibase-edit-letter": "D",
"wikibase-rc-wikibase-edit-title": "{{WBREPONAME}}-Bearbeitig",
+ "wikibase-replicationnote": "Bitte dänk draa, ass es e baar Minute cha
goh, bi s d Änderige uf allene Wiki sichtbar sin.",
"wikibase-otherprojects": "Andri Projäkt",
"wikibase-otherprojects-beta-message": "Syteleiste für anderi Projekt",
"wikibase-otherprojects-beta-description": "En Abschnitt
«{{int:wikibase-otherprojects}}» chunt zur Syteleiste derzue. Är het Links zu
anderne Wikimedia-Projekt, wo uf {{WBREPONAME}}-Date basiere."
diff --git a/extensions/Wikibase/client/i18n/jam.json
b/extensions/Wikibase/client/i18n/jam.json
new file mode 100644
index 0000000..885ba8e
--- /dev/null
+++ b/extensions/Wikibase/client/i18n/jam.json
@@ -0,0 +1,9 @@
+{
+ "@metadata": {
+ "authors": [
+ "Katxis"
+ ]
+ },
+ "wikibase-editlinks": "Edit lingk",
+ "wikibase-editlinkstitle": "Edit intalanguij lingk"
+}
diff --git a/extensions/Wikibase/client/i18n/lzh.json
b/extensions/Wikibase/client/i18n/lzh.json
index ba0156e..14a12cc 100644
--- a/extensions/Wikibase/client/i18n/lzh.json
+++ b/extensions/Wikibase/client/i18n/lzh.json
@@ -2,9 +2,11 @@
"@metadata": {
"authors": [
"StephDC",
- "Davidzdh"
+ "Davidzdh",
+ "飞舞回堂前"
]
},
+ "wikibase-editlinks": "纂鏈",
"wikibase-editlinkstitle": "修跨語鏈",
"wikibase-rc-hide-wikidata-hide": "隱",
"wikibase-rc-hide-wikidata-show": "示",
diff --git a/extensions/Wikibase/lib/i18n/de.json
b/extensions/Wikibase/lib/i18n/de.json
index d466563..f34ae2f 100644
--- a/extensions/Wikibase/lib/i18n/de.json
+++ b/extensions/Wikibase/lib/i18n/de.json
@@ -71,6 +71,7 @@
"wikibase-validator-no-such-property": "Eigenschaft $1 nicht gefunden",
"wikibase-validator-bad-value": "Datenwert beschädigt: $1",
"wikibase-validator-bad-value-type": "Ungültiger Wertetyp $1, erwartet
$2",
+ "wikibase-validator-bad-data-type": "Ungültiger Datentyp: $1",
"wikibase-validator-bad-url": "Fehlerhafte URL: $1",
"wikibase-validator-bad-url-scheme": "Nicht unterstütztes URL-Schema:
$1",
"wikibase-validator-unknown-unit": "Unbekannte Einheit: $1",
@@ -95,6 +96,7 @@
"wikibase-time-precision-BCE-10annum": "$1 Jahrzehnte v. u. Z.",
"wikibase-snakformatter-valuetype-mismatch": "Der Wertetyp „$1“ stimmt
nicht mit dem Eigenschaftstyp „$2“ überein.",
"wikibase-snakformatter-property-not-found": "Die Eigenschaft $1 wurde
nicht gefunden. Der zu verwendende Datentyp konnte nicht bestimmt werden.",
+ "wikibase-snakformatter-formatting-exception": "Formatierungsfehler:
$1.",
"wikibase-entity-summary-wbsetitem": "Ein neues Datenobjekt erstellt",
"wikibase-entity-summary-wbcreate-new": "Ein neues Objekt erstellt",
"wikibase-entity-summary-wbcreateredirect": "Weitergeleitet zu $4",
diff --git a/extensions/Wikibase/lib/i18n/en.json
b/extensions/Wikibase/lib/i18n/en.json
index 391b71b..00da0e6 100644
--- a/extensions/Wikibase/lib/i18n/en.json
+++ b/extensions/Wikibase/lib/i18n/en.json
@@ -63,6 +63,7 @@
"wikibase-validator-no-such-property": "Property $1 not found",
"wikibase-validator-bad-value": "Data value corrupt: $1",
"wikibase-validator-bad-value-type": "Bad value type $1, expected $2",
+ "wikibase-validator-bad-data-type": "Bad data type: $1",
"wikibase-validator-bad-url": "Malformed URL: $1",
"wikibase-validator-bad-url-scheme": "Unsupported URL scheme: $1",
"wikibase-validator-unknown-unit": "Unknown unit: $1",
@@ -88,6 +89,7 @@
"wikibase-monolingualtext": "<span lang=\"$2\"
class=\"wb-monolingualtext-value\">$1</span> <span
class=\"wb-monolingualtext-language-name\">($3)</span>",
"wikibase-snakformatter-valuetype-mismatch": "The value's type \"$1\"
does not match property's type \"$2\".",
"wikibase-snakformatter-property-not-found": "Property $1 not found,
cannot determine the data type to use.",
+ "wikibase-snakformatter-formatting-exception": "Formatting error: $1.",
"wikibase-entity-summary-wbsetitem": "Created a new item",
"wikibase-entity-summary-wbcreate-new": "Created a new entity",
"wikibase-entity-summary-wbcreateredirect": "Redirected to $4",
diff --git a/extensions/Wikibase/lib/i18n/qqq.json
b/extensions/Wikibase/lib/i18n/qqq.json
index 6a01306..7796325 100644
--- a/extensions/Wikibase/lib/i18n/qqq.json
+++ b/extensions/Wikibase/lib/i18n/qqq.json
@@ -73,6 +73,7 @@
"wikibase-validator-no-such-property": "Input validation error shown
when the property used for a statement could not be found.\n\nThis kind of
error is unlikely to occur during normal operation, since the user interface
should prevent illegal values from being entered.\n\nParameters:\n* $1 - the
property ID\n{{Related|Wikibase-validator}}",
"wikibase-validator-bad-value": "Input validation error shown when the
value is syntactically invalid or structurally corrupt.\n\nThis kind of error
is unlikely to occur during normal operation, since the user interface should
prevent illegal values from being entered.\n\nParameters:\n* $1 - the technical
error message describing the problem\n{{Related|Wikibase-validator}}",
"wikibase-validator-bad-value-type": "Input validation error shown when
the value has the wrong type for the property it is applied to.\n\nThis kind of
error is unlikely to occur during normal operation, since the user interface
should prevent illegal values from being entered.\n\nParameters:\n* $1 - the
actual value type\n* $2 - the expected value
type\n{{Related|Wikibase-validator}}",
+ "wikibase-validator-bad-data-type": "Input validation error shown when
the snak has an invalid data type.\n\nThis kind of error is unlikely to occur
during normal operation, since the user interface should prevent illegal values
from being entered.\n\nParameters:\n* $1 - the invalid data
type\n{{Related|Wikibase-validator}}",
"wikibase-validator-bad-url": "Input validation error shown when the
value is an invalid URL.\n\nParameters:\n* $1 - the malformed
URL\n{{Related|Wikibase-validator}}",
"wikibase-validator-bad-url-scheme": "Input validation error shown when
the value is a URL using an unsupported protocol (scheme).\n\nParameters:\n* $1
- the scheme name\n{{Related|Wikibase-validator}}",
"wikibase-validator-unknown-unit": "Input validation error when the
value has an unknown unit.\n\nParameters:\n* $1 - the unknown
unit\n{{Related|Wikibase-validator}}",
@@ -98,6 +99,7 @@
"wikibase-monolingualtext": "Format for displaying monolingual text
(along with a language name).\n\nParameters:\n* $1 - the text\n* $2 - the code
of the language of the text\n* $3 - the name of the language of the text, in
the user's language.",
"wikibase-snakformatter-valuetype-mismatch": "Warning shown when if the
data value type used by a Snak's (see [[d:Wikidata:Glossary]]) property's data
type is different from the type of the Snak's actual value.\n\nParameters:\n*
$1 - data value type of the property-value Snak's value.\n* $2 - data value
type used by the data type used in the property which is used by the
property-value Snak",
"wikibase-snakformatter-property-not-found": "Warning shown when a
Snak's (see [[d:Wikidata:Glossary]]) data type could not be determined based on
the Snak's property ID.",
+ "wikibase-snakformatter-formatting-exception": "Warning shown when a
Snak (see [[d:Wikidata:Glossary]]) could not be rendered due to an internal
error (a FormattingException).\n* $1 - the error message from the
FormattingException, in English, possibly including technical details.",
"wikibase-entity-summary-wbsetitem": "{{wikibase summary
messages|entity|Automatic edit summary generated when creating a new item. This
is a legacy message. Note that some item-specific messages need to be defined
with the generic wikibase-entity-summary prefix for use on client wikis.}}",
"wikibase-entity-summary-wbcreate-new": "{{wikibase summary
messages|entity|Automatic edit summary generated when creating a new entity.
This is for backwards compatibility for edits already made and in the database
with this message.}}",
"wikibase-entity-summary-wbcreateredirect": "{{wikibase summary
messages|entity|Automatic edit summary generated when changing an entity into a
redirect to another entity.}}",
diff --git
a/extensions/Wikibase/lib/includes/formatters/ErrorHandlingSnakFormatter.php
b/extensions/Wikibase/lib/includes/formatters/ErrorHandlingSnakFormatter.php
index 132d5fb..9d4508f 100644
--- a/extensions/Wikibase/lib/includes/formatters/ErrorHandlingSnakFormatter.php
+++ b/extensions/Wikibase/lib/includes/formatters/ErrorHandlingSnakFormatter.php
@@ -77,11 +77,15 @@
);
}
} catch ( PropertyDataTypeLookupException $ex ) {
- // @todo: PropertyDataTypeLookupException should be
wrapped in a FormatterException
$warningText = $this->formatWarning(
'wikibase-snakformatter-property-not-found',
$snak->getPropertyId()->getSerialization()
);
+ } catch ( FormattingException $ex ) {
+ $warningText = $this->formatWarning(
+ 'wikibase-snakformatter-formatting-exception',
+ $ex->getMessage() // this is
unlocalized/technical!
+ );
}
if ( $snak instanceof PropertyValueSnak &&
$this->fallbackFormatter ) {
diff --git
a/extensions/Wikibase/lib/includes/formatters/PropertyValueSnakFormatter.php
b/extensions/Wikibase/lib/includes/formatters/PropertyValueSnakFormatter.php
index f86ab0e..278d3e7 100644
--- a/extensions/Wikibase/lib/includes/formatters/PropertyValueSnakFormatter.php
+++ b/extensions/Wikibase/lib/includes/formatters/PropertyValueSnakFormatter.php
@@ -7,6 +7,7 @@
use DataValues\UnDeserializableValue;
use InvalidArgumentException;
use Message;
+use OutOfBoundsException;
use ValueFormatters\Exceptions\MismatchingDataValueTypeException;
use ValueFormatters\FormatterOptions;
use ValueFormatters\FormattingException;
@@ -105,9 +106,9 @@
$propertyType =
$this->typeLookup->getDataTypeIdForProperty( $snak->getPropertyId() );
$expectedDataValueType =
$this->getDataValueTypeForPropertyDataType( $propertyType );
} catch ( PropertyDataTypeLookupException $ex ) {
- // @todo: wrap PropertyDataTypeLookupException in a
FormatterException,
- // handle that exception in ErrorHandlingSnakFormatter
throw $ex;
+ } catch ( OutOfBoundsException $ex ) {
+ throw new FormattingException( $ex->getMessage(), 0,
$ex );
}
$this->checkValueType( $value, $expectedDataValueType );
diff --git
a/extensions/Wikibase/lib/tests/phpunit/formatters/ErrorHandlingSnakFormatterTest.php
b/extensions/Wikibase/lib/tests/phpunit/formatters/ErrorHandlingSnakFormatterTest.php
index 5cccd13..ef05e27 100644
---
a/extensions/Wikibase/lib/tests/phpunit/formatters/ErrorHandlingSnakFormatterTest.php
+++
b/extensions/Wikibase/lib/tests/phpunit/formatters/ErrorHandlingSnakFormatterTest.php
@@ -7,6 +7,7 @@
use Exception;
use Language;
use ValueFormatters\Exceptions\MismatchingDataValueTypeException;
+use ValueFormatters\FormattingException;
use ValueFormatters\ValueFormatter;
use Wikibase\DataModel\Entity\PropertyId;
use Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookupException;
@@ -118,6 +119,11 @@
new PropertyDataTypeLookupException( new
PropertyId( 'P1' ) ),
$valueFormatter
),
+ 'FormattingException' => array(
+ '<span class="error
wb-format-error">(wikibase-snakformatter-formatting-exception: TEST)</span>',
+ new PropertyValueSnak( $p1, new StringValue(
'foo' ) ),
+ new FormattingException( 'TEST' ),
+ ),
);
}
diff --git
a/extensions/Wikibase/lib/tests/phpunit/formatters/PropertyValueSnakFormatterTest.php
b/extensions/Wikibase/lib/tests/phpunit/formatters/PropertyValueSnakFormatterTest.php
index 4ac73f0..51720bf 100644
---
a/extensions/Wikibase/lib/tests/phpunit/formatters/PropertyValueSnakFormatterTest.php
+++
b/extensions/Wikibase/lib/tests/phpunit/formatters/PropertyValueSnakFormatterTest.php
@@ -6,6 +6,7 @@
use DataTypes\DataTypeFactory;
use DataValues\StringValue;
use DataValues\UnDeserializableValue;
+use OutOfBoundsException;
use ValueFormatters\FormatterOptions;
use ValueFormatters\StringFormatter;
use ValueFormatters\ValueFormatter;
@@ -78,13 +79,20 @@
* @return DataTypeFactory
*/
private function getMockDataTypeFactory( $dataType, $valueType ) {
+ if ( $valueType !== '' ) {
+ $getValueTypeIdForPropertyResult = $this->returnValue(
new DataType( $dataType, $valueType ) );
+ } else {
+ $getValueTypeIdForPropertyResult =
$this->throwException(
+ new OutOfBoundsException( 'unknown datatype ' .
$dataType ) );
+ }
+
$typeFactory = $this->getMockBuilder(
'DataTypes\DataTypeFactory' )
->disableOriginalConstructor()
->getMock();
$typeFactory->expects( $this->any() )
->method( 'getType' )
- ->will( $this->returnValue( new DataType( $dataType,
$valueType ) ) );
+ ->will( $getValueTypeIdForPropertyResult );
return $typeFactory;
}
@@ -190,13 +198,23 @@
'property not found, fail' => array(
new PropertyValueSnak( 7, new StringValue(
'dummy' ) ),
- '', // triggers an exception from the mock
PropertyDataTypeLookup
+ '', // triggers an exception from the mock
DataTypeFactory
'xxx', // should not be used
SnakFormatter::FORMAT_HTML,
$dispatchingFormatter,
null,
'Wikibase\DataModel\Services\Lookup\PropertyDataTypeLookupException'
),
+
+ 'data type not found, fail' => array(
+ new PropertyValueSnak( 7, new StringValue(
'dummy' ) ),
+ 'url',
+ '', // triggers an exception from the mock
DataTypeFactory
+ SnakFormatter::FORMAT_HTML,
+ $dispatchingFormatter,
+ null,
+ 'ValueFormatters\FormattingException'
+ ),
);
}
diff --git a/extensions/Wikibase/repo/i18n/de.json
b/extensions/Wikibase/repo/i18n/de.json
index ceb5e69..bc00e21 100644
--- a/extensions/Wikibase/repo/i18n/de.json
+++ b/extensions/Wikibase/repo/i18n/de.json
@@ -49,6 +49,8 @@
"wikibase-entitytermsforlanguagelistview-description": "Beschreibung",
"wikibase-entitytermsforlanguagelistview-label": "Bezeichnung",
"wikibase-entitytermsforlanguagelistview-language": "Sprache",
+ "wikibase-entitytermsforlanguagelistview-more": "Weitere Sprachen",
+ "wikibase-entitytermsforlanguagelistview-less": "Weniger Sprachen",
"wikibase-label-empty": "Keine Bezeichnung vorhanden",
"wikibase-label-edit-placeholder": "Bezeichnung eingeben",
"wikibase-label-edit-placeholder-language-aware": "Bezeichnung auf $1
eingeben",
@@ -102,6 +104,7 @@
"wikibase-aliases-input-help-message": "Um dieses Objekt leichter
wiederzufinden, kannst du alternative Namen eingeben.",
"wikibase-aliases-empty": "Es wurden keine Aliasse definiert.",
"wikibase-propertypage-datatype": "Datentyp",
+ "wikibase-propertypage-bad-datatype": "Unbekannter Datentyp: $1",
"wikibase-claimview-snak-tooltip": "Gib einen Wert ein, der der
Eigenschaft namens „$1“ entspricht. Falls die Eigenschaft keinen bestimmten
Wert hat oder der derzeitige Wert unbekannt ist, kannst du eine Alternative
wählen, um einen benutzerdefinierten Wert anzugeben, indem du auf das Symbol
neben dem Werteingabekasten klickst.",
"wikibase-claimview-snak-new-tooltip": "Nach der Festlegung einer
Eigenschaft kannst du einen dazugehörigen Wert eingeben. Falls die Eigenschaft
keinen bestimmten Wert hat oder der derzeitige Wert unbekannt ist, kannst du
eine Alternative wählen, um einen benutzerdefinierten Wert anzugeben, indem du
auf das Symbol neben dem Werteingabekasten klickst.",
"wikibase-statementview-rank-preferred": "Bevorzugter Rang",
diff --git a/extensions/Wikibase/repo/i18n/eml.json
b/extensions/Wikibase/repo/i18n/eml.json
index a0df9a2..639e922 100644
--- a/extensions/Wikibase/repo/i18n/eml.json
+++ b/extensions/Wikibase/repo/i18n/eml.json
@@ -7,6 +7,7 @@
},
"wikibase-edit": "mudéfica",
"wikibase-save": "sêlva",
+ "wikibase-entitytermsforlanguagelistview-more": "Più lèngvi",
"wikibase-setdescription-label": "Spiegasiòun",
"wikibase-setdescription-submit": "Scrév la spiegasiòun"
}
diff --git a/extensions/Wikibase/repo/i18n/en.json
b/extensions/Wikibase/repo/i18n/en.json
index d39c1ab..f395db7 100644
--- a/extensions/Wikibase/repo/i18n/en.json
+++ b/extensions/Wikibase/repo/i18n/en.json
@@ -35,6 +35,8 @@
"wikibase-entitytermsforlanguagelistview-description": "Description",
"wikibase-entitytermsforlanguagelistview-label": "Label",
"wikibase-entitytermsforlanguagelistview-language": "Language",
+ "wikibase-entitytermsforlanguagelistview-more": "More languages",
+ "wikibase-entitytermsforlanguagelistview-less": "Less languages",
"wikibase-label-empty": "No label defined",
"wikibase-label-edit-placeholder": "enter a label",
"wikibase-label-edit-placeholder-language-aware": "enter a label in $1",
@@ -90,6 +92,7 @@
"wikibase-aliases-input-help-message": "To make this entity easier to
find, you can enter alternative names.",
"wikibase-aliases-empty": "No aliases defined",
"wikibase-propertypage-datatype": "Data type",
+ "wikibase-propertypage-bad-datatype": "Unknown data type: $1",
"wikibase-property-footer": "",
"wikibase-claimview-snak-tooltip": "Enter a value corresponding to the
property named \"$1\". If the property has no designated value or the actual
value is not known, you may choose an alternative to specifying a custom value
by clicking the icon next to the value input box.",
"wikibase-claimview-snak-new-tooltip": "After specifying a property you
can enter a corresponding value. If the property has no designated value or the
actual value is not known, you may choose an alternative to specifying a custom
value by clicking the icon next to the value input box.",
diff --git a/extensions/Wikibase/repo/i18n/frr.json
b/extensions/Wikibase/repo/i18n/frr.json
index 401d961..f646a90 100644
--- a/extensions/Wikibase/repo/i18n/frr.json
+++ b/extensions/Wikibase/repo/i18n/frr.json
@@ -9,10 +9,12 @@
"wikibase-add": "diartusaat",
"wikibase-label-empty": "Diar as nään nööm.",
"wikibase-description-empty": "Diar as nian beskriiwang.",
- "wikibase-statements": "Ütjsaagen",
+ "wikibase-statementsection-statements": "Ütjsaagen",
"wikibase-sitelinks-special": "Ööder wääbsidjen",
"wikibase-aliases-empty": "Nian aliasen fäästlaanj.",
"wikibase-statementview-rank-normal": "Normool steed",
"wikibase-statementview-referencesheading-pendingcountersubject":
"{{PLURAL:$1|efterwis|efterwiser}}",
+ "special-itembytitle": "Dootenobjekten efter tiitel",
+ "special-newitem": "En nei dootenobjekt maage",
"wikibase-listdatatypes-wikibase-item-body": "Ferwisang tu ööder
objekten uun't projekt. Di nöömrüm „objekt“ woort trochsoocht. Det as man en
ianfach tekstfial.\n* scheme – hiart tu't Iri-tiakenkeed.\n* hierarchicalpart –
hiart tu't Iri-tiakenkeed.\n* query – hiart tu't Iri-tiakenkeed.\n* fragment –
hiart tu't Iri-tiakenkeed."
}
diff --git a/extensions/Wikibase/repo/i18n/jam.json
b/extensions/Wikibase/repo/i18n/jam.json
new file mode 100644
index 0000000..e4ce180
--- /dev/null
+++ b/extensions/Wikibase/repo/i18n/jam.json
@@ -0,0 +1,8 @@
+{
+ "@metadata": {
+ "authors": [
+ "Katxis"
+ ]
+ },
+ "wikibase-edit": "edit"
+}
diff --git a/extensions/Wikibase/repo/i18n/pl.json
b/extensions/Wikibase/repo/i18n/pl.json
index 1b1dae2..fb820c7 100644
--- a/extensions/Wikibase/repo/i18n/pl.json
+++ b/extensions/Wikibase/repo/i18n/pl.json
@@ -38,6 +38,8 @@
"wikibase-entitytermsforlanguagelistview-description": "Opis",
"wikibase-entitytermsforlanguagelistview-label": "Etykieta",
"wikibase-entitytermsforlanguagelistview-language": "Język",
+ "wikibase-entitytermsforlanguagelistview-more": "Więcej języków",
+ "wikibase-entitytermsforlanguagelistview-less": "Mniej języków",
"wikibase-label-empty": "Etykieta nie została podana",
"wikibase-label-edit-placeholder": "podaj etykietę",
"wikibase-label-edit-placeholder-language-aware": "podaj etykietę w $1",
diff --git a/extensions/Wikibase/repo/i18n/qqq.json
b/extensions/Wikibase/repo/i18n/qqq.json
index 42dc13f..46fc649 100644
--- a/extensions/Wikibase/repo/i18n/qqq.json
+++ b/extensions/Wikibase/repo/i18n/qqq.json
@@ -66,6 +66,8 @@
"wikibase-entitytermsforlanguagelistview-description": "List of labels,
aliases and descriptions in one or more languages: Heading of the
\"description\" column. (see
[[d:Wikidata:Glossary]])\n{{Identical|Description}}",
"wikibase-entitytermsforlanguagelistview-label": "List of labels,
aliases and descriptions in one or more languages: Heading of the \"label\"
column. (see [[d:Wikidata:Glossary]])\n{{Identical|Label}}",
"wikibase-entitytermsforlanguagelistview-language": "List of labels,
aliases and descriptions in one or more languages: Heading of the \"language\"
column. (see [[d:Wikidata:Glossary]])\n{{Identical|Language}}",
+ "wikibase-entitytermsforlanguagelistview-more": "List of labels,
aliases and descriptions in one or more languages: Label for the button to show
all non-empty sets of terms.",
+ "wikibase-entitytermsforlanguagelistview-less": "List of labels,
aliases and descriptions in one or more languages: Label for the button to hide
all but the default terms.",
"wikibase-label-empty": "Placeholder message displayed instead of the
item's label in case no label has been specified yet. This message is displayed
only when the user has JavaScript disabled. (When JavaScript is enabled, an
input box will be displayed instead.)",
"wikibase-label-edit-placeholder": "[[File:Screenshot WikidataRepo
2012-05-13 G.png|right|0x150px]]\nThis is a generic text used as a placeholder
while editing a new label. See also the Wikidata glossary on
[[d:Wikidata:Glossary#languageattribute-label|label]].",
"wikibase-label-edit-placeholder-language-aware": "Like
{{msg-mw|Wikibase-label-edit-placeholder}}, but language aware. $1 is the
autonym of the language.",
@@ -121,6 +123,7 @@
"wikibase-aliases-input-help-message": "Bubble help message for
entering the aliases of the data set used for a specific
item.\n\nParameters:\n* $1 - (Unused) language
name\n{{Related|Wikibase-input-help-message}}",
"wikibase-aliases-empty": "Placeholder message when no aliases for this
data set representing a specific item have been defined.",
"wikibase-propertypage-datatype": "Heading used on a page displaying a
[[d:Wikidata:Glossary#Property|Property]] for the
[[d:Wikidata:Glossary#Datatypes|data type]] applied to a property.\n\nThe
section below the heading contains a data type label. (See
[[d:Special:ListDatatypes|List of all data types
available]].)\n{{Identical|Data type}}",
+ "wikibase-propertypage-bad-datatype": "Error message shown on the
property page when the property has an unknown data type.\n* $1 the ID of the
unknown data type.",
"wikibase-property-footer": "Text displayed at the bottom of every
property page.",
"wikibase-claimview-snak-tooltip": "Tooltip message displayed when
hovering/clicking the help icon next to the save, cancel and remove links of a
claim (see [[d:Wikidata:Glossary#Claim]]).\n\nParameters:\n* $1 - the property
name the user is about to edit a value of or add another value to",
"wikibase-claimview-snak-new-tooltip": "Tooltip message displayed when
hovering/clicking the help icon next to the save, cancel and remove links of a
claim (see [[d:Wikidata:Glossary]]) when about to add a completely new claim
which includes specifying the property.",
diff --git a/extensions/Wikibase/repo/includes/Validators/SnakValidator.php
b/extensions/Wikibase/repo/includes/Validators/SnakValidator.php
index 9c991e9..faa9760 100644
--- a/extensions/Wikibase/repo/includes/Validators/SnakValidator.php
+++ b/extensions/Wikibase/repo/includes/Validators/SnakValidator.php
@@ -6,6 +6,7 @@
use DataValues\DataValue;
use DataValues\UnDeserializableValue;
use InvalidArgumentException;
+use OutOfBoundsException;
use ValueValidators\Error;
use ValueValidators\Result;
use ValueValidators\ValueValidator;
@@ -179,10 +180,21 @@
* @return Result
*/
public function validateDataValue( DataValue $dataValue, $dataTypeId ) {
- $dataValueType = $this->dataTypeFactory->getType( $dataTypeId
)->getDataValueType();
+ try {
+ $dataValueType = $this->dataTypeFactory->getType(
$dataTypeId )->getDataValueType();
+ } catch ( OutOfBoundsException $ex ) {
+ return Result::newError( array(
+ Error::newError(
+ 'Bad data type: ' . $dataTypeId,
+ null,
+ 'bad-data-type',
+ array( $dataTypeId )
+ ),
+ ) );
+ }
if ( $dataValue instanceof UnDeserializableValue ) {
- $result = Result::newError( array(
+ return Result::newError( array(
Error::newError(
'Bad snak value: ' .
$dataValue->getReason(),
null,
@@ -191,7 +203,7 @@
),
) );
} elseif ( $dataValueType != $dataValue->getType() ) {
- $result = Result::newError( array(
+ return Result::newError( array(
Error::newError(
'Bad value type: ' .
$dataValue->getType() . ', expected ' . $dataValueType,
null,
@@ -199,10 +211,10 @@
array( $dataValue->getType(),
$dataValueType )
),
) );
- } else {
- $result = Result::newSuccess();
}
+ $result = Result::newSuccess();
+
//XXX: DataTypeValidatorFactory should expose only one
validator, which would be a CompositeValidator
foreach ( $this->validatorFactory->getValidators( $dataTypeId )
as $validator ) {
$subResult = $validator->validate( $dataValue );
diff --git a/extensions/Wikibase/repo/includes/api/CreateClaim.php
b/extensions/Wikibase/repo/includes/api/CreateClaim.php
index 5a77d38..99676f9 100644
--- a/extensions/Wikibase/repo/includes/api/CreateClaim.php
+++ b/extensions/Wikibase/repo/includes/api/CreateClaim.php
@@ -82,7 +82,7 @@
$statement =
$entity->getStatements()->getFirstStatementWithGuid(
$changeOp->getStatementGuid() );
- $status = $this->saveChanges( $entity, $summary );
+ $status = $this->attemptSaveEntity( $entity, $summary,
EDIT_UPDATE );
$this->getResultBuilder()->addRevisionIdFromStatusToResult(
$status, 'pageinfo' );
$this->getResultBuilder()->markSuccess();
$this->getResultBuilder()->addStatement( $statement );
diff --git a/extensions/Wikibase/repo/includes/api/ModifyClaim.php
b/extensions/Wikibase/repo/includes/api/ModifyClaim.php
index 1fee1b3..374fd33 100644
--- a/extensions/Wikibase/repo/includes/api/ModifyClaim.php
+++ b/extensions/Wikibase/repo/includes/api/ModifyClaim.php
@@ -103,22 +103,6 @@
}
/**
- * @since 0.4
- *
- * @param Entity $entity
- * @param Summary $summary
- *
- * @return Status
- */
- public function saveChanges( Entity $entity, Summary $summary ) {
- return $this->attemptSaveEntity(
- $entity,
- $summary,
- EDIT_UPDATE
- );
- }
-
- /**
* @see ApiBase::getAllowedParams
*/
protected function getAllowedParams() {
diff --git a/extensions/Wikibase/repo/includes/api/RemoveClaims.php
b/extensions/Wikibase/repo/includes/api/RemoveClaims.php
index e681d0a..a820a20 100644
--- a/extensions/Wikibase/repo/includes/api/RemoveClaims.php
+++ b/extensions/Wikibase/repo/includes/api/RemoveClaims.php
@@ -80,7 +80,7 @@
$this->errorReporter->dieException( $e, 'failed-save' );
}
- $status = $this->saveChanges( $entity, $summary );
+ $status = $this->attemptSaveEntity( $entity, $summary,
EDIT_UPDATE );
$this->getResultBuilder()->addRevisionIdFromStatusToResult(
$status, 'pageinfo' );
$this->getResultBuilder()->markSuccess();
$this->getResultBuilder()->setList( null, 'claims',
$params['claim'], 'claim' );
diff --git a/extensions/Wikibase/repo/includes/api/RemoveQualifiers.php
b/extensions/Wikibase/repo/includes/api/RemoveQualifiers.php
index 780d7bd..e639fbc 100644
--- a/extensions/Wikibase/repo/includes/api/RemoveQualifiers.php
+++ b/extensions/Wikibase/repo/includes/api/RemoveQualifiers.php
@@ -79,7 +79,7 @@
$this->errorReporter->dieException( $e, 'failed-save' );
}
- $status = $this->saveChanges( $entity, $summary );
+ $status = $this->attemptSaveEntity( $entity, $summary,
EDIT_UPDATE );
$this->getResultBuilder()->addRevisionIdFromStatusToResult(
$status, 'pageinfo' );
$this->getResultBuilder()->markSuccess();
}
diff --git a/extensions/Wikibase/repo/includes/api/RemoveReferences.php
b/extensions/Wikibase/repo/includes/api/RemoveReferences.php
index 56c9673..6602f1e 100644
--- a/extensions/Wikibase/repo/includes/api/RemoveReferences.php
+++ b/extensions/Wikibase/repo/includes/api/RemoveReferences.php
@@ -86,7 +86,7 @@
$this->errorReporter->dieException( $e, 'failed-save' );
}
- $status = $this->saveChanges( $entity, $summary );
+ $status = $this->attemptSaveEntity( $entity, $summary,
EDIT_UPDATE );
$this->getResultBuilder()->addRevisionIdFromStatusToResult(
$status, 'pageinfo' );
$this->getResultBuilder()->markSuccess();
}
diff --git a/extensions/Wikibase/repo/includes/api/SetClaim.php
b/extensions/Wikibase/repo/includes/api/SetClaim.php
index 4cdad2c..4d21856 100644
--- a/extensions/Wikibase/repo/includes/api/SetClaim.php
+++ b/extensions/Wikibase/repo/includes/api/SetClaim.php
@@ -101,7 +101,7 @@
$this->modificationHelper->applyChangeOp( $changeop, $entity,
$summary );
- $status = $this->saveChanges( $entity, $summary );
+ $status = $this->attemptSaveEntity( $entity, $summary,
EDIT_UPDATE );
$this->getResultBuilder()->addRevisionIdFromStatusToResult(
$status, 'pageinfo' );
$this->getResultBuilder()->markSuccess();
$this->getResultBuilder()->addStatement( $claim );
diff --git a/extensions/Wikibase/repo/includes/api/SetClaimValue.php
b/extensions/Wikibase/repo/includes/api/SetClaimValue.php
index 64921ea..7a70f44 100644
--- a/extensions/Wikibase/repo/includes/api/SetClaimValue.php
+++ b/extensions/Wikibase/repo/includes/api/SetClaimValue.php
@@ -73,7 +73,7 @@
$this->modificationHelper->applyChangeOp( $changeOp, $entity,
$summary );
- $status = $this->saveChanges( $entity, $summary );
+ $status = $this->attemptSaveEntity( $entity, $summary,
EDIT_UPDATE );
$this->getResultBuilder()->addRevisionIdFromStatusToResult(
$status, 'pageinfo' );
$this->getResultBuilder()->markSuccess();
$this->getResultBuilder()->addStatement( $claim );
diff --git a/extensions/Wikibase/repo/includes/api/SetQualifier.php
b/extensions/Wikibase/repo/includes/api/SetQualifier.php
index d735c3d..ef6cf06 100644
--- a/extensions/Wikibase/repo/includes/api/SetQualifier.php
+++ b/extensions/Wikibase/repo/includes/api/SetQualifier.php
@@ -75,7 +75,7 @@
$changeOp = $this->getChangeOp();
$this->modificationHelper->applyChangeOp( $changeOp, $entity,
$summary );
- $status = $this->saveChanges( $entity, $summary );
+ $status = $this->attemptSaveEntity( $entity, $summary,
EDIT_UPDATE );
$this->getResultBuilder()->addRevisionIdFromStatusToResult(
$status, 'pageinfo' );
$this->getResultBuilder()->markSuccess();
$this->getResultBuilder()->addStatement( $statement );
diff --git a/extensions/Wikibase/repo/includes/api/SetReference.php
b/extensions/Wikibase/repo/includes/api/SetReference.php
index 8f300a4..c8fa0f9 100644
--- a/extensions/Wikibase/repo/includes/api/SetReference.php
+++ b/extensions/Wikibase/repo/includes/api/SetReference.php
@@ -106,7 +106,7 @@
$changeOp = $this->getChangeOp( $newReference );
$this->modificationHelper->applyChangeOp( $changeOp, $entity,
$summary );
- $status = $this->saveChanges( $entity, $summary );
+ $status = $this->attemptSaveEntity( $entity, $summary,
EDIT_UPDATE );
$resultBuilder = $this->getResultBuilder();
$resultBuilder->addRevisionIdFromStatusToResult( $status,
'pageinfo' );
$resultBuilder->markSuccess();
diff --git a/extensions/Wikibase/repo/includes/specials/SpecialNewProperty.php
b/extensions/Wikibase/repo/includes/specials/SpecialNewProperty.php
index 07eb0a0..ccce096 100644
--- a/extensions/Wikibase/repo/includes/specials/SpecialNewProperty.php
+++ b/extensions/Wikibase/repo/includes/specials/SpecialNewProperty.php
@@ -89,7 +89,8 @@
protected function dataTypeExists() {
$dataTypeFactory =
WikibaseRepo::getDefaultInstance()->getDataTypeFactory();
- return $dataTypeFactory->getType( $this->dataType ) !== null;
+ $ids = $dataTypeFactory->getTypeIds();
+ return in_array( $this->dataType, $ids );
}
/**
diff --git
a/extensions/Wikibase/repo/tests/phpunit/includes/Validators/SnakValidatorTest.php
b/extensions/Wikibase/repo/tests/phpunit/includes/Validators/SnakValidatorTest.php
index 20c83ab..95e694c 100644
---
a/extensions/Wikibase/repo/tests/phpunit/includes/Validators/SnakValidatorTest.php
+++
b/extensions/Wikibase/repo/tests/phpunit/includes/Validators/SnakValidatorTest.php
@@ -8,6 +8,7 @@
use DataValues\UnDeserializableValue;
use DataValues\UnknownValue;
use PHPUnit_Framework_TestCase;
+use ValueValidators\Error;
use Wikibase\DataModel\Entity\PropertyId;
use Wikibase\DataModel\Reference;
use Wikibase\DataModel\ReferenceList;
@@ -61,12 +62,14 @@
'alphabetic' => 'string'
) );
- $p1 = new PropertyId( 'p1' );
- $p2 = new PropertyId( 'p2' );
+ $p1 = new PropertyId( 'P1' );
+ $p2 = new PropertyId( 'P2' );
+ $p4 = new PropertyId( 'P4' );
$this->propertyDataTypeLookup = new InMemoryDataTypeLookup();
$this->propertyDataTypeLookup->setDataTypeForProperty( $p1,
'numeric' );
$this->propertyDataTypeLookup->setDataTypeForProperty( $p2,
'alphabetic' );
+ $this->propertyDataTypeLookup->setDataTypeForProperty( $p4,
'fiddlediddle' );
$this->validatorFactory = $this->getMock(
'Wikibase\Repo\DataTypeValidatorFactory' );
$this->validatorFactory->expects( $this->any() )
@@ -226,38 +229,96 @@
}
public function provideValidate() {
- $p1 = new PropertyId( 'p1' ); // numeric
- $p2 = new PropertyId( 'p2' ); // alphabetic
- $p3 = new PropertyId( 'p3' ); // bad
+ $p1 = new PropertyId( 'P1' ); // numeric
+ $p2 = new PropertyId( 'P2' ); // alphabetic
+ $p3 = new PropertyId( 'P3' ); // bad
+ $p4 = new PropertyId( 'P4' ); // property with bad data type
$cases = array();
$snak = new PropertyNoValueSnak( $p1 );
- $cases[] = array( $snak, 'PropertyNoValueSnak', true );
+ $cases[] = array( $snak, 'PropertyNoValueSnak' );
$snak = new PropertySomeValueSnak( $p2 );
- $cases[] = array( $snak, 'PropertySomeValueSnak', true );
+ $cases[] = array( $snak, 'PropertySomeValueSnak' );
$snak = new PropertyValueSnak( $p1, new StringValue( '123' ) );
- $cases[] = array( $snak, 'valid numeric value', true );
-
- $snak = new PropertyValueSnak( $p2, new StringValue( '123' ) );
- $cases[] = array( $snak, 'invalid alphabetic value', false );
+ $cases[] = array( $snak, 'valid numeric value' );
$snak = new PropertyValueSnak( $p2, new StringValue( 'abc' ) );
- $cases[] = array( $snak, 'valid alphabetic value', true );
+ $cases[] = array( $snak, 'valid alphabetic value' );
+
+ $snak = new PropertyValueSnak( $p2, new StringValue( '123' ) );
+ $cases[] = array(
+ $snak,
+ 'invalid alphabetic value',
+ Error::newError(
+ 'doesn\'t match /^[A-Z]+$/i',
+ null,
+ 'invalid',
+ array()
+ )
+ );
$snak = new PropertyValueSnak( $p1, new StringValue( 'abc' ) );
- $cases[] = array( $snak, 'invalid numeric value', false );
+ $cases[] = array(
+ $snak,
+ 'invalid numeric value',
+ Error::newError(
+ 'doesn\'t match /^\d+$/',
+ null,
+ 'invalid',
+ array()
+ )
+ );
- $snak = new PropertyValueSnak( $p1, new UnDeserializableValue(
'abc', 'string', 'error' ) );
- $cases[] = array( $snak, 'bad value', false );
+ $snak = new PropertyValueSnak( $p1, new UnDeserializableValue(
'abc', 'string', 'ooops' ) );
+ $cases[] = array(
+ $snak,
+ 'bad value',
+ Error::newError(
+ 'Bad snak value: ooops',
+ null,
+ 'bad-value',
+ array( 'ooops' )
+ )
+ );
$snak = new PropertyValueSnak( $p1, new UnknownValue( 'abc' ) );
- $cases[] = array( $snak, 'wrong value type', false );
+ $cases[] = array(
+ $snak,
+ 'wrong value type',
+ Error::newError(
+ 'Bad value type: unknown, expected string',
+ null,
+ 'bad-value-type',
+ array( 'unknown', 'string' )
+ )
+ );
$snak = new PropertyValueSnak( $p3, new StringValue( 'abc' ) );
- $cases[] = array( $snak, 'bad property', false );
+ $cases[] = array(
+ $snak,
+ 'bad property',
+ Error::newError(
+ 'Property P3 not found!',
+ null,
+ 'no-such-property',
+ array( 'P3' )
+ )
+ );
+
+ $snak = new PropertyValueSnak( $p4, new StringValue( 'abc' ) );
+ $cases[] = array(
+ $snak,
+ 'bad data type',
+ Error::newError(
+ 'Bad data type: fiddlediddle',
+ null,
+ 'bad-data-type',
+ array( 'fiddlediddle' )
+ )
+ );
return $cases;
}
@@ -265,12 +326,18 @@
/**
* @dataProvider provideValidate
*/
- public function testValidate( Snak $snak, $description, $expectedValid
= true ) {
+ public function testValidate( Snak $snak, $description, $expectedError
= null ) {
$validator = $this->getSnakValidator();
$result = $validator->validate( $snak );
- $this->assertEquals( $expectedValid, $result->isValid(),
$description );
+ if ( $expectedError === null ) {
+ $this->assertTrue( $result->isValid(), $description .
': isValid' );
+ } else {
+ $resultErrors = $result->getErrors();
+ $firstError = reset( $resultErrors );
+ $this->assertEquals( $expectedError, $firstError,
$description );
+ }
}
public function provideValidateDataValue() {
diff --git
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js
index a9b3d10..09d429a 100644
---
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js
+++
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.js
@@ -1,6 +1,7 @@
/**
* @licence GNU GPL v2+
* @author H. Snater < [email protected] >
+ * @author Bene* < [email protected] >
*/
( function( mw, wb, $ ) {
'use strict';
@@ -12,16 +13,10 @@
* @since 0.5
* @extends jQuery.ui.TemplatedWidget
*
- * @option {Object[]} value
- * Object representing the widget's value.
- * Structure: [
- * {
- * language: <{string]>,
- * label: <{wikibase.datamodel.Term}>,
- * description: <{wikibase.datamodel.Term}>,
- * aliases: <{wikibase.datamodel.MultiTerm}>
- * }[, ...]
- * ]
+ * @option {Fingerprint} value
+ *
+ * @option {string[]} userLanguages
+ * A list of languages for which terms should be displayed initially.
*
* @option {wikibase.entityChangers.EntityChangersFactory}
entityChangersFactory
*
@@ -58,9 +53,20 @@
$header:
'.wikibase-entitytermsforlanguagelistview-header',
$listview:
'.wikibase-entitytermsforlanguagelistview-listview'
},
- value: [],
+ value: null,
+ userLanguages: [],
entityChangersFactory: null
},
+
+ /**
+ * @type {jQuery}
+ */
+ $listview: null,
+
+ /**
+ * @type {jQuery}
+ */
+ $entitytermsforlanguagelistviewMore: null,
/**
* @type {boolean}
@@ -68,10 +74,16 @@
_isInEditMode: false,
/**
+ * @type {Object} Map of language codes pointing to list items (in the
form of jQuery nodes).
+ */
+ _moreLanguagesItems: {},
+
+ /**
* @see jQuery.ui.TemplatedWidget._create
*/
_create: function() {
- if ( !$.isArray( this.options.value )
+ if ( !( this.options.value instanceof wb.datamodel.Fingerprint )
+ || !$.isArray( this.options.userLanguages )
|| !this.options.entityChangersFactory
) {
throw new Error( 'Required option(s) missing' );
@@ -97,6 +109,10 @@
if ( listview ) {
listview.destroy();
}
+ }
+
+ if ( this.$entitytermsforlanguagelistviewMore ) {
+ this.$entitytermsforlanguagelistviewMore.remove();
}
this.element.removeClass(
'wikibase-entitytermsforlanguagelistview' );
@@ -126,11 +142,11 @@
} );
} );
- var mismatch = scrapedLanguages.length !==
this.options.value.length;
+ var mismatch = scrapedLanguages.length !==
this.options.userLanguages.length;
if ( !mismatch ) {
for ( i = 0; i < scrapedLanguages.length; i++ ) {
- if ( scrapedLanguages[i] !==
this.options.value[i].language ) {
+ if ( scrapedLanguages[i] !==
this.options.userLanguages[i] ) {
mismatch = true;
break;
}
@@ -145,6 +161,8 @@
/**
* Creates the listview widget managing the entitytermsforlanguageview
widgets
+ *
+ * @private
*/
_createListView: function() {
var self = this,
@@ -189,9 +207,163 @@
};
}
} ),
- value: self.options.value || null,
+ value: $.map( this.options.userLanguages, function(
lang ) {
+ return self._getValueForLanguage( lang );
+ } ),
listItemNodeName: 'TR'
} );
+
+ if ( !this.element.find(
'.wikibase-entitytermsforlanguagelistview-more' ).length ) {
+ this._createEntitytermsforlanguagelistviewMore();
+ }
+ },
+
+ /**
+ * Creates a button which allows the user to show terms in all
languages available.
+ *
+ * @private
+ */
+ _createEntitytermsforlanguagelistviewMore: function() {
+ if ( $.isEmptyObject( this._getAdditionalLanguages() ) ) {
+ return;
+ }
+
+ var $moreLanguagesButton = $( '<a/>' )
+ .attr( 'href', '#' )
+ .click( $.proxy( this._onMoreLanguagesButtonClicked,
this ) );
+ this._toggleMoreLanguagesButton( $moreLanguagesButton );
+
+ this.$entitytermsforlanguagelistviewMore = $( '<div/>' )
+ .addClass(
'wikibase-entitytermsforlanguagelistview-more' )
+ .append( $moreLanguagesButton );
+
+ this.element.after( this.$entitytermsforlanguagelistviewMore );
+ },
+
+ /**
+ * Click handler for more languages button
+ *
+ * @private
+ */
+ _onMoreLanguagesButtonClicked: function( event ) {
+ var $button = $( event.target );
+
+ if ( !this._isMoreLanguagesExpanded() ) {
+ this._addMoreLanguages();
+ } else {
+ var previousTop = $button.offset().top;
+ this._removeMoreLanguages();
+ this._scrollUp( $button, previousTop );
+ }
+
+ this._toggleMoreLanguagesButton( $button );
+ return false;
+ },
+
+ /**
+ * Toggle more language button text between the
"wikibase-entitytermsforlanguagelistview-less"
+ * and "wikibase-entitytermsforlanguagelistview-more" messages.
+ *
+ * @param {jQuery} $button
+ * @private
+ */
+ _toggleMoreLanguagesButton: function( $button ) {
+ $button.text( mw.msg(
+ 'wikibase-entitytermsforlanguagelistview-'
+ + ( this._isMoreLanguagesExpanded() ? 'less' :
'more' )
+ ) );
+ },
+
+ _isMoreLanguagesExpanded: function() {
+ return !$.isEmptyObject( this._moreLanguagesItems );
+ },
+
+ /**
+ * Add 'more' languages to listview
+ *
+ * @private
+ */
+ _addMoreLanguages: function() {
+ var listview = this.$listview.data( 'listview' ),
+ lia = listview.listItemAdapter();
+
+ for ( var lang in this._getAdditionalLanguages() ) {
+ var $item = listview.addItem(
this._getValueForLanguage( lang ) );
+ if ( this._isInEditMode ) {
+ lia.liInstance( $item ).startEditing();
+ }
+ this._moreLanguagesItems[lang] = $item;
+ }
+ },
+
+ /**
+ * Remove 'more' languages from listview
+ *
+ * @private
+ */
+ _removeMoreLanguages: function() {
+ var listview = this.$listview.data( 'listview' );
+
+ $.each( this._moreLanguagesItems, function() {
+ listview.removeItem( this );
+ } );
+
+ this._moreLanguagesItems = {};
+ },
+
+ /**
+ * @return {Object} Map of additional language codes in this
fingerprint.
+ * @private
+ */
+ _getAdditionalLanguages: function() {
+ var fingerprint = this.options.value,
+ languages = {};
+
+ fingerprint.getLabels().each( function( lang ) {
+ languages[lang] = lang;
+ } );
+ fingerprint.getDescriptions().each( function( lang ) {
+ languages[lang] = lang;
+ } );
+ fingerprint.getAliases().each( function( lang ) {
+ languages[lang] = lang;
+ } );
+
+ $.each( this.options.userLanguages, function() {
+ delete languages[this];
+ } );
+
+ return languages;
+ },
+
+ /**
+ * @param {jQuery} $this
+ * @param {int} previousTop
+ * @private
+ */
+ _scrollUp: function( $this, previousTop ) {
+ var top = $this.offset().top;
+
+ if ( top < $( window ).scrollTop() ) {
+ // This does not only keep the toggler visible, it also
updates all stick(y)nodes.
+ window.scrollBy( 0, top - previousTop );
+ }
+ },
+
+ /**
+ * @param {string} lang
+ * @return {Object}
+ * @private
+ */
+ _getValueForLanguage: function( lang ) {
+ var fingerprint = this.options.value;
+
+ return {
+ language: lang,
+ label: fingerprint.getLabelFor( lang ) || new
wb.datamodel.Term( lang, '' ),
+ description: fingerprint.getDescriptionFor( lang ) ||
new wb.datamodel.Term( lang, '' ),
+ aliases: fingerprint.getAliasesFor( lang ) || new
wb.datamodel.MultiTerm( lang, [] )
+ };
},
/**
@@ -418,8 +590,8 @@
},
/**
- * @param {Object[]} [value]
- * @return {Object[]|*}
+ * @param {Fingerprint} [value]
+ * @return {Fingerprint|*}
*/
value: function( value ) {
if ( value !== undefined ) {
@@ -429,11 +601,20 @@
var listview = this.$listview.data( 'listview' ),
lia = listview.listItemAdapter();
- value = [];
+ // Clones the current Fingerprint.
+ // FIXME: This accesses the private _items property since there
is no copy or clone.
+ value = new wb.datamodel.Fingerprint(
+ new wb.datamodel.TermMap(
this.options.value.getLabels()._items ),
+ new wb.datamodel.TermMap(
this.options.value.getDescriptions()._items ),
+ new wb.datamodel.MultiTermMap(
this.options.value.getAliases()._items )
+ );
+ // this only adds all terms visible in the ui to the
Fingerprint, all other languages get ignored
listview.items().each( function() {
- var entitytermsforlanguageview = lia.liInstance( $(
this ) );
- value.push( entitytermsforlanguageview.value() );
+ var terms = lia.liInstance( $( this ) ).value();
+ value.setLabel( terms.language, terms.label );
+ value.setDescription( terms.language, terms.description
);
+ value.setAliases( terms.language, terms.aliases );
} );
return value;
diff --git
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js
index 68d03f2..0397e94 100644
---
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js
+++
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.entitytermsview.js
@@ -2,7 +2,7 @@
* @licence GNU GPL v2+
* @author H. Snater < [email protected] >
*/
-( function( mw, $ ) {
+( function( mw, wb, $ ) {
'use strict';
var PARENT = $.ui.EditableTemplatedWidget;
@@ -12,16 +12,10 @@
* @since 0.5
* @extends jQuery.ui.EditableTemplatedWidget
*
- * @option {Object[]} value
- * Object representing the widget's value.
- * Structure: [
- * {
- * language: <{string]>,
- * label: <{wikibase.datamodel.Term}>,
- * description: <{wikibase.datamodel.Term}>
- * aliases: <{wikibase.datamodel.MultiTerm}>
- * }[, ...]
- * ]
+ * @option {Fingerprint} value
+ *
+ * @option {string[]} userLanguages
+ * A list of languages for which terms should be displayed initially.
*
* @option {wikibase.entityChangers.EntityChangersFactory}
entityChangersFactory
*
@@ -65,7 +59,8 @@
$entitytermsforlanguagelistviewContainer:
'.wikibase-entitytermsview-entitytermsforlanguagelistview'
},
- value: [],
+ value: null,
+ userLanguages: [],
entityChangersFactory: null,
helpMessage: 'Edit label, description and aliases per language.'
},
@@ -89,7 +84,8 @@
* @see jQuery.ui.TemplatedWidget._create
*/
_create: function() {
- if ( !$.isArray( this.options.value )
+ if ( !( this.options.value instanceof wb.datamodel.Fingerprint )
+ || !$.isArray( this.options.userLanguages )
|| !this.options.entityChangersFactory
) {
throw new Error( 'Required option(s) missing' );
@@ -104,38 +100,37 @@
this.widgetEventPrefix + 'change.' + this.widgetName
+ ' ' + this.widgetEventPrefix +
'afterstopediting.' + this.widgetName,
function() {
- $.each( self.value(), function() {
- if ( this.language !==
self.options.value[0].language ) {
- return true;
- }
+ if ( self.options.userLanguages.length === 0 ) {
+ // if no user languages have been
specified, do nothing
+ return;
+ }
- var descriptionText =
this.description.getText(),
- aliasesTexts =
this.aliases.getTexts();
+ var fingerprint = self.value(),
+ language =
self.options.userLanguages[0],
+ description =
fingerprint.getDescriptionFor( language ) || new wb.datamodel.Term( language,
'' ),
+ aliases = fingerprint.getAliasesFor(
language ) || new wb.datamodel.MultiTerm( language, [] );
- self.$headingDescription
- .toggleClass( 'wb-empty',
descriptionText === '' )
- .text( descriptionText === ''
- ? mw.msg(
'wikibase-description-empty' )
- : descriptionText
- );
+ self.$headingDescription
+ .toggleClass( 'wb-empty',
description.getText() === '' )
+ .text( description.getText() === ''
+ ? mw.msg(
'wikibase-description-empty' )
+ : description.getText()
+ );
- var $ul = self.$headingAliases
- .toggleClass( 'wb-empty',
aliasesTexts.length === 0 )
- .children( 'ul' )
- .text( aliasesTexts.length === 0
- ? mw.msg(
'wikibase-aliases-empty' )
- : ''
- );
+ var $ul = self.$headingAliases
+ .toggleClass( 'wb-empty',
aliases.isEmpty() )
+ .children( 'ul' )
+ .text( aliases.isEmpty()
+ ? mw.msg(
'wikibase-aliases-empty' )
+ : ''
+ );
- for ( var i = 0; i <
aliasesTexts.length; i++ ) {
- $ul.append(
- mw.wbTemplate(
'wikibase-entitytermsview-aliases-alias',
- aliasesTexts[i]
- )
- );
- }
-
- return false;
+ $.each( aliases.getTexts(), function( i, text )
{
+ $ul.append(
+ mw.wbTemplate(
'wikibase-entitytermsview-aliases-alias',
+ text
+ )
+ );
} );
}
);
@@ -344,6 +339,7 @@
)
.entitytermsforlanguagelistview( {
value: this.options.value,
+ userLanguages: this.options.userLanguages,
entityChangersFactory:
this.options.entityChangersFactory
} );
@@ -454,8 +450,8 @@
/**
* @inheritdoc
*
- * @param {Object[]} [value]
- * @return {Object[]|*}
+ * @param {Fingerprint} [value]
+ * @return {Fingerprint|*}
*/
value: function( value ) {
if ( value !== undefined ) {
@@ -509,4 +505,4 @@
}
} );
-}( mediaWiki, jQuery ) );
+}( mediaWiki, wikibase, jQuery ) );
diff --git
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.listview.js
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.listview.js
index bb6944d..c757342 100644
---
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.listview.js
+++
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.listview.js
@@ -131,8 +131,8 @@
if ( key === 'listItemAdapter' ) {
throw new Error( 'Can not change the ListItemAdapter
after initialization' );
} else if ( key === 'value' ) {
- this.items().each( function( i, node ) {
- var $node = $( node );
+ this.items().each( function() {
+ var $node = $( this );
self._lia.liInstance( $node ).destroy();
$node.remove();
} );
diff --git
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js
index e954a4d..6f4bd2b 100644
---
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js
+++
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.sitelinklistview.js
@@ -426,7 +426,7 @@
lia = listview.listItemAdapter(),
foundOne = false;
- listview.items().each( function( i ) {
+ listview.items().each( function() {
if ( touchesViewport( this ) ) {
var sitelinkview = lia.liInstance( $( this ) );
sitelinkview.startEditing();
diff --git
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js
index 9743dbc..1610e74 100644
---
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js
+++
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.snaklistview.js
@@ -295,8 +295,8 @@
var listview = this.$listview.data( 'listview' ),
snaks = [];
- $.each( listview.items(), function( i, item ) {
- var liInstance = listview.listItemAdapter().liInstance(
$( item ) ),
+ listview.items().each( function() {
+ var liInstance = listview.listItemAdapter().liInstance(
$( this ) ),
snak = liInstance.snak();
if ( snak ) {
snaks.push( snak );
@@ -316,8 +316,8 @@
lia = listview.listItemAdapter(),
isValid = true;
- $.each( listview.items(), function( i, item ) {
- var snakview = lia.liInstance( $( item ) );
+ listview.items().each( function() {
+ var snakview = lia.liInstance( $( this ) );
isValid = snakview.isValid() && snakview.snak();
return isValid;
} );
@@ -473,8 +473,8 @@
var self = this,
$snakview = null;
- this._listview.items().each( function( i, itemNode ) {
- var $itemNode = $( itemNode );
+ this._listview.items().each( function() {
+ var $itemNode = $( this );
if ( self._listview.listItemAdapter().liInstance(
$itemNode ).snak().equals( snak ) ) {
$snakview = $itemNode;
diff --git
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementlistview.js
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementlistview.js
index 09f39d6..aaec9f3 100644
---
a/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementlistview.js
+++
b/extensions/Wikibase/view/resources/jquery/wikibase/jquery.wikibase.statementlistview.js
@@ -154,19 +154,18 @@
*/
value: function( statementList ) {
if ( statementList === undefined ) {
- var lia = this._listview.listItemAdapter();
-
- statementList = new wb.datamodel.StatementList();
+ var statements = [],
+ lia = this._listview.listItemAdapter();
this._listview.items().each( function() {
var statementview = lia.liInstance( $( this ) ),
statement = statementview.value();
if ( statement ) {
- statementList.addItem( statement );
+ statements.push( statement );
}
} );
- return statementList;
+ return new wb.datamodel.StatementList( statements );
}
this.option( 'value', statementList );
diff --git a/extensions/Wikibase/view/resources/jquery/wikibase/resources.php
b/extensions/Wikibase/view/resources/jquery/wikibase/resources.php
index a52543f..83daa23 100644
--- a/extensions/Wikibase/view/resources/jquery/wikibase/resources.php
+++ b/extensions/Wikibase/view/resources/jquery/wikibase/resources.php
@@ -195,6 +195,8 @@
'wikibase-entitytermsforlanguagelistview-description',
'wikibase-entitytermsforlanguagelistview-label',
'wikibase-entitytermsforlanguagelistview-language',
+ 'wikibase-entitytermsforlanguagelistview-less',
+ 'wikibase-entitytermsforlanguagelistview-more',
'wikibase-entitytermsforlanguageview-input-help-message',
),
),
diff --git
a/extensions/Wikibase/view/resources/jquery/wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css
b/extensions/Wikibase/view/resources/jquery/wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css
index 5abcafc..5e047a2 100644
---
a/extensions/Wikibase/view/resources/jquery/wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css
+++
b/extensions/Wikibase/view/resources/jquery/wikibase/themes/default/jquery.wikibase.entitytermsforlanguagelistview.css
@@ -125,3 +125,7 @@
.wikibase-entitytermsforlanguagelistview
.wikibase-entitytermsforlanguagelistview-listview
.wikibase-entitytermsforlanguageview
.wikibase-entitytermsforlanguageview-aliases input:focus {
border-color: #0b0080;
}
+
+.wikibase-entitytermsview-entitytermsforlanguagelistview
.wikibase-entitytermsforlanguagelistview-more {
+ padding: 0.4em;
+}
diff --git
a/extensions/Wikibase/view/resources/jquery/wikibase/toolbar/controller/definitions/removetoolbar/statementview-snakview.js
b/extensions/Wikibase/view/resources/jquery/wikibase/toolbar/controller/definitions/removetoolbar/statementview-snakview.js
index 8fe335d..3f2318d 100644
---
a/extensions/Wikibase/view/resources/jquery/wikibase/toolbar/controller/definitions/removetoolbar/statementview-snakview.js
+++
b/extensions/Wikibase/view/resources/jquery/wikibase/toolbar/controller/definitions/removetoolbar/statementview-snakview.js
@@ -43,8 +43,8 @@
listview =
$snaklistviewNode.data( 'snaklistview' )._listview,
lia =
listview.listItemAdapter();
- $.each( listview.items(), function( i,
item ) {
- var snakview = lia.liInstance(
$( item ) );
+ listview.items().each( function() {
+ var snakview = lia.liInstance(
$( this ) );
toolbarcontroller.destroyToolbar(
snakview.element.data(
'removetoolbar' )
);
@@ -63,8 +63,8 @@
$statementview =
$snaklistviewNode.closest( ':wikibase-statementview' ),
statementview =
$statementview.data( 'statementview' );
- $.each( listview.items(), function( i,
node ) {
- var $snakview = $( node ),
+ listview.items().each( function() {
+ var $snakview = $( this ),
snakview =
lia.liInstance( $snakview ),
removeToolbar =
$snakview.data( 'removetoolbar' );
diff --git a/extensions/Wikibase/view/resources/wikibase/view/ViewFactory.js
b/extensions/Wikibase/view/resources/wikibase/view/ViewFactory.js
index 2546931..f318fd3 100644
--- a/extensions/Wikibase/view/resources/wikibase/view/ViewFactory.js
+++ b/extensions/Wikibase/view/resources/wikibase/view/ViewFactory.js
@@ -170,26 +170,12 @@
* @return {jQuery.wikibase.entitytermsview} The constructed entity
terms view
**/
SELF.prototype.getEntityTermsView = function( fingerprint, $dom ) {
- var value = $.map(
- this._userLanguages,
- function( language ) {
- return {
- language: language,
- label: fingerprint.getLabelFor(
language )
- || new
wb.datamodel.Term( language, '' ),
- description:
fingerprint.getDescriptionFor( language )
- || new
wb.datamodel.Term( language, '' ),
- aliases:
fingerprint.getAliasesFor( language )
- || new
wb.datamodel.MultiTerm( language, [] )
- };
- }
- );
-
return this._getView(
'entitytermsview',
$dom,
{
- value: value,
+ value: fingerprint,
+ userLanguages: this._userLanguages,
entityChangersFactory:
this._entityChangersFactory,
helpMessage: this._messageProvider.getMessage(
'wikibase-entitytermsview-input-help-message' )
}
diff --git a/extensions/Wikibase/view/src/PropertyView.php
b/extensions/Wikibase/view/src/PropertyView.php
index c2a0ab4..0f23b1a 100644
--- a/extensions/Wikibase/view/src/PropertyView.php
+++ b/extensions/Wikibase/view/src/PropertyView.php
@@ -3,9 +3,11 @@
namespace Wikibase\View;
use DataTypes\DataTypeFactory;
+use Html;
use InvalidArgumentException;
use Language;
use Wikibase\DataModel\Entity\EntityDocument;
+use OutOfBoundsException;
use Wikibase\DataModel\Entity\Property;
use Wikibase\EntityRevision;
use Wikibase\View\Template\TemplateFactory;
@@ -89,16 +91,25 @@
* @return string HTML
*/
private function getHtmlForDataType( $propertyType ) {
- $dataType = $this->dataTypeFactory->getType( $propertyType );
- return $this->templateFactory->render( 'wb-section-heading',
+ $html = $this->templateFactory->render( 'wb-section-heading',
wfMessage( 'wikibase-propertypage-datatype'
)->escaped(),
'datatype',
'wikibase-propertypage-datatype'
- )
- . $this->templateFactory->render(
'wikibase-propertyview-datatype',
- htmlspecialchars( $dataType->getLabel(
$this->language->getCode() ) )
);
+
+ try {
+ $dataType = $this->dataTypeFactory->getType(
$propertyType );
+ $html .= $this->templateFactory->render(
'wikibase-propertyview-datatype',
+ htmlspecialchars( $dataType->getLabel(
$this->language->getCode() ) )
+ );
+ } catch ( OutOfBoundsException $ex ) {
+ $html .= Html::rawElement( 'span', array( 'class' =>
'error' ),
+ wfMessage(
'wikibase-propertypage-bad-datatype', $propertyType )->parse()
+ );
+ }
+
+ return $html;
}
/**
diff --git
a/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js
b/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js
index ae8a969..3d142a6 100644
---
a/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js
+++
b/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsforlanguagelistview.tests.js
@@ -6,36 +6,51 @@
'use strict';
/**
+ * @return {Fingerprint}
+ */
+function createFingerprint() {
+ return new wb.datamodel.Fingerprint(
+ new wb.datamodel.TermMap( {
+ de: new wb.datamodel.Term( 'de', 'de-label' ),
+ en: new wb.datamodel.Term( 'en', 'en-label' ),
+ fa: new wb.datamodel.Term( 'fa', 'fa-label' ),
+ it: new wb.datamodel.Term( 'it', 'it-label' )
+ } ),
+ new wb.datamodel.TermMap( {
+ de: new wb.datamodel.Term( 'de', 'de-description' ),
+ en: new wb.datamodel.Term( 'en', 'en-description' ),
+ fa: new wb.datamodel.Term( 'fa', 'fa-description' ),
+ it: new wb.datamodel.Term( 'it', 'it-description' )
+ } ),
+ new wb.datamodel.MultiTermMap( {
+ de: new wb.datamodel.MultiTerm( 'de', [] ),
+ en: new wb.datamodel.MultiTerm( 'en', [] ),
+ fa: new wb.datamodel.MultiTerm( 'fa', [] ),
+ it: new wb.datamodel.MultiTerm( 'it', [] )
+ } )
+ );
+}
+
+/**
* @param {Object} [options]
* @return {jQuery}
*/
-var createEntitytermsforlanguagelistview = function( options ) {
+function createEntitytermsforlanguagelistview( options ) {
options = $.extend( {
entityChangersFactory: {
getAliasesChanger: function() { return 'I am an
AliasesChanger'; },
getDescriptionsChanger: function() { return 'I am a
DescriptionsChanger'; },
getLabelsChanger: function() { return 'I am a
LabelsChanger'; }
},
- value: [
- {
- language: 'de',
- label: new wb.datamodel.Term( 'de', 'de-label'
),
- description: new wb.datamodel.Term( 'de',
'de-description' ),
- aliases: new wb.datamodel.MultiTerm( 'de', [] )
- }, {
- language: 'en',
- label: new wb.datamodel.Term( 'en', 'en-label'
),
- description: new wb.datamodel.Term( 'en',
'en-description' ),
- aliases: new wb.datamodel.MultiTerm( 'en', [] )
- }
- ]
+ value: createFingerprint(),
+ userLanguages: [ 'de', 'en' ]
}, options || {} );
return $( '<table/>' )
.appendTo( 'body' )
.addClass( 'test_entitytermsforlanguagelistview' )
.entitytermsforlanguagelistview( options );
-};
+}
QUnit.module( 'jquery.wikibase.entitytermsforlanguagelistview',
QUnit.newMwEnvironment( {
teardown: function() {
@@ -84,8 +99,6 @@
var view = createEntitytermsforlanguagelistview().data(
'entitytermsforlanguagelistview' ),
listview = view.$listview.data( 'listview' );
- view.startEditing();
-
assert.ok(
view.isInitialValue(),
'Verified isInitialValue() returning true.'
@@ -100,14 +113,17 @@
assert.ok(
view.isInitialValue(),
- 'Verified isInitialValue() still returning false after adding
another unchanged value.'
+ 'Verified isInitialValue()still returning false after adding
another unchanged value.'
);
- listview.removeItem( $item );
+ // Replace the method with a fake that always acts like the value
changed.
+ $item.data( 'entitytermsforlanguageview' ).isInitialValue = function() {
+ return false;
+ };
assert.ok(
- view.isInitialValue(),
- 'Verified isInitialValue() returning true after resetting to
initial value.'
+ !view.isInitialValue(),
+ 'Verified isInitialValue() returning false.'
);
} );
@@ -140,11 +156,8 @@
entitytermsforlanguagelistview
= $entitytermsforlanguagelistview.data(
'entitytermsforlanguagelistview' );
- // TODO: Enhance test as soon as SiteLinkList is implemented in
DataModelJavaScript and used
- // as value object.
- assert.equal(
- entitytermsforlanguagelistview.value().length,
- 2,
+ assert.ok(
+ entitytermsforlanguagelistview.value().equals(
createFingerprint() ),
'Retrieved value.'
);
diff --git
a/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsview.tests.js
b/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsview.tests.js
index f2d0a1e..2292cb0 100644
---
a/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsview.tests.js
+++
b/extensions/Wikibase/view/tests/qunit/jquery/wikibase/jquery.wikibase.entitytermsview.tests.js
@@ -6,24 +6,36 @@
'use strict';
/**
+ * @return {Fingerprint}
+ */
+function createFingerprint() {
+ return new wb.datamodel.Fingerprint(
+ new wb.datamodel.TermMap( {
+ de: new wb.datamodel.Term( 'de', 'de-label' ),
+ en: new wb.datamodel.Term( 'en', 'en-label' ),
+ fa: new wb.datamodel.Term( 'fa', 'fa-label' )
+ } ),
+ new wb.datamodel.TermMap( {
+ de: new wb.datamodel.Term( 'de', 'de-description' ),
+ en: new wb.datamodel.Term( 'en', 'en-description' ),
+ fa: new wb.datamodel.Term( 'fa', 'fa-description' )
+ } ),
+ new wb.datamodel.MultiTermMap( {
+ de: new wb.datamodel.MultiTerm( 'de', [] ),
+ en: new wb.datamodel.MultiTerm( 'en', [] ),
+ fa: new wb.datamodel.MultiTerm( 'fa', [] )
+ } )
+ );
+}
+
+/**
* @param {Object} [options]
* @return {jQuery}
*/
-var createEntitytermsview = function( options ) {
+function createEntitytermsview( options ) {
options = $.extend( {
- value: [
- {
- language: 'de',
- label: new wb.datamodel.Term( 'de', 'de-label'
),
- description: new wb.datamodel.Term( 'de',
'de-description' ),
- aliases: new wb.datamodel.MultiTerm( 'de', [] )
- }, {
- language: 'en',
- label: new wb.datamodel.Term( 'en', 'en-label'
),
- description: new wb.datamodel.Term( 'en',
'en-description' ),
- aliases: new wb.datamodel.MultiTerm( 'en', [] )
- }
- ],
+ value: createFingerprint(),
+ userLanguages: [ 'de', 'en' ],
entityChangersFactory: {
getAliasesChanger: function() { return 'I am an
AliasesChanger'; },
getDescriptionsChanger: function() { return 'I am a
DescriptionsChanger'; },
@@ -35,7 +47,7 @@
.appendTo( 'body' )
.addClass( 'test_entitytermsview' )
.entitytermsview( options );
-};
+}
QUnit.module( 'jquery.wikibase.entitytermsview', QUnit.newMwEnvironment( {
teardown: function() {
@@ -98,10 +110,8 @@
var $entitytermsview = createEntitytermsview(),
entitytermsview = $entitytermsview.data( 'entitytermsview' );
- // TODO: Enhance test as soon as SiteLinkList is implemented in
DataModelJavaScript
- assert.equal(
- entitytermsview.value().length,
- 2,
+ assert.ok(
+ entitytermsview.value().equals( createFingerprint() ),
'Retrieved value.'
);
diff --git
a/extensions/Wikibase/view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.movetoolbar.tests.js
b/extensions/Wikibase/view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.movetoolbar.tests.js
index 4b677e9..5151bc1 100644
---
a/extensions/Wikibase/view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.movetoolbar.tests.js
+++
b/extensions/Wikibase/view/tests/qunit/jquery/wikibase/toolbar/jquery.wikibase.movetoolbar.tests.js
@@ -69,8 +69,8 @@
var $listview = createListview( listviewValue ),
listview = $listview.data( 'listview' );
- listview.items().each( function( i, itemNode ) {
- $( itemNode ).movetoolbar( { listView: listview } );
+ listview.items().each( function() {
+ $( this ).movetoolbar( { listView: listview } );
} );
return $listview;
diff --git
a/extensions/Wikibase/view/tests/qunit/wikibase/view/ViewFactory.tests.js
b/extensions/Wikibase/view/tests/qunit/wikibase/view/ViewFactory.tests.js
index e6019c1..71e05eb 100644
--- a/extensions/Wikibase/view/tests/qunit/wikibase/view/ViewFactory.tests.js
+++ b/extensions/Wikibase/view/tests/qunit/wikibase/view/ViewFactory.tests.js
@@ -599,7 +599,8 @@
viewFactory.getEntityTermsView( fingerprint, $dom );
sinon.assert.calledWith( $.wikibase.entitytermsview,
sinon.match( {
- value: [],
+ value: fingerprint,
+ userLanguages: userLanguages,
entityChangersFactory: entityChangersFactory,
helpMessage: message
} ) );
diff --git a/vendor/composer/installed.json b/vendor/composer/installed.json
index 9f364bf..244fb00 100644
--- a/vendor/composer/installed.json
+++ b/vendor/composer/installed.json
@@ -1237,12 +1237,12 @@
"source": {
"type": "git",
"url":
"https://github.com/wikimedia/mediawiki-extensions-Wikibase.git",
- "reference": "42433e84d5a3ef35b6c7e3e2e7c0b25c30ec72cb"
+ "reference": "578154d93f7e76b51aabebf58a65a98f70aaae1b"
},
"dist": {
"type": "zip",
- "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/42433e84d5a3ef35b6c7e3e2e7c0b25c30ec72cb",
- "reference": "42433e84d5a3ef35b6c7e3e2e7c0b25c30ec72cb",
+ "url":
"https://api.github.com/repos/wikimedia/mediawiki-extensions-Wikibase/zipball/578154d93f7e76b51aabebf58a65a98f70aaae1b",
+ "reference": "578154d93f7e76b51aabebf58a65a98f70aaae1b",
"shasum": ""
},
"require": {
@@ -1274,7 +1274,7 @@
"jakub-onderka/php-parallel-lint": "0.9.2",
"mediawiki/mediawiki-codesniffer": "0.4.0|0.5.0"
},
- "time": "2016-01-27 20:46:43",
+ "time": "2016-01-28 20:11:28",
"type": "mediawiki-extension",
"installation-source": "dist",
"autoload": {
--
To view, visit https://gerrit.wikimedia.org/r/267225
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings
Gerrit-MessageType: merged
Gerrit-Change-Id: I0310bdd96308e0b20a5e373de8b16e8512a5d9a5
Gerrit-PatchSet: 1
Gerrit-Project: mediawiki/extensions/Wikidata
Gerrit-Branch: master
Gerrit-Owner: WikidataBuilder <[email protected]>
Gerrit-Reviewer: Addshore <[email protected]>
Gerrit-Reviewer: Aude <[email protected]>
Gerrit-Reviewer: JanZerebecki <[email protected]>
Gerrit-Reviewer: Siebrand <[email protected]>
Gerrit-Reviewer: Tobias Gritschacher <[email protected]>
Gerrit-Reviewer: jenkins-bot <>
_______________________________________________
MediaWiki-commits mailing list
[email protected]
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits