Skip to content

Commit 3f42056

Browse files
authored
Merge pull request #1896 from processing/bug/embed-sketches-slug
[#1893] Enable slug urls for embed sketches
2 parents 14b5ca7 + 7c7028c commit 3f42056

File tree

3 files changed

+58
-48
lines changed

3 files changed

+58
-48
lines changed

server/controllers/embed.controller.js

Lines changed: 31 additions & 26 deletions
Original file line numberDiff line numberDiff line change
@@ -9,36 +9,41 @@ import {
99
import { get404Sketch } from '../views/404Page';
1010

1111
export function serveProject(req, res) {
12-
Project.findById(req.params.project_id).exec((err, project) => {
13-
if (err || !project) {
14-
get404Sketch((html) => res.send(html));
15-
return;
16-
}
17-
// TODO this does not parse html
18-
const { files } = project;
19-
const htmlFile = files.find((file) => file.name.match(/\.html$/i)).content;
20-
const filesToInject = files.filter((file) =>
21-
file.name.match(/\.(js|css)$/i)
22-
);
23-
injectMediaUrls(filesToInject, files, req.params.project_id);
12+
const projectId = req.params.project_id;
13+
Project.findOne(
14+
{ $or: [{ _id: projectId }, { slug: projectId }] },
15+
(err, project) => {
16+
if (err || !project) {
17+
get404Sketch((html) => res.send(html));
18+
return;
19+
}
20+
// TODO this does not parse html
21+
const { files } = project;
22+
const htmlFile = files.find((file) => file.name.match(/\.html$/i))
23+
.content;
24+
const filesToInject = files.filter((file) =>
25+
file.name.match(/\.(js|css)$/i)
26+
);
27+
injectMediaUrls(filesToInject, files, req.params.project_id);
2428

25-
jsdom.env(htmlFile, (innerErr, window) => {
26-
const sketchDoc = window.document;
29+
jsdom.env(htmlFile, (innerErr, window) => {
30+
const sketchDoc = window.document;
2731

28-
const base = sketchDoc.createElement('base');
29-
const fullUrl = `//${req.get('host')}${req.originalUrl}`;
30-
base.href = `${fullUrl}/`;
31-
sketchDoc.head.appendChild(base);
32+
const base = sketchDoc.createElement('base');
33+
const fullUrl = `//${req.get('host')}${req.originalUrl}`;
34+
base.href = `${fullUrl}/`;
35+
sketchDoc.head.appendChild(base);
3236

33-
resolvePathsForElementsWithAttribute('src', sketchDoc, files);
34-
resolvePathsForElementsWithAttribute('href', sketchDoc, files);
35-
resolveScripts(sketchDoc, files);
36-
resolveStyles(sketchDoc, files);
37+
resolvePathsForElementsWithAttribute('src', sketchDoc, files);
38+
resolvePathsForElementsWithAttribute('href', sketchDoc, files);
39+
resolveScripts(sketchDoc, files);
40+
resolveStyles(sketchDoc, files);
3741

38-
res.setHeader('Cache-Control', 'public, max-age=0');
39-
res.send(serializeDocument(sketchDoc));
40-
});
41-
});
42+
res.setHeader('Cache-Control', 'public, max-age=0');
43+
res.send(serializeDocument(sketchDoc));
44+
});
45+
}
46+
);
4247
}
4348

4449
export default serveProject;

server/controllers/file.controller.js

Lines changed: 25 additions & 21 deletions
Original file line numberDiff line numberDiff line change
@@ -141,26 +141,30 @@ export function deleteFile(req, res) {
141141
}
142142

143143
export function getFileContent(req, res) {
144-
Project.findById(req.params.project_id, (err, project) => {
145-
if (err || project === null) {
146-
res.status(404).send({
147-
success: false,
148-
message: 'Project with that id does not exist.'
149-
});
150-
return;
151-
}
152-
const filePath = req.params[0];
153-
const resolvedFile = resolvePathToFile(filePath, project.files);
154-
if (!resolvedFile) {
155-
res.status(404).send({
156-
success: false,
157-
message: 'File with that name and path does not exist.'
158-
});
159-
return;
144+
const projectId = req.params.project_id;
145+
Project.findOne(
146+
{ $or: [{ _id: projectId }, { slug: projectId }] },
147+
(err, project) => {
148+
if (err || project === null) {
149+
res.status(404).send({
150+
success: false,
151+
message: 'Project with that id does not exist.'
152+
});
153+
return;
154+
}
155+
const filePath = req.params[0];
156+
const resolvedFile = resolvePathToFile(filePath, project.files);
157+
if (!resolvedFile) {
158+
res.status(404).send({
159+
success: false,
160+
message: 'File with that name and path does not exist.'
161+
});
162+
return;
163+
}
164+
const contentType =
165+
mime.lookup(resolvedFile.name) || 'application/octet-stream';
166+
res.set('Content-Type', contentType);
167+
res.send(resolvedFile.content);
160168
}
161-
const contentType =
162-
mime.lookup(resolvedFile.name) || 'application/octet-stream';
163-
res.set('Content-Type', contentType);
164-
res.send(resolvedFile.content);
165-
});
169+
);
166170
}

server/controllers/project.controller.js

Lines changed: 2 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -123,7 +123,8 @@ export function getProjectsForUserId(userId) {
123123
}
124124

125125
export function getProjectAsset(req, res) {
126-
Project.findById(req.params.project_id)
126+
const projectId = req.params.project_id;
127+
Project.findOne({ $or: [{ _id: projectId }, { slug: projectId }] })
127128
.populate('user', 'username')
128129
.exec(async (err, project) => { // eslint-disable-line
129130
if (err) {

0 commit comments

Comments
 (0)