Files
2026-07-13 12:25:07 +08:00

142 lines
5.5 KiB
JavaScript

// ┏━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┓
// ┃ ██████ ██████ ██████ █ █ █ █ █ █▄ ▀███ █ ┃
// ┃ ▄▄▄▄▄█ █▄▄▄▄▄ ▄▄▄▄▄█ ▀▀▀▀▀█▀▀▀▀▀ █ ▀▀▀▀▀█ ████████▌▐███ ███▄ ▀█ █ ▀▀▀▀▀ ┃
// ┃ █▀▀▀▀▀ █▀▀▀▀▀ █▀██▀▀ ▄▄▄▄▄ █ ▄▄▄▄▄█ ▄▄▄▄▄█ ████████▌▐███ █████▄ █ ▄▄▄▄▄ ┃
// ┃ █ ██████ █ ▀█▄ █ ██████ █ ███▌▐███ ███████▄ █ ┃
// ┣━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━━┫
// ┃ 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 "/node_modules/@perspective-dev/viewer/dist/cdn/perspective-viewer.js";
import perspective from "/node_modules/@perspective-dev/client/dist/cdn/perspective.js";
const BasePlugin = customElements.get("perspective-viewer-plugin");
class DebugStyledPlugin extends BasePlugin {
get_static_config() {
return {
name: "Debug Styled",
select_mode: "toggle",
config_column_names: ["Columns"],
priority: 1,
can_render_column_styles: true,
};
}
plugin_config_schema() {
return {
fields: [
{
kind: "Enum",
key: "edit_mode",
default: "READ_ONLY",
variants: [
{ value: "EDIT", label: "Edit" },
{ value: "READ_ONLY", label: "Read-only" },
],
},
],
};
}
column_config_schema(type) {
const fields = [];
if (type === "integer" || type === "float") {
fields.push({
kind: "ColorRange",
key_pos: "pos_fg_color",
key_neg: "neg_fg_color",
default_pos: "#2771a8",
default_neg: "#ff471e",
is_gradient: false,
});
fields.push({ kind: "NumberFormat" });
} else if (type === "date") {
fields.push({ kind: "DatetimeFormat" });
} else if (type === "datetime") {
fields.push({ kind: "DatetimeFormat" });
fields.push({
kind: "Enum",
key: "datetime_color_mode",
default: "none",
variants: [
{ value: "none", label: "None" },
{ value: "foreground", label: "Foreground" },
],
});
} else if (type === "string") {
fields.push({ kind: "StringFormat" });
}
return { fields };
}
restore(token, columns_config) {
this._restored_plugin_config = token;
this._restored_columns_config = columns_config;
this._restore_count = (this._restore_count ?? 0) + 1;
}
async update(view) {
return this.draw(view);
}
async draw(view) {
this._draw_count = (this._draw_count ?? 0) + 1;
const num_rows = await view.num_rows();
this.textContent = `${this.get_static_config().name}: ${num_rows} rows`;
}
}
class DebugAltPlugin extends DebugStyledPlugin {
get_static_config() {
return {
name: "Debug Alt",
select_mode: "select",
priority: 0,
can_render_column_styles: false,
};
}
plugin_config_schema() {
return { fields: [] };
}
column_config_schema() {
return { fields: [] };
}
}
customElements.define("perspective-viewer-debug-styled", DebugStyledPlugin);
customElements.define("perspective-viewer-debug-alt", DebugAltPlugin);
const Viewer = customElements.get("perspective-viewer");
Viewer.registerPlugin("perspective-viewer-debug-styled");
Viewer.registerPlugin("perspective-viewer-debug-alt");
async function load() {
const resp = await fetch(
"/node_modules/@perspective-dev/test/assets/superstore.csv",
);
const csv = await resp.text();
const viewer = document.querySelector("perspective-viewer");
const worker = await perspective.worker();
const table = worker.table(csv, {
index: "Row ID",
name: "load-viewer-csv",
});
if (viewer) {
await viewer.load(table);
}
window.__TEST_WORKER__ = worker;
}
await load();
window.__TEST_PERSPECTIVE_READY__ = true;