# HG changeset patch # User ymh # Date 1456648223 -3600 # Node ID c06d08c8a1b82b8deb8eba4beb3cb5bdbc0dcd6c # Parent 821253d361d115a04a04c4d852da36e86588235b add bnf resolver in common addon + applications diff -r 821253d361d1 -r c06d08c8a1b8 cms/app-client/app/mirage/config.js --- a/cms/app-client/app/mirage/config.js Thu Feb 25 21:26:15 2016 +0100 +++ b/cms/app-client/app/mirage/config.js Sun Feb 28 09:30:23 2016 +0100 @@ -51,6 +51,29 @@ }); + this.get('/bnf/:ids', function(db, request) { + + var bnfIds = decodeURIComponent(request.params.ids); + var resMap = _.reduce(bnfIds.split(','), function(res, id) { + var fullId = id; + if(_.startsWith(fullId, constants.BNF_BASE_URL)) { + fullId = fullId.slice(constants.BNF_BASE_URL.length); + } else if (_.startsWith(fullId, constants.BNF_ARK_BASE_URL)) { + fullId = fullId.slice(constants.BNF_ARK_BASE_URL.length); + } else if (!_.startsWith(fullId, constants.BNF_ARK_BASE_ID)) { + fullId = constants.BNF_ARK_BASE_ID + fullId; + } + var bnfRes = db.lexvo.find(fullId); + res[fullId] = bnfRes?bnfRes.label:null; + return res; + }, {}); + + return { + 'bnfids': resMap + }; + + }); + /* Route shorthand cheatsheet */ diff -r 821253d361d1 -r c06d08c8a1b8 cms/app-client/app/mirage/fixtures/bnf.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/app-client/app/mirage/fixtures/bnf.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,6 @@ +export default { + "ark:/12148/cb11965628b": "frères et soeurs", + "ark:/12148/cb11946662b": "parents et enfants", + "ark:/12148/cb119766112": "miséricorde", + "ark:/12148/cb11970755h": "repentir" +}; diff -r 821253d361d1 -r c06d08c8a1b8 cms/app-client/app/templates/application.hbs --- a/cms/app-client/app/templates/application.hbs Thu Feb 25 21:26:15 2016 +0100 +++ b/cms/app-client/app/templates/application.hbs Sun Feb 28 09:30:23 2016 +0100 @@ -19,7 +19,7 @@

Titre {{modalItem.title}}

-

Langue {{doc-language language=modalItem.language}}

+

Langue {{doc-language url=modalItem.language}}

Enregistré le {{modalItem.modified}}

Interviewer {{modalItem.publishers}}

Description {{modalItem.description}}

diff -r 821253d361d1 -r c06d08c8a1b8 cms/app-client/app/templates/player.hbs --- a/cms/app-client/app/templates/player.hbs Thu Feb 25 21:26:15 2016 +0100 +++ b/cms/app-client/app/templates/player.hbs Sun Feb 28 09:30:23 2016 +0100 @@ -3,5 +3,5 @@ {{player-component action="changeDocument" document=currentItem}}

{{ currentItem.title }}

-

{{doc-language language=currentItem.language}}

+

{{doc-language url=currentItem.language}}

diff -r 821253d361d1 -r c06d08c8a1b8 cms/app-client/app/templates/results.hbs --- a/cms/app-client/app/templates/results.hbs Thu Feb 25 21:26:15 2016 +0100 +++ b/cms/app-client/app/templates/results.hbs Sun Feb 28 09:30:23 2016 +0100 @@ -26,7 +26,7 @@ {{ item.title }}
- {{doc-language language=item.language}} + {{doc-language url=item.language}}
diff -r 821253d361d1 -r c06d08c8a1b8 cms/app-client/app/templates/tabs/detail.hbs --- a/cms/app-client/app/templates/tabs/detail.hbs Thu Feb 25 21:26:15 2016 +0100 +++ b/cms/app-client/app/templates/tabs/detail.hbs Sun Feb 28 09:30:23 2016 +0100 @@ -4,7 +4,7 @@

Titre {{model.title}}

-

Langue {{doc-language language=model.language}}

+

Langue {{doc-language url=model.language}}

Enregistré le {{model.modified}}

