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