Skip to content

Commit f7f254f

Browse files
committed
Added datafiles
1 parent de2ae90 commit f7f254f

File tree

7 files changed

+52
-12
lines changed

7 files changed

+52
-12
lines changed
Loading
Loading

scripts/updateExamples.js

Lines changed: 5 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -76,6 +76,7 @@ const updateExamples = async () => {
7676
cwd: path.join(from, example.dirname)
7777
});
7878

79+
7980
for (let i = 0; i < pdes.length; i++) {
8081
const pde = pdes[i];
8182
fs.copySync(
@@ -91,6 +92,10 @@ const updateExamples = async () => {
9192

9293
for (let i = 0; i < dataFiles.length; i++) {
9394
const dataFile = dataFiles[i];
95+
fs.copySync(
96+
path.join(from, example.dirname, dataFile),
97+
path.join(to, example.dirname, dataFile)
98+
)
9499
fs.copySync(
95100
path.join(from, example.dirname, dataFile),
96101
path.join(

src/components/OpenWithButton.js

Lines changed: 18 additions & 9 deletions
Original file line numberDiff line numberDiff line change
@@ -1,20 +1,29 @@
1-
import React, { useState } from 'react';
1+
import React, { useState, useEffect } from 'react';
22
import classnames from 'classnames';
33

44
import ProcessingIcon from '../images/logo-processing.svg';
55

66
import * as css from './OpenWithButton.module.css';
77

8-
const OpenWithButton = ({ pdes }) => {
8+
const OpenWithButton = ({ pdes, dataFiles }) => {
99
const main = pdes[0]
10-
let sketchURL = `pde://sketch/base64/${stringToBase64(main.code)}?pde=`
11-
for (let pde of pdes) {
12-
if (pde === main) continue
13-
sketchURL += `${pde.name}:${stringToBase64(pde.code)},`
14-
}
10+
const [sketchURL, setSketchURL] = useState(`processing://open?sketch=${stringToBase64(main.code)}`)
11+
12+
useEffect(() => {
13+
let sketchURL = `pde://sketch/base64/${stringToBase64(main.code)}?pde=`
14+
for (let pde of pdes) {
15+
if (pde === main) continue
16+
sketchURL += `${pde.name}:${stringToBase64(pde.code)},`
17+
}
18+
if (dataFiles.length > 0) {
19+
let data = '&data=' + dataFiles.map(file => file.relativePath.split('/').pop() + ":" + window.location.protocol + "//" + window.location.host + file.publicURL).join(',')
20+
sketchURL += data
21+
}
22+
setSketchURL(sketchURL)
23+
}, [])
1524
const [showInstructions, setShowInstructions] = useState(false)
1625

17-
React.useEffect(() => {
26+
useEffect(() => {
1827
const handleClickOutside = (event) => {
1928
if (showInstructions && !event.target.closest(`.${css.root}`)) {
2029
setShowInstructions(false);
@@ -36,7 +45,7 @@ const OpenWithButton = ({ pdes }) => {
3645
{showInstructions && (
3746
<div className={classnames(css.instructions)}>
3847
<h1>Opening Processing<span className={css.ellipsis}></span></h1>
39-
<p>If nothing happens, <a href="https://www.processing.org/download/" target="_black" className={css.downloadLink}>Download Processing</a> version 4.4.1 or later and try again.</p>
48+
<p>If nothing happens, <a href="https://www.processing.org/download/" target="_black">Download Processing</a> version 4.4.1 or later and try again.</p>
4049
<p className={classnames(css.tooltipFootnote)}>Make sure Processing is installed and was opened at least once.</p>
4150
</div>
4251
)}

src/components/Tabs.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -10,7 +10,7 @@ import { escapeHtml } from '../utils';
1010

1111
import * as css from './Tabs.module.css';
1212

13-
const Tabs = ({ pdes, className }) => {
13+
const Tabs = ({ pdes, className, dataFiles }) => {
1414
const [active, setActive] = useState(pdes[0].name);
1515

1616
useHighlight();
@@ -43,7 +43,7 @@ const Tabs = ({ pdes, className }) => {
4343
key={key}>
4444
<div className={css.actions}>
4545
<CopyButton text={pde.code} />
46-
<OpenWithButton pdes={pdes} />
46+
<OpenWithButton pdes={pdes} dataFiles={dataFiles} />
4747
</div>
4848
<pre className={css.codeBlock}>
4949
<code

src/hooks/examples/data.js

Lines changed: 23 additions & 0 deletions
Original file line numberDiff line numberDiff line change
@@ -0,0 +1,23 @@
1+
import { useStaticQuery, graphql } from "gatsby"
2+
3+
export const useExampleDataFiles = (sketchName) => {
4+
const data = useStaticQuery(
5+
graphql`
6+
query GetExampleDataFiles {
7+
allFile(
8+
filter: {sourceInstanceName: {eq: "examples"}, name: {}, relativePath: {regex: "/data/"}}
9+
) {
10+
edges {
11+
node {
12+
relativePath
13+
publicURL
14+
}
15+
}
16+
}
17+
}`
18+
)
19+
return data.allFile.edges
20+
.map((edge) => edge.node)
21+
.filter(node => node.relativePath.includes(sketchName))
22+
;
23+
}

src/templates/examples/example.js

Lines changed: 4 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -22,10 +22,12 @@ import {
2222
useRelatedExamples,
2323
useTrail
2424
} from '../../hooks/examples';
25+
import { useExampleDataFiles } from '../../hooks/examples/data';
2526

2627
import * as css from '../../styles/templates/examples/example.module.css';
2728
import * as grid from '../../styles/grid.module.css';
2829

30+
2931
const ExampleTemplate = ({ data, pageContext }) => {
3032
const [showSidebar, setShowSidebar] = useSidebar('examples');
3133
const intl = useIntl();
@@ -35,6 +37,7 @@ const ExampleTemplate = ({ data, pageContext }) => {
3537
const { image, allExamples, relatedImages, liveSketch } = data;
3638

3739
const example = usePreparedExample(data.example);
40+
const dataFiles = useExampleDataFiles(name)
3841
const pdes = usePdes(data.pdes.nodes, locale, name);
3942
const examples = usePreparedExamples(allExamples.nodes, relatedImages.nodes);
4043
const tree = useTree(examples);
@@ -117,7 +120,7 @@ const ExampleTemplate = ({ data, pageContext }) => {
117120
/>
118121
)}
119122
</div>
120-
<Tabs pdes={pdes} />
123+
<Tabs pdes={pdes} dataFiles={dataFiles} />
121124
<RelatedExamples
122125
examples={relatedExamples}
123126
heading={intl.formatMessage({ id: 'relatedExamples' })}

0 commit comments

Comments
 (0)