This repository was archived by the owner on Feb 13, 2024. It is now read-only.
-
Notifications
You must be signed in to change notification settings - Fork 0
Expand file tree
/
Copy pathindex.js
More file actions
71 lines (47 loc) · 2.78 KB
/
Copy pathindex.js
File metadata and controls
71 lines (47 loc) · 2.78 KB
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
const express = require('express');
const fs = require("fs");
const app = express()
const cors = require("cors");
const port = 3030
app.use(cors());
app.get('/component/:componentId', (req, res) => {
const componentId = req.params.componentId;
const randomId = Math.floor(Math.random() * 1000000);
// Todo: Fetch component from database
// Todo: Fetch component configuration
// Todo: Fetch component javascript
const componentJs = './components_dist/ideas-overview.js';
// Todo: Fetch component css
const componentCss = './components_dist/css/ideas-overview_minified.css';
// Combine component configuration, javascript and css w/ React if necessary
const reactJs = './react_dist/react@17.0.2.production.min.js';
const reactDomJs = './react_dist/react-dom@17.0.2.production.min.js';
let output = "";
[reactJs, reactDomJs, componentJs].forEach((file) => {
output += fs.readFileSync(file, 'utf8');
});
let css = fs.readFileSync(componentCss, 'utf8');
css = css.replaceAll('url(../images/', `url(http://localhost:${port}/components_dist/images/`);
const componentClass = `osc-component-${componentId}-${randomId}`;
// Create function to render component
output += `
const currentScript = document.currentScript;
window.addEventListener('load', function (e) {
currentScript.insertAdjacentHTML('afterend', \`<div class="${componentClass}"></div>\`);
document.querySelector('head').innerHTML += \`<style>${css}</style>\`;
const params = new Proxy(new URLSearchParams(window.location.search), {get: (searchParams, prop) => searchParams.get(prop)});
let config = {
"title": "Plannen", "display": {"columns": 2}, "id": "test12", "divId": "${componentId}", "user": {"fullName": "Hardcoded Username", "role": "admin"}, "api": {"isUserLoggedIn": true, "url": "https://api.openstad.nlsvgtr.nl", "headers": {"X-Authorization": '123'}}, "siteId": 416, "editIdeaLink": "javascript: alert('Hier moet dus een zinnige link staan')", "afterDeleteIdeaLink": "javascript: alert('Hier moet dus een zinnige link staan')", image: {allowMultipleImages: true,}, vote: {isViewable: true, isActive: true, requiredUserRole: "anonymous", voteType: "likes", voteValues: [{label: "voor", value: "yes"}, {label: "tegen", value: "no"}]},
};
let element = document.querySelector('.${componentClass}');
OpenStadComponents['ideas-overview'].IdeasOverview.renderElement(element, config);
currentScript.remove();
});
`;
res.header("Content-Type", "application/javascript");
res.send(output);
});
app.use('/components_dist', express.static(__dirname + '/components_dist'));
app.listen(port, () => {
console.log(`Listening at http://localhost:${port}`)
});