[next] Embed plus (#1877)

* Implement StreamEmbed instance and rename library to coral

* Add article & articleButton.html, only show embed htmls in production

* Respect assetURL

* Add tests

* Add parseHashQuery

* Fix permalink query and integration tests

* Fix permalink URL

* Remove optionalparams from pym

* Scroll when showing permalink view

* Implement autoRender

* AutoRender immediately when render permalink

* Add test for `showPermalink` event

* Add comment
This commit is contained in:
Kiwi
2018-09-21 22:43:28 +00:00
committed by Wyatt Johnson
parent 85af8d1bbf
commit 106a5d36ed
57 changed files with 906 additions and 240 deletions
+1
View File
@@ -1,2 +1,3 @@
export { default as buildURL } from "./buildURL";
export { default as parseURL } from "./parseURL";
export { default as modifyQuery } from "./modifyQuery";
@@ -0,0 +1,30 @@
import modifyQuery from "./modifyQuery";
it("should modify query", () => {
const testCases: Array<[string, Record<string, any>, string]> = [
[
"http://localhost:8080/?a=b#hash",
{
c: "d",
},
"http://localhost:8080/?a=b&c=d#hash",
],
[
"http://localhost:8080/#hash",
{
a: "b",
},
"http://localhost:8080/?a=b#hash",
],
[
"http://localhost:8080/?a=b#hash",
{
a: undefined,
},
"http://localhost:8080/#hash",
],
];
testCases.forEach(([url, params, expected]) => {
expect(modifyQuery(url, params)).toEqual(expected);
});
});
@@ -0,0 +1,11 @@
import qs from "query-string";
import buildURL from "./buildURL";
import parseURL from "./parseURL";
export default function modifyQuery(url: string, params: {}) {
const parsed = parseURL(url);
const query = qs.parse(parsed.search);
parsed.search = qs.stringify({ ...query, ...params });
return buildURL(parsed);
}
@@ -0,0 +1,24 @@
import parseHashQuery from "./parseHashQuery";
it("should parse hash", () => {
const testCases: Array<[string, ReturnType<typeof parseHashQuery>]> = [
[
"#commentID=comment-id",
{
commentID: "comment-id",
},
],
[
"#commentID=comment-id&assetURL=asset-url",
{
commentID: "comment-id",
assetURL: "asset-url",
},
],
["#", {}],
["", {}],
];
testCases.forEach(([url, expected]) => {
expect(parseHashQuery(url)).toEqual(expected);
});
});
@@ -0,0 +1,5 @@
import qs from "query-string";
export default function parseQueryHash(hash: string): Record<string, string> {
return qs.parse(hash);
}