diff --git a/.github/workflows/build.yml b/.github/workflows/build.yml index ac83a8033a..8d2d860e09 100644 --- a/.github/workflows/build.yml +++ b/.github/workflows/build.yml @@ -706,7 +706,7 @@ jobs: # Fancy HTML reports # ###################### - uses: actions/upload-artifact@v3 - if: always() + if: failure() with: name: playwright-report path: tools/perspective-test/playwright-report/ diff --git a/docs/build.js b/docs/build.js index 65f7e2916e..b7c4194695 100644 --- a/docs/build.js +++ b/docs/build.js @@ -49,6 +49,11 @@ async function run_with_theme(page, is_dark = false) { await page.goto("http://localhost:8080/"); await page.setContent(template(is_dark)); await page.setViewport(DEFAULT_VIEWPORT); + await page.evaluate(async () => { + while (!window.__TEST_PERSPECTIVE_READY__) { + await new Promise((resolve) => setTimeout(resolve, 10)); + } + }); await page.evaluate(async function () { const viewer = document.querySelector("perspective-viewer"); await viewer.flush(); @@ -73,13 +78,13 @@ async function run_with_theme(page, is_dark = false) { ) ); console.log(JSON.stringify(new_config)); + await page.evaluate(async (config) => { const viewer = document.querySelector("perspective-viewer"); await viewer.reset(); await viewer.restore(config); }, new_config); - await page.waitForSelector("perspective-viewer:not([updating])"); const screenshot = await page.screenshot({ captureBeyondViewport: false, fullPage: true, @@ -104,10 +109,17 @@ async function run_with_theme(page, is_dark = false) { } async function run() { - if (!fs.existsSync("static/features")) { + if ( + !fs.existsSync("static/features") || + fs.readdirSync("static/features").length === 0 + ) { + console.log("Generating feature screenshots!"); mkdirp(path.join(__dirname, "static/features")); const server = new WebSocketServer({ - assets: [path.join(__dirname, "..")], + assets: [ + path.join(__dirname, ".."), + path.join(__dirname, "../node_modules"), + ], }); const browser = await puppeteer.launch({ headless: true }); @@ -129,54 +141,11 @@ async function run() { } function template(is_dark) { - return ` - - - - - - - - - - - - - - - - `.trim(); + return fs + .readFileSync(path.join(__dirname, "template.html")) + .toString() + .replace("/css/pro.css", is_dark ? "/css/pro-dark.css" : "/css/pro.css") + .trim(); } run(); diff --git a/docs/src/components/HomepageFeatures/python.md b/docs/src/components/HomepageFeatures/python.md index 580061948e..cef2a05f7d 100644 --- a/docs/src/components/HomepageFeatures/python.md +++ b/docs/src/components/HomepageFeatures/python.md @@ -7,8 +7,8 @@ Production, or as an embedded JupyterLab Widget for Research. For Application Developers, virtualized `` will only consume the data necessary to render the current screen, enabling _ludicrous size_ -datasets with nearly instant load. Or - stream the entire dataset to the -WebAssembly runtime via efficiently via Apache Arrow, and give your server a +datasets with nearly instant load. Or - efficiently stream the entire dataset to the +WebAssembly runtime via Apache Arrow, and give your server a break! For Researchers and Data Scientists, `PerspectiveWidget` is available as a diff --git a/docs/template.html b/docs/template.html new file mode 100644 index 0000000000..f74ccdc649 --- /dev/null +++ b/docs/template.html @@ -0,0 +1,56 @@ + + + + + + + + + + + + + + + + + + + \ No newline at end of file diff --git a/docs/test/js/examples.spec.ts b/docs/test/js/examples.spec.ts new file mode 100644 index 0000000000..68c18e587d --- /dev/null +++ b/docs/test/js/examples.spec.ts @@ -0,0 +1,103 @@ +// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓ +// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃ +// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃ +// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃ +// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃ +// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫ +// ┃ Copyright (c) 2017, the Perspective Authors. ┃ +// ┃ ╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌╌ ┃ +// ┃ This file is part of the Perspective library, distributed under the terms ┃ +// ┃ of the [Apache License 2.0](https://www.apache.org/licenses/LICENSE-2.0). ┃ +// ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ + +import { + test, + getSvgContentString, + compareSVGContentsToSnapshot, + PageView, +} from "@finos/perspective-test"; +import EXAMPLES from "../../src/components/ExampleGallery/features"; +const { convert } = require("@finos/perspective-viewer/dist/cjs/migrate.js"); + +test.describe.configure({ mode: "parallel" }); + +test.describe("Examples", () => { + test.beforeEach(async ({ page }) => { + await page.goto("docs/template.html"); + await page.evaluate(async () => { + while (!window["__TEST_PERSPECTIVE_READY__"]) { + await new Promise((x) => setTimeout(x, 10)); + } + }); + }); + + for (const idx in EXAMPLES.default) { + const example = EXAMPLES.default[idx]; + test(`${idx} - ${example.name}`, async ({ page }) => { + const { config } = example; + const new_config = await convert( + Object.assign( + { + plugin: "Datagrid", + group_by: [], + expressions: {}, + split_by: [], + sort: [], + aggregates: {}, + }, + config + ) + ); + await page.evaluate(async (config) => { + const viewer = document.querySelector("perspective-viewer"); + viewer?.addEventListener("perspective-config-update", (e) => { + window.__CONFIG_UPDATED__ = true; + console.log(e); + }); + await viewer.reset(); + await viewer.restore(config); + }, new_config); + + if (Object.keys(config).length !== 0) { + await page.evaluate(async () => { + while (!window["__CONFIG_UPDATED__"]) { + await new Promise((x) => setTimeout(x, 10)); + } + }); + } + + let selector = ""; + if (new_config.plugin === "Datagrid") { + selector = "perspective-viewer-datagrid"; + } else if (new_config.plugin === "Map Scatter") { + selector = "perspective-viewer-openlayers-scatter"; + } else { + const plugin = new_config.plugin + .replace(/[-\/\s]/gi, "") + .toLowerCase(); + selector = `perspective-viewer-d3fc-${plugin}`; + } + + await compareSVGContentsToSnapshot(page, selector, [ + `${idx}-${example.name}.txt`, + ]); + }); + } +}); + +test.beforeEach(async ({ page }) => { + await page.goto("docs/template.html"); + await page.evaluate(async () => { + while (!window["__TEST_PERSPECTIVE_READY__"]) { + await new Promise((x) => setTimeout(x, 10)); + } + }); +}); +test("test svgs", async ({ page }) => { + const viewer = new PageView(page); + await viewer.restore({ plugin: "X/Y Scatter" }); + const contents = await getSvgContentString( + "perspective-viewer-d3fc-xyscatter" + )(page); + console.log(contents); +}); diff --git a/packages/perspective-viewer-d3fc/test/js/area.spec.ts b/packages/perspective-viewer-d3fc/test/js/area.spec.ts index 26d74fff83..5f208f6043 100644 --- a/packages/perspective-viewer-d3fc/test/js/area.spec.ts +++ b/packages/perspective-viewer-d3fc/test/js/area.spec.ts @@ -35,6 +35,6 @@ test.describe("Area Tests", () => { run_standard_tests( "area", - getSvgContentString("perspective-viewer perspective-viewer-d3fc-xyline") + getSvgContentString("perspective-viewer perspective-viewer-d3fc-yarea") ); }); diff --git a/packages/perspective-viewer-d3fc/test/js/line.spec.ts b/packages/perspective-viewer-d3fc/test/js/line.spec.ts index 9ccc7ba692..e3f175cc1d 100644 --- a/packages/perspective-viewer-d3fc/test/js/line.spec.ts +++ b/packages/perspective-viewer-d3fc/test/js/line.spec.ts @@ -35,6 +35,6 @@ test.describe("Line Tests", () => { run_standard_tests( "yline", - getSvgContentString("perspective-viewer perspective-viewer-d3fc-xyline") + getSvgContentString("perspective-viewer perspective-viewer-d3fc-yline") ); }); diff --git a/rust/perspective-viewer/README.md b/rust/perspective-viewer/README.md index 300d5ca388..5f91b2b186 100644 --- a/rust/perspective-viewer/README.md +++ b/rust/perspective-viewer/README.md @@ -32,7 +32,6 @@ relevent DOM method e.g. `document.createElement("perspective-viewer")` or ### Type Aliases - [PerspectiveViewerConfig](#perspectiveviewerconfig) -- [Semver](#semver) ### Variables @@ -41,9 +40,7 @@ relevent DOM method e.g. `document.createElement("perspective-viewer")` or ### Functions - [chain](#chain) -- [cmp\_semver](#cmp_semver) - [convert](#convert) -- [parse\_semver](#parse_semver) ## Type Aliases @@ -53,29 +50,7 @@ relevent DOM method e.g. `document.createElement("perspective-viewer")` or #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:15](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L15) - -___ - -### Semver - -Ƭ **Semver**: `Object` - -#### Type declaration - -| Name | Type | -| :------ | :------ | -| `build?` | { `major`: `number` ; `minor`: `number` ; `patch`: `number` } | -| `build.major` | `number` | -| `build.minor` | `number` | -| `build.patch` | `number` | -| `major` | `number` | -| `minor` | `number` | -| `patch` | `number` | - -#### Defined in - -[rust/perspective-viewer/src/ts/migrate.ts:77](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/migrate.ts#L77) +[rust/perspective-viewer/src/ts/viewer.ts:15](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L15) ## Variables @@ -85,7 +60,7 @@ ___ #### Defined in -[rust/perspective-viewer/src/ts/perspective-viewer.ts:44](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/perspective-viewer.ts#L44) +[rust/perspective-viewer/src/ts/perspective-viewer.ts:44](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/perspective-viewer.ts#L44) ## Functions @@ -109,30 +84,7 @@ Chains functions of `args` and apply to `old` #### Defined in -[rust/perspective-viewer/src/ts/migrate.ts:194](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/migrate.ts#L194) - -___ - -### cmp\_semver - -▸ **cmp_semver**(`left`, `right_str`): `boolean` - -Checks if left > right - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `left` | [`Semver`](#semver) | -| `right_str` | `string` | - -#### Returns - -`boolean` - -#### Defined in - -[rust/perspective-viewer/src/ts/migrate.ts:115](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/migrate.ts#L115) +[rust/perspective-viewer/src/ts/migrate.ts:174](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/migrate.ts#L174) ___ @@ -191,27 +143,7 @@ script's package. #### Defined in -[rust/perspective-viewer/src/ts/migrate.ts:58](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/migrate.ts#L58) - -___ - -### parse\_semver - -▸ **parse_semver**(`ver`): [`Semver`](#semver) - -#### Parameters - -| Name | Type | -| :------ | :------ | -| `ver` | `string` | - -#### Returns - -[`Semver`](#semver) - -#### Defined in - -[rust/perspective-viewer/src/ts/migrate.ts:88](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/migrate.ts#L88) +[rust/perspective-viewer/src/ts/migrate.ts:62](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/migrate.ts#L62) # Interface: IPerspectiveViewerElement @@ -326,7 +258,7 @@ await viewer2.load(table); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:176](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L176) +[rust/perspective-viewer/src/ts/viewer.ts:176](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L176) ___ @@ -361,7 +293,7 @@ await view.set_depth(0); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:198](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L198) +[rust/perspective-viewer/src/ts/viewer.ts:198](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L198) ___ @@ -409,7 +341,7 @@ my_viewer.load(tbl); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:98](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L98) +[rust/perspective-viewer/src/ts/viewer.ts:98](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L98) ___ @@ -431,7 +363,7 @@ A pointer to this model #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:498](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L498) +[rust/perspective-viewer/src/ts/viewer.ts:498](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L498) ___ @@ -490,7 +422,7 @@ await viewer.restore(token); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:238](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L238) +[rust/perspective-viewer/src/ts/viewer.ts:238](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L238) ___ @@ -523,7 +455,7 @@ await viewer.reset(); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:306](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L306) +[rust/perspective-viewer/src/ts/viewer.ts:306](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L306) ___ @@ -556,7 +488,7 @@ localStorage.setItem("viewer_state", token); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:263](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L263) +[rust/perspective-viewer/src/ts/viewer.ts:263](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L263) ▸ **save**(`format`): `Promise`<[`PerspectiveViewerConfig`](#perspectiveviewerconfig)\> @@ -572,7 +504,7 @@ localStorage.setItem("viewer_state", token); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:264](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L264) +[rust/perspective-viewer/src/ts/viewer.ts:264](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L264) ▸ **save**(`format`): `Promise`<`ArrayBuffer`\> @@ -588,7 +520,7 @@ localStorage.setItem("viewer_state", token); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:265](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L265) +[rust/perspective-viewer/src/ts/viewer.ts:265](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L265) ▸ **save**(`format`): `Promise`<`string`\> @@ -604,7 +536,7 @@ localStorage.setItem("viewer_state", token); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:266](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L266) +[rust/perspective-viewer/src/ts/viewer.ts:266](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L266) ▸ **save**(`format?`): `Promise`<`string` \| [`PerspectiveViewerConfig`](#perspectiveviewerconfig) \| `ArrayBuffer`\> @@ -620,7 +552,7 @@ localStorage.setItem("viewer_state", token); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:267](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L267) +[rust/perspective-viewer/src/ts/viewer.ts:267](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L267) ___ @@ -645,7 +577,7 @@ An `Array` of the plugin instances for this #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:488](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L488) +[rust/perspective-viewer/src/ts/viewer.ts:488](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L488) ___ @@ -676,7 +608,7 @@ The active or requested plugin instance. #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:475](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L475) +[rust/perspective-viewer/src/ts/viewer.ts:475](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L475) ___ @@ -713,7 +645,7 @@ button.addEventListener("click", async () => { #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:346](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L346) +[rust/perspective-viewer/src/ts/viewer.ts:346](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L346) ___ @@ -735,7 +667,7 @@ Download this element's data as a CSV file. #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:326](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L326) +[rust/perspective-viewer/src/ts/viewer.ts:326](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L326) ___ @@ -771,7 +703,7 @@ await viewer.toggleConfig(); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:458](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L458) +[rust/perspective-viewer/src/ts/viewer.ts:458](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L458) ___ @@ -793,7 +725,7 @@ bound to. #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:317](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L317) +[rust/perspective-viewer/src/ts/viewer.ts:317](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L317) ___ @@ -828,7 +760,7 @@ console.log("Viewer has been rendered with a pivot!"); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:291](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L291) +[rust/perspective-viewer/src/ts/viewer.ts:291](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L291) ___ @@ -864,7 +796,7 @@ view.on_update(obj => { #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:405](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L405) +[rust/perspective-viewer/src/ts/viewer.ts:405](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L405) ___ @@ -890,7 +822,7 @@ console.log(stats.virtual_fps); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:419](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L419) +[rust/perspective-viewer/src/ts/viewer.ts:419](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L419) ___ @@ -932,7 +864,7 @@ window.addEventListener("resize", () => viewer.notifyResize()); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:124](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L124) +[rust/perspective-viewer/src/ts/viewer.ts:124](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L124) ___ @@ -971,7 +903,7 @@ await viewer.resetThemes(["Pro Light", "Pro Dark"]); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:381](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L381) +[rust/perspective-viewer/src/ts/viewer.ts:381](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L381) ___ @@ -991,7 +923,7 @@ as SVG and Canvas attributes. #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:357](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L357) +[rust/perspective-viewer/src/ts/viewer.ts:357](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L357) ___ @@ -1024,7 +956,7 @@ await viewer.setAutoPause(true); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:158](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L158) +[rust/perspective-viewer/src/ts/viewer.ts:158](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L158) ___ @@ -1057,7 +989,7 @@ await viewer.setAutoSize(false); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:141](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L141) +[rust/perspective-viewer/src/ts/viewer.ts:141](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L141) ___ @@ -1090,7 +1022,7 @@ await viewer.setThrottle(1000); #### Defined in -[rust/perspective-viewer/src/ts/viewer.ts:437](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/viewer.ts#L437) +[rust/perspective-viewer/src/ts/viewer.ts:437](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/viewer.ts#L437) # Interface: IPerspectiveViewerPlugin @@ -1172,7 +1104,7 @@ logic. #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:82](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L82) +[rust/perspective-viewer/src/ts/plugin.ts:82](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L82) ___ @@ -1194,7 +1126,7 @@ identical behavior to 1. #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:73](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L73) +[rust/perspective-viewer/src/ts/plugin.ts:73](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L73) ___ @@ -1212,7 +1144,7 @@ display name for this plugin in the `` UI. #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:54](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L54) +[rust/perspective-viewer/src/ts/plugin.ts:54](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L54) ___ @@ -1235,7 +1167,7 @@ a `HTMLPerspectiveViewerPluginElement.restore` call. #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:94](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L94) +[rust/perspective-viewer/src/ts/plugin.ts:94](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L94) ___ @@ -1254,7 +1186,7 @@ on column state), leaving existing columns alone. #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:62](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L62) +[rust/perspective-viewer/src/ts/plugin.ts:62](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L62) ## Methods @@ -1281,7 +1213,7 @@ async clear(): Promise { #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:138](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L138) +[rust/perspective-viewer/src/ts/plugin.ts:138](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L138) ___ @@ -1297,7 +1229,7 @@ Free any resources acquired by this plugin and prepare to be deleted. #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:173](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L173) +[rust/perspective-viewer/src/ts/plugin.ts:173](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L173) ___ @@ -1330,7 +1262,7 @@ async draw(view: perspective.View): Promise { #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:109](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L109) +[rust/perspective-viewer/src/ts/plugin.ts:109](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L109) ___ @@ -1347,7 +1279,7 @@ and the underlying data has not. #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:144](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L144) +[rust/perspective-viewer/src/ts/plugin.ts:144](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L144) ___ @@ -1369,7 +1301,7 @@ Restore this plugin to a state previously returned by `save()`. #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:168](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L168) +[rust/perspective-viewer/src/ts/plugin.ts:168](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L168) ___ @@ -1386,7 +1318,7 @@ plugins which read CSS styles via `window.getComputedStyle()`. #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:150](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L150) +[rust/perspective-viewer/src/ts/plugin.ts:150](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L150) ___ @@ -1410,7 +1342,7 @@ reload. For example, `@finos/perspective-viewer-d3fc` uses #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:163](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L163) +[rust/perspective-viewer/src/ts/plugin.ts:163](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L163) ___ @@ -1442,6 +1374,6 @@ async update(view: perspective.View): Promise { #### Defined in -[rust/perspective-viewer/src/ts/plugin.ts:123](https://github.com/finos/perspective/blob/7392c2a64/rust/perspective-viewer/src/ts/plugin.ts#L123) +[rust/perspective-viewer/src/ts/plugin.ts:123](https://github.com/finos/perspective/blob/ccd772889/rust/perspective-viewer/src/ts/plugin.ts#L123) diff --git a/rust/perspective-viewer/src/ts/migrate/2-6-1.ts b/rust/perspective-viewer/src/ts/migrate/2-6-1.ts index c527563c0c..6cf10be223 100644 --- a/rust/perspective-viewer/src/ts/migrate/2-6-1.ts +++ b/rust/perspective-viewer/src/ts/migrate/2-6-1.ts @@ -55,26 +55,28 @@ export default function migrate_2_6_1(old, options) { } // check for string expressions, replace with objects - let new_exprs = {}; - for (let i in old.expressions) { - if (typeof old.expressions[i] === "string") { - if (options.warn) { - console.warn( - "Replacing deprecated string expression with object" - ); - } - let old_expr = old.expressions[i]; - let [whole_expr, name, expr] = old_expr.match( - /\/\/\s*([^\n]+)\n(.*)/ - ) ?? [old_expr, null, null]; - if (name && expr) { - new_exprs[name] = expr; - } else { - new_exprs[whole_expr] = whole_expr; + if (Array.isArray(old.expressions)) { + let new_exprs = {}; + for (let i in old.expressions) { + if (typeof old.expressions[i] === "string") { + if (options.warn) { + console.warn( + "Replacing deprecated string expression with object" + ); + } + let old_expr = old.expressions[i]; + let [whole_expr, name, expr] = old_expr.match( + /\/\/\s*([^\n]+)\n(.*)/ + ) ?? [old_expr, null, null]; + if (name && expr) { + new_exprs[name] = expr; + } else { + new_exprs[whole_expr] = whole_expr; + } } } + old.expressions = new_exprs; } - old.expressions = new_exprs; if (options.verbose) { console.log(old); diff --git a/tools/perspective-test/playwright.config.ts b/tools/perspective-test/playwright.config.ts index 8729ffe53b..b4f6c9f3c6 100644 --- a/tools/perspective-test/playwright.config.ts +++ b/tools/perspective-test/playwright.config.ts @@ -72,6 +72,10 @@ const BROWSER_PACKAGES = [ packageName: "perspective-cli", testDir: "packages/perspective-cli/test/js", }, + { + packageName: "docs", + testDir: "docs/test/js", + }, ]; const NODE_PACKAGES = [ diff --git a/tools/perspective-test/results.tar.gz b/tools/perspective-test/results.tar.gz index 1ab2bcc626..9d8f21d29f 100644 Binary files a/tools/perspective-test/results.tar.gz and b/tools/perspective-test/results.tar.gz differ diff --git a/tools/perspective-test/src/js/utils.ts b/tools/perspective-test/src/js/utils.ts index 48c10fb6f5..f5fafe22be 100644 --- a/tools/perspective-test/src/js/utils.ts +++ b/tools/perspective-test/src/js/utils.ts @@ -11,7 +11,7 @@ // ┗━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┛ import { expect, Locator, Page } from "@playwright/test"; -import * as fs from "fs"; +import * as fs from "node:fs"; export const API_VERSION = JSON.parse( fs.readFileSync(__dirname + "/../../package.json").toString() @@ -24,10 +24,11 @@ export const API_VERSION = JSON.parse( * @returns */ export const getSvgContentString = (selector: string) => async (page: Page) => { - const content = await page.evaluate(async (s) => { - let el = document.querySelector(s); + const content = await page.evaluate(async (selector) => { + let el = document.querySelector(selector) as Element; + console.log(selector, el); - function removeAttrs(node) { + function removeAttrs(node: Element) { const svgAttrsToRemove = [ "r", "d", @@ -44,6 +45,7 @@ export const getSvgContentString = (selector: string) => async (page: Page) => { "transform", "viewBox", "visibility", + "style", ]; if (node.nodeType === Node.ELEMENT_NODE) { @@ -53,28 +55,27 @@ export const getSvgContentString = (selector: string) => async (page: Page) => { } } - function walkNode(node) { + function walkNode(node: Node) { const walker = document.createTreeWalker(node, NodeFilter.SHOW_ALL); - walk(walker, walker.currentNode); + walk(walker, walker.currentNode as Element); } - function walk(walker, node) { + function walk(walker: TreeWalker, node: Element) { if (!node) return; if (node.shadowRoot) { walkNode(node.shadowRoot); } + removeAttrs(node); switch (node.nodeName) { case "style": node.textContent = ""; break; case "svg": - removeAttrs(node); - - node.remove("viewBox"); - node.remove("height"); + node.removeAttribute("viewBox"); + node.removeAttribute("height"); break; case "g": case "path": @@ -82,34 +83,37 @@ export const getSvgContentString = (selector: string) => async (page: Page) => { case "circle": case "rect": case "text": - removeAttrs(node); if ( ["label", "segment"].some((c) => node.classList.contains(c) ) ) { - node.textContent = node.textContent.slice(0, 2); + node.textContent = node.textContent?.slice(0, 2) as + | string + | null; } break; default: break; } - walk(walker, walker.nextNode()); + walk(walker, walker.nextNode() as Element); } if (el?.shadowRoot) { el = el.shadowRoot as unknown as Element; } - const svgs = el?.querySelectorAll("svg") || []; let htmlString = ""; - for (const svg of svgs) { - const clonedSVG = svg.cloneNode(true) as SVGElement; + for (const child of el.children) { + if (child.tagName === "STYLE") { + continue; + } + const clonedChild = child.cloneNode(true) as Element; - walkNode(clonedSVG); + walkNode(clonedChild); - htmlString += clonedSVG.outerHTML; + htmlString += clonedChild.outerHTML; } return htmlString;