jenkins-bot has submitted this change and it was merged.

Change subject: Use UnDeserializableValue expert for handling such values
......................................................................


Use UnDeserializableValue expert for handling such values

Bug: T92975
Change-Id: If2b167681fee5923822c8646d37f34740fb78070
---
M repo/resources/experts/getStore.js
M repo/resources/experts/resources.php
M view/resources/jquery/wikibase/snakview/snakview.variations.Value.js
M view/resources/wikibase/store/store.ApiEntityStore.js
M view/resources/wikibase/wikibase.ValueViewBuilder.js
5 files changed, 31 insertions(+), 12 deletions(-)

Approvals:
  Thiemo Mättig (WMDE): Looks good to me, approved
  jenkins-bot: Verified



diff --git a/repo/resources/experts/getStore.js 
b/repo/resources/experts/getStore.js
index 107d55f..0fced22 100644
--- a/repo/resources/experts/getStore.js
+++ b/repo/resources/experts/getStore.js
@@ -33,6 +33,11 @@
                dv.TimeValue.TYPE
        );
 
+       expertStore.registerDataValueExpert(
+               vv.experts.UnDeserializableValue,
+               dv.UnDeserializableValue.TYPE
+       );
+
        // Register experts for data types defined in Wikibase. Since those 
data types are defined by a
        // setting, it needs to be checked whether they are actually defined.
 
diff --git a/repo/resources/experts/resources.php 
b/repo/resources/experts/resources.php
index a1dc338..3609ca8 100644
--- a/repo/resources/experts/resources.php
+++ b/repo/resources/experts/resources.php
@@ -37,6 +37,7 @@
                                'jquery.valueview.experts.MonolingualText',
                                'jquery.valueview.experts.StringValue',
                                'jquery.valueview.experts.TimeInput',
+                               
'jquery.valueview.experts.UnDeserializableValue',
                                'jquery.valueview.experts.UnsupportedValue',
                                'wikibase.datamodel.EntityId',
                                'wikibase.experts.__namespace',
diff --git 
a/view/resources/jquery/wikibase/snakview/snakview.variations.Value.js 
b/view/resources/jquery/wikibase/snakview/snakview.variations.Value.js
index 426f5af..fea0e98 100644
--- a/view/resources/jquery/wikibase/snakview/snakview.variations.Value.js
+++ b/view/resources/jquery/wikibase/snakview/snakview.variations.Value.js
@@ -175,7 +175,8 @@
 
                                        // If the new value's type is not the 
data value type used by the Snak's
                                        // property data type, something is 
very wrong. Display warning!
-                                       if( newValue && dataType && 
newValue.getType() !== dataType.getDataValueType() ) {
+                                       if( newValue && dataType && 
newValue.getType() !== dataType.getDataValueType()
+                                               && newValue.getType() !== 
dv.UnDeserializableValue.TYPE ) {
                                                handleDataValueTypeMismatch(
                                                        newValue.getType(),
                                                        
dataType.getDataValueType()
diff --git a/view/resources/wikibase/store/store.ApiEntityStore.js 
b/view/resources/wikibase/store/store.ApiEntityStore.js
index 38d27c0..2327f90 100644
--- a/view/resources/wikibase/store/store.ApiEntityStore.js
+++ b/view/resources/wikibase/store/store.ApiEntityStore.js
@@ -57,15 +57,21 @@
                        this._repoApi.getEntities( entityIds, null, 
this._languages )
                        .done( function( result ) {
                                $.each( result.entities, function( id, 
entityData ) {
-                                       if( entityData.missing === '' ) {
-                                               return; // missing entity
+                                       // return entities not found (e.g. 
deleted) as null, and allow
+                                       // valueViewBuilder to select 
appropriate expert for such case.
+                                       var entity = null,
+                                               entityId = id;
+
+                                       if( entityData.missing !== '' ) {
+                                               entity = 
self._fetchedEntityUnserializer.deserialize( {
+                                                       title: entityData.title,
+                                                       content: entityData
+                                               } );
+
+                                               entityId = 
entity.getContent().getId();
                                        }
 
-                                       var entity = 
self._fetchedEntityUnserializer.deserialize( {
-                                               title: entityData.title,
-                                               content: entityData
-                                       } );
-                                       deferreds[ entityIdToIndex[ 
entity.getContent().getId() ] ].resolve( entity );
+                                       deferreds[ entityIdToIndex[ entityId ] 
].resolve( entity );
                                } );
                        } )
                        // FIXME: Evaluate failing promise
diff --git a/view/resources/wikibase/wikibase.ValueViewBuilder.js 
b/view/resources/wikibase/wikibase.ValueViewBuilder.js
index 0844ed2..b777d42 100644
--- a/view/resources/wikibase/wikibase.ValueViewBuilder.js
+++ b/view/resources/wikibase/wikibase.ValueViewBuilder.js
@@ -58,11 +58,17 @@
                                value: dataValue
                        } );
 
-                       if( dataType ) {
-                               valueViewOptions.dataTypeId    = 
dataType.getId();
+                       if( !dataType || ( dataValue && dataValue.getType() === 
'undeserializable' ) ) {
+                               // FIXME: For now, treat value with unknown 
data type (e.g. the property is
+                               // deleted) in same way as undeserializable and 
not allow it to be editable.
+                               // If we allow it to be edited, it might be 
something like commons media but
+                               // when treated as a string (based on value 
type only), then it might be
+                               // edited in a way that it becomes an invalid 
commons media value. Then
+                               // the property is undeleted and we have 
unexpected behavior.
+                               valueViewOptions.dataValueType = 
'undeserializable';
+                       } else {
+                               valueViewOptions.dataTypeId = dataType.getId();
                                valueViewOptions.dataValueType = 
dataType.getDataValueType();
-                       } else if( dataValue ) {
-                               valueViewOptions.dataValueType = 
dataValue.getType();
                        }
 
                        return valueViewOptions;

-- 
To view, visit https://gerrit.wikimedia.org/r/212515
To unsubscribe, visit https://gerrit.wikimedia.org/r/settings

Gerrit-MessageType: merged
Gerrit-Change-Id: If2b167681fee5923822c8646d37f34740fb78070
Gerrit-PatchSet: 9
Gerrit-Project: mediawiki/extensions/Wikibase
Gerrit-Branch: master
Gerrit-Owner: Aude <aude.w...@gmail.com>
Gerrit-Reviewer: Aude <aude.w...@gmail.com>
Gerrit-Reviewer: Henning Snater <henning.sna...@wikimedia.de>
Gerrit-Reviewer: Hoo man <h...@online.de>
Gerrit-Reviewer: Legoktm <legoktm.wikipe...@gmail.com>
Gerrit-Reviewer: Thiemo Mättig (WMDE) <thiemo.maet...@wikimedia.de>
Gerrit-Reviewer: jenkins-bot <>

_______________________________________________
MediaWiki-commits mailing list
MediaWiki-commits@lists.wikimedia.org
https://lists.wikimedia.org/mailman/listinfo/mediawiki-commits

Reply via email to