mascot-vis 3.0.0 → 3.0.2

This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
Files changed (156) hide show
  1. package/dist/mascot-esm.js +186 -0
  2. package/package.json +3 -6
  3. package/dist/mascot-es.js +0 -27745
  4. package/dist/mascot-min.js +0 -186
  5. package/dist/mascot-umd.js +0 -27781
  6. package/js/depGraphVis.js +0 -66
  7. package/src-new-ts/action/createElement.ts +0 -91
  8. package/src-new-ts/action/encode.js +0 -20
  9. package/src-new-ts/action/repeat.js +0 -128
  10. package/src-new-ts/action/traverseScene.js +0 -41
  11. package/src-new-ts/data/Network.js +0 -2
  12. package/src-new-ts/data/Scope.js +0 -135
  13. package/src-new-ts/data/Table.js +0 -263
  14. package/src-new-ts/data/Tree.js +0 -3
  15. package/src-new-ts/data/field.ts +0 -115
  16. package/src-new-ts/data/import.ts +0 -96
  17. package/src-new-ts/data/predicate.ts +0 -82
  18. package/src-new-ts/depgraph/DepGraph.js +0 -178
  19. package/src-new-ts/depgraph/Edge.js +0 -9
  20. package/src-new-ts/depgraph/SceneGraph2DepGraph.js +0 -110
  21. package/src-new-ts/depgraph/Signal.js +0 -12
  22. package/src-new-ts/depgraph/operator/BoundsEvaluator.js +0 -30
  23. package/src-new-ts/depgraph/operator/Dataflow.js +0 -41
  24. package/src-new-ts/depgraph/operator/DomainBuilder.js +0 -50
  25. package/src-new-ts/depgraph/updateDepGraph.js +0 -45
  26. package/src-new-ts/depgraph/variable/BoundsVar.js +0 -81
  27. package/src-new-ts/depgraph/variable/ChannelVar.js +0 -17
  28. package/src-new-ts/depgraph/variable/DataScopeVar.js +0 -12
  29. package/src-new-ts/depgraph/variable/DomainVar.js +0 -15
  30. package/src-new-ts/depgraph/variable/FieldVar.js +0 -17
  31. package/src-new-ts/depgraph/variable/LayoutParameter.js +0 -8
  32. package/src-new-ts/depgraph/variable/ScaleVar.js +0 -13
  33. package/src-new-ts/depgraph/variable/Variable.js +0 -39
  34. package/src-new-ts/element/gradient/LinearGradient.js +0 -37
  35. package/src-new-ts/element/group/Collection.js +0 -109
  36. package/src-new-ts/element/group/Group.js +0 -307
  37. package/src-new-ts/element/group/Scene.js +0 -98
  38. package/src-new-ts/element/mark/CircleMark.ts +0 -85
  39. package/src-new-ts/element/mark/Mark.ts +0 -233
  40. package/src-new-ts/element/mark/PathMark.js +0 -483
  41. package/src-new-ts/element/mark/Segment.js +0 -29
  42. package/src-new-ts/element/mark/Vertex.js +0 -118
  43. package/src-new-ts/encode/Scale.ts +0 -115
  44. package/src-new-ts/index.ts +0 -19
  45. package/src-new-ts/layout/Layout.ts +0 -3
  46. package/src-new-ts/render/CanvasRenderer.ts +0 -24
  47. package/src-new-ts/render/SVGRenderer.js +0 -316
  48. package/src-new-ts/util.ts +0 -3
  49. package/src-old/action/Classify.js +0 -53
  50. package/src-old/action/Densify.js +0 -199
  51. package/src-old/action/Partition.js +0 -531
  52. package/src-old/action/Repeat.js +0 -106
  53. package/src-old/action/Repopulate.js +0 -44
  54. package/src-old/action/Stratify.js +0 -156
  55. package/src-old/basic/Gradient.js +0 -37
  56. package/src-old/basic/Point.js +0 -51
  57. package/src-old/basic/Rectangle.js +0 -63
  58. package/src-old/bind/bindToAngle.js +0 -56
  59. package/src-old/bind/bindToAreaMark.js +0 -360
  60. package/src-old/bind/bindToColor.js +0 -114
  61. package/src-old/bind/bindToLink.js +0 -81
  62. package/src-old/bind/bindToPosition.js +0 -283
  63. package/src-old/bind/bindToRadialDistance.js +0 -62
  64. package/src-old/bind/bindToSize.js +0 -235
  65. package/src-old/bind/bindToText.js +0 -60
  66. package/src-old/bind/bindToThickness.js +0 -100
  67. package/src-old/constraint/AffixConstraint.js +0 -129
  68. package/src-old/constraint/AlignConstraint.js +0 -58
  69. package/src-old/core/Encoding.js +0 -336
  70. package/src-old/core/Scale.js +0 -322
  71. package/src-old/core/SceneLoader.js +0 -290
  72. package/src-old/core/SceneValidator.js +0 -232
  73. package/src-old/core/SpecExecutor.js +0 -113
  74. package/src-old/core/SpecGenerator.js +0 -350
  75. package/src-old/data/DataImporter.js +0 -64
  76. package/src-old/data/DataScope.js +0 -124
  77. package/src-old/data/DataTable.js +0 -338
  78. package/src-old/data/Network.js +0 -106
  79. package/src-old/data/Tree.js +0 -251
  80. package/src-old/data/transform/Bin.js +0 -46
  81. package/src-old/data/transform/Filter.js +0 -48
  82. package/src-old/data/transform/Groupby.js +0 -18
  83. package/src-old/data/transform/KDE.js +0 -58
  84. package/src-old/data/transform/Sort.js +0 -14
  85. package/src-old/data/transform/Split.js +0 -5
  86. package/src-old/data/transform/partition.js +0 -46
  87. package/src-old/history/UndoRedoStack +0 -0
  88. package/src-old/index.js +0 -271
  89. package/src-old/indexSVG.js +0 -259
  90. package/src-old/interaction/Interaction.js +0 -91
  91. package/src-old/interaction/MouseEvent.js +0 -8
  92. package/src-old/interaction/Selection.js +0 -9
  93. package/src-old/interaction/brush.js +0 -362
  94. package/src-old/item/Segment.js +0 -29
  95. package/src-old/item/Vertex.js +0 -118
  96. package/src-old/item/composite/Collection.js +0 -106
  97. package/src-old/item/composite/Glyph.js +0 -19
  98. package/src-old/item/composite/Group.js +0 -310
  99. package/src-old/item/composite/Scene.js +0 -1251
  100. package/src-old/item/mark/ArcPath.js +0 -181
  101. package/src-old/item/mark/AreaPath.js +0 -78
  102. package/src-old/item/mark/CirclePath.js +0 -102
  103. package/src-old/item/mark/EllipsePath.js +0 -5
  104. package/src-old/item/mark/Image.js +0 -101
  105. package/src-old/item/mark/LinkPath.js +0 -118
  106. package/src-old/item/mark/Mark.js +0 -163
  107. package/src-old/item/mark/Path.js +0 -494
  108. package/src-old/item/mark/PointText.js +0 -201
  109. package/src-old/item/mark/PolygonPath.js +0 -64
  110. package/src-old/item/mark/RectPath.js +0 -88
  111. package/src-old/item/mark/RingPath.js +0 -92
  112. package/src-old/item/refs/Axis.js +0 -362
  113. package/src-old/item/refs/EncodingAxis.js +0 -515
  114. package/src-old/item/refs/Gridlines.js +0 -144
  115. package/src-old/item/refs/LayoutAxis.js +0 -316
  116. package/src-old/item/refs/Legend.js +0 -273
  117. package/src-old/layout/Circular.js +0 -95
  118. package/src-old/layout/Force.js +0 -52
  119. package/src-old/layout/Grid.js +0 -423
  120. package/src-old/layout/Layout.js +0 -13
  121. package/src-old/layout/Packing.js +0 -56
  122. package/src-old/layout/Stack.js +0 -264
  123. package/src-old/layout/Strata.js +0 -88
  124. package/src-old/layout/Sugiyama.js +0 -59
  125. package/src-old/layout/TidyTree.js +0 -105
  126. package/src-old/layout/Treemap.js +0 -87
  127. package/src-old/renderer/SVGInteractionHandler.js +0 -241
  128. package/src-old/renderer/SVGRenderer.js +0 -325
  129. package/src-old/renderer/WebGLRenderer.js +0 -1097
  130. package/src-old/renderer/WebGLRenderer2.js +0 -249
  131. package/src-old/renderer/threejs/Line2.js +0 -18
  132. package/src-old/renderer/threejs/LineGeometry.js +0 -77
  133. package/src-old/renderer/threejs/LineMaterial.js +0 -605
  134. package/src-old/renderer/threejs/LineSegments2.js +0 -281
  135. package/src-old/renderer/threejs/LineSegmentsGeometry.js +0 -226
  136. package/src-old/renderer/threejs/Wireframe.js +0 -51
  137. package/src-old/renderer/threejs/WireframeGeometry2.js +0 -16
  138. package/src-old/scale/areaSize.js +0 -0
  139. package/src-old/scale/domain.js +0 -38
  140. package/src-old/util/Constants.js +0 -180
  141. package/src-old/util/DataUtil.js +0 -35
  142. package/src-old/util/ItemUtil.js +0 -586
  143. package/src-old/util/Numerical.js +0 -33
  144. package/tests/demo-tests/README.md +0 -80
  145. package/tests/demo-tests/SVG2PNG.js +0 -56
  146. package/tests/demo-tests/demos2CanvasPNGs.js +0 -69
  147. package/tests/demo-tests/demos2ScenesSVGs.js +0 -100
  148. package/tests/demo-tests/pathElementWorker.js +0 -91
  149. package/tests/demo-tests/pixelTest.js +0 -62
  150. package/tests/demo-tests/renderDemos.html +0 -132
  151. package/tests/demo-tests/serializationTest.js +0 -36
  152. package/tests/demo-tests/serializeDemos.html +0 -134
  153. package/tests/unit-tests/README.md +0 -4
  154. package/tests/unit-tests/jasmine-browser.json +0 -21
  155. package/tests/unit-tests/jasmine.json +0 -14
  156. package/tests/unit-tests/testSpec.js +0 -274
