Compare commits
6 Commits
@portaljs/
...
external-l
| Author | SHA1 | Date | |
|---|---|---|---|
|
|
806bc89e8c | ||
|
|
ed9ac2c263 | ||
|
|
42c72e5afd | ||
|
|
9e1a324fa1 | ||
|
|
90178af8f2 | ||
|
|
00e61e104c |
@@ -1,3 +1,9 @@
|
|||||||
|
# PortalJS Demo replicating the FiveThirtyEight data portal
|
||||||
|
|
||||||
|
## 👉 https://fivethirtyeight.portaljs.org 👈
|
||||||
|
|
||||||
|
Here's a blog post we wrote about it: https://www.datopian.com/blog/fivethirtyeight-replica
|
||||||
|
|
||||||
This is a replica of the awesome data.fivethirtyeight.com using PortalJS.
|
This is a replica of the awesome data.fivethirtyeight.com using PortalJS.
|
||||||
|
|
||||||
You might be asking why we did that, there are three main reasons:
|
You might be asking why we did that, there are three main reasons:
|
||||||
|
|||||||
@@ -110,6 +110,7 @@ function fromMarkdown(opts: FromMarkdownOptions = {}) {
|
|||||||
? "/" + possibleWikiLinkPermalinks[0]
|
? "/" + possibleWikiLinkPermalinks[0]
|
||||||
: possibleWikiLinkPermalinks[0]) ||
|
: possibleWikiLinkPermalinks[0]) ||
|
||||||
"";
|
"";
|
||||||
|
const isExternal = /^https?:\/\//.test(link);
|
||||||
|
|
||||||
wikiLink.data.exists = !!matchingPermalink;
|
wikiLink.data.exists = !!matchingPermalink;
|
||||||
wikiLink.data.permalink = link;
|
wikiLink.data.permalink = link;
|
||||||
@@ -130,7 +131,7 @@ function fromMarkdown(opts: FromMarkdownOptions = {}) {
|
|||||||
wikiLink.data.hName = "a";
|
wikiLink.data.hName = "a";
|
||||||
wikiLink.data.hProperties = {
|
wikiLink.data.hProperties = {
|
||||||
className: classNames + " " + "transclusion",
|
className: classNames + " " + "transclusion",
|
||||||
href: hrefTemplate(link) + headingId,
|
href: hrefTemplate(link) + headingId
|
||||||
};
|
};
|
||||||
wikiLink.data.hChildren = [{ type: "text", value: displayName }];
|
wikiLink.data.hChildren = [{ type: "text", value: displayName }];
|
||||||
|
|
||||||
@@ -163,7 +164,11 @@ function fromMarkdown(opts: FromMarkdownOptions = {}) {
|
|||||||
wikiLink.data.hProperties = {
|
wikiLink.data.hProperties = {
|
||||||
className: classNames,
|
className: classNames,
|
||||||
href: hrefTemplate(link) + headingId,
|
href: hrefTemplate(link) + headingId,
|
||||||
|
target: "_blank",
|
||||||
};
|
};
|
||||||
|
if(isExternal){
|
||||||
|
wikiLink.data.hProperties.target = "_blank"; // Open in a new tab
|
||||||
|
}
|
||||||
wikiLink.data.hChildren = [{ type: "text", value: displayName }];
|
wikiLink.data.hChildren = [{ type: "text", value: displayName }];
|
||||||
}
|
}
|
||||||
}
|
}
|
||||||
|
|||||||
@@ -96,6 +96,9 @@ function html(opts: HtmlOptions = {}) {
|
|||||||
: possibleWikiLinkPermalinks[0]) ||
|
: possibleWikiLinkPermalinks[0]) ||
|
||||||
"";
|
"";
|
||||||
|
|
||||||
|
const isExternal = /^https?:\/\//.test(link);
|
||||||
|
const openInNewTab = isExternal ? 'target="_blank"' : '';
|
||||||
|
|
||||||
// remove leading # if the target is a heading on the same page
|
// remove leading # if the target is a heading on the same page
|
||||||
const displayName = alias || target.replace(/^#/, "");
|
const displayName = alias || target.replace(/^#/, "");
|
||||||
// replace spaces with dashes and lowercase headings
|
// replace spaces with dashes and lowercase headings
|
||||||
|
|||||||
@@ -331,4 +331,14 @@ describe("micromark-extension-wiki-link", () => {
|
|||||||
expect(serialized).toBe(`<p><a href="li nk-w(i)th-àcèô íã_a(n)d_underline!:ª%@'*º$ °~./\\#li-nk-w(i)th-àcèô-íã_a(n)d_underline!:ª%@'*º$-°~./\\" class="internal new">li nk-w(i)th-àcèô íã_a(n)d_underline!:ª%@'*º$ °~./\\#LI NK-W(i)th-àcèô íã_a(n)d_uNdErlinE!:ª%@'*º$ °~./\\</a></p>`);
|
expect(serialized).toBe(`<p><a href="li nk-w(i)th-àcèô íã_a(n)d_underline!:ª%@'*º$ °~./\\#li-nk-w(i)th-àcèô-íã_a(n)d_underline!:ª%@'*º$-°~./\\" class="internal new">li nk-w(i)th-àcèô íã_a(n)d_underline!:ª%@'*º$ °~./\\#LI NK-W(i)th-àcèô íã_a(n)d_uNdErlinE!:ª%@'*º$ °~./\\</a></p>`);
|
||||||
});
|
});
|
||||||
})
|
})
|
||||||
|
|
||||||
|
describe("External links", () => {
|
||||||
|
test("parses an external link that opens in a new tab", () => {
|
||||||
|
const serialized = micromark("[google](https://www.google.com/)", "ascii", {
|
||||||
|
extensions: [syntax()],
|
||||||
|
htmlExtensions: [html() as any],
|
||||||
|
});
|
||||||
|
expect(serialized).toBe(`<p><a href="https://www.google.com/" target="_blank">google</a></p>`);
|
||||||
|
});
|
||||||
|
})
|
||||||
});
|
});
|
||||||
|
|||||||
@@ -69,7 +69,7 @@ const config = {
|
|||||||
},
|
},
|
||||||
},
|
},
|
||||||
github: 'https://github.com/datopian/portaljs',
|
github: 'https://github.com/datopian/portaljs',
|
||||||
discord: 'https://discord.gg/EeyfGrGu4U',
|
discord: 'https://discord.gg/xfFDMPU9dC',
|
||||||
tableOfContents: true,
|
tableOfContents: true,
|
||||||
analytics: 'G-96GWZHMH57',
|
analytics: 'G-96GWZHMH57',
|
||||||
// editLinkShow: true,
|
// editLinkShow: true,
|
||||||
|
|||||||
@@ -1,12 +0,0 @@
|
|||||||
{
|
|
||||||
"extends": "../tsconfig.base.json",
|
|
||||||
"compilerOptions": {
|
|
||||||
"outDir": "../dist/out-tsc/tools",
|
|
||||||
"rootDir": ".",
|
|
||||||
"module": "commonjs",
|
|
||||||
"target": "es5",
|
|
||||||
"types": ["node"],
|
|
||||||
"importHelpers": false
|
|
||||||
},
|
|
||||||
"include": ["**/*.ts"]
|
|
||||||
}
|
|
||||||
Reference in New Issue
Block a user