1 |
caf16a48
|
Assos Assos
|
var pkg = require('../package');
|
2 |
|
|
|
3 |
|
|
module.exports = function (grunt) {
|
4 |
|
|
'use strict';
|
5 |
|
|
|
6 |
|
|
var dev = !!grunt.option('dev');
|
7 |
|
|
var path, cssPath, libraries, librariesCache, librariesPath, versions, latestVersion;
|
8 |
|
|
|
9 |
|
|
|
10 |
|
|
var resolveVariables = function (file, backup) {
|
11 |
|
|
if (backup === true) grunt.verbose.write('Checking for backup variables file...');
|
12 |
|
|
if (!grunt.file.exists(path.join(librariesPath, file))) {
|
13 |
|
|
if (backup === true) grunt.verbose.warn();
|
14 |
|
|
grunt.verbose.writeln("Missing " + file);
|
15 |
|
|
file = false;
|
16 |
|
|
if (backup && backup !== true) {
|
17 |
|
|
file = resolveVariables(backup, true);
|
18 |
|
|
if (file) grunt.verbose.writeln("Using: " + file);
|
19 |
|
|
}
|
20 |
|
|
return file;
|
21 |
|
|
}
|
22 |
|
|
else if (backup === true) grunt.verbose.ok();
|
23 |
|
|
return file;
|
24 |
|
|
};
|
25 |
|
|
|
26 |
|
|
|
27 |
|
|
grunt.registerTask('compile', 'Compiles the Drupal/Bootstrap override CSS files for the base theme.', function () {
|
28 |
|
|
var cwd = process.cwd();
|
29 |
|
|
path = require('path');
|
30 |
|
|
cssPath = path.join(cwd, pkg.paths.css);
|
31 |
|
|
librariesCache = path.join(cwd, pkg.caches.libraries);
|
32 |
|
|
librariesPath = path.join(cwd, pkg.paths.libraries);
|
33 |
|
|
if (!grunt.file.exists(librariesCache) || !grunt.file.isDir(librariesPath)) {
|
34 |
|
|
return grunt.fail.fatal('No libraries detected. Please run `grunt sync`.');
|
35 |
|
|
}
|
36 |
|
|
|
37 |
|
|
libraries = grunt.file.readJSON(librariesCache);
|
38 |
|
|
if (!libraries.bootstrap || !libraries.bootswatch) {
|
39 |
|
|
return grunt.fail.fatal('Invalid libraries cache. Please run `grunt sync`.');
|
40 |
|
|
}
|
41 |
|
|
|
42 |
|
|
versions = Object.keys(libraries.bootstrap);
|
43 |
|
|
latestVersion = [].concat(versions).pop();
|
44 |
|
|
grunt.config.set('latestVersion', latestVersion);
|
45 |
|
|
|
46 |
|
|
|
47 |
|
|
|
48 |
|
|
|
49 |
|
|
grunt.registerTask('compile:overrides', function () {
|
50 |
|
|
var done = this.async();
|
51 |
|
|
var total = {count: 0};
|
52 |
|
|
var less = require('less');
|
53 |
|
|
var LessPluginAutoPrefix = require('less-plugin-autoprefix');
|
54 |
|
|
var LessPluginCleanCSS = require('less-plugin-clean-css');
|
55 |
|
|
var lessPlugins = [
|
56 |
|
|
new LessPluginCleanCSS({
|
57 |
|
|
advanced: true
|
58 |
|
|
}),
|
59 |
|
|
new LessPluginAutoPrefix({
|
60 |
|
|
browsers: [
|
61 |
|
|
"Android 2.3",
|
62 |
|
|
"Android >= 4",
|
63 |
|
|
"Chrome >= 20",
|
64 |
|
|
"Firefox >= 24",
|
65 |
|
|
"Explorer >= 8",
|
66 |
|
|
"iOS >= 6",
|
67 |
|
|
"Opera >= 12",
|
68 |
|
|
"Safari >= 6"
|
69 |
|
|
],
|
70 |
|
|
map: true
|
71 |
|
|
})
|
72 |
|
|
];
|
73 |
|
|
var queue = require('queue')({concurrency: 1, timeout: 60000});
|
74 |
|
|
|
75 |
|
|
|
76 |
|
|
for (var library in libraries) {
|
77 |
|
|
if (!libraries.hasOwnProperty(library) || (dev && library !== 'bootstrap')) continue;
|
78 |
|
|
|
79 |
|
|
for (var version in libraries[library]) {
|
80 |
|
|
if (!libraries[library].hasOwnProperty(version) || (dev && version !== latestVersion)) continue;
|
81 |
|
|
|
82 |
|
|
for (var i = 0; i < libraries[library][version].length; i++) {
|
83 |
|
|
|
84 |
|
|
(function (library, versions, version, theme, total) {
|
85 |
|
|
queue.push(function (done) {
|
86 |
|
|
var lessPaths = [path.join(librariesPath)];
|
87 |
|
|
var latestVersion = [].concat(versions).pop();
|
88 |
|
|
var latestVariables = path.join(latestVersion, 'bootstrap', 'less', 'variables.less');
|
89 |
|
|
var themeVariables = path.join(version, library, (library === 'bootstrap' ? 'less' : theme), 'variables.less');
|
90 |
|
|
var backupVariables = path.join(version, 'bootstrap', 'less', 'variables.less');
|
91 |
|
|
var fileName = (library === 'bootstrap' ? 'overrides.min.css' : 'overrides-' + theme + '.min.css');
|
92 |
|
|
var outputFile = path.join(cssPath, version, fileName);
|
93 |
|
|
|
94 |
|
|
|
95 |
|
|
latestVariables = resolveVariables(latestVariables);
|
96 |
|
|
if (!latestVariables) return done(false);
|
97 |
|
|
themeVariables = resolveVariables(themeVariables, backupVariables);
|
98 |
|
|
if (!themeVariables) return grunt.fail.fatal("Unable to create: " + outputFile);
|
99 |
|
|
|
100 |
|
|
var options = {
|
101 |
|
|
filename: outputFile,
|
102 |
|
|
paths: lessPaths,
|
103 |
|
|
plugins: lessPlugins
|
104 |
|
|
};
|
105 |
|
|
var imports = [
|
106 |
|
|
|
107 |
|
|
'@import "' + latestVariables + '"',
|
108 |
|
|
|
109 |
|
|
'@import "' + themeVariables + '"',
|
110 |
|
|
|
111 |
|
|
'@import "' + path.join('starterkits', 'less', 'less', 'overrides.less') + '"'
|
112 |
|
|
];
|
113 |
|
|
grunt.log.debug("\noptions: " + JSON.stringify(options, null, 2));
|
114 |
|
|
grunt.log.debug(imports.join("\n"));
|
115 |
|
|
less.render(imports.join(';') + ';', options)
|
116 |
|
|
.then(function (output) {
|
117 |
|
|
total.count++;
|
118 |
|
|
grunt.log.writeln('Compiled '.green + path.join(version, fileName).white.bold);
|
119 |
|
|
grunt.file.write(outputFile, output.css);
|
120 |
|
|
done();
|
121 |
|
|
}, function (e) {
|
122 |
|
|
if (e.type === 'Parse') {
|
123 |
|
|
grunt.log.error("File:\t".red + e.filename.red);
|
124 |
|
|
grunt.log.error("Line:\t".red + [e.line, e.column].join(':').red);
|
125 |
|
|
grunt.log.error("Code:\t".red + e.extract.join('').white.bold);
|
126 |
|
|
grunt.log.writeln();
|
127 |
|
|
}
|
128 |
|
|
return grunt.fail.fatal(e);
|
129 |
|
|
})
|
130 |
|
|
;
|
131 |
|
|
});
|
132 |
|
|
})(library, Object.keys(libraries[library]), version, libraries[library][version][i], total);
|
133 |
|
|
}
|
134 |
|
|
}
|
135 |
|
|
}
|
136 |
|
|
|
137 |
|
|
|
138 |
|
|
queue.start(function (e) {
|
139 |
|
|
|
140 |
|
|
grunt.log.ok(grunt.util.pluralize(total.count, '1 file compiled./' + total.count + ' files compiled.'));
|
141 |
|
|
return done(e);
|
142 |
|
|
});
|
143 |
|
|
});
|
144 |
|
|
|
145 |
|
|
|
146 |
|
|
var subtask = (dev ? 'dev' : 'css');
|
147 |
|
|
grunt.task.run([
|
148 |
|
|
'clean:' + subtask,
|
149 |
7547bb19
|
Assos Assos
|
'compile:overrides',
|
150 |
|
|
'csslint:' + subtask
|
151 |
caf16a48
|
Assos Assos
|
]);
|
152 |
|
|
});
|
153 |
7547bb19
|
Assos Assos
|
|
154 |
|
|
}; |