Skip to content

Commit 6edd547

Browse files
authored
Merge pull request #1690 from vulongphan/fix/cant-see-shaders-code
Fix/cant see shaders code
2 parents 0c28d98 + a13e6ec commit 6edd547

File tree

1 file changed

+90
-40
lines changed

1 file changed

+90
-40
lines changed

server/scripts/examples.js

Lines changed: 90 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,7 @@ import User from '../models/user';
88
import Project from '../models/project';
99

1010
const defaultHTML =
11-
`<!DOCTYPE html>
11+
`<!DOCTYPE html>
1212
<html lang="en">
1313
<head>
1414
<script src="https://cdnjs.cloudflare.com/ajax/libs/p5.js/1.1.9/p5.js"></script>
@@ -23,7 +23,7 @@ const defaultHTML =
2323
`;
2424

2525
const defaultCSS =
26-
`html, body {
26+
`html, body {
2727
margin: 0;
2828
padding: 0;
2929
}
@@ -140,6 +140,91 @@ function getSketchContent(projectsInAllCategories) {
140140
}))));
141141
}
142142

143+
async function addAssetsToProject(assets, response, project) {
144+
/* eslint-disable no-await-in-loop */
145+
for (let i = 0; i < assets.length; i += 1) { // iterate through each asset in the project in series (async/await functionality would not work with forEach() )
146+
const assetNamePath = assets[i];
147+
let assetName = assetNamePath.split('assets/')[1];
148+
let assetUrl = '';
149+
let assetContent = '';
150+
151+
response.forEach((asset) => {
152+
if (asset.name === assetName || asset.name.split('.')[0] === assetName) {
153+
assetName = asset.name;
154+
assetUrl = asset.download_url;
155+
}
156+
});
157+
158+
if (assetName !== '') {
159+
if (i === 0) {
160+
const id = objectID().toHexString();
161+
project.files.push({
162+
name: 'assets',
163+
id,
164+
_id: id,
165+
children: [],
166+
fileType: 'folder'
167+
});
168+
// add assets folder inside root
169+
project.files[0].children.push(id);
170+
}
171+
172+
const fileID = objectID().toHexString();
173+
174+
if (assetName.slice(-5) === '.vert' || assetName.slice(-5) === '.frag') { // check if the file has .vert or .frag extension
175+
const assetOptions = {
176+
url: assetUrl,
177+
method: 'GET',
178+
headers: {
179+
...headers,
180+
Authorization: `Basic ${Buffer.from(`${clientId}:${clientSecret}`).toString('base64')}`
181+
},
182+
json: true
183+
};
184+
185+
// a function to await for the response that contains the content of asset file
186+
const doRequest = function (optionsAsset) {
187+
return new Promise(((resolve, reject) => {
188+
rp(optionsAsset).then((res) => {
189+
resolve(res);
190+
}).catch((err) => {
191+
reject(err);
192+
});
193+
}));
194+
};
195+
196+
assetContent = await doRequest(assetOptions);
197+
// push to the files array of the project only when response is received
198+
project.files.push({
199+
name: assetName,
200+
content: assetContent,
201+
id: fileID,
202+
_id: fileID,
203+
children: [],
204+
fileType: 'file'
205+
});
206+
console.log(`create assets: ${assetName}`);
207+
// add asset file inside the newly created assets folder at index 4
208+
project.files[4].children.push(fileID);
209+
} else { // for assets files that are not .vert or .frag extension
210+
project.files.push({
211+
name: assetName,
212+
url: `https://cdn.jsdelivr.net/gh/processing/p5.js-website@main/src/data/examples/assets/${assetName}`,
213+
id: fileID,
214+
_id: fileID,
215+
children: [],
216+
fileType: 'file'
217+
});
218+
console.log(`create assets: ${assetName}`);
219+
// add asset file inside the newly created assets folder at index 4
220+
project.files[4].children.push(fileID);
221+
}
222+
}
223+
}
224+
/* eslint-disable no-await-in-loop */
225+
}
226+
227+
143228
function createProjectsInP5user(projectsInAllCategories) {
144229
const options = {
145230
url: 'https://api.github.com/repos/processing/p5.js-website/contents/src/data/examples/assets',
@@ -156,7 +241,7 @@ function createProjectsInP5user(projectsInAllCategories) {
156241
if (err) throw err;
157242

158243
eachSeries(projectsInAllCategories, (projectsInOneCategory, categoryCallback) => {
159-
eachSeries(projectsInOneCategory, (project, projectCallback) => {
244+
eachSeries(projectsInOneCategory, async (project, projectCallback) => {
160245
let newProject;
161246
const a = objectID().toHexString();
162247
const b = objectID().toHexString();
@@ -248,43 +333,7 @@ function createProjectsInP5user(projectsInAllCategories) {
248333
const assetsInProject = project.sketchContent.match(/assets\/[\w-]+\.[\w]*/g)
249334
|| project.sketchContent.match(/asset\/[\w-]*/g) || [];
250335

251-
assetsInProject.forEach((assetNamePath, i) => {
252-
let assetName = assetNamePath.split('assets/')[1];
253-
254-
res.forEach((asset) => {
255-
if (asset.name === assetName || asset.name.split('.')[0] === assetName) {
256-
assetName = asset.name;
257-
}
258-
});
259-
260-
if (assetName !== '') {
261-
if (i === 0) {
262-
const id = objectID().toHexString();
263-
newProject.files.push({
264-
name: 'assets',
265-
id,
266-
_id: id,
267-
children: [],
268-
fileType: 'folder'
269-
});
270-
// add assets folder inside root
271-
newProject.files[0].children.push(id);
272-
}
273-
274-
const fileID = objectID().toHexString();
275-
newProject.files.push({
276-
name: assetName,
277-
url: `https://cdn.jsdelivr.net/gh/processing/p5.js-website@main/src/data/examples/assets/${assetName}`,
278-
id: fileID,
279-
_id: fileID,
280-
children: [],
281-
fileType: 'file'
282-
});
283-
console.log(`create assets: ${assetName}`);
284-
// add asset file inside the newly created assets folder at index 4
285-
newProject.files[4].children.push(fileID);
286-
}
287-
});
336+
await addAssetsToProject(assetsInProject, res, newProject);
288337

289338
newProject.save((saveErr, savedProject) => {
290339
if (saveErr) throw saveErr;
@@ -304,6 +353,7 @@ function createProjectsInP5user(projectsInAllCategories) {
304353
}
305354

306355
function getp5User() {
356+
console.log('Getting p5 user');
307357
User.findOne({ username: 'p5' }, (err, user) => {
308358
if (err) throw err;
309359

0 commit comments

Comments
 (0)