diff --git a/.travis.yml b/.travis.yml
old mode 100644
new mode 100755
diff --git a/DEVELOPER.md b/DEVELOPER.md
old mode 100644
new mode 100755
index 9aaf081..0114793
--- a/DEVELOPER.md
+++ b/DEVELOPER.md
@@ -31,7 +31,9 @@ Your new resume will be now reachable at localhost:8080/#/resume/TEMPLATE-NAME.
-4. Generate previews with `npm run preview`. PDF- and PNG-files will be generated.
+5. Export resumes as PDF with `npm run export`. Verify export of new template.
+
+4. Generate previews by converting PDF-files to PNG-files with `npm run preview`.
5. Add preview to `/src/pages/home.vue`:
```javascript
@@ -73,7 +75,7 @@ All fonts are installed via npm. To add a new font, search for the associated np
## Export
-Resumes are being exported with [Electroshot](https://github.com/mixu/electroshot).
+Resumes are being exported with [Puppeteer](https://github.com/GoogleChrome/puppeteer).
### Box Shadows
diff --git a/ISSUE_TEMPLATE.md b/ISSUE_TEMPLATE.md
old mode 100644
new mode 100755
diff --git a/LICENCE.md b/LICENCE.md
old mode 100644
new mode 100755
diff --git a/PULL_REQUEST_TEMPLATE.md b/PULL_REQUEST_TEMPLATE.md
old mode 100644
new mode 100755
diff --git a/README.md b/README.md
index e5ea50d..0823bab 100755
--- a/README.md
+++ b/README.md
@@ -68,8 +68,8 @@ Feel free to add your own templates, language supports, fix bugs or improve the
This project uses several open source packages:
* Vue
+* Puppeteer
* LESS
-* Electroshot
diff --git a/build/webpack.prod.conf.js b/build/webpack.prod.conf.js
old mode 100644
new mode 100755
diff --git a/node/app.js b/node/app.js
index 9f29df1..d78bcee 100755
--- a/node/app.js
+++ b/node/app.js
@@ -1,7 +1,8 @@
+const puppeteer = require('puppeteer');
const fs = require('fs');
const path = require('path');
-const exec = require('child_process').exec;
const Rx = require('rxjs/Rx');
+const isRoot = require('is-root');
const http = require('http');
const fetchResponse = () => {
@@ -36,26 +37,28 @@ const timedOut = timeout => {
};
const convert = async() => {
+ if(isRoot()) {
+ console.log('ERROR: Please run this without root (admin) permissions.');
+ return;
+ }
await waitForServerReachable().first().toPromise();
console.log('Connected to server ...');
console.log('Exporting ...');
try {
const directories = getResumesFromDirectories();
- const scripts = directories.map(resume => electroshotScript(resume.path));
- await execBash(scripts.join(' && '));
+ directories.forEach(async(dir) => {
+ const browser = await puppeteer.launch();
+ const page = await browser.newPage();
+ await page.goto('http://localhost:8080/#/resume/' + dir.name, {waitUntil: 'networkidle'});
+ await page.pdf({path: path.join(__dirname, '../pdf/' + dir.name + '.pdf'), format: 'A4'});
+ await browser.close();
+ });
} catch (err) {
throw new Error(err);
}
console.log('Finished exports.');
};
-const electroshotScript = resume => {
- const dir = path.join(__dirname, '../pdf');
- return 'electroshot localhost:8080/#/resume/' + resume +
- ' 2481x3508 --pdf-margin none --format pdf --out ' + dir +
- ' --filename "' + resume + '.pdf" --pdf-background';
-};
-
const getResumesFromDirectories = () => {
const directories = getDirectories();
return directories
@@ -74,14 +77,4 @@ const getDirectories = () => {
.filter(file => file !== 'resumes.js' && file !== 'template.vue');
};
-const execBash = script => {
- return new Promise((resolve, reject) => {
- exec(script,
- error => {
- if (error) reject(error);
- else resolve();
- });
- });
-};
-
convert();
diff --git a/node/preview.js b/node/preview.js
old mode 100644
new mode 100755
diff --git a/package.json b/package.json
index 85955ea..7b27db5 100755
--- a/package.json
+++ b/package.json
@@ -13,7 +13,7 @@
"build": "node build/build.js",
"start": "node build/dev-server.js",
"pdf": "node node/app.js",
- "preview": "npm run export && node node/preview.js",
+ "preview": "node node/preview.js",
"template": "node node/template/template.js",
"export": "concurrently \"npm run dev\" \"npm run pdf\" --success first --kill-others --raw",
"lint": "eslint --ext .js,.vue src test/unit/specs test/e2e/specs"
@@ -46,7 +46,6 @@
"copy-webpack-plugin": "^4.0.1",
"cpx": "^1.5.0",
"css-loader": "^0.28.0",
- "electroshot": "^1.4.0",
"eslint": "^4.6.1",
"eslint-config-standard": "^10.2.1",
"eslint-friendly-formatter": "^3.0.0",
@@ -64,6 +63,7 @@
"html-webpack-plugin": "^2.30.1",
"http": "0.0.0",
"http-proxy-middleware": "^0.17.3",
+ "is-root": "^1.0.0",
"less": "^2.7.2",
"less-loader": "^4.0.5",
"lolex": "^1.5.2",
@@ -74,6 +74,7 @@
"pdf-image": "^1.1.0",
"postcss": "^6.0.11",
"postcss-cssnext": "^2.11.0",
+ "puppeteer": "^0.12.0",
"rename": "^1.0.4",
"request": "^2.81.0",
"request-promise": "^4.2.1",
@@ -94,7 +95,7 @@
"webpack-merge": "^4.1.0"
},
"engines": {
- "node": ">= 7.4.0",
+ "node": ">= 8.0.0",
"npm": ">= 5.0.0"
}
}
diff --git a/pdf/left-right.pdf b/pdf/left-right.pdf
index 1632cdd..d6855e2 100644
Binary files a/pdf/left-right.pdf and b/pdf/left-right.pdf differ
diff --git a/pdf/material-dark.pdf b/pdf/material-dark.pdf
index d8a6689..27b3db0 100644
Binary files a/pdf/material-dark.pdf and b/pdf/material-dark.pdf differ
diff --git a/pdf/oblique.pdf b/pdf/oblique.pdf
index 9f3dbe7..4569fdf 100644
Binary files a/pdf/oblique.pdf and b/pdf/oblique.pdf differ
diff --git a/pdf/purple.pdf b/pdf/purple.pdf
index bf4b824..f98b3a6 100644
Binary files a/pdf/purple.pdf and b/pdf/purple.pdf differ
diff --git a/pdf/side-bar-rtl.pdf b/pdf/side-bar-rtl.pdf
index ced0b38..df2a4fb 100644
Binary files a/pdf/side-bar-rtl.pdf and b/pdf/side-bar-rtl.pdf differ
diff --git a/pdf/side-bar.pdf b/pdf/side-bar.pdf
index ed810f3..0a2b5ce 100644
Binary files a/pdf/side-bar.pdf and b/pdf/side-bar.pdf differ
diff --git a/src/assets/logo.png b/src/assets/logo.png
old mode 100644
new mode 100755
diff --git a/src/assets/preview/resume-left-right.png b/src/assets/preview/resume-left-right.png
index fd43f21..940e3fd 100644
Binary files a/src/assets/preview/resume-left-right.png and b/src/assets/preview/resume-left-right.png differ
diff --git a/src/assets/preview/resume-material-dark.png b/src/assets/preview/resume-material-dark.png
index 09c7300..529829d 100644
Binary files a/src/assets/preview/resume-material-dark.png and b/src/assets/preview/resume-material-dark.png differ
diff --git a/src/assets/preview/resume-oblique.png b/src/assets/preview/resume-oblique.png
index 06bd610..48aebaa 100644
Binary files a/src/assets/preview/resume-oblique.png and b/src/assets/preview/resume-oblique.png differ
diff --git a/src/assets/preview/resume-purple.png b/src/assets/preview/resume-purple.png
index af77c18..406ff0a 100644
Binary files a/src/assets/preview/resume-purple.png and b/src/assets/preview/resume-purple.png differ
diff --git a/src/assets/preview/resume-side-bar-rtl.png b/src/assets/preview/resume-side-bar-rtl.png
index 31088a5..a074b4b 100644
Binary files a/src/assets/preview/resume-side-bar-rtl.png and b/src/assets/preview/resume-side-bar-rtl.png differ
diff --git a/src/assets/preview/resume-side-bar.png b/src/assets/preview/resume-side-bar.png
index d838249..96376f3 100644
Binary files a/src/assets/preview/resume-side-bar.png and b/src/assets/preview/resume-side-bar.png differ
diff --git a/src/assets/profile-images/girl.png b/src/assets/profile-images/girl.png
old mode 100644
new mode 100755
diff --git a/src/assets/profile-images/guy.png b/src/assets/profile-images/guy.png
old mode 100644
new mode 100755
diff --git a/src/lang/cn.js b/src/lang/cn.js
old mode 100644
new mode 100755
diff --git a/src/lang/de.js b/src/lang/de.js
old mode 100644
new mode 100755
diff --git a/src/lang/en.js b/src/lang/en.js
old mode 100644
new mode 100755
diff --git a/src/lang/es.js b/src/lang/es.js
old mode 100644
new mode 100755
diff --git a/src/lang/fr.js b/src/lang/fr.js
old mode 100644
new mode 100755
diff --git a/src/lang/he.js b/src/lang/he.js
old mode 100644
new mode 100755
diff --git a/src/lang/hu.js b/src/lang/hu.js
old mode 100644
new mode 100755
diff --git a/src/lang/id.js b/src/lang/id.js
old mode 100644
new mode 100755
diff --git a/src/lang/it.js b/src/lang/it.js
old mode 100644
new mode 100755
diff --git a/src/lang/ja.js b/src/lang/ja.js
old mode 100644
new mode 100755
diff --git a/src/lang/nl.js b/src/lang/nl.js
old mode 100644
new mode 100755
diff --git a/src/lang/pl.js b/src/lang/pl.js
old mode 100644
new mode 100755
diff --git a/src/lang/pt-br.js b/src/lang/pt-br.js
old mode 100644
new mode 100755
diff --git a/src/lang/pt.js b/src/lang/pt.js
old mode 100644
new mode 100755
diff --git a/src/lang/ru.js b/src/lang/ru.js
old mode 100644
new mode 100755
diff --git a/src/lang/sv.js b/src/lang/sv.js
old mode 100644
new mode 100755
diff --git a/src/lang/th.js b/src/lang/th.js
old mode 100644
new mode 100755
diff --git a/src/pages/chromeShadowFixer.js b/src/pages/chromeShadowFixer.js
deleted file mode 100644
index ea74e73..0000000
--- a/src/pages/chromeShadowFixer.js
+++ /dev/null
@@ -1,49 +0,0 @@
-
-const getElements = elements => {
- if (elements && elements.length > 0) return elements;
- elements = document.getElementsByTagName('*');
- let ret = [];
- for (const element of elements) {
- const style = window.getComputedStyle(element, null).getPropertyValue('box-shadow');
- if (style !== 'none') {
- element.style.boxShadow = 'none';
- ret.push({
- shadow: style,
- top: element.offsetTop + 'px',
- left: element.offsetLeft + 'px',
- width: element.getBoundingClientRect().width + 'px',
- height: element.getBoundingClientRect().height + 'px'
- });
- }
- }
- return ret;
-};
-
-const generateElements = elements => {
- let ret = '