Skip to content

Commit e911731

Browse files
committed
extract SotD and abstract if additionaMetadata=true is specified
1 parent 9959469 commit e911731

File tree

7 files changed

+66
-5
lines changed

7 files changed

+66
-5
lines changed

lib/api.js

+1
Original file line numberDiff line numberDiff line change
@@ -200,6 +200,7 @@ const processRequest = async (req, res, params) => {
200200
);
201201
});
202202
options.events = handler;
203+
options.additionalMetadata = req.query.additional === 'true';
203204
if (validate) v.validate(options);
204205
else v.extractMetadata(options);
205206
}

lib/l10n-en_GB.js

+2
Original file line numberDiff line numberDiff line change
@@ -380,4 +380,6 @@ export const messages = {
380380
'metadata.errata': false,
381381
'metadata.patent-policy': false,
382382
'metadata.charters': false,
383+
'metadata.sotd': false,
384+
'metadata.abstract': false,
383385
};

lib/profiles/additionalMetadata.js

+16
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,16 @@
1+
/**
2+
* Pseudo-profile for additional metadata extraction.
3+
*/
4+
5+
import { rules as baseRules } from './metadata.js';
6+
import { insertAfter } from './profileUtil.js';
7+
8+
import * as abstract from '../rules/metadata/abstract.js';
9+
import * as sotd from '../rules/metadata/sotd.js';
10+
11+
export const name = 'AdditionalMetadata';
12+
13+
export const rules = insertAfter(baseRules, 'metadata.errata', [
14+
abstract,
15+
sotd,
16+
]);

lib/rules/metadata/abstract.js

+24
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,24 @@
1+
/**
2+
* Pseudo-rule for metadata extraction: abstract.
3+
*/
4+
5+
export const name = 'metadata.abstract';
6+
7+
/**
8+
* @param sr
9+
* @param done
10+
*/
11+
export function check(sr, done) {
12+
let abstractTitle;
13+
Array.prototype.some.call(sr.jsDocument.querySelectorAll('h2'), h2 => {
14+
if (sr.norm(h2.textContent).toLowerCase() === 'abstract') {
15+
abstractTitle = h2;
16+
return true;
17+
}
18+
});
19+
return done({
20+
abstract: abstractTitle
21+
? sr.norm(abstractTitle.parentElement.innerHTML)
22+
: 'Not found',
23+
});
24+
}

lib/rules/metadata/sotd.js

+14
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,14 @@
1+
/**
2+
* Pseudo-rule for metadata extraction: sotd.
3+
*/
4+
5+
export const name = 'metadata.sotd';
6+
7+
/**
8+
* @param sr
9+
* @param done
10+
*/
11+
export function check(sr, done) {
12+
const sotd = sr.getSotDSection();
13+
return done({ sotd: sotd ? sr.norm(sotd.innerHTML) : 'Not found' });
14+
}

lib/util.js

+2-1
Original file line numberDiff line numberDiff line change
@@ -121,7 +121,8 @@ const buildProcessParamsFunction = function () {
121121
p === 'informativeOnly' ||
122122
p === 'echidnaReady' ||
123123
p === 'events' ||
124-
p === 'editorial'
124+
p === 'editorial' ||
125+
p === 'additionalMetadata'
125126
) {
126127
// Other params:
127128
if (Object.prototype.hasOwnProperty.call(result, p))

lib/validator.js

+7-4
Original file line numberDiff line numberDiff line change
@@ -11,6 +11,7 @@ import w3cApi from 'node-w3capi';
1111
import { Exceptions } from './exceptions.js';
1212
import { assembleData, setLanguage } from './l10n.js';
1313
import * as profileMetadata from './profiles/metadata.js';
14+
import * as profileAdditionalMetadata from './profiles/additionalMetadata.js';
1415
import { get } from './throttled-ua.js';
1516
import {
1617
AB,
@@ -22,7 +23,6 @@ import {
2223
TAG,
2324
} from './util.js';
2425

25-
const { rules } = profileMetadata;
2626
const { version } = importJSON('../package.json', import.meta.url);
2727

2828
setLanguage('en_GB');
@@ -80,10 +80,13 @@ Specberus.prototype.extractMetadata = function (options) {
8080
const doMetadataExtraction = function (err, jsDocument) {
8181
if (err) return self.throw(err);
8282
self.jsDocument = jsDocument;
83-
self.sink.emit('start-all', profileMetadata);
84-
const total = (rules || []).length;
83+
const profile = options.additionalMetadata
84+
? profileAdditionalMetadata
85+
: profileMetadata;
86+
self.sink.emit('start-all', profile);
87+
const total = (profile.rules || []).length;
8588
let done = 0;
86-
rules.forEach(rule => {
89+
profile.rules.forEach(rule => {
8790
try {
8891
rule.check(
8992
self,

0 commit comments

Comments
 (0)