forked from gjbarnard/moodle-format_grid
-
Notifications
You must be signed in to change notification settings - Fork 0
/
Gruntfile.js
135 lines (122 loc) · 4.42 KB
/
Gruntfile.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
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
118
119
120
121
122
123
124
125
126
127
128
129
130
131
132
133
134
135
/**
* Gruntfile for compiling format_grid AMD files.
*
* This file configures tasks to be run by Grunt
* http://gruntjs.com/ for the current format.
*
*
* Requirements:
* -------------
* nodejs, npm, grunt-cli.
*
* Installation:
* -------------
* node and npm: instructions at http://nodejs.org/
*
* grunt-cli: `[sudo] npm install -g grunt-cli`
*
* node dependencies: run `npm install` in the root directory.
*
*
* Usage:
* ------
* Call tasks from the theme root directory. Default behaviour
* (calling only `grunt`) is to run the watch task detailed below.
*
*
* Porcelain tasks:
* ----------------
* The nice user interface intended for everyday use. Provide a
* high level of automation and convenience for specific use-cases.
*
* grunt amd Create the Asynchronous Module Definition JavaScript files. See: MDL-49046.
* Done here as core Gruntfile.js currently *nix only.
*
* Plumbing tasks & targets:
* -------------------------
* Lower level tasks encapsulating a specific piece of functionality
* but usually only useful when called in combination with another.
*
* grunt replace Run all text replace tasks.
*
* @package course/format
* @subpackage grid
* @version See the value of '$plugin->version' in version.php.
* @copyright © 2016-onwards G J Barnard.
* @author G J Barnard - {@link http://about.me/gjbarnard} and
* {@link http://moodle.org/user/profile.php?id=442195}
* @author Based on code originally written by Joby Harding, Bas Brands, David Scotson and many other contributors.
* @license http://www.gnu.org/copyleft/gpl.html GNU GPL v3 or later
*/
module.exports = function(grunt) { // jshint ignore:line
// Import modules.
var path = require('path');
// Production / development.
var build = grunt.option('build') || 'd'; // Development for 'watch' task.
if ((build != 'p') && (build != 'd')) {
build = 'p';
console.log('-build switch only accepts \'p\' for production or \'d\' for development,');
console.log('e.g. -build=p or -build=d. Defaulting to development.');
}
// PHP strings for exec task.
var moodleroot = path.resolve('..' + path.sep + '..' + path.sep + '..' + path.sep), // jshint ignore:line
configfile = '',
decachephp = '',
dirrootopt = grunt.option('dirroot') || process.env.MOODLE_DIR || ''; // jshint ignore:line
// Allow user to explicitly define Moodle root dir.
if ('' !== dirrootopt) {
moodleroot = path.resolve(dirrootopt);
}
var PWD = process.cwd(); // jshint ignore:line
configfile = path.join(moodleroot, 'config.php');
decachephp += 'define(\'CLI_SCRIPT\', true);';
decachephp += 'require(\'' + configfile + '\');';
decachephp += 'theme_reset_all_caches();';
grunt.initConfig({
exec: {
decache: {
cmd: 'php -r "' + decachephp + '"',
callback: function(error) {
// exec will output error messages
// just add one to confirm success.
if (!error) {
grunt.log.writeln("Moodle cache reset.");
}
}
}
},
jshint: {
options: {jshintrc: '.jshintrc'},
files: ['**/amd/src/*.js']
},
uglify: {
options: {
preserveComments: 'some'
},
dynamic_mappings: {
files: grunt.file.expandMapping(
['**/src/*.js', '!**/node_modules/**'],
'',
{
cwd: PWD,
rename: function(destBase, destPath) {
destPath = destPath.replace('src', 'build');
destPath = destPath.replace('.js', '.min.js');
destPath = path.resolve(PWD, destPath);
return destPath;
}
}
)
}
}
});
// Load contrib tasks.
grunt.loadNpmTasks("grunt-exec");
// Load core tasks.
grunt.loadNpmTasks('grunt-contrib-uglify');
grunt.loadNpmTasks('grunt-contrib-jshint');
// Register tasks.
grunt.registerTask("default", ["watch"]);
grunt.registerTask("decache", ["exec:decache"]);
grunt.registerTask("amd", ["jshint", "uglify", "decache"]);
};