# HG changeset patch # User ymh # Date 1484830397 -3600 # Node ID 76da86cf96961150910d2c7d0edf0da430ad3176 # Parent 18613f052d563b8138e57d70a2e7053b8c52732c External OLAC links leads now to the OLAC documentation. Closes #0025936 diff -r 18613f052d56 -r 76da86cf9696 cms/app-client/app/templates/components/doc-olac.hbs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/cms/app-client/app/templates/components/doc-olac.hbs Thu Jan 19 13:53:17 2017 +0100 @@ -0,0 +1,1 @@ +{{#if value}}{{value}}{{/if}}{{#if olacUrl}} {{else}} {{/if}} \ No newline at end of file diff -r 18613f052d56 -r 76da86cf9696 common/corpus-common-addon/addon/components/doc-olac.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/addon/components/doc-olac.js Thu Jan 19 13:53:17 2017 +0100 @@ -0,0 +1,20 @@ +import Ember from 'ember'; +import layout from '../templates/components/doc-olac'; +import DocLiteral from './doc-literal'; +import * as utils from 'corpus-common-addon/utils/utils'; + +export default DocLiteral.extend({ + layout, + olacUrl: Ember.computed('url', function () { + const url = this.get('url'); + const value = this.get('value'); + + const olacDef = utils.getOLACBaseUrl(url); + + if (!olacDef) { + return ''; + } + + return olacDef.baseUrl + value; + }) +}); diff -r 18613f052d56 -r 76da86cf9696 common/corpus-common-addon/addon/helpers/get-link-type.js --- a/common/corpus-common-addon/addon/helpers/get-link-type.js Wed Jan 18 11:33:56 2017 +0100 +++ b/common/corpus-common-addon/addon/helpers/get-link-type.js Thu Jan 19 13:53:17 2017 +0100 @@ -1,7 +1,7 @@ import Ember from 'ember'; import * as utils from 'corpus-common-addon/utils/utils'; -export function getLinkType(params /*, hash */) { +export function getLinkType(params /* , hash */) { const url = params[0]; if (!url) { @@ -19,6 +19,9 @@ if (utils.isViafLink(url)) { return 'doc-contributor'; } + if (utils.isOLACLiteral(url)) { + return 'doc-olac'; + } return 'doc-literal'; } diff -r 18613f052d56 -r 76da86cf9696 common/corpus-common-addon/addon/templates/components/doc-olac.hbs --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/addon/templates/components/doc-olac.hbs Thu Jan 19 13:53:17 2017 +0100 @@ -0,0 +1,1 @@ +{{#if value}}{{value}}{{/if}}{{#if olacUrl}}{{olacUrl}}{{else}}{{datatype}}{{/if}} diff -r 18613f052d56 -r 76da86cf9696 common/corpus-common-addon/addon/utils/constants.js --- a/common/corpus-common-addon/addon/utils/constants.js Wed Jan 18 11:33:56 2017 +0100 +++ b/common/corpus-common-addon/addon/utils/constants.js Thu Jan 19 13:53:17 2017 +0100 @@ -62,3 +62,21 @@ p: 20, q: 21, r: 22, s: 23, t: 24, v: 25, w: 26, x: 27, z: 28 }; +export const OLAC_BASE_URL = { + 'http://www.language-archives.org/OLAC/1.1/linguistic-field': { + baseUrl: 'http://www.language-archives.org/REC/field.html#', + type: 'linguistic-field' + }, + 'http://www.language-archives.org/OLAC/1.1/discourse-type': { + baseUrl: 'http://www.language-archives.org/REC/discourse.html#', + type: 'discourse-type' + }, + 'http://www.language-archives.org/OLAC/1.1/linguistic-type': { + baseUrl: 'http://www.language-archives.org/REC/type.html#', + type: 'linguistic-type' + }, + 'http://www.language-archives.org/OLAC/1.1/role': { + baseUrl: 'http://www.language-archives.org/REC/role.html#', + type: 'role' + } +}; diff -r 18613f052d56 -r 76da86cf9696 common/corpus-common-addon/addon/utils/utils.js --- a/common/corpus-common-addon/addon/utils/utils.js Wed Jan 18 11:33:56 2017 +0100 +++ b/common/corpus-common-addon/addon/utils/utils.js Thu Jan 19 13:53:17 2017 +0100 @@ -75,3 +75,36 @@ return constants.NOID_CHARS[sum % constants.NOID_CHARS.length]; } + +export function getOLACBaseUrl(literalVal) { + let olacRes = null; + + if (!literalVal) { + return null; + } + if (typeof literalVal !== 'object') { + return null; + } + const datatype = literalVal.datatype; + + if (!datatype) { + return null; + } + + _.forEach(constants.OLAC_BASE_URL, function (olacDef, urlPrefix) { + if (_.startsWith(datatype, urlPrefix)) { + olacRes = olacDef; + return false; // we found it, we exit early + } + + return true; + }); + + return olacRes; +} + +export function isOLACLiteral(literalDef) { + const olacDef = getOLACBaseUrl(literalDef); + + return Boolean(olacDef); +} diff -r 18613f052d56 -r 76da86cf9696 common/corpus-common-addon/app/components/doc-olac.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/app/components/doc-olac.js Thu Jan 19 13:53:17 2017 +0100 @@ -0,0 +1,1 @@ +export { default } from 'corpus-common-addon/components/doc-olac'; \ No newline at end of file diff -r 18613f052d56 -r 76da86cf9696 common/corpus-common-addon/tests/integration/components/doc-olac-test.js --- /dev/null Thu Jan 01 00:00:00 1970 +0000 +++ b/common/corpus-common-addon/tests/integration/components/doc-olac-test.js Thu Jan 19 13:53:17 2017 +0100 @@ -0,0 +1,24 @@ +import { moduleForComponent, test } from 'ember-qunit'; +import hbs from 'htmlbars-inline-precompile'; + +moduleForComponent('doc-olac', 'Integration | Component | doc olac', { + 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-olac}}`); + + assert.equal(this.$().text().trim(), ''); + + // Template block usage: + this.render(hbs` + {{#doc-olac}} + template block text + {{/doc-olac}} + `); + + assert.equal(this.$().text().trim(), 'template block text'); +});