diff --git a/build/helpers/helpers.js b/build/helpers/helpers.js index 3d5e7562..95d8e355 100644 --- a/build/helpers/helpers.js +++ b/build/helpers/helpers.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var helpers, wikidataTimeToDateObject; diff --git a/build/helpers/parse_responses.js b/build/helpers/parse_responses.js index 8497e9e5..f3661826 100644 --- a/build/helpers/parse_responses.js +++ b/build/helpers/parse_responses.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var simplifyClaims; diff --git a/build/helpers/simplify_claims.js b/build/helpers/simplify_claims.js index 12f4ba02..70395bf1 100644 --- a/build/helpers/simplify_claims.js +++ b/build/helpers/simplify_claims.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var getLatLngFromCoordinates, helpers, nonNull, prefixedId, simplifyClaim, simplifyClaims, simplifyPropertyClaims; @@ -28,36 +28,42 @@ }; simplifyClaim = function(claim, entityPrefix, propertyPrefix) { - var datatype, datavalue, mainsnak; + var datatype, datavalue, mainsnak, qualifiers, value; mainsnak = claim.mainsnak; if (mainsnak == null) { return null; } - datatype = mainsnak.datatype, datavalue = mainsnak.datavalue; + datatype = mainsnak.datatype, datavalue = mainsnak.datavalue, qualifiers = mainsnak.qualifiers; if (datavalue == null) { return null; } - switch (datatype) { - case 'string': - case 'commonsMedia': - case 'url': - case 'external-id': - return datavalue.value; - case 'monolingualtext': - return datavalue.value.text; - case 'wikibase-item': - return prefixedId(datavalue, entityPrefix); - case 'wikibase-property': - return prefixedId(datavalue, propertyPrefix); - case 'time': - return helpers.normalizeWikidataTime(datavalue.value.time); - case 'quantity': - return parseFloat(datavalue.value.amount); - case 'globe-coordinate': - return getLatLngFromCoordinates(datavalue.value); - default: - return null; - } + value = (function() { + switch (datatype) { + case 'string': + case 'commonsMedia': + case 'url': + case 'external-id': + return datavalue.value; + case 'monolingualtext': + return datavalue.value.text; + case 'wikibase-item': + return prefixedId(datavalue, entityPrefix); + case 'wikibase-property': + return prefixedId(datavalue, propertyPrefix); + case 'time': + return helpers.normalizeWikidataTime(datavalue.value.time); + case 'quantity': + return parseFloat(datavalue.value.amount); + case 'globe-coordinate': + return getLatLngFromCoordinates(datavalue.value); + default: + return null; + } + })(); + return { + value: value, + qualifiers: qualifiers ? simplifyClaims(qualifiers) : {} + }; }; prefixedId = function(datavalue, prefix) { diff --git a/build/helpers/wikidata_time_to_date_object.js b/build/helpers/wikidata_time_to_date_object.js index ccb78ab0..97171513 100644 --- a/build/helpers/wikidata_time_to_date_object.js +++ b/build/helpers/wikidata_time_to_date_object.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var fullDateData, negativeDate, parseInvalideDate, positiveDate; diff --git a/build/queries/get_entities.js b/build/queries/get_entities.js index 982cfcff..55788c76 100644 --- a/build/queries/get_entities.js +++ b/build/queries/get_entities.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var buildUrl, forceArray, helpers, isPlainObject, ref, shortLang; diff --git a/build/queries/get_many_entities.js b/build/queries/get_many_entities.js index 5729e32a..05f504d7 100644 --- a/build/queries/get_many_entities.js +++ b/build/queries/get_many_entities.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var getEntities, getIdsGroups, isPlainObject; diff --git a/build/queries/get_reverse_claims.js b/build/queries/get_reverse_claims.js index 55f3d9b2..11e28b19 100644 --- a/build/queries/get_reverse_claims.js +++ b/build/queries/get_reverse_claims.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var helpers, sparqlQuery; diff --git a/build/queries/get_wikidata_ids_from_sitelinks.js b/build/queries/get_wikidata_ids_from_sitelinks.js index cc843fe0..cc48d44a 100644 --- a/build/queries/get_wikidata_ids_from_sitelinks.js +++ b/build/queries/get_wikidata_ids_from_sitelinks.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var buildUrl, forceArray, isPlainObject, parseSite, ref, shortLang; diff --git a/build/queries/search_entities.js b/build/queries/search_entities.js index 50c748c2..8b4cebba 100644 --- a/build/queries/search_entities.js +++ b/build/queries/search_entities.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var buildUrl, isPlainObject; diff --git a/build/queries/simplify_sparql_results.js b/build/queries/simplify_sparql_results.js index cd11d7be..b16a4fcc 100644 --- a/build/queries/simplify_sparql_results.js +++ b/build/queries/simplify_sparql_results.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var identifyVars, isLabelKey, parseUri, parseValue, indexOf = [].indexOf || function(item) { for (var i = 0, l = this.length; i < l; i++) { if (i in this && this[i] === item) return i; } return -1; }; diff --git a/build/queries/sparql_query.js b/build/queries/sparql_query.js index 4c37cf32..2472ad4b 100644 --- a/build/queries/sparql_query.js +++ b/build/queries/sparql_query.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { module.exports = function(sparql) { var query; diff --git a/build/utils/build_url.js b/build/utils/build_url.js index 18465df4..27071cbd 100644 --- a/build/utils/build_url.js +++ b/build/utils/build_url.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var err, qs, roots; diff --git a/build/utils/querystring_lite.js b/build/utils/querystring_lite.js index 0d836030..a0a061d5 100644 --- a/build/utils/querystring_lite.js +++ b/build/utils/querystring_lite.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { module.exports = { stringify: function(queryObj) { diff --git a/build/utils/utils.js b/build/utils/utils.js index 90ec744d..1e2adb0c 100644 --- a/build/utils/utils.js +++ b/build/utils/utils.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { module.exports = { shortLang: function(language) { diff --git a/build/wikidata-sdk.js b/build/wikidata-sdk.js index 6465257a..6df76112 100644 --- a/build/wikidata-sdk.js +++ b/build/wikidata-sdk.js @@ -1,4 +1,4 @@ -// Generated by CoffeeScript 1.11.1 +// Generated by CoffeeScript 1.12.2 (function() { var helpers, k, ref, simplifyClaim, simplifyClaims, simplifyPropertyClaims, v, wdk; diff --git a/src/helpers/simplify_claims.coffee b/src/helpers/simplify_claims.coffee index 691e00ca..79cc545f 100644 --- a/src/helpers/simplify_claims.coffee +++ b/src/helpers/simplify_claims.coffee @@ -24,14 +24,15 @@ simplifyClaim = (claim, entityPrefix, propertyPrefix)-> # tries to replace wikidata deep claim object by a simple value # e.g. a string, an entity Qid or an epoch time number { mainsnak } = claim - + # should only happen in snaktype: "novalue" cases or alikes unless mainsnak? then return null - - { datatype, datavalue } = mainsnak + + { datatype, datavalue, qualifiers } = mainsnak # known case: snaktype set to "somevalue" unless datavalue? then return null - + + value = switch datatype when 'string', 'commonsMedia', 'url', 'external-id' then datavalue.value when 'monolingualtext' then datavalue.value.text @@ -41,6 +42,8 @@ simplifyClaim = (claim, entityPrefix, propertyPrefix)-> when 'quantity' then parseFloat datavalue.value.amount when 'globe-coordinate' then getLatLngFromCoordinates datavalue.value else null + + return { value, qualifiers: if qualifiers then simplifyClaims qualifiers else {} } prefixedId = (datavalue, prefix)-> { id } = datavalue.value diff --git a/test/simplify_claims.coffee b/test/simplify_claims.coffee index c305af31..e132d9d1 100644 --- a/test/simplify_claims.coffee +++ b/test/simplify_claims.coffee @@ -38,17 +38,17 @@ describe 'simplifyClaims', -> it 'should pass entity and property prefixes down', (done)-> simplified = simplifyClaims Q2112.claims, 'wd' - simplified.P190[0].should.equal 'wd:Q207614' + simplified.P190[0].value.should.equal 'wd:Q207614' simplified = simplifyClaims Q2112.claims, null, 'wdt' - simplified['wdt:P123456789'][0].should.equal 'wdt:P207614' + simplified['wdt:P123456789'][0].value.should.equal 'wdt:P207614' done() it 'should return prefixed properties if passed a property prefix', (done)-> simplified = simplifyClaims Q2112.claims, 'wd', 'wdt' simplified['wdt:P190'].should.be.an.Array() - simplified['wdt:P190'][0].should.equal 'wd:Q207614' + simplified['wdt:P190'][0].value.should.equal 'wd:Q207614' simplified = simplifyClaims Q2112.claims, null, 'wdt' - simplified['wdt:P123456789'][0].should.equal 'wdt:P207614' + simplified['wdt:P123456789'][0].value.should.equal 'wdt:P207614' done() describe 'simplifyPropertyClaims', -> @@ -66,57 +66,57 @@ describe 'simplifyPropertyClaims', -> it 'should pass entity and property prefixes down', (done)-> simplified = simplifyPropertyClaims Q2112.claims.P190, 'wd' - simplified[0].should.equal 'wd:Q207614' + simplified[0].value.should.equal 'wd:Q207614' simplified = simplifyPropertyClaims Q2112.claims.P123456789, null, 'wdt' - simplified[0].should.equal 'wdt:P207614' + simplified[0].value.should.equal 'wdt:P207614' done() describe 'simplifyClaim', -> it 'should return a valid time for possible invalid dates', (done)-> # exemple: Q4132785>P577 is 1953-00-00T00:00:00Z simplified = simplifyClaim Q4132785.claims.P577[0] - isNaN(simplified).should.equal false - simplified.should.equal -536457600000 + isNaN(simplified.value).should.equal false + simplified.value.should.equal -536457600000 done() it 'should return a valid time even for possible invalid negative date', (done)-> simplified = simplifyClaim Q4132785NegativeDate.claims.P577[0] - isNaN(simplified).should.equal false - simplified.should.equal -123797894400000 + isNaN(simplified.value).should.equal false + simplified.value.should.equal -123797894400000 done() it 'should return a url for datatype url', (done)-> simplified = simplifyClaim Q328212.claims.P856[0] - simplified.should.equal "http://veronicarothbooks.blogspot.com" + simplified.value.should.equal "http://veronicarothbooks.blogspot.com" done() it 'should return simplify globecoordinate as a latLng array', (done)-> simplified = simplifyClaim Q2112.claims.P625[0] - simplified.should.be.an.Array() - simplified[0].should.equal 52.016666666667 - simplified[1].should.equal 8.5166666666667 + simplified.value.should.be.an.Array() + simplified.value[0].should.equal 52.016666666667 + simplified.value[1].should.equal 8.5166666666667 done() it 'should return prefixed entity ids if passed an entity prefix', (done)-> simplified = simplifyClaim Q2112.claims.P190[0] - simplified.should.equal 'Q207614' + simplified.value.should.equal 'Q207614' simplified = simplifyClaim Q2112.claims.P190[0], 'wd' - simplified.should.equal 'wd:Q207614' + simplified.value.should.equal 'wd:Q207614' simplified = simplifyClaim Q2112.claims.P190[0], 'wd:' - simplified.should.equal 'wd::Q207614' + simplified.value.should.equal 'wd::Q207614' simplified = simplifyClaim Q2112.claims.P190[0], 'wdbla' - simplified.should.equal 'wdbla:Q207614' + simplified.value.should.equal 'wdbla:Q207614' done() it 'should return prefixed property ids if passed a property prefix', (done)-> simplified = simplifyClaim Q2112.claims.P123456789[0] - simplified.should.equal 'P207614' + simplified.value.should.equal 'P207614' simplified = simplifyClaim Q2112.claims.P123456789[0], null - simplified.should.equal 'P207614' + simplified.value.should.equal 'P207614' simplified = simplifyClaim Q2112.claims.P123456789[0], null, 'wdt' - simplified.should.equal 'wdt:P207614' + simplified.value.should.equal 'wdt:P207614' simplified = simplifyClaim Q2112.claims.P123456789[0], null, 'wdt:' - simplified.should.equal 'wdt::P207614' + simplified.value.should.equal 'wdt::P207614' simplified = simplifyClaim Q2112.claims.P123456789[0], null, 'wdtbla' - simplified.should.equal 'wdtbla:P207614' + simplified.value.should.equal 'wdtbla:P207614' done()