@@ -1,56 +0,0 @@
1
- import puppeteer from 'puppeteer';
2
- import fs from 'fs/promises'
3
- import path from 'path';
4
-
5
-
6
- import { fileURLToPath } from 'url';
7
- import { dirname } from 'path';
8
-
9
- const __filename = fileURLToPath(import.meta.url);
10
- const __dirname = dirname(__filename);
11
- const ioPath = path.join(__dirname, '..', '..', 'io');
12
-
13
- async function generatePNGs() {
14
- const browser = await puppeteer.launch({ headless: "new" }); //"new"
15
- const page = await browser.newPage();
16
- const json = await fs.readFile("../../demos/static.json", 'utf8');
17
- let demos = JSON.parse(json);
18
- //let skip = ["IciclePlot", "Treemap", "TreemapBarChart", "Sunburst"];
19
-
20
- await checkDirectory('../../io/svg_PNGs/');
21
- for (const d in demos) {
22
- if (demos[d].draft) continue;
23
- if (d === "Isotype") continue;
24
- //if (skip.includes(d)) continue;
25
- console.log(d);
26
-
27
- const s = await fs.readFile("../../io/scene/" + d + ".msc", 'utf8');
28
- let scene = JSON.parse(s);
29
- let wd = parseInt(scene.bounds.width/2 + scene.bounds.x) + 50,
30
- ht = parseInt(scene.bounds.height/2 + scene.bounds.y) + 80;
31
-
32
- const filePath = path.resolve(ioPath, 'svg', d + '.svg');
33
- await page.setViewport({ width: wd, height: ht });
34
- await page.goto('file://' + filePath);
35
- await page.screenshot({ path: `../../io/svg_PNGs/${d}.png` });
36
- }
37
-
38
- await browser.close();
39
- }
40
-
41
- async function directoryExists(dirPath) {
42
- try {
43
- await fs.access(dirPath);
44
- return true;
45
- } catch {
46
- return false;
47
- }
48
- }
49
-
50
- async function checkDirectory(dirPath) {
51
- if (!(await directoryExists(dirPath))) {
52
- await fs.mkdir(dirPath, { recursive: true });
53
- }
54
- }
55
-
56
- generatePNGs();
@@ -1,69 +0,0 @@
1
- //const puppeteer = require('puppeteer');
2
- import puppeteer from 'puppeteer';
3
- import fs from 'fs/promises'
4
- //const fs = require('fs').promises;
5
-
6
- const rendererType = "webgl";
7
-
8
- async function main() {
9
- const browser = await puppeteer.launch({ headless: "new" }); //false to debug
10
- const page = await browser.newPage();
11
-
12
- const json = await fs.readFile("../demos/static.json", 'utf8');
13
- let demos = JSON.parse(json);
14
-
15
- await checkDirectory('webgl_PNGs/');
16
-
17
- for (const d in demos) {
18
- if (demos[d].draft) continue;
19
- if (d === "Isotype") continue;
20
- console.log(d)
21
-
22
- await page.goto('http://localhost:8020/io/index.html?executedBy='+ rendererType + '#' + d, { waitUntil: 'networkidle0' });
23
-
24
- await page.waitForFunction((v) => window.demo == v, {}, d);
25
- const scene = await page.evaluate(() => window.scene);
26
-
27
- const canvas = await page.$('#canvasElement');
28
-
29
- // saving canvas screenshot as png
30
- let wd = parseInt(scene.bounds.width + scene.bounds.left) + 50,
31
- ht = parseInt(scene.bounds.height + scene.bounds.top) + 80;
32
-
33
- // take screenshot of specific area
34
- const buffer = await canvas.screenshot({
35
- clip: {
36
- x: 0,
37
- y: 0,
38
- width: wd,
39
- height: ht
40
- }
41
- });
42
- await fs.writeFile(`webgl_PNGs/${d}.png`, buffer);
43
-
44
- }
45
-
46
- await browser.close();
47
-
48
- }
49
-
50
-
51
-
52
- async function directoryExists(dirPath) {
53
- try {
54
- await fs.access(dirPath);
55
- return true;
56
- } catch {
57
- return false;
58
- }
59
- }
60
-
61
- async function checkDirectory(dirPath) {
62
- if (!(await directoryExists(dirPath))) {
63
- await fs.mkdir(dirPath, { recursive: true });
64
- }
65
- }
66
-
67
-
68
-
69
- main();
@@ -1,100 +0,0 @@
1
- //const puppeteer = require('puppeteer');
2
- import puppeteer from 'puppeteer';
3
- import fs from 'fs/promises'
4
- //const fs = require('fs').promises;
5
-
6
- const svgs = {}, scenes = {};
7
- const rendererType = "svg";
8
-
9
- async function main() {
10
- const browser = await puppeteer.launch({ headless: "new" }); //set headless to false to debug, to "new" otherwise
11
- const page = await browser.newPage();
12
-
13
- const json = await fs.readFile("../../demos/static.json", 'utf8');
14
- let demos = JSON.parse(json);
15
- //let skip = ["IciclePlot", "Treemap", "TreemapBarChart", "Sunburst"];
16
-
17
- for (const d in demos) {
18
- if (demos[d].draft) continue;
19
- if (d === "Isotype") continue;
20
- //if (skip.includes(d)) continue;
21
- console.log(d);
22
-
23
- await page.goto('http://localhost:8020/tests/demo-tests/renderDemos.html?executedBy='+ rendererType + '#' + d, { waitUntil: 'networkidle0' });
24
-
25
- await page.waitForFunction((v) => window.demo == v, {}, d);
26
-
27
- const scene = await page.evaluate(() => window.scene);
28
- scenes[d] = scene;
29
-
30
- const svg = await page.$('#svgElement'); // selector for the element
31
- const text = await page.evaluate(s => s.outerHTML, svg);
32
- svgs[d] = text;
33
- }
34
-
35
- //console.log(window.serializationTest);
36
-
37
- await browser.close();
38
-
39
- writeScenes();
40
- writeSVGs();
41
- }
42
-
43
- async function writeScenes() {
44
- await checkDirectory('../../io/scene/');
45
- //await checkDirectory('annotation/');
46
- for (let d in scenes) {
47
- let scene = scenes[d];
48
- //let annotation = {ID: scene.id, type: "scene", children: []};
49
- // for (let c of scene.children)
50
- // annotate(c, annotation.children);
51
- fs.writeFile('../../io/scene/' + d + '.msc', JSON.stringify(scene));
52
- //fs.writeFile('annotation/' + d + '.json', JSON.stringify(annotation));
53
- }
54
- }
55
-
56
- async function writeSVGs() {
57
- await checkDirectory('../../io/svg/');
58
- for (let d in svgs) {
59
- let scene = scenes[d];
60
- let wd = parseInt(scene.bounds.width)/2 + parseInt(scene.bounds.x) + 50,
61
- ht = parseInt(scene.bounds.height)/2 + parseInt(scene.bounds.y) + 80;
62
- const sizeInfo = `width="${wd}" height="${ht}" `;
63
- const content = svgs[d].replace('xmlns:xlink', sizeInfo + 'xmlns:xlink');
64
- fs.writeFile('../../io/svg/' + d + '.svg', content);
65
- }
66
- }
67
-
68
- async function directoryExists(dirPath) {
69
- try {
70
- await fs.access(dirPath);
71
- return true;
72
- } catch {
73
- return false;
74
- }
75
- }
76
-
77
- async function checkDirectory(dirPath) {
78
- if (!(await directoryExists(dirPath))) {
79
- await fs.mkdir(dirPath, { recursive: true });
80
- }
81
- }
82
-
83
- // function annotate(node, result) {
84
- // let n = {ID: node.id, type: node.type};
85
- // switch (node.type) {
86
- // case "collection":
87
- // n.layout = node.layout? node.layout : {type: "none"};
88
- // break;
89
- // default:
90
- // break;
91
- // }
92
- // result.push(n);
93
- // if (node.children && node.children.length > 0) {
94
- // n.children = [];
95
- // for (let c of node.children)
96
- // annotate(c, n.children);
97
- // }
98
- // }
99
-
100
- main();
@@ -1,91 +0,0 @@
1
- const puppeteer = require('puppeteer');
2
- const fs = require('fs').promises;
3
- const path = require('path');
4
-
5
- async function main() {
6
- const browser = await puppeteer.launch({ headless: "new" }); //"new"
7
- const page = await browser.newPage();
8
- const json = await fs.readFile("../demos/static.json", 'utf8');
9
- let demos = JSON.parse(json);
10
-
11
- //demos = { 'CyclePlot': 21 };
12
-
13
- let marks = {};
14
- for (const d in demos) {
15
- if (demos[d].draft) continue;
16
- if (d === "Isotype") continue;
17
- const s = await fs.readFile("scene/" + d + ".msc", 'utf8');
18
- let scene = JSON.parse(s);
19
-
20
- const filePath = path.resolve(__dirname, 'svg', d + '.svg');
21
- await page.goto('file://' + filePath);
22
- await buildMarkHash(scene, page, marks, d);
23
- }
24
-
25
- await browser.close();
26
-
27
- let data = [["d", "type", "attrs"].join("\t") + "\n"];
28
- for (let k in marks) {
29
- data.push(marks[k].d + "\t" + marks[k].type + "\t" + JSON.stringify(marks[k].attrs) + "\n");
30
- }
31
-
32
- await checkDirectory('pathElements/');
33
- fs.writeFile('pathElements/pathMarks.tsv', data, (err) => {
34
- if (err) throw err;
35
- });
36
- }
37
-
38
- async function buildMarkHash(scene, page, marks, demo) {
39
- for (let c of scene.children)
40
- await getMarks(c, marks, page, demo);
41
- }
42
-
43
- async function getMarks(c, marks, page, demo) {
44
- let shapes = ['path', 'line', 'arc', 'pie', 'ring', 'polygon', 'area', 'link'];
45
- if (c.children && c.type !== "axis" && c.type !== "gridlines" && c.type !== "legend") {
46
- for (let child of c.children)
47
- await getMarks(child, marks, page, demo);
48
- } else if (shapes.indexOf(c.type) >= 0) {
49
- let element = await page.$('#' + c.id);
50
- let v = await page.evaluate((el, attributeName) => el.getAttribute(attributeName), element, 'd');
51
- let attrs = getMarkAttrs(c);
52
- marks[demo+"-"+c.id] = { "type": c.type, "d": v, "attrs": attrs };
53
- }
54
- }
55
-
56
- function getMarkAttrs(m) {
57
- switch (m.type) {
58
- case "arc":
59
- return {"cx": m.args.x, 'cy': m.args.y, "innerRadius": m.args.innerRadius, "outerRadius": m.args.outerRadius, "startAngle": m.args.startAngle, "endAngle": m.args.endAngle};
60
- case "pie":
61
- return {"cx": m.args.x, 'cy': m.args.y, "radius": m.args.outerRadius, "startAngle": m.args.startAngle, "endAngle": m.args.endAngle};
62
- case "ring":
63
- return {"cx": m.args.x, 'cy': m.args.y, "innerRadius": m.args.innerRadius, "outerRadius": m.args.outerRadius};
64
- case "polygon":
65
- return {"cx": m.args.x, 'cy': m.args.y, "radius": m.args.radius, "numPts": m.vertices.length};
66
- case "link":
67
- return {"mode": m.mode, "sourceAnchor": m.args.sourceAnchor, "targetAnchor": m.args.targetAnchor, "sourceOffset": m.args.sourceOffset, "targetOffset": m.args.targetOffset};
68
- case "area":
69
- case "line":
70
- case "path":
71
- default:
72
- return {"numPts": m.vertices.length};
73
- }
74
- }
75
-
76
- async function directoryExists(dirPath) {
77
- try {
78
- await fs.access(dirPath);
79
- return true;
80
- } catch {
81
- return false;
82
- }
83
- }
84
-
85
- async function checkDirectory(dirPath) {
86
- if (!(await directoryExists(dirPath))) {
87
- await fs.mkdir(dirPath, { recursive: true });
88
- }
89
- }
90
-
91
- main();
@@ -1,62 +0,0 @@
1
- //const fs = require('fs').promises;
2
- //const PNG = require('pngjs').PNG;
3
- //const pixelmatch = require('pixelmatch');
4
- //const process = require('process');
5
- import fs from 'fs/promises';
6
- import { PNG } from 'pngjs';
7
- import pixelmatch from 'pixelmatch';
8
-
9
- const executedBy = process.argv[2];
10
-
11
- try {
12
- checkFormat(executedBy); // This will throw an error if no argument is provided or if the argument is not 'webgl' or 'svg'.
13
- } catch (error) {
14
- console.error(error.message);
15
- process.exit(1);
16
- }
17
-
18
- comparePNGs();
19
-
20
- async function comparePNGs() {
21
- const json = await fs.readFile("../../demos/static.json", 'utf8');
22
- let demos = JSON.parse(json);
23
- let diff_count = 0, failed = [];
24
- //let skip = ["IciclePlot", "Treemap", "TreemapBarChart", "Sunburst"];
25
-
26
- for (const d in demos) {
27
- if (demos[d].draft || d == "Isotype") continue;
28
- //if (skip.includes(d)) continue;
29
- console.log("testing", d);
30
- const data1 = await fs.readFile("../../io/demoScreenshots/" + executedBy + '/' + d + ".png");
31
- const data2 = await fs.readFile("../../io/" + executedBy + "_PNGs/" + d + ".png");
32
- const img1 = PNG.sync.read(data1);
33
- const img2 = PNG.sync.read(data2);
34
-
35
- const { width, height } = img1;
36
- const diff = new PNG({ width, height });
37
-
38
- // Compare the images
39
- const numDiffPixels = pixelmatch(
40
- img1.data, img2.data, diff.data, width, height,
41
- { threshold: 0.1 }
42
- );
43
-
44
- if (numDiffPixels !== 0) {
45
- console.log(d, "different");
46
- diff_count += 1;
47
- failed.push(d);
48
- }
49
-
50
- }
51
- console.log("Total mismatches: ", diff_count, failed);
52
- }
53
-
54
- function checkFormat(format) {
55
- if (!format) {
56
- throw new Error("No argument provided. You must provide 'webgl' or 'svg' as the argument.");
57
- } else if (format !== "webgl" && format !== "svg") {
58
- throw new Error("Invalid format. Argument format must be 'webgl' or 'svg'.");
59
- }
60
- // If the format is valid, continue with your logic
61
- console.log(`Format '${format}' is valid.`);
62
- }
@@ -1,132 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
-
4
- <head>
5
- <meta charset="utf-8" />
6
- <title>msc</title>
7
- <script src="../../lib/pixi.min.js"></script>
8
- <script src="https://d3js.org/d3.v7.min.js"></script>
9
- <script src="../../dist/mascot-min.js"></script>
10
- <script src="../../lib/acorn.js"></script>
11
- <style>
12
- html {
13
- margin: 0px;
14
- padding: 0px;
15
- height: 100%;
16
- font-family: Arial;
17
- }
18
-
19
- body {
20
- height: 100vh;
21
- width: 100%;
22
- margin: 0px;
23
- padding: 0px;
24
- background: #f2f2f2;
25
- overflow-x: hidden;
26
- overflow-y: hidden;
27
- }
28
-
29
- #svgElement {
30
- width: 1600px;
31
- height: 1000px;
32
- margin: 0;
33
- padding: 0;
34
- position: absolute;
35
- top: 0;
36
- left: 0;
37
- }
38
-
39
- #canvasElement {
40
- width: 1600;
41
- height: 1000;
42
- margin: 0;
43
- padding: 0;
44
- position: absolute;
45
- top: 0;
46
- left: 0;
47
- }
48
- </style>
49
- </head>
50
-
51
- <body>
52
- <canvas id="canvasElement"></canvas>
53
- <svg id="svgElement" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"></svg>
54
- <script>
55
- function loadScript(s, demo, renderer, dest, flatten) {
56
- let script = s;
57
- // eslint-disable-next-line no-undef
58
- let parsed = acorn.parse(script, { ecmaVersion: "latest" });
59
- let blocks = parsed.body.map((d) => script.substring(d.start, d.end));
60
-
61
- //find lines with renderer and remove them
62
- blocks = blocks.filter((l) => l.indexOf("render") < 0);
63
- //add renderer lines
64
- let sceneName = blocks
65
- .filter((l) => l.indexOf("msc.scene(") > 0)[0]
66
- .split("=")[0]
67
- .replace("let", " ")
68
- .trim();
69
-
70
- let newScript =
71
- blocks.join("\n") + "\n" +
72
- "let renderer = msc.renderer('" + renderer + "','" + dest + "');\n" +
73
- "renderer.clear();\n" +
74
- (flatten ? "renderer.render(" + sceneName + ", {flatten: true});\n" : "renderer.render(" + sceneName + ");\n") +
75
- // "let json = msc.serialize(" + sceneName + ");\n" +
76
- // "let obj = msc.deserialize(json);\n" +
77
- // "let equal = msc.isEqual(" + sceneName + ", obj);\n" +
78
- // "return [" + sceneName + ", equal]";
79
- "return msc.serialize(" + sceneName + ");";
80
-
81
- newScript = makeAsync(newScript);
82
- //window.serializationTest = {};
83
- let scn = eval(newScript);
84
- scn.then(r => {
85
- // window.scene = r[0];
86
- // window.serializationTest[demo] = r[1];
87
- window.scene = r;
88
- window.demo = demo;
89
- });
90
- }
91
-
92
- function makeAsync(s) {
93
- // let c =
94
- // "try {\n" +
95
- // s +
96
- // "\n} catch (err) {showError(err.name ? err.name + ': ' + err.message : undefined, 0, 0, 0, err);}";
97
- return "(async () => {" + s + "})();";
98
- }
99
-
100
- // eslint-disable-next-line no-unused-vars
101
- // rendererType: "webgl" or "svg"
102
- // rendererElemID: "canvasElement" or "svgElement"
103
- function refresh() {
104
- const params = new URLSearchParams(window.location.search);
105
- const executedBy = params.get('executedBy');
106
- if (executedBy == 'webgl') {
107
- refreshAux('webgl', 'canvasElement')
108
- } else {
109
- refreshAux('svg', 'svgElement')
110
- }
111
- }
112
-
113
- function refreshAux(rendererType, rendererElemID) {
114
- let demo = window.location.hash.replace("#", "");
115
- if (demo && demo != "") {
116
- console.log(demo)
117
- var oReq = new XMLHttpRequest();
118
- oReq.addEventListener("load", function () {
119
- loadScript(this.responseText, demo, rendererType, rendererElemID);
120
- });
121
- oReq.open("GET", "../../demos/static/" + demo[0].toLowerCase() + demo.substring(1) + ".js");
122
- oReq.send();
123
- }
124
- }
125
-
126
- window.scene = {};
127
- window.onhashchange = refresh;
128
- window.onload = refresh;
129
- </script>
130
- </body>
131
-
132
- </html>
@@ -1,36 +0,0 @@
1
- import puppeteer from 'puppeteer';
2
- import fs from 'fs/promises'
3
-
4
- const scenes = {};
5
- const rendererType = "svg";
6
-
7
- async function main() {
8
- const browser = await puppeteer.launch({ headless: "new" }); //set headless to false to debug, to "new" otherwise
9
- const page = await browser.newPage();
10
-
11
- const json = await fs.readFile("../../demos/static.json", 'utf8');
12
- let demos = JSON.parse(json);
13
- //let skip = ["IciclePlot", "Treemap", "TreemapBarChart", "Sunburst"];
14
- let failed = [];
15
-
16
- for (const d in demos) {
17
- if (demos[d].draft) continue;
18
- if (d === "Isotype") continue;
19
- //if (skip.includes(d)) continue;
20
- console.log(d);
21
-
22
- await page.goto('http://localhost:8020/tests/demo-tests/serializeDemos.html?executedBy=' + rendererType + '#' + d, { waitUntil: 'networkidle0' });
23
-
24
- await page.waitForFunction((v) => window.demo == v, {}, d);
25
-
26
- const result = await page.evaluate(() => window.serializationTest);
27
- scenes[d] = result;
28
- if (!result)
29
- failed.push(d);
30
- }
31
-
32
- await browser.close();
33
- console.log(failed.length, "failed: ", failed);
34
- }
35
-
36
- main();
@@ -1,134 +0,0 @@
1
- <!DOCTYPE html>
2
- <html>
3
-
4
- <head>
5
- <meta charset="utf-8" />
6
- <title>msc</title>
7
- <script src="../../lib/pixi.min.js"></script>
8
- <script src="https://d3js.org/d3.v7.min.js"></script>
9
- <script src="../../dist/mascot-min.js"></script>
10
- <script src="../../lib/acorn.js"></script>
11
- <style>
12
- html {
13
- margin: 0px;
14
- padding: 0px;
15
- height: 100%;
16
- font-family: Arial;
17
- }
18
-
19
- body {
20
- height: 100vh;
21
- width: 100%;
22
- margin: 0px;
23
- padding: 0px;
24
- background: #f2f2f2;
25
- overflow-x: hidden;
26
- overflow-y: hidden;
27
- }
28
-
29
- #svgElement {
30
- width: 1600px;
31
- height: 1000px;
32
- margin: 0;
33
- padding: 0;
34
- position: absolute;
35
- top: 0;
36
- left: 0;
37
- }
38
-
39
- #canvasElement {
40
- width: 1600;
41
- height: 1000;
42
- margin: 0;
43
- padding: 0;
44
- position: absolute;
45
- top: 0;
46
- left: 0;
47
- }
48
- </style>
49
- </head>
50
-
51
- <body>
52
- <canvas id="canvasElement"></canvas>
53
- <svg id="svgElement" xmlns="http://www.w3.org/2000/svg" xmlns:xlink="http://www.w3.org/1999/xlink"></svg>
54
- <script>
55
- function loadScript(s, demo, renderer, dest, flatten) {
56
- let script = s;
57
- // eslint-disable-next-line no-undef
58
- let parsed = acorn.parse(script, { ecmaVersion: "latest" });
59
- let blocks = parsed.body.map((d) => script.substring(d.start, d.end));
60
-
61
- //find lines with renderer and remove them
62
- blocks = blocks.filter((l) => l.indexOf("render") < 0);
63
- //add renderer lines
64
- let sceneName = blocks
65
- .filter((l) => l.indexOf("msc.scene(") > 0)[0]
66
- .split("=")[0]
67
- .replace("let", " ")
68
- .trim();
69
-
70
- let newScript =
71
- blocks.join("\n") + "\n" +
72
- "let renderer = msc.renderer('" + renderer + "','" + dest + "');\n" +
73
- "renderer.clear();\n" +
74
- (flatten ? "renderer.render(" + sceneName + ", {flatten: true});\n" : "renderer.render(" + sceneName + ");\n") +
75
- "\nlet json = msc.serialize(" + sceneName + ");" +
76
- "\nlet loadedScn = msc.deserialize(json);" +
77
- "\n return msc.isEqual(" + sceneName + ", loadedScn);"
78
- // "let json = msc.serialize(" + sceneName + ");\n" +
79
- // "let obj = msc.deserialize(json);\n" +
80
- // "let equal = msc.isEqual(" + sceneName + ", obj);\n" +
81
- // "return [" + sceneName + ", equal]";
82
- //"return msc.serialize(" + sceneName + ");";
83
-
84
- newScript = makeAsync(newScript);
85
- //window.serializationTest = {};
86
- let scn = eval(newScript);
87
- scn.then(r => {
88
- // window.scene = r[0];
89
- // window.serializationTest[demo] = r[1];
90
- window.serializationTest = r;
91
- window.demo = demo;
92
- });
93
- }
94
-
95
- function makeAsync(s) {
96
- // let c =
97
- // "try {\n" +
98
- // s +
99
- // "\n} catch (err) {showError(err.name ? err.name + ': ' + err.message : undefined, 0, 0, 0, err);}";
100
- return "(async () => {" + s + "})();";
101
- }
102
-
103
- // eslint-disable-next-line no-unused-vars
104
- // rendererType: "webgl" or "svg"
105
- // rendererElemID: "canvasElement" or "svgElement"
106
- function refresh() {
107
- const params = new URLSearchParams(window.location.search);
108
- const executedBy = params.get('executedBy');
109
- if (executedBy == 'webgl') {
110
- refreshAux('webgl', 'canvasElement')
111
- } else {
112
- refreshAux('svg', 'svgElement')
113
- }
114
- }
115
-
116
- function refreshAux(rendererType, rendererElemID) {
117
- let demo = window.location.hash.replace("#", "");
118
- if (demo && demo != "") {
119
- console.log(demo)
120
- var oReq = new XMLHttpRequest();
121
- oReq.addEventListener("load", function () {
122
- loadScript(this.responseText, demo, rendererType, rendererElemID);
123
- });
124
- oReq.open("GET", "../../demos/static/" + demo[0].toLowerCase() + demo.substring(1) + ".js");
125
- oReq.send();
126
- }
127
- }
128
-
129
- window.onhashchange = refresh;
130
- window.onload = refresh;
131
- </script>
132
- </body>
133
-
134
- </html>
@@ -1,4 +0,0 @@
1
- ## Run Tests
2
- Mascot uses [Jasmine](https://jasmine.github.io/setup/nodejs.html) for unit testing using Node.js. For tests on the demos, check out the `demo-tests` folder. Before running the tests, make sure to build the project with `npm run build`.
3
-
4
- All the unit tests are in the `unit-tests` folder. To run the tests, do `npm run start` first, then `npm test`.