Index: gulpfile.js |
=================================================================== |
new file mode 100644 |
--- /dev/null |
+++ b/gulpfile.js |
@@ -0,0 +1,102 @@ |
+/*! |
+ * This file is part of eyeomail.com. |
+ * Copyright (C) 2017-present eyeo GmbH |
+ * |
+ * eyeomail.com is free software: you can redistribute it and/or modify |
+ * it under the terms of the GNU General Public License as published by |
+ * the Free Software Foundation, either version 3 of the License, or |
+ * (at your option) any later version. |
+ * |
+ * eyeomail.com is distributed in the hope that it will be useful, |
+ * but WITHOUT ANY WARRANTY; without even the implied warranty of |
+ * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the |
+ * GNU General Public License for more details. |
+ * |
+ * You should have received a copy of the GNU General Public License |
+ * along with eyeomail.com. If not, see <http://www.gnu.org/licenses/>. |
+ */ |
+ |
+const gulp = require("gulp"); |
+const gutil = require("gulp-util"); |
+const rename = require("gulp-rename"); |
+const sass = require("gulp-sass"); |
+const postcss = require("gulp-postcss"); |
+const scss = require("postcss-scss"); |
+const autoprefixer = require("autoprefixer"); |
+const replace = require("replace"); |
+const fs = require("fs"); |
+const readFilePromise = require("fs-readfile-promise"); |
+ |
+/****************************************************************************** |
+ * CSS |
+ ******************************************************************************/ |
+ |
+gulp.task("compileCss", function() { |
+ return gulp.src("./src/scss/main.scss") |
+ .pipe(postcss([autoprefixer()], {syntax: scss}).on("error", gutil.log)) |
+ .pipe(sass({outputStyle: "compact"}).on("error", gutil.log)) |
+ .pipe(gulp.dest("./dist")); |
+}); |
+ |
+gulp.task("inlineCss", ["compileCss", "moveTemplates"], function() { |
+ return fs.readFile("./dist/main.css", "utf8", function (err, styles) { |
+ if (err) throw err; |
+ |
+ const replacement = `<!-- styles:start --> |
+<style> |
+${styles} |
+</style> |
+<!-- styles:end -->`; |
+ |
+ replace({ |
+ regex: /<!-- styles:start -->([\s\S]*?)<!-- styles:end -->/, |
+ replacement: replacement, |
+ paths: ["dist/signup.html"], |
+ recursive: true, |
+ silent: true, |
+ }); |
+ }); |
+}); |
+ |
+gulp.task("css", ["inlineCss"]); |
+ |
+/****************************************************************************** |
+ * Template |
+ ******************************************************************************/ |
+ |
+gulp.task("moveTemplates", function() { |
+ const templateFiles = ["./src/templates/signup.html", |
+ "./src/templates/confirm-email.html", |
+ "./src/templates/subscription-confirmed-email.html"]; |
+ |
+ return gulp.src(templateFiles).pipe(gulp.dest("./dist")); |
+}); |
+ |
+gulp.task("backclick", function() { |
+ const templateFiles = ["./dist/signup.html", |
+ "./dist/confirm-email.html", |
+ "./dist/subscription-confirmed-email.html"]; |
+ |
+ return Promise.all(templateFiles.map((file) => readFilePromise(file))) |
+ .then((buffers) => Promise.all(buffers.map((buffer) => buffer.toString()))) |
+ .then((contents) => { |
+ fs.writeFile("./dist/backclick.html", contents.join("")); |
+ }); |
+}); |
+ |
+gulp.task("template", ["css"]); |
+ |
+/****************************************************************************** |
+ * Watch |
+ ******************************************************************************/ |
+ |
+gulp.task("watch", function() { |
+ gulp.watch("./src/scss/**/*.scss", ["css"]); |
+ gulp.watch("./src/templates/*.html", ["template", "backclick"]); |
+}); |
+ |
+/****************************************************************************** |
+ * Default |
+ ******************************************************************************/ |
+ |
+gulp.task("default", ["template", "css", "watch"]); |