Interviewer {{model.publishers}}

Description {{model.description}}

diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/addon/components/doc-generic.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/addon/components/doc-generic.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,7 @@ +import Ember from 'ember'; +import layout from '../templates/components/doc-generic'; + +export default Ember.Component.extend({ + layout: layout, + tagName: 'span' +}); diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/addon/components/doc-language.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/addon/components/doc-language.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,26 @@ +import Ember from 'ember'; +import * as constants from 'corpus-common-addon/utils/constants'; +import layout from '../templates/components/doc-language'; + +export default Ember.Component.extend({ + layout: layout, + tagName: "span", + + lexvoResolver: Ember.inject.service(), + + _resolveLexvoIds: Ember.on('init', Ember.observer('url', function() { + this.get('lexvoResolver').getName(this.get('url')).then(function(str) { + this.set('resolvedName', str); + }.bind(this)); + })), + + code: Ember.computed('url', function() { + var rawLanguage = this.get('url'); + if(rawLanguage && rawLanguage.startsWith(constants.LEXVO_BASE_URL) ) { + return rawLanguage.substr(constants.LEXVO_BASE_URL.length); + } + return rawLanguage; + }), + isLanguageLink: Ember.computed.match('url', /^http\:\/\//) + +}); diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/addon/components/doc-subject.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/addon/components/doc-subject.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,31 @@ +import Ember from 'ember'; +import * as constants from 'corpus-common-addon/utils/constants'; +import layout from '../templates/components/doc-subject'; + +export default Ember.Component.extend({ + layout: layout, + tagName: "span", + + bnfResolver: Ember.inject.service(), + + _resolveBnfIds: Ember.on('init', Ember.observer('url', function() { + this.get('bnfResolver').getLabel(this.get('url')).then(function(str) { + this.set('resolvedLabel', str); + }.bind(this)); + })), + + code: Ember.computed('url', function() { + var rawSubject = this.get('url'); + if(rawSubject) { + if(rawSubject.startsWith(constants.BNF_BASE_URL)) { + return rawSubject.substr(constants.BNF_BASE_URL.length); + } + else if (rawSubject.startsWith(constants.BNF_ARK_BASE_URL)) { + return rawSubject.substr(constants.BNF_ARK_BASE_URL.length); + } + } + return rawSubject; + }), + isSubjectLink: Ember.computed.match('url', /^http\:\/\//) + +}); diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/addon/helpers/get-link-type.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/addon/helpers/get-link-type.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,20 @@ +import Ember from 'ember'; +import * as constants from 'corpus-common-addon/utils/constants' + +export function getLinkType(params/*, hash*/) { + let url = params[0]; + + if(url.startsWith(constants.LEXVO_BASE_URL)) { + return 'doc-language'; + } + if( + url.startsWith(constants.BNF_BASE_URL) || + url.startsWith(constants.BNF_ARK_BASE_URL) || + url.startsWith(constants.BNF_ARK_BASE_ID)) + { + return 'doc-subject'; + } + return 'doc-generic'; +} + +export default Ember.Helper.helper(getLinkType); diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/addon/templates/components/doc-generic.hbs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/addon/templates/components/doc-generic.hbs Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,1 @@ +{{url}} diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/addon/templates/components/doc-language.hbs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/addon/templates/components/doc-language.hbs Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,7 @@ +{{#if isLanguageLink}} + + {{#if resolvedName}}{{resolvedName}}{{else}}{{code}}{{/if}} + +{{else}} +{{#if resolvedName}}{{resolvedName}}{{else}}{{code}}{{/if}} +{{/if}} diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/addon/templates/components/doc-subject.hbs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/addon/templates/components/doc-subject.hbs Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,7 @@ +{{#if isSubjectLink}} + + {{#if resolvedLabel}}{{resolvedLabel}}{{else}}{{code}}{{/if}} + +{{else}} +{{#if resolvedLabel}}{{resolvedLabel}}{{else}}{{code}}{{/if}} +{{/if}} diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/addon/utils/constants.js --- a/common/corpus-common-addon/addon/utils/constants.js Thu Feb 25 21:26:15 2016 +0100 +++ b/common/corpus-common-addon/addon/utils/constants.js Sun Feb 28 09:30:23 2016 +0100 @@ -2,4 +2,7 @@ export const LEXVO_BASE_URL = "http://lexvo.org/id/iso639-3/"; export const VIAF_BASE_URL = "http://viaf.org/viaf/"; +export const BNF_BASE_URL = "http://data.bnf.fr/"; +export const BNF_ARK_BASE_URL = "http://ark.bnf.fr/"; +export const BNF_ARK_BASE_ID = "ark:/12148/"; export const DEFAULT_STORE_EXP = 3600000; diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/app/components/doc-generic.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/app/components/doc-generic.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,1 @@ +export { default } from 'corpus-common-addon/components/doc-generic'; \ No newline at end of file diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/app/components/doc-language.js --- a/common/corpus-common-addon/app/components/doc-language.js Thu Feb 25 21:26:15 2016 +0100 +++ b/common/corpus-common-addon/app/components/doc-language.js Sun Feb 28 09:30:23 2016 +0100 @@ -1,24 +1,1 @@ -import Ember from 'ember'; -import * as constants from 'corpus-common-addon/utils/constants' - -export default Ember.Component.extend({ - tagName: "span", - - lexvoResolver: Ember.inject.service(), - - _resolveLexvoIds: Ember.on('init', Ember.observer('language', function() { - this.get('lexvoResolver').getName(this.get('language')).then(function(str) { - this.set('resolvedName', str); - }.bind(this)); - })), - - code: Ember.computed('language', function() { - var rawLanguage = this.get('language'); - if(rawLanguage && rawLanguage.startsWith(constants.LEXVO_BASE_URL) ) { - return rawLanguage.substr(constants.LEXVO_BASE_URL.length); - } - return rawLanguage; - }), - isLanguageLink: Ember.computed.match('language', /^http\:\/\//) - -}); +export { default } from 'corpus-common-addon/components/doc-language'; diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/app/components/doc-subject.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/app/components/doc-subject.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,1 @@ +export { default } from 'corpus-common-addon/components/doc-subject'; diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/app/helpers/get-link-type.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/app/helpers/get-link-type.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,1 @@ +export { default, getLinkType } from 'corpus-common-addon/helpers/get-link-type'; diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/app/services/bnf-resolver.js --- a/common/corpus-common-addon/app/services/bnf-resolver.js Thu Feb 25 21:26:15 2016 +0100 +++ b/common/corpus-common-addon/app/services/bnf-resolver.js Sun Feb 28 09:30:23 2016 +0100 @@ -7,10 +7,65 @@ return Ember.getOwner(this).resolveRegistration('config:environment') }, _getStoreKey: function(id) { - return 'rameau:'+id; + return 'bnf:'+id; }, - getName: function(id) { - + getLabel: function(id) { + + if(!id) { + return new Ember.RSVP.Promise(function(resolve/*, reject*/) { + resolve(""); + }); + } + + var bnfId = id; + if(id.startsWith(constants.BNF_BASE_URL + constants.BNF_ARK_BASE_ID)) { + bnfId = id.slice((constants.BNF_BASE_URL + constants.BNF_ARK_BASE_ID).length); + } + else if (id.startsWith(constants.BNF_ARK_BASE_URL + constants.BNF_ARK_BASE_ID)) { + bnfId = id.slice((constants.BNF_ARK_BASE_URL + constants.BNF_ARK_BASE_ID).length); + } + else if (id.startsWith(constants.BNF_ARK_BASE_ID)) { + bnfId = id.slice(constants.BNF_ARK_BASE_ID.length); + } + var labelPromise = null; + + var storeKey = this._getStoreKey(id); + var label = store.get(storeKey); + + if(!label) { + //TODO: handle error !!! + labelPromise = this.queryLabel(bnfId) + .then( function(response) { + return store.set(storeKey, response); + }); + } + else { + labelPromise = new Ember.RSVP.Promise(function(resolve/*, reject*/) { + resolve(label); + }); + } + return labelPromise; + + }, + + // make the query for the name. + // return a Promise + queryLabel: function(id) { + return new Ember.RSVP.Promise(function(resolve, reject) { + Ember.$.ajax({ + //TODO Configuration for the host ? + url: this.env().baseURL.replace(/\/$/,"") + "/api/v1/bnf/"+id, + success: function(bnfDoc) { + var labels = bnfDoc.bnfids; + var expectedId = constants.BNF_ARK_BASE_ID + id; + resolve((expectedId in labels)?labels[expectedId]:null); + }, + error: function(req, status, error) { + reject(status + ":" + error); + } + }); + }.bind(this)); } + }); diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/app/services/lexvo-resolver.js --- a/common/corpus-common-addon/app/services/lexvo-resolver.js Thu Feb 25 21:26:15 2016 +0100 +++ b/common/corpus-common-addon/app/services/lexvo-resolver.js Sun Feb 28 09:30:23 2016 +0100 @@ -40,6 +40,7 @@ } return namePromise; }, + // make the query for the name. // return a Promise queryName: function(id) { diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/app/templates/components/doc-language.hbs --- a/common/corpus-common-addon/app/templates/components/doc-language.hbs Thu Feb 25 21:26:15 2016 +0100 +++ /dev/null Thu Jan 01 00:00:00 1970 +0000 @@ -1,7 +0,0 @@ -{{#if isLanguageLink}} - - {{#if resolvedName}}{{resolvedName}}{{else}}{{code}}{{/if}} - -{{else}} -{{#if resolvedName}}{{resolvedName}}{{else}}{{code}}{{/if}} -{{/if}} diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/package.json --- a/common/corpus-common-addon/package.json Thu Feb 25 21:26:15 2016 +0100 +++ b/common/corpus-common-addon/package.json Sun Feb 28 09:30:23 2016 +0100 @@ -24,7 +24,6 @@ "ember-cli": "2.3.0", "ember-cli-app-version": "^1.0.0", "ember-cli-dependency-checker": "^1.2.0", - "ember-cli-htmlbars": "^1.0.1", "ember-cli-htmlbars-inline-precompile": "^0.3.1", "ember-cli-inject-live-reload": "^1.3.1", "ember-cli-qunit": "^1.2.1", @@ -47,7 +46,8 @@ "ember-addon" ], "dependencies": { - "ember-cli-babel": "^5.1.5" + "ember-cli-babel": "^5.1.5", + "ember-cli-htmlbars": "^1.0.1" }, "ember-addon": { "configPath": "tests/dummy/config" diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/tests/integration/components/doc-generic-test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/tests/integration/components/doc-generic-test.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,24 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('doc-generic', 'Integration | Component | doc generic', { + integration: true +}); + +test('it renders', function(assert) { + // Set any properties with this.set('myProperty', 'value'); + // Handle any actions with this.on('myAction', function(val) { ... });" + + this.render(hbs`{{doc-generic}}`); + + assert.equal(this.$().text().trim(), ''); + + // Template block usage:" + this.render(hbs` + {{#doc-generic}} + template block text + {{/doc-generic}} + `); + + assert.equal(this.$().text().trim(), 'template block text'); +}); diff -r 821253d361d1 -r c06d08c8a1b8 common/corpus-common-addon/tests/unit/helpers/get-link-type-test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/tests/unit/helpers/get-link-type-test.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,10 @@ +import { getLinkType } from 'dummy/helpers/get-link-type'; +import { module, test } from 'qunit'; + +module('Unit | Helper | get link type'); + +// Replace this with your real tests. +test('it works', function(assert) { + let result = getLinkType([42]); + assert.ok(result); +}); diff -r 821253d361d1 -r c06d08c8a1b8 server/bo_client/app/templates/doc.hbs --- a/server/bo_client/app/templates/doc.hbs Thu Feb 25 21:26:15 2016 +0100 +++ b/server/bo_client/app/templates/doc.hbs Sun Feb 28 09:30:23 2016 +0100 @@ -22,7 +22,7 @@
{{t 'bo.document_language'}}
-
{{doc-language language=model.language}}
+
{{doc-language url=model.language}}
@@ -43,7 +43,7 @@
{{t 'bo.document_subjects'}}
-
{{#each model.subjects as |subject index|}}{{if index ", "}}{{subject}}{{/each}}
+
{{#each model.subjects as |subject index|}}{{if index ", "}}{{component (get-link-type subject) url=subject}}{{/each}}
diff -r 821253d361d1 -r c06d08c8a1b8 server/bo_client/server/fixtures/bnf.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/server/fixtures/bnf.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,6 @@ +module.exports = { + "ark:/12148/cb11965628b": "frères et soeurs", + "ark:/12148/cb11946662b": "parents et enfants", + "ark:/12148/cb119766112": "miséricorde", + "ark:/12148/cb11970755h": "repentir" +}; diff -r 821253d361d1 -r c06d08c8a1b8 server/bo_client/server/fixtures/lexvo.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/server/fixtures/lexvo.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,5 @@ +module.exports = { + "fra": "français", + "gsw": "alémanique", + "oci": "occitan" +}; diff -r 821253d361d1 -r c06d08c8a1b8 server/bo_client/server/fixtures/viaf.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/server/fixtures/viaf.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,8 @@ +module.exports = { + "93752300": "Sonia Branca-Rosoff", + "9122216": "Dominique Huck", + "51700729": "Patrick Sauzet", + "56666014": "Guylaine Brun-Trigaud", + "61542329": "Arlette Bothorel", + "91792187": "Xavier Ravier" +}; diff -r 821253d361d1 -r c06d08c8a1b8 server/bo_client/server/mocks/bnf.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/server/bo_client/server/mocks/bnf.js Sun Feb 28 09:30:23 2016 +0100 @@ -0,0 +1,22 @@ +/*jshint node:true*/ +module.exports = function(app) { + var express = require('express'); + var _ = require('lodash'); + + var v1BnfRouter = express.Router(); + + var bnfMappings = require('../fixtures/bnf'); + + v1BnfRouter.get('/:id', function(req, res) { + var idList = req.params.id.split(','); + res.send({ + 'bnfids': _.reduce(idList, function(r, id) { + bnfid = "ark:/12148/" + id; + r[bnfid] = (bnfid in bnfMappings)?bnfMappings[bnfid]:null; + return r; + }, {}), + }); + }); + + app.use('/api/v1/bnf', v1BnfRouter); +}; diff -r 821253d361d1 -r c06d08c8a1b8 server/bo_client/server/mocks/lexvo.js --- a/server/bo_client/server/mocks/lexvo.js Thu Feb 25 21:26:15 2016 +0100 +++ b/server/bo_client/server/mocks/lexvo.js Sun Feb 28 09:30:23 2016 +0100 @@ -5,17 +5,10 @@ var v1LexvoRouter = express.Router(); - var lexvoMappings = { - "fra": "français", - "gsw": "alémanique", - "oci": "occitan" - }; + var lexvoMappings = require('../fixtures/lexvo'); v1LexvoRouter.get('/:id', function(req, res) { var idList = req.params.id.split(','); - var resMap = _.reduce(idList, function(r, id) { - r[id] = (id in lexvoMappings)?lexvoMappings[id]:null; - }, {}); res.send({ 'lexvoids': _.reduce(idList, function(r, id) { r[id] = (id in lexvoMappings)?lexvoMappings[id]:null; diff -r 821253d361d1 -r c06d08c8a1b8 server/bo_client/server/mocks/viaf.js --- a/server/bo_client/server/mocks/viaf.js Thu Feb 25 21:26:15 2016 +0100 +++ b/server/bo_client/server/mocks/viaf.js Sun Feb 28 09:30:23 2016 +0100 @@ -5,20 +5,10 @@ var v1ViafRouter = express.Router(); - var viafMappings = { - "93752300": "Sonia Branca-Rosoff", - "9122216": "Dominique Huck", - "51700729": "Patrick Sauzet", - "56666014": "Guylaine Brun-Trigaud", - "61542329": "Arlette Bothorel", - "91792187": "Xavier Ravier" - }; + var viafMappings = require('../fixtures/viaf'); v1ViafRouter.get('/:id', function(req, res) { var idList = req.params.id.split(','); - var resMap = _.reduce(idList, function(r, id) { - r[id] = (id in viafMappings)?viafMappings[id]:null; - }, {}); res.send({ 'viafids': _.reduce(idList, function(r, id) { r[id] = (id in viafMappings)?viafMappings[id]:null;