 Issue 29646555:
  Issue 6210 - Implement Subscription (Double-opt-in) template for newsletter  (Closed)
    
  
    Issue 29646555:
  Issue 6210 - Implement Subscription (Double-opt-in) template for newsletter  (Closed) 
  | Left: | ||
| Right: | 
| LEFT | RIGHT | 
|---|---|
| 1 /*! | 1 /*! | 
| 2 * This file is part of adblockplus.org. | 2 * This file is part of eyeomail.com. | 
| 
juliandoucette
2018/01/04 02:34:22
This is actually part of eyeomail.com?
 
ire
2018/01/04 11:14:41
Done.
 | |
| 3 * Copyright (C) 2017-present eyeo GmbH | 3 * Copyright (C) 2017-present eyeo GmbH | 
| 4 * | 4 * | 
| 5 * adblockplus.org is free software: you can redistribute it and/or modify | 5 * eyeomail.com is free software: you can redistribute it and/or modify | 
| 6 * it under the terms of the GNU General Public License as published by | 6 * it under the terms of the GNU General Public License as published by | 
| 7 * the Free Software Foundation, either version 3 of the License, or | 7 * the Free Software Foundation, either version 3 of the License, or | 
| 8 * (at your option) any later version. | 8 * (at your option) any later version. | 
| 9 * | 9 * | 
| 10 * adblockplus.org is distributed in the hope that it will be useful, | 10 * eyeomail.com is distributed in the hope that it will be useful, | 
| 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 11 * but WITHOUT ANY WARRANTY; without even the implied warranty of | 
| 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 12 * MERCHANTABILITY or FITNESS FOR A PARTICULAR PURPOSE. See the | 
| 13 * GNU General Public License for more details. | 13 * GNU General Public License for more details. | 
| 14 * | 14 * | 
| 15 * You should have received a copy of the GNU General Public License | 15 * You should have received a copy of the GNU General Public License | 
| 16 * along with adblockplus.org. If not, see <http://www.gnu.org/licenses/>. | 16 * along with eyeomail.com. If not, see <http://www.gnu.org/licenses/>. | 
| 17 */ | 17 */ | 
| 18 | 18 | 
| 19 const gulp = require("gulp"); | 19 const gulp = require("gulp"); | 
| 20 const gutil = require("gulp-util"); | 20 const gutil = require("gulp-util"); | 
| 21 const rename = require("gulp-rename"); | 21 const rename = require("gulp-rename"); | 
| 22 const sass = require("gulp-sass"); | 22 const sass = require("gulp-sass"); | 
| 23 const postcss = require("gulp-postcss"); | 23 const postcss = require("gulp-postcss"); | 
| 24 const scss = require("postcss-scss"); | 24 const scss = require("postcss-scss"); | 
| 25 const autoprefixer = require("autoprefixer"); | 25 const autoprefixer = require("autoprefixer"); | 
| 26 const replace = require("replace"); | 26 const replace = require("replace"); | 
| 27 const fs = require('fs'); | 27 const fs = require("fs"); | 
| 28 const readFilePromise = require("fs-readfile-promise"); | |
| 28 | 29 | 
| 29 /****************************************************************************** | 30 /****************************************************************************** | 
| 30 * CSS | 31 * CSS | 
| 31 ******************************************************************************/ | 32 ******************************************************************************/ | 
| 32 | 33 | 
| 33 gulp.task("compileCss", function() { | 34 gulp.task("compileCss", function() { | 
| 34 return gulp.src("./scss/main.scss") | 35 return gulp.src("./src/scss/main.scss") | 
| 35 .pipe(postcss([autoprefixer()], {syntax: scss}).on("error", gutil.log)) | 36 .pipe(postcss([autoprefixer()], {syntax: scss}).on("error", gutil.log)) | 
| 36 .pipe(sass({outputStyle: "compact"}).on("error", gutil.log)) | 37 .pipe(sass({outputStyle: "compact"}).on("error", gutil.log)) | 
| 
juliandoucette
2018/01/04 02:34:19
I don't think we should minify without source maps
 
ire
2018/01/04 11:14:41
This isn't minifying?
 | |
| 37 .pipe(gulp.dest("./css")); | 38 .pipe(gulp.dest("./dist")); | 
| 38 }); | 39 }); | 
| 39 | 40 | 
| 40 gulp.task("inlineCss", function() { | 41 gulp.task("inlineCss", ["compileCss", "moveTemplates"], function() { | 
| 41 return fs.readFile('./css/main.css', 'utf8', function (err, styles) { | 42 return fs.readFile("./dist/main.css", "utf8", function (err, styles) { | 
| 
juliandoucette
2018/01/04 02:34:22
NIT: single quotes.
 
ire
2018/01/04 11:14:40
Done.
 | |
| 42 if (err) throw err; | 43 if (err) throw err; | 
| 43 | 44 | 
| 44 const replacement = `<!-- styles:start --> | 45 const replacement = `<!-- styles:start --> | 
| 
juliandoucette
2018/01/04 02:34:23
NIT: Why not shorten this e.g. `<style>${styles}</
 
ire
2018/01/04 11:14:41
I think it looks better when the styles start on t
 | |
| 45 <style> | 46 <style> | 
| 46 ${styles} | 47 ${styles} | 
| 47 </style> | 48 </style> | 
| 48 <!-- styles:end -->`; | 49 <!-- styles:end -->`; | 
| 49 | 50 | 
| 50 replace({ | 51 replace({ | 
| 51 regex: /<!-- styles:start -->([\s\S]*?)<!-- styles:end -->/, | 52 regex: /<!-- styles:start -->([\s\S]*?)<!-- styles:end -->/, | 
| 
juliandoucette
2018/01/04 02:34:23
NIT: Why not shorten this? e.g. `<!-- styles /-->`
 
ire
2018/01/04 11:14:40
This is "sort of" (in mega quotes) a convention fo
 | |
| 52 replacement: replacement, | 53 replacement: replacement, | 
| 53 paths: ['./index.html', 'backclick.html'], | 54 paths: ["dist/signup.html"], | 
| 
juliandoucette
2018/01/04 02:34:22
NIT: Can't we *just* do this to backclick.html?
 
ire
2018/01/04 11:14:42
I was keeping the other file around so that we can
 | |
| 54 recursive: true, | 55 recursive: true, | 
| 
juliandoucette
2018/01/04 02:34:21
NIT: I don't think recursive or silent are necessa
 
ire
2018/01/04 11:14:40
I just copied the default example here. Is there a
 | |
| 55 silent: true, | 56 silent: true, | 
| 56 }); | 57 }); | 
| 57 }); | 58 }); | 
| 58 }); | 59 }); | 
| 59 | 60 | 
| 60 gulp.task("css", ["compileCss", "inlineCss"]); | 61 gulp.task("css", ["inlineCss"]); | 
| 62 | |
| 63 /****************************************************************************** | |
| 64 * Template | |
| 65 ******************************************************************************/ | |
| 66 | |
| 67 gulp.task("moveTemplates", function() { | |
| 68 const templateFiles = ["./src/templates/signup.html", | |
| 69 "./src/templates/confirm-email.html", | |
| 70 "./src/templates/subscription-confirmed-email.html"]; | |
| 71 | |
| 72 return gulp.src(templateFiles).pipe(gulp.dest("./dist")); | |
| 73 }); | |
| 74 | |
| 75 gulp.task("backclick", function() { | |
| 76 const templateFiles = ["./dist/signup.html", | |
| 77 "./dist/confirm-email.html", | |
| 78 "./dist/subscription-confirmed-email.html"]; | |
| 79 | |
| 80 return Promise.all(templateFiles.map((file) => readFilePromise(file))) | |
| 81 .then((buffers) => Promise.all(buffers.map((buffer) => buffer.toString()))) | |
| 82 .then((contents) => { | |
| 83 fs.writeFile("./dist/backclick.html", contents.join("")); | |
| 84 }); | |
| 85 }); | |
| 86 | |
| 87 gulp.task("template", ["css"]); | |
| 61 | 88 | 
| 62 /****************************************************************************** | 89 /****************************************************************************** | 
| 63 * Watch | 90 * Watch | 
| 64 ******************************************************************************/ | 91 ******************************************************************************/ | 
| 65 | 92 | 
| 66 gulp.task("watch", function() { | 93 gulp.task("watch", function() { | 
| 67 gulp.watch("./scss/**/*.scss", ["css"]); | 94 gulp.watch("./src/scss/**/*.scss", ["css"]); | 
| 95 gulp.watch("./src/templates/*.html", ["template", "backclick"]); | |
| 68 }); | 96 }); | 
| 69 | 97 | 
| 70 /****************************************************************************** | 98 /****************************************************************************** | 
| 71 * Default | 99 * Default | 
| 72 ******************************************************************************/ | 100 ******************************************************************************/ | 
| 73 | 101 | 
| 74 gulp.task("default", ["css", "watch"]); | 102 gulp.task("default", ["template", "css", "watch"]); | 
| LEFT | RIGHT |