diff --git a/package-lock.json b/package-lock.json index 4791264..e46aba7 100644 --- a/package-lock.json +++ b/package-lock.json @@ -374,6 +374,17 @@ "lodash": "^4.17.4", "mkdirp": "^0.5.1", "source-map-support": "^0.4.15" + }, + "dependencies": { + "source-map-support": { + "version": "0.4.18", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.18.tgz", + "integrity": "sha512-try0/JqxPLF9nOjvSta7tVondkP5dwgyLDjVoyMDlmjugT2lRZ1OfsrYTkCd2hkDnJTKRbO/Rl3orm8vlsUzbA==", + "dev": true, + "requires": { + "source-map": "^0.5.6" + } + } } }, "babel-runtime": { @@ -822,6 +833,7 @@ "resolved": "https://registry.npmjs.org/block-stream/-/block-stream-0.0.9.tgz", "integrity": "sha1-E+v+d4oDIFz+A3UUgeu0szAMEmo=", "dev": true, + "optional": true, "requires": { "inherits": "~2.0.0" } @@ -837,6 +849,7 @@ "resolved": "https://registry.npmjs.org/boom/-/boom-2.10.1.tgz", "integrity": "sha1-OciRjO/1eZ+D+UkqhI9iWt0Mdm8=", "dev": true, + "optional": true, "requires": { "hoek": "2.x.x" } @@ -1009,6 +1022,12 @@ "isarray": "^1.0.0" } }, + "buffer-from": { + "version": "1.1.1", + "resolved": "https://registry.npmjs.org/buffer-from/-/buffer-from-1.1.1.tgz", + "integrity": "sha512-MQcXEUbCKtEo7bhqEs6560Hyd4XaovZlO/k9V3hjVUF/zwW7KBVdSK4gIt/bzwS9MbR5qob+F5jusZsb0YQK2A==", + "dev": true + }, "buffer-xor": { "version": "1.0.3", "resolved": "https://registry.npmjs.org/buffer-xor/-/buffer-xor-1.0.3.tgz", @@ -1211,6 +1230,7 @@ "resolved": "https://registry.npmjs.org/combined-stream/-/combined-stream-1.0.7.tgz", "integrity": "sha512-brWl9y6vOB1xYPZcpZde3N9zDByXTosAeMDo4p1wzo6UMOX4vumB+TP1RZ76sfE6Md68Q0NJSrE/gbezd4Ul+w==", "dev": true, + "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -1258,7 +1278,8 @@ "version": "1.1.0", "resolved": "https://registry.npmjs.org/console-control-strings/-/console-control-strings-1.1.0.tgz", "integrity": "sha1-PXz0Rk22RG6mRL9LOVB/mFEAjo4=", - "dev": true + "dev": true, + "optional": true }, "constants-browserify": { "version": "1.0.0", @@ -1340,6 +1361,7 @@ "resolved": "https://registry.npmjs.org/cryptiles/-/cryptiles-2.0.5.tgz", "integrity": "sha1-O9/s3GCBR8HGcgL6KR59ylnqo7g=", "dev": true, + "optional": true, "requires": { "boom": "2.x.x" } @@ -2181,7 +2203,8 @@ "ansi-regex": { "version": "2.1.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "aproba": { "version": "1.1.1", @@ -2232,7 +2255,8 @@ "balanced-match": { "version": "0.4.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "bcrypt-pbkdf": { "version": "1.0.1", @@ -2247,6 +2271,7 @@ "version": "0.0.9", "bundled": true, "dev": true, + "optional": true, "requires": { "inherits": "~2.0.0" } @@ -2255,6 +2280,7 @@ "version": "2.10.1", "bundled": true, "dev": true, + "optional": true, "requires": { "hoek": "2.x.x" } @@ -2263,6 +2289,7 @@ "version": "1.1.7", "bundled": true, "dev": true, + "optional": true, "requires": { "balanced-match": "^0.4.1", "concat-map": "0.0.1" @@ -2271,7 +2298,8 @@ "buffer-shims": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "caseless": { "version": "0.12.0", @@ -2288,12 +2316,14 @@ "code-point-at": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "combined-stream": { "version": "1.0.5", "bundled": true, "dev": true, + "optional": true, "requires": { "delayed-stream": "~1.0.0" } @@ -2301,17 +2331,20 @@ "concat-map": { "version": "0.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "console-control-strings": { "version": "1.1.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "core-util-is": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "cryptiles": { "version": "2.0.5", @@ -2357,7 +2390,8 @@ "delayed-stream": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "delegates": { "version": "1.0.0", @@ -2383,7 +2417,8 @@ "extsprintf": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "forever-agent": { "version": "0.6.1", @@ -2405,12 +2440,14 @@ "fs.realpath": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "fstream": { "version": "1.0.11", "bundled": true, "dev": true, + "optional": true, "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -2466,6 +2503,7 @@ "version": "7.1.2", "bundled": true, "dev": true, + "optional": true, "requires": { "fs.realpath": "^1.0.0", "inflight": "^1.0.4", @@ -2478,7 +2516,8 @@ "graceful-fs": { "version": "4.1.11", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "har-schema": { "version": "1.0.5", @@ -2517,7 +2556,8 @@ "hoek": { "version": "2.16.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "http-signature": { "version": "1.1.1", @@ -2534,6 +2574,7 @@ "version": "1.0.6", "bundled": true, "dev": true, + "optional": true, "requires": { "once": "^1.3.0", "wrappy": "1" @@ -2542,7 +2583,8 @@ "inherits": { "version": "2.0.3", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "ini": { "version": "1.3.4", @@ -2554,6 +2596,7 @@ "version": "1.0.0", "bundled": true, "dev": true, + "optional": true, "requires": { "number-is-nan": "^1.0.0" } @@ -2567,7 +2610,8 @@ "isarray": { "version": "1.0.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "isstream": { "version": "0.1.2", @@ -2640,12 +2684,14 @@ "mime-db": { "version": "1.27.0", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "mime-types": { "version": "2.1.15", "bundled": true, "dev": true, + "optional": true, "requires": { "mime-db": "~1.27.0" } @@ -2654,6 +2700,7 @@ "version": "3.0.4", "bundled": true, "dev": true, + "optional": true, "requires": { "brace-expansion": "^1.1.7" } @@ -2661,12 +2708,14 @@ "minimist": { "version": "0.0.8", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "mkdirp": { "version": "0.5.1", "bundled": true, "dev": true, + "optional": true, "requires": { "minimist": "0.0.8" } @@ -2719,7 +2768,8 @@ "number-is-nan": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "oauth-sign": { "version": "0.8.2", @@ -2737,6 +2787,7 @@ "version": "1.4.0", "bundled": true, "dev": true, + "optional": true, "requires": { "wrappy": "1" } @@ -2766,7 +2817,8 @@ "path-is-absolute": { "version": "1.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "performance-now": { "version": "0.2.0", @@ -2777,7 +2829,8 @@ "process-nextick-args": { "version": "1.0.7", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "punycode": { "version": "1.4.1", @@ -2815,6 +2868,7 @@ "version": "2.2.9", "bundled": true, "dev": true, + "optional": true, "requires": { "buffer-shims": "~1.0.0", "core-util-is": "~1.0.0", @@ -2859,6 +2913,7 @@ "version": "2.6.1", "bundled": true, "dev": true, + "optional": true, "requires": { "glob": "^7.0.5" } @@ -2866,7 +2921,8 @@ "safe-buffer": { "version": "5.0.1", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "semver": { "version": "5.3.0", @@ -2924,6 +2980,7 @@ "version": "1.0.2", "bundled": true, "dev": true, + "optional": true, "requires": { "code-point-at": "^1.0.0", "is-fullwidth-code-point": "^1.0.0", @@ -2934,6 +2991,7 @@ "version": "1.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "safe-buffer": "^5.0.1" } @@ -2948,6 +3006,7 @@ "version": "3.0.1", "bundled": true, "dev": true, + "optional": true, "requires": { "ansi-regex": "^2.0.0" } @@ -2962,6 +3021,7 @@ "version": "2.2.1", "bundled": true, "dev": true, + "optional": true, "requires": { "block-stream": "*", "fstream": "^1.0.2", @@ -3017,7 +3077,8 @@ "util-deprecate": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true }, "uuid": { "version": "3.0.1", @@ -3046,7 +3107,8 @@ "wrappy": { "version": "1.0.2", "bundled": true, - "dev": true + "dev": true, + "optional": true } } }, @@ -3055,6 +3117,7 @@ "resolved": "https://registry.npmjs.org/fstream/-/fstream-1.0.11.tgz", "integrity": "sha1-XB+x8RdHcRTwYyoOtLcbPLD9MXE=", "dev": true, + "optional": true, "requires": { "graceful-fs": "^4.1.2", "inherits": "~2.0.0", @@ -3336,6 +3399,7 @@ "resolved": "https://registry.npmjs.org/hawk/-/hawk-3.1.3.tgz", "integrity": "sha1-B4REvXwWQLD+VA0sm3PVlnjo4cQ=", "dev": true, + "optional": true, "requires": { "boom": "2.x.x", "cryptiles": "2.x.x", @@ -3364,7 +3428,8 @@ "version": "2.16.3", "resolved": "https://registry.npmjs.org/hoek/-/hoek-2.16.3.tgz", "integrity": "sha1-ILt0A9POo5jpHcRxCo/xuCdKJe0=", - "dev": true + "dev": true, + "optional": true }, "home-or-tmp": { "version": "2.0.0", @@ -4423,13 +4488,15 @@ "version": "1.37.0", "resolved": "https://registry.npmjs.org/mime-db/-/mime-db-1.37.0.tgz", "integrity": "sha512-R3C4db6bgQhlIhPU48fUtdVmKnflq+hRdad7IyKhtFj06VPNVdk2RhiYL3UjQIlso8L+YxAtFkobT0VK+S/ybg==", - "dev": true + "dev": true, + "optional": true }, "mime-types": { "version": "2.1.21", "resolved": "https://registry.npmjs.org/mime-types/-/mime-types-2.1.21.tgz", "integrity": "sha512-3iL6DbwpyLzjR3xHSFNFeb9Nz/M8WDkX33t1GFQnFOllWk8pOrh/LSrB5OXlnlW5P9LH73X6loW/eogc+F5lJg==", "dev": true, + "optional": true, "requires": { "mime-db": "~1.37.0" } @@ -5824,6 +5891,7 @@ "resolved": "https://registry.npmjs.org/sntp/-/sntp-1.0.9.tgz", "integrity": "sha1-ZUEYTMkK7qbG57NeJlkIJEPGYZg=", "dev": true, + "optional": true, "requires": { "hoek": "2.x.x" } @@ -5844,18 +5912,19 @@ } }, "source-map-support": { - "version": "0.4.15", - "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.4.15.tgz", - "integrity": "sha1-AyAt9lwG0r2MfsI2KhkwVv7407E=", + "version": "0.5.16", + "resolved": "https://registry.npmjs.org/source-map-support/-/source-map-support-0.5.16.tgz", + "integrity": "sha512-efyLRJDr68D9hBBNIPWFjhpFzURh+KJykQwvMyW5UiZzYwoF6l4YMMDIJJEyFWxWCqfyxLzz6tSfUFR+kXXsVQ==", "dev": true, "requires": { - "source-map": "^0.5.6" + "buffer-from": "^1.0.0", + "source-map": "^0.6.0" }, "dependencies": { "source-map": { - "version": "0.5.6", - "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.5.6.tgz", - "integrity": "sha1-dc449SvwczxafwwRjYEzSiu19BI=", + "version": "0.6.1", + "resolved": "https://registry.npmjs.org/source-map/-/source-map-0.6.1.tgz", + "integrity": "sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==", "dev": true } } @@ -6041,6 +6110,7 @@ "resolved": "https://registry.npmjs.org/tar/-/tar-2.2.1.tgz", "integrity": "sha1-jk0qJWwOIYXGsYrWlK7JaLg8sdE=", "dev": true, + "optional": true, "requires": { "block-stream": "*", "fstream": "^1.0.2", diff --git a/package.json b/package.json index b7058a5..a673fda 100644 --- a/package.json +++ b/package.json @@ -48,6 +48,7 @@ "rollup-plugin-uglify": "^1.0.1", "rollup-watch": "^2.5.0", "should": "^13.1.2", + "source-map-support": "^0.5.16", "webpack": "^2.2.1" }, "dependencies": { diff --git a/src/components/d-cite.js b/src/components/d-cite.js index c45450d..87481a9 100644 --- a/src/components/d-cite.js +++ b/src/components/d-cite.js @@ -129,7 +129,9 @@ export class Cite extends T(HTMLElement) { } get keys() { - return this.key.split(","); + const result = this.key.split(","); + console.log(result); + return result; } /* Setters & Rendering */ diff --git a/src/controller.js b/src/controller.js index be3cc32..f9d0046 100644 --- a/src/controller.js +++ b/src/controller.js @@ -12,45 +12,46 @@ // See the License for the specific language governing permissions and // limitations under the License. -import { FrontMatter, mergeFromYMLFrontmatter } from './front-matter'; -import { DMath } from './components/d-math'; -import { collect_citations } from './helpers/citation.js'; -import { domContentLoaded } from './helpers/domContentLoaded.js'; -import { parseFrontmatter } from './components/d-front-matter'; -import optionalComponents from './transforms/optional-components'; +import { FrontMatter, mergeFromYMLFrontmatter } from "./front-matter"; +import { DMath } from "./components/d-math"; +import { collect_citations } from "./helpers/citation.js"; +import { domContentLoaded } from "./helpers/domContentLoaded.js"; +import { parseFrontmatter } from "./components/d-front-matter"; +import optionalComponents from "./transforms/optional-components"; const frontMatter = new FrontMatter(); - export const Controller = { - frontMatter: frontMatter, waitingOn: { bibliography: [], - citations: [], + citations: [] }, listeners: { - onCiteKeyCreated(event) { const [citeTag, keys] = event.detail; // ensure we have citations if (!frontMatter.citationsCollected) { // console.debug('onCiteKeyCreated, but unresolved dependency ("citations"). Enqueing.'); - Controller.waitingOn.citations.push(() => Controller.listeners.onCiteKeyCreated(event)); + Controller.waitingOn.citations.push(() => + Controller.listeners.onCiteKeyCreated(event) + ); return; } // ensure we have a loaded bibliography if (!frontMatter.bibliographyParsed) { // console.debug('onCiteKeyCreated, but unresolved dependency ("bibliography"). Enqueing.'); - Controller.waitingOn.bibliography.push(() => Controller.listeners.onCiteKeyCreated(event)); + Controller.waitingOn.bibliography.push(() => + Controller.listeners.onCiteKeyCreated(event) + ); return; } - const numbers = keys.map( key => frontMatter.citations.indexOf(key) ); + const numbers = keys.map(key => frontMatter.citations.indexOf(key)); citeTag.numbers = numbers; - const entries = keys.map( key => frontMatter.bibliography.get(key) ); + const entries = keys.map(key => frontMatter.bibliography.get(key)); citeTag.entries = entries; }, @@ -65,21 +66,23 @@ export const Controller = { } // update bibliography - const citationListTag = document.querySelector('d-citation-list'); - const bibliographyEntries = new Map(frontMatter.citations.map( citationKey => { - return [citationKey, frontMatter.bibliography.get(citationKey)]; - })); + const citationListTag = document.querySelector("d-citation-list"); + const bibliographyEntries = new Map( + frontMatter.citations.map(citationKey => { + return [citationKey, frontMatter.bibliography.get(citationKey)]; + }) + ); citationListTag.citations = bibliographyEntries; - const citeTags = document.querySelectorAll('d-cite'); + const citeTags = document.querySelectorAll("d-cite"); for (const citeTag of citeTags) { + console.log(citeTag); const keys = citeTag.keys; - const numbers = keys.map( key => frontMatter.citations.indexOf(key) ); + const numbers = keys.map(key => frontMatter.citations.indexOf(key)); citeTag.numbers = numbers; - const entries = keys.map( key => frontMatter.bibliography.get(key) ); + const entries = keys.map(key => frontMatter.bibliography.get(key)); citeTag.entries = entries; } - }, onCiteKeyRemoved(event) { @@ -87,7 +90,7 @@ export const Controller = { }, onBibliographyChanged(event) { - const citationListTag = document.querySelector('d-citation-list'); + const citationListTag = document.querySelector("d-citation-list"); const bibliography = event.detail; @@ -99,19 +102,23 @@ export const Controller = { // ensure we have citations if (!frontMatter.citationsCollected) { - Controller.waitingOn.citations.push( function() { - Controller.listeners.onBibliographyChanged({target: event.target, detail: event.detail}); + Controller.waitingOn.citations.push(function() { + Controller.listeners.onBibliographyChanged({ + target: event.target, + detail: event.detail + }); }); return; } - - if (citationListTag.hasAttribute('distill-prerendered')) { - console.debug('Citation list was prerendered; not updating it.'); + if (citationListTag.hasAttribute("distill-prerendered")) { + console.debug("Citation list was prerendered; not updating it."); } else { - const entries = new Map(frontMatter.citations.map( citationKey => { - return [citationKey, frontMatter.bibliography.get(citationKey)]; - })); + const entries = new Map( + frontMatter.citations.map(citationKey => { + return [citationKey, frontMatter.bibliography.get(citationKey)]; + }) + ); citationListTag.citations = entries; } }, @@ -119,9 +126,9 @@ export const Controller = { onFootnoteChanged() { // const footnote = event.detail; //TODO: optimize to only update current footnote - const footnotesList = document.querySelector('d-footnote-list'); + const footnotesList = document.querySelector("d-footnote-list"); if (footnotesList) { - const footnotes = document.querySelectorAll('d-footnote'); + const footnotes = document.querySelectorAll("d-footnote"); footnotesList.footnotes = footnotes; } }, @@ -130,25 +137,25 @@ export const Controller = { const data = event.detail; mergeFromYMLFrontmatter(frontMatter, data); - const interstitial = document.querySelector('d-interstitial'); + const interstitial = document.querySelector("d-interstitial"); if (interstitial) { - if (typeof frontMatter.password !== 'undefined') { + if (typeof frontMatter.password !== "undefined") { interstitial.password = frontMatter.password; } else { interstitial.parentElement.removeChild(interstitial); } } - const prerendered = document.body.hasAttribute('distill-prerendered'); + const prerendered = document.body.hasAttribute("distill-prerendered"); if (!prerendered && domContentLoaded()) { optionalComponents(document, frontMatter); - const appendix = document.querySelector('distill-appendix'); + const appendix = document.querySelector("distill-appendix"); if (appendix) { appendix.frontMatter = frontMatter; } - const byline = document.querySelector('d-byline'); + const byline = document.querySelector("d-byline"); if (byline) { byline.frontMatter = frontMatter; } @@ -157,25 +164,30 @@ export const Controller = { DMath.katexOptions = data.katex; } } - }, DOMContentLoaded() { if (Controller.loaded) { - console.warn('Controller received DOMContentLoaded but was already loaded!'); + console.warn( + "Controller received DOMContentLoaded but was already loaded!" + ); return; } else if (!domContentLoaded()) { - console.warn('Controller received DOMContentLoaded at document.readyState: ' + document.readyState + '!'); + console.warn( + "Controller received DOMContentLoaded at document.readyState: " + + document.readyState + + "!" + ); return; } else { Controller.loaded = true; - console.debug('Runlevel 4: Controller running DOMContentLoaded'); + console.debug("Runlevel 4: Controller running DOMContentLoaded"); } - const frontMatterTag = document.querySelector('d-front-matter'); + const frontMatterTag = document.querySelector("d-front-matter"); if (frontMatterTag) { const data = parseFrontmatter(frontMatterTag); - Controller.listeners.onFrontMatterChanged({detail: data}); + Controller.listeners.onFrontMatterChanged({ detail: data }); } // Resolving "citations" dependency due to initial DOM load @@ -191,13 +203,11 @@ export const Controller = { } } - const footnotesList = document.querySelector('d-footnote-list'); + const footnotesList = document.querySelector("d-footnote-list"); if (footnotesList) { - const footnotes = document.querySelectorAll('d-footnote'); + const footnotes = document.querySelectorAll("d-footnote"); footnotesList.footnotes = footnotes; } } - - }, // listeners - + } // listeners }; // Controller diff --git a/src/helpers/citation.js b/src/helpers/citation.js index cf080b4..3afff8c 100644 --- a/src/helpers/citation.js +++ b/src/helpers/citation.js @@ -16,7 +16,9 @@ export function collect_citations(dom = document) { const citations = new Set(); const citeTags = dom.querySelectorAll("d-cite"); for (const tag of citeTags) { - for (const key of tag.keys) { + const keyString = tag.getAttribute("key") || tag.getAttribute("bibtex-key"); + const keys = keyString.split(",").map(k => k.trim()); + for (const key of keys) { citations.add(key); } } diff --git a/test/transforms.js b/test/transforms.js index ceb5614..413ea3b 100644 --- a/test/transforms.js +++ b/test/transforms.js @@ -14,75 +14,88 @@ /* global it, describe, before, beforeEach, after, afterEach */ -const jsdom = require('jsdom'); +const jsdom = require("jsdom"); const { JSDOM } = jsdom; -const expect = require('chai').expect; -const distill = require('../dist/transforms.v2.js'); +const expect = require("chai").expect; +const distill = require("../dist/transforms.v2.js"); // omitJSDOMErrors as JSDOM routinely can't parse modern CSS const virtualConsole = new jsdom.VirtualConsole(); virtualConsole.sendTo(console, { omitJSDOMErrors: true }); -const options = { runScripts: 'outside-only', QuerySelector: true, virtualConsole: virtualConsole }; +const options = { + runScripts: "outside-only", + QuerySelector: true, + virtualConsole: virtualConsole +}; -describe('Distill V2 (transforms)', function() { - - it('should export its expected interface', function() { - expect(distill.testing).to.be.an('object'); - expect(distill.usesTemplateV2).to.be.a('function'); - expect(distill.render).to.be.a('function'); - expect(distill.distillify).to.be.a('function'); +describe("Distill V2 (transforms)", function() { + it("should export its expected interface", function() { + expect(distill.testing).to.be.an("object"); + expect(distill.usesTemplateV2).to.be.a("function"); + expect(distill.render).to.be.a("function"); + expect(distill.distillify).to.be.a("function"); }); - describe('#usesTemplateV2()', function() { - - it('should detect v1', function() { - const frag = JSDOM.fragment(''); + describe("#usesTemplateV2()", function() { + it("should detect v1", function() { + const frag = JSDOM.fragment( + '' + ); expect(distill.usesTemplateV2(frag)).to.be.false; }); - it('should detect v2', function() { - const frag = JSDOM.fragment(''); + it("should detect v2", function() { + const frag = JSDOM.fragment( + '' + ); expect(distill.usesTemplateV2(frag)).to.be.true; }); - it('should detect local scripts as well', function() { + it("should detect local scripts as well", function() { const frag = JSDOM.fragment(''); expect(distill.usesTemplateV2(frag)).to.be.true; }); - it('should error on unknown distill script', function() { - const frag = JSDOM.fragment(''); - expect(()=> distill.usesTemplateV2(frag)).to.throw('unknown'); + it("should error on unknown distill script", function() { + const frag = JSDOM.fragment( + '' + ); + expect(() => distill.usesTemplateV2(frag)).to.throw("unknown"); }); - it('should error on no distill script', function() { - const frag = JSDOM.fragment(''); - expect(()=> distill.usesTemplateV2(frag)).to.throw('at all'); + it("should error on no distill script", function() { + const frag = JSDOM.fragment( + '' + ); + expect(() => distill.usesTemplateV2(frag)).to.throw("at all"); }); - }); - describe('#render()', function() { - - describe('should extract metadata', function() { - - it('should extract citations', function() { - const dom = new JSDOM('sth', options); + describe("#render()", function() { + describe("should extract metadata", function() { + it("should extract citations", function() { + const dom = new JSDOM( + 'sth', + options + ); const data = {}; - const extractCitations = distill.testing.extractors.get('ExtractCitations'); - expect(extractCitations).to.be.a('function'); + const extractCitations = distill.testing.extractors.get( + "ExtractCitations" + ); + expect(extractCitations).to.be.a("function"); extractCitations(dom.window.document, data); - expect(data).to.have.property('citations'); + expect(data).to.have.property("citations"); const citations = data.citations; expect(citations).to.be.an.instanceof(Array); expect(citations).to.have.lengthOf(1); const citation = citations[0]; - expect(citation).to.equal('test-citation-key'); + expect(citation).to.equal("test-citation-key"); }); - it('should extract bibliography', function() { - const dom = new JSDOM(` + it("should extract bibliography", function() { + const dom = new JSDOM( + ` sth - `, options); + `, + options + ); const data = {}; - const extractBibliography = distill.testing.extractors.get('ExtractBibliography'); + const extractBibliography = distill.testing.extractors.get( + "ExtractBibliography" + ); extractBibliography(dom.window.document, data); expect(data.bibliography).to.be.an.instanceof(Map); - const entry = data.bibliography.get('mercier2011humans'); - expect(entry).to.be.an('object'); - expect(entry).to.have.property('year', '2011'); + const entry = data.bibliography.get("mercier2011humans"); + expect(entry).to.be.an("object"); + expect(entry).to.have.property("year", "2011"); }); - it('should extract front-matter'); - + it("should extract front-matter"); }); // metadata - describe('should transform the DOM', function() { - - it('should add Google scholar citation information', function() { - const dom = new JSDOM('', options); + describe("should transform the DOM", function() { + it("should add Google scholar citation information", function() { + const dom = new JSDOM("", options); const data = { authors: [ - {firstName: 'Frank', lastName: 'Underwood', affiliation: 'Google Brain', affiliationURL: 'https://g.co/brain'}, - {firstName: 'Shan', lastName: 'Carter', affiliation: 'Google Brain', affiliationURL: 'https://g.co/brain'}, + { + firstName: "Frank", + lastName: "Underwood", + affiliation: "Google Brain", + affiliationURL: "https://g.co/brain" + }, + { + firstName: "Shan", + lastName: "Carter", + affiliation: "Google Brain", + affiliationURL: "https://g.co/brain" + } ], - doiSuffix: 'test-doi-suffix' + doiSuffix: "test-doi-suffix" }; - const firstAuthorName = data.authors[0].firstName + ' ' + data.authors[0].lastName; - const GSfirstAuthorName = data.authors[0].lastName + ', ' + data.authors[0].firstName; + const firstAuthorName = + data.authors[0].firstName + " " + data.authors[0].lastName; + const GSfirstAuthorName = + data.authors[0].lastName + ", " + data.authors[0].firstName; - const meta = distill.testing.transforms.get('Meta'); - expect(meta).to.be.a('function'); + const meta = distill.testing.transforms.get("Meta"); + expect(meta).to.be.a("function"); meta(dom.window.document, data); - const metaTags = dom.window.document.querySelectorAll('meta'); + const metaTags = dom.window.document.querySelectorAll("meta"); expect(metaTags).to.not.be.empty; // Google Scholar - const GSAuthorTags = Array.prototype.filter.call(metaTags, (tag) => { - return tag.name === 'citation_author'; + const GSAuthorTags = Array.prototype.filter.call(metaTags, tag => { + return tag.name === "citation_author"; }); expect(GSAuthorTags).to.have.lengthOf(2); const GSFirstAuthorTag = GSAuthorTags[0]; @@ -144,74 +171,89 @@ describe('Distill V2 (transforms)', function() { expect(GSFirstAuthorTag.content).to.equal(GSfirstAuthorName); // Schema.org Author tags - const SOAuthorTags = Array.prototype.filter.call(metaTags, (tag) => { - return tag.getAttribute('property') === 'article:author'; + const SOAuthorTags = Array.prototype.filter.call(metaTags, tag => { + return tag.getAttribute("property") === "article:author"; }); expect(SOAuthorTags).to.have.lengthOf(2); const SOFirstAuthorTag = SOAuthorTags[0]; expect(SOFirstAuthorTag.content).to.equal(firstAuthorName); - }); - it('given already correct data, it should add Google scholar references information', function() { - const dom = new JSDOM('', options); + it("given already correct data, it should add Google scholar references information", function() { + const dom = new JSDOM("", options); const data = { - doiSuffix: 'test-doi-suffix', - citations: ['test-citation-key'], - bibliography: new Map([[ - 'test-citation-key', { - title: 'Why do humans reason? Arguments for an argumentative theory', - author: 'Mercier, Hugo and Sperber, Dan', - journal: 'Behavioral and brain sciences', - volume: 34, - number: 2 - } - ]]) + doiSuffix: "test-doi-suffix", + citations: ["test-citation-key"], + bibliography: new Map([ + [ + "test-citation-key", + { + title: + "Why do humans reason? Arguments for an argumentative theory", + author: "Mercier, Hugo and Sperber, Dan", + journal: "Behavioral and brain sciences", + volume: 34, + number: 2 + } + ] + ]) }; - const meta = distill.testing.transforms.get('Meta'); - expect(meta).to.be.a('function'); + const meta = distill.testing.transforms.get("Meta"); + expect(meta).to.be.a("function"); meta(dom.window.document, data); - const metaTags = [].slice.call(dom.window.document.querySelectorAll('meta[name="citation_reference"]')); + const metaTags = [].slice.call( + dom.window.document.querySelectorAll( + 'meta[name="citation_reference"]' + ) + ); expect(metaTags).to.not.be.empty; }); - it('given an arxiv article, it should add a special Google scholar arxiv citation', function() { - const dom = new JSDOM('', options); + it("given an arxiv article, it should add a special Google scholar arxiv citation", function() { + const dom = new JSDOM("", options); const data = { - doiSuffix: 'test-doi-suffix', - citations: ['dumoulin2016guide'], - bibliography: new Map([[ - 'dumoulin2016guide', { - title: 'A guide to convolution arithmetic for deep learning', - author: 'Dumoulin, Vincent and Visin, Francesco', - journal: 'arXiv preprint arXiv:1603.07285', - year: '2016', - url: 'https://arxiv.org/pdf/1603.07285.pdf' - } - ]]) + doiSuffix: "test-doi-suffix", + citations: ["dumoulin2016guide"], + bibliography: new Map([ + [ + "dumoulin2016guide", + { + title: "A guide to convolution arithmetic for deep learning", + author: "Dumoulin, Vincent and Visin, Francesco", + journal: "arXiv preprint arXiv:1603.07285", + year: "2016", + url: "https://arxiv.org/pdf/1603.07285.pdf" + } + ] + ]) }; - const meta = distill.testing.transforms.get('Meta'); - expect(meta).to.be.a('function'); + const meta = distill.testing.transforms.get("Meta"); + expect(meta).to.be.a("function"); meta(dom.window.document, data); - const metaTags = [].slice.call(dom.window.document.querySelectorAll('meta[name="citation_reference"]')); + const metaTags = [].slice.call( + dom.window.document.querySelectorAll( + 'meta[name="citation_reference"]' + ) + ); expect(metaTags).to.not.be.empty; const metaTag = metaTags[0]; - expect(metaTag).to.have.property('content'); + expect(metaTag).to.have.property("content"); const content = metaTag.content; - expect(content).to.include('citation_title'); - expect(content).to.include('citation_author'); + expect(content).to.include("citation_title"); + expect(content).to.include("citation_author"); expect(content.match(/citation_author=/g).length).to.equal(2); - expect(content).to.include('citation_publication_date'); - expect(content).to.include('citation_arxiv_id'); - expect(content).to.not.include('journal'); + expect(content).to.include("citation_publication_date"); + expect(content).to.include("citation_arxiv_id"); + expect(content).to.not.include("journal"); }); - it('given only a DOM (and publish data), it should add Google scholar references information', function() { - const dom = new JSDOM(` + it("given only a DOM (and publish data), it should add Google scholar references information", function() { + const dom = new JSDOM( + ` sth - `, options); + `, + options + ); const data = { publishedDate: new Date(), updatedDate: new Date() }; distill.render(dom.window.document, data, false); - const metaTags = [].slice.call(dom.window.document.querySelectorAll('meta[name="citation_reference"]')); + const metaTags = [].slice.call( + dom.window.document.querySelectorAll( + 'meta[name="citation_reference"]' + ) + ); expect(metaTags).to.not.be.empty; }); - }); - }); // render - it('should export #distillify()', function() { - expect(distill.distillify).to.be.a('function'); + it("should export #distillify()", function() { + expect(distill.distillify).to.be.a("function"); }); - describe('#distillify()', function() { - - it('should ensure existence of header'); - it('should ensure existence of footer'); - it('should ensure existence of distill appendix'); - + describe("#distillify()", function() { + it("should ensure existence of header"); + it("should ensure existence of footer"); + it("should ensure existence of distill appendix"); }); - }); // describe 'Transform'