Skip to content
Draft
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
6 changes: 5 additions & 1 deletion package.json
Original file line number Diff line number Diff line change
Expand Up @@ -19,6 +19,7 @@
"vega-lite": "4"
},
"scripts": {
"analyze": "source-map-explorer 'build/static/js/*.js'",
"start": "react-scripts start",
"build": "react-scripts build",
"buildcp": "react-scripts build && rm -r ~/.julia/dev/ElectronDisplay/assets/plotgallery && cp -R build ~/.julia/dev/ElectronDisplay/assets/plotgallery",
Expand All @@ -43,5 +44,8 @@
"last 1 safari version"
]
},
"homepage": "./"
"homepage": "./",
"devDependencies": {
"source-map-explorer": "^2.3.1"
}
}
25 changes: 24 additions & 1 deletion src/App.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -13,16 +13,21 @@ export type PlotData = {
type AppState = {
plots: any[],
index: number,
zoomFactor: number,
}

export class App extends Component<{}, AppState> {
constructor(props: {}) {
super(props);
this.state = {
plots: [],
index: 0
index: 0,
zoomFactor: 1,
};

// Expose whether we are using electron
(window as any).electron = this.electron;

// Expose functions
(window as any).addPlot = this.addPlot;
(window as any).switchTo = this.switchTo;
Expand All @@ -32,8 +37,13 @@ export class App extends Component<{}, AppState> {
(window as any).lastPlot = this.lastPlot;
(window as any).deleteCurrentPlot = this.deleteCurrentPlot;
(window as any).deleteAllPlots = this.deleteAllPlots;
(window as any).zoomIn = this.zoomIn;
(window as any).zoomOut = this.zoomOut;
(window as any).zoomReset = this.zoomReset;
}

electron = (window.process && (window.process as any).type === 'renderer') ? eval('require')('electron') : null;

addPlot = (plot: PlotData, noSwitch: Boolean = false) => {
this.setState((state) => (
{
Expand Down Expand Up @@ -180,6 +190,18 @@ export class App extends Component<{}, AppState> {
}
}

zoomIn = () => {
this.setState((state) => ({...state, zoomFactor: state.zoomFactor * 1.25}));
}

zoomOut = () => {
this.setState((state) => ({...state, zoomFactor: state.zoomFactor / 1.25}));
}

zoomReset = () => {
this.setState((state) => ({...state, zoomFactor: 1}));
}

componentDidMount() {
document.addEventListener('copy', this.copyListener);
document.addEventListener('keydown', this.keyDownListener);
Expand All @@ -203,6 +225,7 @@ export class App extends Component<{}, AppState> {
alert("We encountered the following error while displaying plot " + (this.state.index + 1) + ": " + e.toString());
this.deletePlot(this.state.index);
}}
zoomFactor={this.state.zoomFactor}
/>
</div>
</div>
Expand Down
5 changes: 3 additions & 2 deletions src/Plot.tsx
Original file line number Diff line number Diff line change
Expand Up @@ -12,9 +12,10 @@ export type PlotProps = {
plot: PlotData | null,
onThumbnailUpdate: (thumbnailURL: string) => void,
onInvalidPlot: (e: Error) => void,
zoomFactor: Number,
}

const Plot = ({plot, onThumbnailUpdate, onInvalidPlot} : PlotProps) => {
const Plot = ({plot, onThumbnailUpdate, onInvalidPlot, zoomFactor} : PlotProps) => {
if (plot) {
// For developers: comment/uncomment the code below to hide/expose vega
(window as any).vega = vega;
Expand Down Expand Up @@ -73,7 +74,7 @@ const Plot = ({plot, onThumbnailUpdate, onInvalidPlot} : PlotProps) => {
if (!plot.thumbnail) {
onThumbnailUpdate(plot.data.toString());
}
return <img src={plot.data} alt="Plot"></img>
return <img src={plot.data} style={{transform: `scale(${zoomFactor})`, transformOrigin: "top left"}} alt="Plot"></img>
default:
console.warn("Invalid plot type " + plot.type + " with data " + plot.data.toString());
return <p>Unsupported plot type: {plot.type}</p>
Expand Down
100 changes: 95 additions & 5 deletions yarn.lock
Original file line number Diff line number Diff line change
Expand Up @@ -2080,7 +2080,7 @@ ansi-styles@^3.2.0, ansi-styles@^3.2.1:
dependencies:
color-convert "^1.9.0"

ansi-styles@^4.0.0:
ansi-styles@^4.0.0, ansi-styles@^4.1.0:
version "4.2.1"
resolved "https://registry.yarnpkg.com/ansi-styles/-/ansi-styles-4.2.1.tgz#90ae75c424d008d2624c5bf29ead3177ebfcf359"
integrity sha512-9VGjrMsG1vePxcSweQsN20KY/c4zN0h9fLjqAbwbPfahM3t+NL+M9HC8xeXG2I8pX5NoamTGNuomEUFI7fcUjA==
Expand Down Expand Up @@ -2777,6 +2777,11 @@ [email protected]:
dependencies:
node-int64 "^0.4.0"

btoa@^1.2.1:
version "1.2.1"
resolved "https://registry.npmjs.org/btoa/-/btoa-1.2.1.tgz#01a9909f8b2c93f6bf680ba26131eb30f7fa3d73"
integrity sha512-SB4/MIGlsiVkMcHmT+pSmIPoNDoHg+7cMzmt3Uxt628MTz2487DKSqK/fuhFBrkuqrYv5UCEnACpF4dTFNKc/g==

buble@^0.19.3:
version "0.19.8"
resolved "https://registry.npmjs.org/buble/-/buble-0.19.8.tgz#d642f0081afab66dccd897d7b6360d94030b9d3d"
Expand Down Expand Up @@ -3019,6 +3024,14 @@ chalk@^1.1.3:
strip-ansi "^3.0.0"
supports-color "^2.0.0"

chalk@^3.0.0:
version "3.0.0"
resolved "https://registry.npmjs.org/chalk/-/chalk-3.0.0.tgz#3f73c2bf526591f574cc492c51e2456349f844e4"
integrity sha512-4D3B6Wf41KOYRFdszmDqMCGq5VV/uMAB273JILmO+3jAlh8X4qDtdtgCR3fxtbLEMzSx22QdhnDcJvu2u1fVwg==
dependencies:
ansi-styles "^4.1.0"
supports-color "^7.1.0"

chardet@^0.7.0:
version "0.7.0"
resolved "https://registry.yarnpkg.com/chardet/-/chardet-0.7.0.tgz#90094849f0937f2eedc2425d0d28a9e5f0cbad9e"
Expand Down Expand Up @@ -4511,6 +4524,11 @@ [email protected]:
resolved "https://registry.yarnpkg.com/ee-first/-/ee-first-1.1.1.tgz#590c61156b0ae2f4f0255732a158b266bc56b21d"
integrity sha1-WQxhFWsK4vTwJVcyoViyZrxWsh0=

ejs@^3.0.1:
version "3.0.1"
resolved "https://registry.npmjs.org/ejs/-/ejs-3.0.1.tgz#30c8f6ee9948502cc32e85c37a3f8b39b5a614a5"
integrity sha512-cuIMtJwxvzumSAkqaaoGY/L6Fc/t6YvoP9/VIaK0V/CyqKLEQ8sqODmYfy/cjXEdZ9+OOL8TecbJu+1RsofGDw==

electron-to-chromium@^1.3.247, electron-to-chromium@^1.3.322:
version "1.3.334"
resolved "https://registry.yarnpkg.com/electron-to-chromium/-/electron-to-chromium-1.3.334.tgz#0588359f4ac5c4185ebacdf5fc7e1937e2c99872"
Expand Down Expand Up @@ -4668,7 +4686,7 @@ es6-weak-map@^2.0.3:
es6-iterator "^2.0.3"
es6-symbol "^3.1.1"

escape-html@~1.0.3:
escape-html@^1.0.3, escape-html@~1.0.3:
version "1.0.3"
resolved "https://registry.yarnpkg.com/escape-html/-/escape-html-1.0.3.tgz#0258eae4d3d0c0974de1c169188ef0051d1d1988"
integrity sha1-Aljq5NPQwJdN4cFpGI7wBR0dGYg=
Expand Down Expand Up @@ -6257,7 +6275,7 @@ growly@^1.3.0:
resolved "https://registry.yarnpkg.com/growly/-/growly-1.3.0.tgz#f10748cbe76af964b7c96c93c6bcc28af120c081"
integrity sha1-8QdIy+dq+WS3yWyTxrzCivEgwIE=

[email protected]:
[email protected], gzip-size@^5.1.1:
version "5.1.1"
resolved "https://registry.yarnpkg.com/gzip-size/-/gzip-size-5.1.1.tgz#cb9bee692f87c0612b232840a873904e4c135274"
integrity sha512-FNHi6mmoHvs1mxZAds4PpdCS6QG8B4C1krxJsMutgxl5t3+GlRTzzI3NEkifXx2pVsOvJdOGSmIgDhQ55FwdPA==
Expand Down Expand Up @@ -6300,6 +6318,11 @@ has-flag@^3.0.0:
resolved "https://registry.yarnpkg.com/has-flag/-/has-flag-3.0.0.tgz#b5d454dc2199ae225699f3467e5a07f3b955bafd"
integrity sha1-tdRU3CGZriJWmfNGfloH87lVuv0=

has-flag@^4.0.0:
version "4.0.0"
resolved "https://registry.npmjs.org/has-flag/-/has-flag-4.0.0.tgz#944771fd9c81c81265c4d6941860da06bb59479b"
integrity sha512-EykJT/Q1KjTWctppgIAgfSO0tKVuZUjhgMr17kqTumMl6Afv3EISleU7qZUzoXDFTAHTDC4NOoG/ZxU3EvlMPQ==

has-hover@^1.0.1:
version "1.0.1"
resolved "https://registry.npmjs.org/has-hover/-/has-hover-1.0.1.tgz#3d97437aeb199c62b8ac08acbdc53d3bc52c17f7"
Expand Down Expand Up @@ -6932,6 +6955,11 @@ is-directory@^0.3.1:
resolved "https://registry.yarnpkg.com/is-directory/-/is-directory-0.3.1.tgz#61339b6f2475fc772fd9c9d83f5c8575dc154ae1"
integrity sha1-YTObbyR1/Hcv2cnYP1yFddwVSuE=

is-docker@^2.0.0:
version "2.0.0"
resolved "https://registry.npmjs.org/is-docker/-/is-docker-2.0.0.tgz#2cb0df0e75e2d064fe1864c37cdeacb7b2dcf25b"
integrity sha512-pJEdRugimx4fBMra5z2/5iRdZ63OhYV0vr0Dwm5+xtW4D1FvRkB8hamMIhnWfyJeDdyr/aa7BDyNbtG38VxgoQ==

is-extendable@^0.1.0, is-extendable@^0.1.1:
version "0.1.1"
resolved "https://registry.yarnpkg.com/is-extendable/-/is-extendable-0.1.1.tgz#62b110e289a471418e3ec36a617d472e301dfc89"
Expand Down Expand Up @@ -7131,6 +7159,11 @@ is-wsl@^1.1.0:
resolved "https://registry.yarnpkg.com/is-wsl/-/is-wsl-1.1.0.tgz#1f16e4aa22b04d1336b66188a66af3c600c3a66d"
integrity sha1-HxbkqiKwTRM2tmGIpmrzxgDDpm0=

is-wsl@^2.1.1:
version "2.1.1"
resolved "https://registry.npmjs.org/is-wsl/-/is-wsl-2.1.1.tgz#4a1c152d429df3d441669498e2486d3596ebaf1d"
integrity sha512-umZHcSrwlDHo2TGMXv0DZ8dIUGunZ2Iv68YZnrmCiBPkZ4aaOhtv7pXJKeki9k3qJ3RJr0cDyitcl5wEH3AYog==

[email protected]:
version "0.0.1"
resolved "https://registry.npmjs.org/isarray/-/isarray-0.0.1.tgz#8a18acfca9a8f4177e09abfc6038939b05d1eedf"
Expand Down Expand Up @@ -8932,6 +8965,14 @@ open@^6.3.0:
dependencies:
is-wsl "^1.1.0"

open@^7.0.2:
version "7.0.2"
resolved "https://registry.npmjs.org/open/-/open-7.0.2.tgz#fb3681f11f157f2361d2392307548ca1792960e8"
integrity sha512-70E/pFTPr7nZ9nLDPNTcj3IVqnNvKuP4VsBmoKV9YGTnChe0mlS3C4qM7qKarhZ8rGaHKLfo+vBTHXDp6ZSyLQ==
dependencies:
is-docker "^2.0.0"
is-wsl "^2.1.1"

opn@^5.1.0:
version "5.5.0"
resolved "https://registry.yarnpkg.com/opn/-/opn-5.5.0.tgz#fc7164fab56d235904c51c3b27da6758ca3b9bfc"
Expand Down Expand Up @@ -11124,7 +11165,7 @@ right-now@^1.0.0:
resolved "https://registry.npmjs.org/right-now/-/right-now-1.0.0.tgz#6e89609deebd7dcdaf8daecc9aea39cf585a0918"
integrity sha1-bolgne69fc2vja7Mmuo5z1haCRg=

[email protected]:
[email protected], rimraf@~2.6.2:
version "2.6.3"
resolved "https://registry.yarnpkg.com/rimraf/-/rimraf-2.6.3.tgz#b2d104fe0d8fb27cf9e0a1cda8262dd3833c6cab"
integrity sha512-mwqeW5XsA2qAejG46gYdENaxXjx9onRNCfn7L0duuP4hCuTIi/QO7PDK07KJfp1d+izWPrzEJDcSqBa0OZQriA==
Expand Down Expand Up @@ -11696,6 +11737,24 @@ source-list-map@^2.0.0:
resolved "https://registry.yarnpkg.com/source-list-map/-/source-list-map-2.0.1.tgz#3993bd873bfc48479cca9ea3a547835c7c154b34"
integrity sha512-qnQ7gVMxGNxsiL4lEuJwe/To8UnK7fAnmbGEEH8RpLouuKbeEm0lhbQVFIrNSuB+G7tVrAlVsZgETT5nljf+Iw==

source-map-explorer@^2.3.1:
version "2.3.1"
resolved "https://registry.npmjs.org/source-map-explorer/-/source-map-explorer-2.3.1.tgz#d91615a19ad1f4e08d05616bee6e30ddb770ae70"
integrity sha512-l3WQUCwaqia5x7EBnNp4GYwhXnROMz3NqKM2QMwQ3ADgjekp+enP+PHkjjbjoVX6WJ2G5mbvM6TjeE/q7fnIFw==
dependencies:
btoa "^1.2.1"
chalk "^3.0.0"
convert-source-map "^1.7.0"
ejs "^3.0.1"
escape-html "^1.0.3"
glob "^7.1.6"
gzip-size "^5.1.1"
lodash "^4.17.15"
open "^7.0.2"
source-map "^0.7.3"
temp "^0.9.1"
yargs "^15.1.0"

source-map-resolve@^0.5.0, source-map-resolve@^0.5.2:
version "0.5.3"
resolved "https://registry.yarnpkg.com/source-map-resolve/-/source-map-resolve-0.5.3.tgz#190866bece7553e1f8f267a2ee82c606b5509a1a"
Expand Down Expand Up @@ -11725,7 +11784,7 @@ [email protected], source-map@^0.6.0, source-map@^0.6.1, source-map@~0.6.0, sourc
resolved "https://registry.yarnpkg.com/source-map/-/source-map-0.6.1.tgz#74722af32e9614e9c287a8d0bbde48b5e2f1a263"
integrity sha512-UjgapumWlbMhkBgzT7Ykc5YXUT46F0iKu8SGXq0bcwP5dz/h0Plj6enJqjz1Zbq2l5WaqYnrVbwWOWMyF3F47g==

"source-map@>= 0.1.2":
"source-map@>= 0.1.2", source-map@^0.7.3:
version "0.7.3"
resolved "https://registry.npmjs.org/source-map/-/source-map-0.7.3.tgz#5302f8169031735226544092e64981f751750383"
integrity sha512-CkCj6giN3S+n9qrYiBTX5gystlENnRW5jZeNLHpe6aue+SrHcG5VYwujhW9s4dY31mEGsxBDrHR6oI69fTXsaQ==
Expand Down Expand Up @@ -12174,6 +12233,13 @@ supports-color@^6.1.0:
dependencies:
has-flag "^3.0.0"

supports-color@^7.1.0:
version "7.1.0"
resolved "https://registry.npmjs.org/supports-color/-/supports-color-7.1.0.tgz#68e32591df73e25ad1c4b49108a2ec507962bfd1"
integrity sha512-oRSIpR8pxT1Wr2FquTNnGet79b3BWljqOuoW/h4oBhxJ/HUbX5nX6JSruTkvXDCFMwDPvsaTTbvMLKZWSy0R5g==
dependencies:
has-flag "^4.0.0"

surface-nets@^1.0.0, surface-nets@^1.0.2:
version "1.0.2"
resolved "https://registry.npmjs.org/surface-nets/-/surface-nets-1.0.2.tgz#e433c8cbba94a7274c6f4c99552b461bf1fc7a4b"
Expand Down Expand Up @@ -12274,6 +12340,13 @@ tape@^4.0.0:
string.prototype.trim "~1.2.1"
through "~2.3.8"

temp@^0.9.1:
version "0.9.1"
resolved "https://registry.npmjs.org/temp/-/temp-0.9.1.tgz#2d666114fafa26966cd4065996d7ceedd4dd4697"
integrity sha512-WMuOgiua1xb5R56lE0eH6ivpVmg/lq2OHm4+LtT/xtEtPQ+sz6N3bBM6WZ5FvO1lO4IKIOb43qnhoc4qxP5OeA==
dependencies:
rimraf "~2.6.2"

[email protected]:
version "1.4.1"
resolved "https://registry.yarnpkg.com/terser-webpack-plugin/-/terser-webpack-plugin-1.4.1.tgz#61b18e40eaee5be97e771cdbb10ed1280888c2b4"
Expand Down Expand Up @@ -13929,6 +14002,23 @@ yargs@^13.3.0:
y18n "^4.0.0"
yargs-parser "^13.1.1"

yargs@^15.1.0:
version "15.1.0"
resolved "https://registry.npmjs.org/yargs/-/yargs-15.1.0.tgz#e111381f5830e863a89550bd4b136bb6a5f37219"
integrity sha512-T39FNN1b6hCW4SOIk1XyTOWxtXdcen0t+XYrysQmChzSipvhBO8Bj0nK1ozAasdk24dNWuMZvr4k24nz+8HHLg==
dependencies:
cliui "^6.0.0"
decamelize "^1.2.0"
find-up "^4.1.0"
get-caller-file "^2.0.1"
require-directory "^2.1.1"
require-main-filename "^2.0.0"
set-blocking "^2.0.0"
string-width "^4.2.0"
which-module "^2.0.0"
y18n "^4.0.0"
yargs-parser "^16.1.0"

yargs@~15.0.2:
version "15.0.2"
resolved "https://registry.yarnpkg.com/yargs/-/yargs-15.0.2.tgz#4248bf218ef050385c4f7e14ebdf425653d13bd3"
Expand Down