Compare commits

...

30 Commits

Author SHA1 Message Date
Shan Carter c77fbbd18f 0.0.15 2017-01-09 18:11:32 -08:00
Shan Carter adcfba4627 Updating data processing 2017-01-09 18:09:59 -08:00
Shan Carter 6ef3847bf6 0.0.14 2017-01-09 17:37:13 -08:00
Shan Carter 0b68c4ea1f fix 2017-01-09 17:37:12 -08:00
Shan Carter 60cf026b88 0.0.13 2017-01-09 17:32:05 -08:00
Shan Carter b30d4084ef fix 2017-01-09 17:32:04 -08:00
Shan Carter 8aa8ef2206 0.0.12 2017-01-09 17:27:58 -08:00
Shan Carter c0824c1827 bib 2017-01-09 17:27:55 -08:00
Shan Carter 7fe35c3b88 Merge branch 'master' of https://github.com/distillpub/distill-template 2017-01-09 17:24:19 -08:00
Christopher Olah b0b3265f72 Merge branch 'master' of https://github.com/distillpub/distill-template 2017-01-09 17:17:46 -08:00
Christopher Olah 971e90069e implement crossref generator 2017-01-09 17:17:30 -08:00
Shan Carter c8fa1f7eaa 0.0.11 2017-01-09 17:14:26 -08:00
Shan Carter 05179d887e Fix 2017-01-09 17:14:24 -08:00
Shan Carter c02748434c 0.0.10 2017-01-09 17:09:59 -08:00
Shan Carter bed9a09325 testing 2017-01-09 17:09:54 -08:00
Shan Carter 010daea5f5 0.0.9 2017-01-09 16:51:59 -08:00
Shan Carter 65ca734aa3 bug 2017-01-09 16:51:54 -08:00
Shan Carter 12d78fed92 0.0.8 2017-01-09 16:42:39 -08:00
Shan Carter 722db5947e bump 2017-01-09 16:42:35 -08:00
Shan Carter cec3f6ab0b 0.0.7 2017-01-09 16:31:21 -08:00
Shan Carter 7e510b858e Fixes 2017-01-09 16:31:16 -08:00
Shan Carter 715dbec2a1 0.0.6 2017-01-09 15:50:20 -08:00
Shan Carter 953991f3f7 fixing main path 2017-01-09 15:50:15 -08:00
Shan Carter 998d88a927 0.0.5 2017-01-09 15:44:25 -08:00
Shan Carter fa20821af9 Building 2017-01-09 15:44:18 -08:00
Shan Carter 07432d89e1 0.0.4 2017-01-09 15:39:41 -08:00
Shan Carter 5e44237783 Generate crossref stub 2017-01-09 15:39:36 -08:00
Shan Carter 4ca4c92c13 version bump 2017-01-09 14:51:16 -08:00
Shan Carter 92461b41a0 remove unused file 2017-01-09 14:49:34 -08:00
Shan Carter 11026d1c2e Version bump 2017-01-09 14:49:11 -08:00
18 changed files with 580 additions and 219 deletions
+22 -16
View File
@@ -2,30 +2,36 @@ import bibtexParse from "bibtex-parse-js";
export default function(dom, data) {
let el = dom.querySelector('script[type="text/bibliography"]');
let citations = [];
let bibliography = {};
//TODO If we don't have a local element, make a request for the document.
if (el) {
let rawBib = el.textContent;
let bibliography = {};
bibtexParse.toJSON(rawBib).forEach(e => {
bibliography[e.citationKey] = e.entryTags;
bibliography[e.citationKey].type = e.entryType;
});
let parsed = bibtexParse.toJSON(rawBib);
if(parsed) {
parsed.forEach(e => {
bibliography[e.citationKey] = e.entryTags;
bibliography[e.citationKey].type = e.entryType;
});
}
let citations = [];
var citeTags = [].slice.apply(dom.querySelectorAll("dt-cite"));
citeTags.forEach(el => {
let citationKeys = el.getAttribute("key").split(",");
citationKeys.forEach(key => {
if (citations.indexOf(key) == -1){
citations.push(key);
if (! (key in bibliography)){
let key = el.getAttribute("key");
if (key) {
let citationKeys = key.split(",");
citationKeys.forEach(key => {
if (citations.indexOf(key) == -1){
citations.push(key);
if (!(key in bibliography)){
console.warn("No bibliography entry found for: " + key);
}
}
}
});
});
}
});
data.bibliography = bibliography;
data.citations = citations;
}
data.bibliography = bibliography;
data.citations = citations;
}
+7 -4
View File
@@ -10,10 +10,13 @@ export default function(dom, data) {
var citeTags = [].slice.apply(dom.querySelectorAll("dt-cite"));
console.log(citeTags);
citeTags.forEach(el => {
var keys = el.getAttribute("key").split(",");
console.log(keys)
var cite_string = inline_cite_short(keys);
el.innerHTML = cite_string;
var key = el.getAttribute("key");
if (key) {
var keys = key.split(",");
console.log(keys)
var cite_string = inline_cite_short(keys);
el.innerHTML = cite_string;
}
});
let bibEl = dom.querySelector("dt-bibliography");
+1
View File
@@ -0,0 +1 @@
iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA99JREFUeNrsG4t1ozDMzQSM4A2ODUonKBucN2hugtIJ6E1AboLcBiQTkJsANiAb9OCd/OpzMWBJBl5TvaeXPiiyJetry0J8wW3D3QpjRh3GjneXDq+fSQA9s2mH9x3KDhN4foJfCb8N/Jrv+2fnDn8vLRQOplWHVYdvHZYdZsBcZP1vBmh/n8DzEmhUQDPaOuP9pFuY+JwJHwHnCLQE2tnWBGEyXozY9xCUgHMhhjE2I4heVWtgIkZ83wL6Qgxj1obfWBxymPwe+b00BCCRNPbwfb60yleAkkBHGT5AEehIYz7eJrFDMF9CvH4wwhcGHiHMneFvLDQwlwvMLQq58trRcYBWfYn0A0OgHWQUSu25mE+BnoYKnnEJoeIWAifzOv7vLWd2ZKRfWAIme3tOiUaQ3UnLkb0xj1FxRIeEGKaGIHOs9nEgLaaA9i0JRYo1Ic67wJW86KSKE/ZAM8KuVMk8ITVhmxUxJ3Cl2xlm9Vtkeju1+mpCQNxaEGNCY8bs9X2YqwNoQeGjBWut/ma0QAWy/TqAsHx9wSya3I5IRxOfTC+leG+kA/4vSeEcGBtNUN6byhu3+keEZCQJUNh8MAO7HL6H8pQLnsW/Hd4T4lv93TPjfM7A46iEEqbB5EDOvwYNW6tGNZzT/o+CZ6sqZ6wUtR/wf7mi/VL8iNciT6rHih48Y55b4nKCHJCCzb4y0nwFmin3ZEMIoLfZF8F7nncFmvnWBaBj7CGAYA/WGJsUwHdYqVDwAmNsUgAx4CGgAA7GOOxADYOFWOaIKifuVYzmOpREqA21Mo7aPsgiY1PhOMAmxtR+AUbYH3Id2wc0SAFIQTsn9IUGWR8k9jx3vtXSiAacFxTAGakBk9UudkNECd6jLe+6HrshshvIuC6IlLMRy7er+JpcKma24SlE4cFZSZJDGVVrsNvitQhQrDhW0jfiOLfFd47C42eHT56D/BK0To+58Ahj+cAT8HT1UWlfLZCCd/uKawzU0Rh2EyIX/Icqth3niG8ybNroezwe6khdCNxRN+l4XGdOLVLlOOt2hTRJlr1ETIuMAltVTMz70mJrkdGAaZLSmnBEqmAE32JCMmuTlCnRgsBENtOUpHhvvsYIL0ibnBkaC6QvKcR7738GKp0AKnim7xgUSNv1bpS8QwhBt8r+EP47v/oyRK/S34yJ9nT+AN0Tkm4OdB9E4BsmXM3SnMlRFUrtp6IDpV2eKzdYvF3etm3KhQksbOLChGkSmcBdmcEwvqkrMy5BzL00NZeu3qPYJOOuCc+5NjcWKXQxFvTa3NoXJ4d8in7fiAUuTt781dkvuHX4K8AA2Usy7yNKLy0AAAAASUVORK5CYII=
Binary file not shown.

After

Width:  |  Height:  |  Size: 1.1 KiB

+14
View File
@@ -0,0 +1,14 @@
<?xml version="1.0" encoding="utf-8"?>
<!-- Generator: Adobe Illustrator 19.0.0, SVG Export Plug-In . SVG Version: 6.00 Build 0) -->
<svg version="1.1" id="Layer_1" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink" x="0px" y="0px"
width="64px" height="64px" viewBox="-1214 838 64 64" style="enable-background:new -1214 838 64 64;" xml:space="preserve">
<style type="text/css">
.st0{fill:none;stroke:#000000;}
</style>
<g>
<g>
<path class="st0" d="M-1182,841.2c-15.9,0-28.8,12.9-28.8,28.8s12.9,28.8,28.8,28.8s28.8-12.9,28.8-28.8S-1166.1,841.2-1182,841.2
z M-1182,891.2c-7.7,0-13.9-6.1-13.9-13.8s13.9-22.2,13.9-36.3c0,14.2,13.9,28.7,13.9,36.3S-1174.3,891.2-1182,891.2z"/>
</g>
</g>
</svg>

After

Width:  |  Height:  |  Size: 740 B

+1
View File
@@ -10,6 +10,7 @@ export default function(dom, data) {
// Homepage
//data.homepage = !post.noHomepage;
data.journal = data.journal || {};
// Dates
// TODO: fix updated date
+25 -24
View File
@@ -1,33 +1,34 @@
import ymlParse from "js-yaml";
export default function(dom, data) {
let localData = {};
let el = dom.querySelector('script[type="text/front-matter"]');
//TODO If we don't have a local element, make a request for the document.
if (el) {
let text = el.textContent;
let localData = ymlParse.safeLoad(text);
data.title = localData.title;
data.description = localData.description;
data.published = new Date(localData.published);
data.updated = new Date(localData.published || localData.updated);
data.authors = localData.authors.map((author, i) =>{
let a = {};
let name = Object.keys(author)[0];
let names = name.split(" ");
a.firstName = names.slice(0, names.length - 1).join(" ");
a.lastName = names[names.length -1];
a.personalURL = author[name];
if(localData.affiliations[i]) {
let affiliation = Object.keys(localData.affiliations[i])[0];
a.affiliation = affiliation;
a.affiliationURL = localData.affiliations[i][affiliation];
}
return a;
});
localData = ymlParse.safeLoad(text);
}
data.title = localData.title ? localData.title : "Untitled";
data.description = localData.description ? localData.description : "No description.";
data.published = localData.published ? new Date(localData.published) : new Date("Invalid");
data.updated = localData.updated ? new Date(localData.updated) : new Date("Invalid");
data.authors = localData.authors ? localData.authors : [];
data.authors = data.authors.map((author, i) =>{
let a = {};
let name = Object.keys(author)[0];
let names = name.split(" ");
a.name = name;
a.firstName = names.slice(0, names.length - 1).join(" ");
a.lastName = names[names.length -1];
a.personalURL = author[name];
if(localData.affiliations[i]) {
let affiliation = Object.keys(localData.affiliations[i])[0];
a.affiliation = affiliation;
a.affiliationURL = localData.affiliations[i][affiliation];
}
return a;
});
}
+171
View File
@@ -0,0 +1,171 @@
//import xml from "xml";
export default function(data) {
if (data.published == undefined) {
//console.warn("Can't generate XML for post ", data.title, "with data", data);
//return "";
data.published = new Date("invalid");
}
var date = data.published;
var batch_timestamp = Math.floor(Date.now() / 1000);
console.log(data.authors)
var batch_id = data.authors.length ? data.authors[0].lastName.toLowerCase().slice(0,20) : "Anonymous";
batch_id += "_" + date.getFullYear();
batch_id += "_" + data.title.split(" ")[0].toLowerCase().slice(0,20) + "_" + batch_timestamp;
// generate XML
var crf_data =
{doi_batch : [
{ _attr: {
version: "4.3.7",
xmlns: "http://www.crossref.org/schema/4.3.7",
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"xsi:schemaLocation": "http://www.crossref.org/schema/4.3.7 http://www.crossref.org/schemas/crossref4.3.7.xsd",
}},
{ head: [
{doi_batch_id: batch_id},
{timestamp: batch_timestamp},
{depositor: [
{depositor_name: "Distill Admin"},
{email_address: "admin@distill.pub"},
]},
{registrant: "Distill"},
]},
{body: [
{journal: [
{journal_metadata: [
{full_title: data.journal.full_title || data.journal.title},
{abbrev_title: data.journal.abbrev_title || data.journal.title || data.journal.full_title},
{doi_data: [
{doi: data.journal.doi},
{resource: data.journal.url},
]},
]},
{journal_issue: [
{publication_date: [
{month: date.getMonth()+1},
{year: date.getFullYear()},
]},
{journal_volume: [
{volume: data.volume},
]},
{issue: data.issue},
]},
{journal_article: [
{titles: [
{title: data.title},
]},
{ contributors:
data.authors.map((author, ind) => (
{person_name: [
{ _attr: {
contributor_role: "author",
sequence: (ind == 0)? "first" : "additional"
}},
{given_name: author.firstName},
{surname: author.lastName},
{affiliation: author.affiliation}
// TODO: ORCID?
]}
))
},
{publication_date: [
{month: date.getMonth()+1},
{day: date.getDate()},
{year: date.getFullYear()}
]},
{ publisher_item: [
{item_number: data.doi}
]},
{doi_data: [
{doi: data.doi},
//{timestamp: ""},
{resource: data.url},
]},
{citation_list:
data.citations.map(key =>
citation_xml(key, data.bibliography[key]))
}
]},
]},
]},
]};
return xml(crf_data);
}
function citation_xml(key, ent){
if (ent == undefined) return {};
var info = [];
info.push({_attr: {key: key}});
if ("title" in ent)
info.push({article_title: ent.title});
if ("author" in ent)
info.push({author: ent.author.split(" and ")[0].split(",")[0].trim()});
if ("journal" in ent)
info.push({journal_title: ent.journal});
if ("booktitle" in ent)
info.push({volume_title: ent.booktitle});
if ("volume" in ent)
info.push({volume: ent.volume});
if ("issue" in ent)
info.push({issue: ent.issue});
if ("doi" in ent)
info.push({doi: ent.doi});
return {citation: info}
}
function xml(obj) {
//console.log(typeof(obj), obj)
if (typeof obj === 'string') return obj;
if (typeof obj === 'number') return ""+obj;
let keys = Object.keys(obj);
if (keys.length != 1) console.error("can't interpret ", obj, "as xml");
let name = keys[0];
var full_content = obj[name];
var attr = {};
if (Array.isArray(full_content)){
var content = [];
for (var i in full_content) {
var obj = full_content[i];
var obj_name = Object.keys(obj)[0];
if ("_attr" == obj_name) {
attr = obj["_attr"];
} else {
//console.log(Object.keys(obj)[0])
content.push(obj);
}
}
} else {
content = full_content;
}
if (content == undefined){
content = "undefined"
}
let attr_string = "";
for (var k in attr) {
attr_string += ` ${k}=\"${attr[k]}\"`
}
//console.log(typeof content, Array.isArray(content), content instanceof String, content)
if (Array.isArray(content)){
content = content.map(xml);
content = content.join("\n").split("\n");
content = content.map(s => " " + s).join("\n")
var result = `<${name}${attr_string}>\n${content}\n</${name}>`;
} else {
content = xml(content);
var result = `<${name}${attr_string}>${content}</${name}>`;
}
return result;
}
+1 -1
View File
@@ -6,7 +6,7 @@ dt-header {
display: block;
position: relative;
height: 60px;
background-color: #fcfcfc;
background-color: none;
width: 100%;
box-sizing: border-box;
z-index: 2;
+10 -4
View File
@@ -1,3 +1,5 @@
import favicon from './distill-favicon.base64';
export default function(dom, data) {
let head = dom.querySelector("head");
let appendHead = html => appendHtml(head, html);
@@ -9,7 +11,7 @@ export default function(dom, data) {
appendHead(`
<meta http-equiv="X-UA-Compatible" content="IE=Edge,chrome=1">
<link rel="icon" type="image/png" href="/favicon.png">
<link rel="icon" type="image/png" href="data:image/png;base64,${favicon}">
<link href="/rss.xml" rel="alternate" type="application/rss+xml" title="Articles from Distill">
<link rel="canonical" href="${data.url}">
<title>${data.title}</title>
@@ -78,13 +80,17 @@ export default function(dom, data) {
});
if (data.citations) {
data.citations.forEach(key =>
data.citations.forEach(key => {
let d = data.bibliography[key];
if(!d) {
console.warn("No bibliography data fround for " + key)
} else {
meta("citation_reference", citation_meta_content(data.bibliography[key]) )
);
};
});
}
}
function appendHtml(el, html) {
el.innerHTML += html;
}
+264 -73
View File
@@ -3819,35 +3819,36 @@ var yaml = jsYaml;
var index = yaml;
var frontMatter = function(dom, data) {
var localData = {};
var el = dom.querySelector('script[type="text/front-matter"]');
//TODO If we don't have a local element, make a request for the document.
if (el) {
var text = el.textContent;
var localData = index.safeLoad(text);
data.title = localData.title;
data.description = localData.description;
data.published = new Date(localData.published);
data.updated = new Date(localData.published || localData.updated);
data.authors = localData.authors.map(function (author, i) {
var a = {};
var name = Object.keys(author)[0];
var names = name.split(" ");
a.firstName = names.slice(0, names.length - 1).join(" ");
a.lastName = names[names.length -1];
a.personalURL = author[name];
if(localData.affiliations[i]) {
var affiliation = Object.keys(localData.affiliations[i])[0];
a.affiliation = affiliation;
a.affiliationURL = localData.affiliations[i][affiliation];
}
return a;
});
localData = index.safeLoad(text);
}
data.title = localData.title ? localData.title : "Untitled";
data.description = localData.description ? localData.description : "No description.";
data.published = localData.published ? new Date(localData.published) : new Date("Invalid");
data.updated = localData.updated ? new Date(localData.updated) : new Date("Invalid");
data.authors = localData.authors ? localData.authors : [];
data.authors = data.authors.map(function (author, i) {
var a = {};
var name = Object.keys(author)[0];
var names = name.split(" ");
a.name = name;
a.firstName = names.slice(0, names.length - 1).join(" ");
a.lastName = names[names.length -1];
a.personalURL = author[name];
if(localData.affiliations[i]) {
var affiliation = Object.keys(localData.affiliations[i])[0];
a.affiliation = affiliation;
a.affiliationURL = localData.affiliations[i][affiliation];
}
return a;
});
};
var bibtexParse = createCommonjsModule(function (module, exports) {
@@ -4195,32 +4196,38 @@ var bibtexParse = createCommonjsModule(function (module, exports) {
var bibliography = function(dom, data) {
var el = dom.querySelector('script[type="text/bibliography"]');
var citations = [];
var bibliography = {};
//TODO If we don't have a local element, make a request for the document.
if (el) {
var rawBib = el.textContent;
var bibliography = {};
bibtexParse.toJSON(rawBib).forEach(function (e) {
bibliography[e.citationKey] = e.entryTags;
bibliography[e.citationKey].type = e.entryType;
});
var parsed = bibtexParse.toJSON(rawBib);
if(parsed) {
parsed.forEach(function (e) {
bibliography[e.citationKey] = e.entryTags;
bibliography[e.citationKey].type = e.entryType;
});
}
var citations = [];
var citeTags = [].slice.apply(dom.querySelectorAll("dt-cite"));
citeTags.forEach(function (el) {
var citationKeys = el.getAttribute("key").split(",");
citationKeys.forEach(function (key) {
if (citations.indexOf(key) == -1){
citations.push(key);
if (! (key in bibliography)){
var key = el.getAttribute("key");
if (key) {
var citationKeys = key.split(",");
citationKeys.forEach(function (key) {
if (citations.indexOf(key) == -1){
citations.push(key);
if (!(key in bibliography)){
console.warn("No bibliography entry found for: " + key);
}
}
}
});
});
}
});
data.bibliography = bibliography;
data.citations = citations;
}
data.bibliography = bibliography;
data.citations = citations;
};
var expandData = function(dom, data) {
@@ -4235,6 +4242,7 @@ var expandData = function(dom, data) {
// Homepage
//data.homepage = !post.noHomepage;
data.journal = data.journal || {};
// Dates
// TODO: fix updated date
@@ -4260,6 +4268,8 @@ var expandData = function(dom, data) {
};
var favicon = "iVBORw0KGgoAAAANSUhEUgAAAEAAAABACAYAAACqaXHeAAAAGXRFWHRTb2Z0d2FyZQBBZG9iZSBJbWFnZVJlYWR5ccllPAAAA99JREFUeNrsG4t1ozDMzQSM4A2ODUonKBucN2hugtIJ6E1AboLcBiQTkJsANiAb9OCd/OpzMWBJBl5TvaeXPiiyJetry0J8wW3D3QpjRh3GjneXDq+fSQA9s2mH9x3KDhN4foJfCb8N/Jrv+2fnDn8vLRQOplWHVYdvHZYdZsBcZP1vBmh/n8DzEmhUQDPaOuP9pFuY+JwJHwHnCLQE2tnWBGEyXozY9xCUgHMhhjE2I4heVWtgIkZ83wL6Qgxj1obfWBxymPwe+b00BCCRNPbwfb60yleAkkBHGT5AEehIYz7eJrFDMF9CvH4wwhcGHiHMneFvLDQwlwvMLQq58trRcYBWfYn0A0OgHWQUSu25mE+BnoYKnnEJoeIWAifzOv7vLWd2ZKRfWAIme3tOiUaQ3UnLkb0xj1FxRIeEGKaGIHOs9nEgLaaA9i0JRYo1Ic67wJW86KSKE/ZAM8KuVMk8ITVhmxUxJ3Cl2xlm9Vtkeju1+mpCQNxaEGNCY8bs9X2YqwNoQeGjBWut/ma0QAWy/TqAsHx9wSya3I5IRxOfTC+leG+kA/4vSeEcGBtNUN6byhu3+keEZCQJUNh8MAO7HL6H8pQLnsW/Hd4T4lv93TPjfM7A46iEEqbB5EDOvwYNW6tGNZzT/o+CZ6sqZ6wUtR/wf7mi/VL8iNciT6rHih48Y55b4nKCHJCCzb4y0nwFmin3ZEMIoLfZF8F7nncFmvnWBaBj7CGAYA/WGJsUwHdYqVDwAmNsUgAx4CGgAA7GOOxADYOFWOaIKifuVYzmOpREqA21Mo7aPsgiY1PhOMAmxtR+AUbYH3Id2wc0SAFIQTsn9IUGWR8k9jx3vtXSiAacFxTAGakBk9UudkNECd6jLe+6HrshshvIuC6IlLMRy7er+JpcKma24SlE4cFZSZJDGVVrsNvitQhQrDhW0jfiOLfFd47C42eHT56D/BK0To+58Ahj+cAT8HT1UWlfLZCCd/uKawzU0Rh2EyIX/Icqth3niG8ybNroezwe6khdCNxRN+l4XGdOLVLlOOt2hTRJlr1ETIuMAltVTMz70mJrkdGAaZLSmnBEqmAE32JCMmuTlCnRgsBENtOUpHhvvsYIL0ibnBkaC6QvKcR7738GKp0AKnim7xgUSNv1bpS8QwhBt8r+EP47v/oyRK/S34yJ9nT+AN0Tkm4OdB9E4BsmXM3SnMlRFUrtp6IDpV2eKzdYvF3etm3KhQksbOLChGkSmcBdmcEwvqkrMy5BzL00NZeu3qPYJOOuCc+5NjcWKXQxFvTa3NoXJ4d8in7fiAUuTt781dkvuHX4K8AA2Usy7yNKLy0AAAAASUVORK5CYII=\n";
var meta = function(dom, data) {
var head = dom.querySelector("head");
var appendHead = function (html) { return appendHtml(head, html); };
@@ -4269,7 +4279,7 @@ var meta = function(dom, data) {
{ appendHead(("<meta name=\"" + name + "\" content=\"" + content + "\" >")); }
}
appendHead(("\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\">\n <link rel=\"icon\" type=\"image/png\" href=\"/favicon.png\">\n <link href=\"/rss.xml\" rel=\"alternate\" type=\"application/rss+xml\" title=\"Articles from Distill\">\n <link rel=\"canonical\" href=\"" + (data.url) + "\">\n <title>" + (data.title) + "</title>\n "));
appendHead(("\n <meta http-equiv=\"X-UA-Compatible\" content=\"IE=Edge,chrome=1\">\n <link rel=\"icon\" type=\"image/png\" href=\"data:image/png;base64," + favicon + "\">\n <link href=\"/rss.xml\" rel=\"alternate\" type=\"application/rss+xml\" title=\"Articles from Distill\">\n <link rel=\"canonical\" href=\"" + (data.url) + "\">\n <title>" + (data.title) + "</title>\n "));
appendHead(("\n <!-- https://schema.org/Article -->\n <meta property=\"article:published\" itemprop=\"datePublished\" content=\"" + (data.published) + "\" />\n <meta property=\"article:modified\" itemprop=\"dateModified\" content=\"" + (data.updated) + "\" />\n "));
data.authors.forEach(function (a) {
@@ -4282,35 +4292,44 @@ var meta = function(dom, data) {
appendHead("\n <!-- https://scholar.google.com/intl/en/scholar/inclusion.html#indexing -->\n ");
var journal = data.journal || {};
var zeroPad = function (n) { return n < 10 ? "0" + n : n; };
var publishedYear = data.published.getFullYear();
var publishedMonthPadded = zeroPad(data.published.getMonth() + 1);
var publishedDayPadded = zeroPad(data.published.getDate());
meta("citation_title", data.title);
meta("citation_publication_date", data.published? (publishedYear + "/" + publishedMonthPadded + "/" + publishedDayPadded) : undefined);
meta("citation_fulltext_html_url", data.url);
meta("citation_volume", data.volume);
meta("citation_issue", data.issue);
meta("citation_firstpage", data.doiSuffix? ("e" + (data.doiSuffix)) : undefined);
meta("citation_doi", data.doi);
var journal = data.journal || {};
meta("citation_journal_title", journal.name);
meta("citation_journal_abbrev", journal.nameAbbrev);
meta("citation_issn", journal.issn);
meta("citation_publisher", journal.publisher);
if (data.published){
var zeroPad = function (n) { return n < 10 ? "0" + n : n; };
var publishedYear = data.published.getFullYear();
var publishedMonthPadded = zeroPad(data.published.getMonth() + 1);
var publishedDayPadded = zeroPad(data.published.getDate());
meta("citation_publication_date", (publishedYear + "/" + publishedMonthPadded + "/" + publishedDayPadded));
}
(data.authors || []).forEach(function (a) {
meta("citation_author", ((a.lastName) + ", " + (a.firstName)));
meta("citation_author_institution", a.affiliation);
});
if (data.citations) {
data.citations.forEach(function (key) { return meta("citation_reference", citation_meta_content(data.bibliography[key]) ); }
);
data.citations.forEach(function (key) {
var d = data.bibliography[key];
if(!d) {
console.warn("No bibliography data fround for " + key);
} else {
meta("citation_reference", citation_meta_content(data.bibliography[key]) );
}
});
}
};
function appendHtml(el, html) {
el.innerHTML += html;
}
@@ -4336,7 +4355,7 @@ function citation_meta_content(ref){
var logo = "<svg viewBox=\"-607 419 64 64\">\n <path style=\"fill: none; stroke: black;stroke-width: 2px;\" d=\"M-573.4,478.9c-8,0-14.6-6.4-14.6-14.5s14.6-25.9,14.6-40.8c0,14.9,14.6,32.8,14.6,40.8S-565.4,478.9-573.4,478.9z\"/>\n</svg>\n";
var html$1 = "\n<style>\ndt-header {\n display: block;\n position: relative;\n height: 60px;\n background-color: #fcfcfc;\n width: 100%;\n box-sizing: border-box;\n z-index: 2;\n color: rgba(0, 0, 0, 0.8);\n}\ndt-header .content {\n border-bottom: 1px solid rgba(0, 0, 0, 0.3);\n height: 60px;\n}\ndt-header a {\n font-size: 16px;\n height: 60px;\n line-height: 60px;\n text-decoration: none;\n color: rgba(0, 0, 0, 0.8);\n}\ndt-header svg {\n width: 24px;\n position: relative;\n top: 4px;\n margin-right: -2px;\n}\ndt-header svg path {\n fill: none;\n stroke: black;\n stroke-width: 1;\n stroke-linejoin: round;\n}\ndt-header .logo {\n font-size: 16px;\n font-weight: 300;\n}\ndt-header .nav {\n float: right;\n}\ndt-header .nav a {\n font-size: 14px;\n}\n</style>\n\n<div class=\"content l-page\">\n <a href=\"/\" class=\"logo\">\n " + logo + "\n Distill\n </a>\n <div class=\"nav\">\n </div>\n</div>\n";
var html$1 = "\n<style>\ndt-header {\n display: block;\n position: relative;\n height: 60px;\n background-color: none;\n width: 100%;\n box-sizing: border-box;\n z-index: 2;\n color: rgba(0, 0, 0, 0.8);\n}\ndt-header .content {\n border-bottom: 1px solid rgba(0, 0, 0, 0.3);\n height: 60px;\n}\ndt-header a {\n font-size: 16px;\n height: 60px;\n line-height: 60px;\n text-decoration: none;\n color: rgba(0, 0, 0, 0.8);\n}\ndt-header svg {\n width: 24px;\n position: relative;\n top: 4px;\n margin-right: -2px;\n}\ndt-header svg path {\n fill: none;\n stroke: black;\n stroke-width: 1;\n stroke-linejoin: round;\n}\ndt-header .logo {\n font-size: 16px;\n font-weight: 300;\n}\ndt-header .nav {\n float: right;\n}\ndt-header .nav a {\n font-size: 14px;\n}\n</style>\n\n<div class=\"content l-page\">\n <a href=\"/\" class=\"logo\">\n " + logo + "\n Distill\n </a>\n <div class=\"nav\">\n </div>\n</div>\n";
var header = function(dom, data) {
dom.querySelector('dt-header').innerHTML = html$1;
@@ -4384,10 +4403,13 @@ var citation = function(dom, data) {
var citeTags = [].slice.apply(dom.querySelectorAll("dt-cite"));
console.log(citeTags);
citeTags.forEach(function (el) {
var keys = el.getAttribute("key").split(",");
console.log(keys);
var cite_string = inline_cite_short(keys);
el.innerHTML = cite_string;
var key = el.getAttribute("key");
if (key) {
var keys = key.split(",");
console.log(keys);
var cite_string = inline_cite_short(keys);
el.innerHTML = cite_string;
}
});
var bibEl = dom.querySelector("dt-bibliography");
@@ -6626,29 +6648,197 @@ var code$1 = function(dom, data) {
});
};
function render(dom, data) {
data = data || {};
//import xml from "xml";
var generateCrossref = function(data) {
if (data.published == undefined) {
//console.warn("Can't generate XML for post ", data.title, "with data", data);
//return "";
data.published = new Date("invalid");
}
var date = data.published;
var batch_timestamp = Math.floor(Date.now() / 1000);
console.log(data.authors);
var batch_id = data.authors.length ? data.authors[0].lastName.toLowerCase().slice(0,20) : "Anonymous";
batch_id += "_" + date.getFullYear();
batch_id += "_" + data.title.split(" ")[0].toLowerCase().slice(0,20) + "_" + batch_timestamp;
// generate XML
var crf_data =
{doi_batch : [
{ _attr: {
version: "4.3.7",
xmlns: "http://www.crossref.org/schema/4.3.7",
"xmlns:xsi": "http://www.w3.org/2001/XMLSchema-instance",
"xsi:schemaLocation": "http://www.crossref.org/schema/4.3.7 http://www.crossref.org/schemas/crossref4.3.7.xsd",
}},
{ head: [
{doi_batch_id: batch_id},
{timestamp: batch_timestamp},
{depositor: [
{depositor_name: "Distill Admin"},
{email_address: "admin@distill.pub"} ]},
{registrant: "Distill"} ]},
{body: [
{journal: [
{journal_metadata: [
{full_title: data.journal.full_title || data.journal.title},
{abbrev_title: data.journal.abbrev_title || data.journal.title || data.journal.full_title},
{doi_data: [
{doi: data.journal.doi},
{resource: data.journal.url} ]} ]},
{journal_issue: [
{publication_date: [
{month: date.getMonth()+1},
{year: date.getFullYear()} ]},
{journal_volume: [
{volume: data.volume} ]},
{issue: data.issue} ]},
{journal_article: [
{titles: [
{title: data.title} ]},
{ contributors:
data.authors.map(function (author, ind) { return (
{person_name: [
{ _attr: {
contributor_role: "author",
sequence: (ind == 0)? "first" : "additional"
}},
{given_name: author.firstName},
{surname: author.lastName},
{affiliation: author.affiliation}
// TODO: ORCID?
]}
); })
},
{publication_date: [
{month: date.getMonth()+1},
{day: date.getDate()},
{year: date.getFullYear()}
]},
{ publisher_item: [
{item_number: data.doi}
]},
{doi_data: [
{doi: data.doi},
//{timestamp: ""},
{resource: data.url} ]},
{citation_list:
data.citations.map(function (key) { return citation_xml(key, data.bibliography[key]); })
}
]} ]} ]} ]};
return xml(crf_data);
};
function citation_xml(key, ent){
if (ent == undefined) { return {}; }
var info = [];
info.push({_attr: {key: key}});
if ("title" in ent)
{ info.push({article_title: ent.title}); }
if ("author" in ent)
{ info.push({author: ent.author.split(" and ")[0].split(",")[0].trim()}); }
if ("journal" in ent)
{ info.push({journal_title: ent.journal}); }
if ("booktitle" in ent)
{ info.push({volume_title: ent.booktitle}); }
if ("volume" in ent)
{ info.push({volume: ent.volume}); }
if ("issue" in ent)
{ info.push({issue: ent.issue}); }
if ("doi" in ent)
{ info.push({doi: ent.doi}); }
return {citation: info}
}
function xml(obj) {
//console.log(typeof(obj), obj)
if (typeof obj === 'string') { return obj; }
if (typeof obj === 'number') { return ""+obj; }
var keys = Object.keys(obj);
if (keys.length != 1) { console.error("can't interpret ", obj, "as xml"); }
var name = keys[0];
var full_content = obj[name];
var attr = {};
if (Array.isArray(full_content)){
var content = [];
for (var i in full_content) {
var obj = full_content[i];
var obj_name = Object.keys(obj)[0];
if ("_attr" == obj_name) {
attr = obj["_attr"];
} else {
//console.log(Object.keys(obj)[0])
content.push(obj);
}
}
} else {
content = full_content;
}
if (content == undefined){
content = "undefined";
}
var attr_string = "";
for (var k in attr) {
attr_string += " " + k + "=\"" + (attr[k]) + "\"";
}
//console.log(typeof content, Array.isArray(content), content instanceof String, content)
if (Array.isArray(content)){
content = content.map(xml);
content = content.join("\n").split("\n");
content = content.map(function (s) { return " " + s; }).join("\n");
var result = "<" + name + attr_string + ">\n" + content + "\n</" + name + ">";
} else {
content = xml(content);
var result = "<" + name + attr_string + ">" + content + "</" + name + ">";
}
return result;
}
function renderImmediately(dom) {
html(dom);
styles(dom);
dom.addEventListener("DOMContentLoaded", function(event) {
frontMatter(dom, data);
bibliography(dom, data);
expandData(dom, data);
meta(dom, data);
header(dom, data);
appendix(dom, data);
footer(dom, data);
markdown(dom, data);
code$1(dom, data);
citation(dom, data);
console.log("final data:");
for (var k in data) {console.log(" ", k, ": ", data[k]);}
}
function renderOnLoad(dom, data) {
frontMatter(dom, data);
bibliography(dom, data);
expandData(dom, data);
meta(dom, data);
header(dom, data);
appendix(dom, data);
footer(dom, data);
markdown(dom, data);
code$1(dom, data);
citation(dom, data);
// TODO remove script tag
}
// If we are in a browser, render automatically.
if(window && window.document) {
var data = {};
renderImmediately(window.document);
window.document.addEventListener("DOMContentLoaded", function (event) {
renderOnLoad(window.document, data);
generateCrossref(data);
});
}
// If we are in a browser, run render automatically.
if(window && window.document) {
render(window.document);
// For node
function render(dom, data) {
renderImmediately(dom);
renderOnLoad(dom, data);
}
exports.render = render;
@@ -6663,6 +6853,7 @@ exports.footer = footer;
exports.citation = citation;
exports.markdown = markdown;
exports.code = code$1;
exports.generateCrossref = generateCrossref;
Object.defineProperty(exports, '__esModule', { value: true });
+1 -1
View File
File diff suppressed because one or more lines are too long
+26 -29
View File
@@ -24,18 +24,12 @@
<p>Distill ships with a CSS framework and a collection of custom web components that make building interactive academic articles easier than with raw HTML, CSS and JavaScript. This reference article details several examples and best practices for how to use both frameworks.</p>
<hr>
<h2>Getting Started</h2>
<p>If youre using Chrome as your development browser, here is the smallest distill post.</p>
<dt-code block language="html">
&lt;script src="../dist/template.min.js"&gt;&lt;/script&gt;
&lt;dt-article&gt;
&lt;h1&gt;Hello World&lt;/h1&gt;
&lt;/dt-article&gt;
</dt-code>
<p>However, this omits some required html tags that might cause rendering problems during development if youre using a browser other than Chrome. These missing tags will be added during publishing, so if the above works for you, feel free to use it. If you are having issues, try adding <dt-code>doctype</dt-code> and <dt-code>meta</dt-code> tags explicitly.</p>
<p>Here is the smallest distill post.</p>
<dt-code block language="html">
&lt;!doctype html&gt;
&lt;meta charset="utf-8"&gt;
&lt;script src="../dist/template.min.js"&gt;&lt;/script&gt;
&lt;dt-article&gt;
&lt;h1&gt;Hello World&lt;/h1&gt;
&lt;/dt-article&gt;
@@ -45,7 +39,8 @@
&lt;!doctype html&gt;
&lt;meta charset="utf-8"&gt;
&lt;script src="../dist/template.min.js"&gt;&lt;/script&gt;
&lt;dt-front-matter&gt;
&lt;script type="text/front-matter"&gt;
title: Article Title
description: Description of the post
published: Jan 10, 2017
@@ -55,7 +50,8 @@
affiliations:
- Google Brain: http://g.co/brain
- Google Brain: http://g.co/brain
&lt;/dt-front-matter&gt;
&lt;/script&gt;
&lt;dt-article&gt;
&lt;h1&gt;Hello World&lt;/h1&gt;
&lt;h2&gt;A description of the article&lt;/h2&gt;
@@ -63,14 +59,15 @@
&lt;p&gt;This is the first paragraph of the article.&lt;/p&gt;
&lt;p&gt;We can also cite &lt;dt-cite key="gregor2015draw"&gt;&lt;/dt-cite&gt; external publications.&lt;/p&gt;
&lt;/dt-article&gt;
&lt;dt-bibliography&gt;
&lt;script type="text/bibliography"&gt;
@article{gregor2015draw,
title={DRAW: A recurrent neural network for image generation},
author={Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan},
journal={arXivreprint arXiv:1502.04623},
year={2015}
}
&lt;/dt-bibliography&gt;
&lt;/script&gt;
</dt-code>
<hr>
<h2>Markdown</h2>
@@ -86,14 +83,14 @@
First paragraph of the article.
&lt;/dt-article&gt;
&lt;dt-bibliography&gt;&lt;/dt-bibliography&gt;
&lt;script type="text/bibliography"&gt;&lt;/script&gt;
</dt-code>
<p>We use <a href="https://github.com/chjj/marked">marked</a> as the rendering engine, with <a href="https://help.github.com/articles/basic-writing-and-formatting-syntax/">github flavored markdown</a> and <a href="https://daringfireball.net/projects/smartypants/">smartypants</a> enabled. In development mode the markdown is translated in the client after the dom content has loaded, but when published, the translation is precompiled.</p>
<hr>
<h2>Front Matter</h2>
<p>Youll need to describe some data about you post — title, description, authors, etc. For this use the <dt-code language="html">&lt;dt-front-matter&gt;</dt-code> tag.</p>
<p>Youll need to describe some data about you post — title, description, authors, etc. For this use the <dt-code language="html">&lt;script type="text/front-matter"&gt;</dt-code> tag.</p>
<dt-code block language="html">
&lt;dt-front-matter&gt;
&lt;script type="text/front-matter"&gt;
title: Article Title
description: Description of the post
authors:
@@ -102,17 +99,17 @@
affiliations:
- Google Brain: http://g.co/brain
- Google Brain: http://g.co/brain
&lt;/dt-front-matter&gt;
&lt;/script&gt;
</dt-code>
<p>You can also use an external JSON file if you like. We will automatically make a request for a <dt-code>distill.json</dt-code> file if there is no <dt-code language="html">&lt;dt-front-matter&gt;</dt-code> element on the page, or you can point to another file with the <dt-code>src</dt-code> attribute. In production, these files will be inlined into the document.</p>
<!-- <p>You can also use an external JSON file if you like. We will automatically make a request for a <dt-code>distill.json</dt-code> file if there is no <dt-code language="html">&lt;script type="text/front-matter"&gt;</dt-code> element on the page, or you can point to another file with the <dt-code>src</dt-code> attribute. In production, these files will be inlined into the document.</p>
<dt-code block language="html">
&lt;dt-front-matter src="./distill.json"&gt;&lt;/dt-front-matter&gt;
</dt-code>
&lt;script type="text/front-matter" src="./distill.json"&gt;&lt;/script&gt;
</dt-code> -->
<hr>
<h2>Citations</h2>
<p>Bibtex is the supported way of making academic citations. You first need have a global definition of all your possible citations. For this well use the <dt-code language="html">&lt;dt-bibliography&gt;</dt-code> element.</p>
<p>Bibtex is the supported way of making academic citations. You first need have a global definition of all your possible citations. For this well use the <dt-code language="html">&lt;script type="text/bibliography"&gt;</dt-code> element.</p>
<dt-code block language="html">
&lt;dt-bibliography&gt;
&lt;script type="text/bibliography""&gt;
@article{gregor2015draw,
title={DRAW: A recurrent neural network for image generation},
author={Gregor, Karol and Danihelka, Ivo and Graves, Alex and Rezende, Danilo Jimenez and Wierstra, Daan},
@@ -129,12 +126,12 @@
year={2011},
publisher={Cambridge Univ Press}
}
&lt;/dt-bibliography&gt;
&lt;/script&gt;
</dt-code>
<p>Like with the <dt-code language="html">&lt;dt-front-matter&gt;</dt-code> element, you can alternatively reference an external file with the <dt-code>src</dt-code> attribute. If no <dt-code language="html">&lt;dt-bibliography&gt;</dt-code> element is found on the page, a request will automatically be made for <dt-code>bibliography.bib</dt-code>. In production, these files will be inlined into the document.</p>
<!-- <p>Like with the <dt-code language="html">&lt;script type="text/front-matter"&gt;</dt-code> element, you can alternatively reference an external file with the <dt-code>src</dt-code> attribute. If no <dt-code language="html">&lt;script type="text/bibliography"&gt;</dt-code> element is found on the page, a request will automatically be made for <dt-code>bibliography.bib</dt-code>. In production, these files will be inlined into the document.</p>
<dt-code block language="html">
&lt;dt-bibliography src="bibliography.bib"&gt;&lt;/dt-bibliography&gt;
</dt-code>
&lt;script type="text/bibliography" src="bibliography.bib"&gt;&lt;/script&gt;
</dt-code> -->
<p>Citations are then used in the article body with the <dt-code language="html">&lt;dt-cite&gt;</dt-code> tag. The <dt-code>article</dt-code> attribute is a reference to the id provided in the bibiography.</p>
<dt-code block language="html">
&lt;dt-cite ket="gregor2015draw"&gt;&lt;/dt-cite&gt;
@@ -152,12 +149,12 @@
&lt;/dt-code&gt;
</dt-code>
<hr>
<!-- <hr>
<h2>Footnotes</h2>
<p>This is a <dt-footnote ref="blah" /></p>
<dt-footnote-body ref="blah"></dt-footnote-body>
<hr>
<h2>Math</h2>
<h2>Math</h2> -->
<hr>
<h2>Layouts</h2>
<p>The main text column is referred to as the body. It is the assumed layout of any direct descendents of the <code>dt-article</code> element.</p>
@@ -173,9 +170,9 @@
<p>They are all floated to the right and anchored to the right-hand edge of the position you specify. By default, each will take up approximately half of the width of the standard layout position, but you can override the width with a more specific selector. </p>
<div class="fake-img l-gutter"><p>.l-gutter</p></div>
<p>The final layout is for marginalia, asides, and footnotes. It does not interrupt the normal flow of <code>.l-body</code> sized text except on mobile screen sizes.</p>
<!--
<hr>
<h2>Including External Files</h2>
<h2>Including External Files</h2> -->
</dt-article>
<dt-footer></dt-footer>
+30 -18
View File
@@ -10,30 +10,41 @@ import footer from "./components/footer";
import citation from "./components/citation";
import markdown from "./components/markdown";
import code from "./components/code";
import generateCrossref from "./components/generate-crossref";
function render(dom, data) {
data = data || {};
function renderImmediately(dom) {
html(dom);
styles(dom);
dom.addEventListener("DOMContentLoaded", function(event) {
frontMatter(dom, data);
bibliography(dom, data);
expandData(dom, data);
meta(dom, data);
header(dom, data);
appendix(dom, data);
footer(dom, data);
markdown(dom, data);
code(dom, data);
citation(dom, data);
console.log("final data:")
for (var k in data) {console.log(" ", k, ": ", data[k])}
}
function renderOnLoad(dom, data) {
frontMatter(dom, data);
bibliography(dom, data);
expandData(dom, data);
meta(dom, data);
header(dom, data);
appendix(dom, data);
footer(dom, data);
markdown(dom, data);
code(dom, data);
citation(dom, data);
// TODO remove script tag
}
// If we are in a browser, render automatically.
if(window && window.document) {
let data = {};
renderImmediately(window.document);
window.document.addEventListener("DOMContentLoaded", (event) => {
renderOnLoad(window.document, data);
generateCrossref(data);
});
}
// If we are in a browser, run render automatically.
if(window && window.document) {
render(window.document);
// For node
function render(dom, data) {
renderImmediately(dom);
renderOnLoad(dom, data);
}
export {render as render};
@@ -48,3 +59,4 @@ export {footer as footer};
export {citation as citation};
export {markdown as markdown};
export {code as code};
export {generateCrossref as generateCrossref};
+2 -2
View File
@@ -1,8 +1,8 @@
{
"name": "distill-template",
"version": "0.0.2",
"version": "0.0.15",
"description": "Template for creating Distill articles.",
"main": "dist/distill.js",
"main": "dist/template.js",
"scripts": {
"start": "rollup -c -w",
"build": "rollup -c",
+1 -1
View File
@@ -25,7 +25,7 @@ export default {
browser: true,
}),
string({
include: ["**/*.svg", "**/*.html", "**/*.css"]
include: ["**/*.svg", "**/*.html", "**/*.css", "**/*.base64"]
}),
buble({
exclude: 'node_modules',
-46
View File
@@ -1,46 +0,0 @@
export default {
"title": "Experiments in Handwriting with a Neural Network",
"description": "Several interactive visualizations of a generative model of handwriting. Some are fun, some are serious.",
"url": "http://distill.pub/2016/handwriting/",
"github": "https://github.com/distillpub/post--handwriting",
"firstPublished": "Tue Dec 6 2016 21:39:33 GMT-0700 (PDT)",
"lastPublished": "Tue Dec 6 2016 21:39:33 GMT-0700 (PDT)",
"authors": [
{
"firstName": "Shan",
"lastName": "Carter",
"personalURL": "http://shancarter.com",
"affiliation": "Google Brain",
"affiliationURL": "http://g.co/brain"
},
{
"firstName": "David",
"lastName": "Ha",
"personalURL": "https://github.com/hardmaru",
"affiliation": "Google Brain",
"affiliationURL": "http://g.co/brain"
},
{
"firstName": "Ian",
"lastName": "Johnson",
"personalURL": "https://github.com/enjalot",
"affiliation": "Google Cloud",
"affiliationURL": ""
},
{
"firstName": "Chris",
"lastName": "Olah",
"personalURL": "http://colah.github.io/",
"affiliation": "Google Brain",
"affiliationURL": "http://g.co/brain"
}
],
journal: {
"title": "Distill",
"full_title": "Distill",
"abbrev_title": "Distill",
"url": "http://distill.pub",
"doi": "00.0000/dstl",
"issn": "0000-0000"
}
};
+4
View File
@@ -377,6 +377,10 @@ diff@1.4.0:
version "1.4.0"
resolved "https://registry.yarnpkg.com/diff/-/diff-1.4.0.tgz#7f28d2eb9ee7b15a97efd89ce63dcfdaa3ccbabf"
distill-template@^0.0.4:
version "0.0.4"
resolved "https://registry.yarnpkg.com/distill-template/-/distill-template-0.0.4.tgz#d9d8350001f9f6fc64884e0ad903d733b6856d59"
ecc-jsbn@~0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/ecc-jsbn/-/ecc-jsbn-0.1.1.tgz#0fc73a9ed5f0d53c38193398523ef7e543777505"