--- 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
*/
--- /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"
+};
--- 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 @@
</div>
<div class="dialog-body">
<p><b>Titre </b>{{modalItem.title}}</p>
- <p><b>Langue </b>{{doc-language language=modalItem.language}}</p>
+ <p><b>Langue </b>{{doc-language url=modalItem.language}}</p>
<p><b>Enregistré le </b>{{modalItem.modified}}</p>
<p><b>Interviewer </b>{{modalItem.publishers}}</p>
<p><b>Description </b>{{modalItem.description}}</p>
--- 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}}
<p><strong>{{ currentItem.title }}</strong></p>
- <p>{{doc-language language=currentItem.language}}</p>
+ <p>{{doc-language url=currentItem.language}}</p>
</div>
--- 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 @@
<span class="playing-indicator fa fa-play-circle fa-lg fa-fw pull-right" {{action 'play' item}}></span>
<strong>{{ item.title }}</strong>
<div class="description">
- {{doc-language language=item.language}}
+ {{doc-language url=item.language}}
</div>
<div class="hidden-elt">
<button class="pull-right" {{action 'toggleModal' item}}>Details</button>
--- 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 @@
</div>
<div class="notice-body">
<p><b>Titre </b>{{model.title}}</p>
- <p><b>Langue </b>{{doc-language language=model.language}}</p>
+ <p><b>Langue </b>{{doc-language url=model.language}}</p>
<p><b>Enregistré le </b>{{model.modified}}</p>
<p><b>Interviewer </b>{{model.publishers}}</p>
<p><b>Description </b>{{model.description}}</p>
--- /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'
+});
--- /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\:\/\//)
+
+});
--- /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\:\/\//)
+
+});
--- /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);
--- /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}}
--- /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}}
+<a href="{{url}}" target="_blank" title={{resolvedName}} class="bo-doc-ref-link doc-link-lexvo">
+ {{#if resolvedName}}{{resolvedName}}{{else}}{{code}}{{/if}}
+</a>
+{{else}}
+{{#if resolvedName}}{{resolvedName}}{{else}}{{code}}{{/if}}
+{{/if}}
--- /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}}
+<a href="{{url}}" target="_blank" title={{resolvedLabel}} class="bo-doc-ref-link doc-link-bnf">
+ {{#if resolvedLabel}}{{resolvedLabel}}{{else}}{{code}}{{/if}}
+</a>
+{{else}}
+{{#if resolvedLabel}}{{resolvedLabel}}{{else}}{{code}}{{/if}}
+{{/if}}
--- 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;
--- /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
--- 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';
--- /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';
--- /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';
--- 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));
}
+
});
--- 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) {
--- 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}}
-<a href="{{language}}" target="_blank" title={{resolvedName}} class="bo-doc-ref-link">
- {{#if resolvedName}}{{resolvedName}}{{else}}{{code}}{{/if}}
-</a>
-{{else}}
-{{#if resolvedName}}{{resolvedName}}{{else}}{{code}}{{/if}}
-{{/if}}
--- 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"
--- /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');
+});
--- /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);
+});
--- 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 @@
</div>
<div class="col-md-11">
<div class="content-title">{{t 'bo.document_language'}}</div>
- <div class="content-value">{{doc-language language=model.language}}</div>
+ <div class="content-value">{{doc-language url=model.language}}</div>
</div>
</div>
<div class="row">
@@ -43,7 +43,7 @@
</div>
<div class="col-md-11">
<div class="content-title">{{t 'bo.document_subjects'}}</div>
- <div class="content-value">{{#each model.subjects as |subject index|}}{{if index ", "}}{{subject}}{{/each}}</div>
+ <div class="content-value">{{#each model.subjects as |subject index|}}{{if index ", "}}{{component (get-link-type subject) url=subject}}{{/each}}</div>
</div>
</div>
</div>
--- /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"
+};
--- /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"
+};
--- /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"
+};
--- /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);
+};
--- 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;
--- 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;