-
Notifications
You must be signed in to change notification settings - Fork 30
/
Copy pathgulpfile.js
100 lines (85 loc) · 3.36 KB
/
gulpfile.js
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
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
const gulp = require("gulp");
const fs = require("fs");
const path = require("path");
const dartSass = require("sass");
const sass = require("gulp-sass")(dartSass);
const rename = require("gulp-rename");
const insert = require("gulp-insert");
const wait = require("gulp-wait");
const globImporter = require("node-sass-glob-importer");
const META = `/*//META{"name":"Nox","description":"A theme for Discord loosely based on Google's Material Design Guidelines.","author":"Lilian Tedone & Zerebos","version":"1.0.0"}*//**/
`;
const LICENSE = `/*
* Copyright (c) 2016-2017 Lilian Tedone, 2017-2020 Zack Rauen
*
* Permission is hereby granted, free of charge, to any person obtaining a copy
* of this software and associated documentation files (the "Software"), to deal
* in the Software without restriction, including without limitation the rights
* to use, copy, modify, merge, publish, distribute, sublicense, and/or sell
* copies of the Software, and to permit persons to whom the Software is
* furnished to do so, subject to the following conditions:
*
* The above copyright notice and this permission notice shall be included in all
* copies or substantial portions of the Software.
*
* THE SOFTWARE IS PROVIDED "AS IS", WITHOUT WARRANTY OF ANY KIND, EXPRESS OR
* IMPLIED, INCLUDING BUT NOT LIMITED TO THE WARRANTIES OF MERCHANTABILITY,
* FITNESS FOR A PARTICULAR PURPOSE AND NONINFRINGEMENT. IN NO EVENT SHALL THE
* AUTHORS OR COPYRIGHT HOLDERS BE LIABLE FOR ANY CLAIM, DAMAGES OR OTHER
* LIABILITY, WHETHER IN AN ACTION OF CONTRACT, TORT OR OTHERWISE, ARISING FROM,
* OUT OF OR IN CONNECTION WITH THE SOFTWARE OR THE USE OR OTHER DEALINGS IN THE
* SOFTWARE.
*/
`;
// Credit to:
// https://coderwall.com/p/fhgu_q/inlining-images-with-gulp-sass
const sassInlineImage = function(options) {
options = options || {};
const svg = function(buffer) {
const svg = buffer.toString()
.replace(/\n/g, '')
.replace(/\r/g, '')
.replace(/\#/g, '%23')
.replace(/\"/g, "'");
return 'data:image/svg+xml;utf8,' + svg;
};
const img = function(buffer, ext) {
return 'data:image/' + ext + ';base64,' + buffer.toString('base64');
};
const base = options.base || process.cwd();
return function(file) {
const relativePath = './' + file.getValue();
const filePath = path.resolve(base, relativePath);
const ext = filePath.split('.').pop();
const data = fs.readFileSync(filePath);
const buffer = new Buffer(data);
const str = ext === 'svg' ? svg(buffer, ext) : img(buffer, ext);
return new dartSass.SassString(str);
};
};
const sassOptions = {
functions:
{
"inline-image($file)": sassInlineImage()
},
importer: globImporter(),
outputStyle: "compressed"
};
gulp.task("import", function () {
return gulp.src("./src/index.scss")
.pipe(sass(sassOptions).on("error", sass.logError))
.pipe(rename({basename: "import", extname: ".css"}))
.pipe(insert.prepend(LICENSE))
.pipe(gulp.dest("./release/"));
});
gulp.task("sass", function () {
return gulp.src("./src/index.scss")
.pipe(wait(200))
.pipe(sass.sync(sassOptions).on("error", sass.logError))
.pipe(rename({basename: "Nox.theme", extname: ".css"}))
.pipe(insert.prepend(META + LICENSE))
.pipe(gulp.dest("Z:/Programming/BetterDiscordStuff/themes"));
});
gulp.task("sass-watch", function() {
return gulp.watch(["./src/**/*.scss"]).on("all", gulp.series("sass"));
});