blob: e3601bdca32085894f67d9387a4ac2bbbf1eeac6 [file] [log] [blame]
Nils Diewald2488d052015-04-09 21:46:02 +00001/**
2 * Grunt build file for Kalamar.
3 * Create assets (based on files in /dev) running
4 * $ grunt
5 * in the current folder.
6 *
7 * @author Nils Diewald
8 */
Nils Diewaldea236742015-03-26 21:55:36 +00009/*
Nils Diewaldea236742015-03-26 21:55:36 +000010 * TODO: Use https://www.npmjs.com/package/grunt-contrib-compress
Nils Diewald2488d052015-04-09 21:46:02 +000011 * for assets.
12 * http://yui.github.io/yuidoc/
13 * TODO: Use https://www.npmjs.com/package/grunt-contrib-yuidoc
Nils Diewald4c221252015-04-21 20:19:25 +000014 * TODO: Implement a LaTeX generator for a pdf of the dokumentation
Nils Diewaldea236742015-03-26 21:55:36 +000015 */
Nils Diewaldc2826192015-05-07 19:23:44 +000016
Akron7ca73872021-03-08 11:29:11 +010017const sass = require('sass');
18
Nils Diewaldea236742015-03-26 21:55:36 +000019module.exports = function(grunt) {
Akrone91da782017-12-15 17:17:50 +010020 var config;
Akrone91da782017-12-15 17:17:50 +010021
22 // Generate requireJS files for l10n
23 var reqTasks = [];
Akrondf5ad372018-07-02 14:47:57 +020024 var uglyFiles = {
25 'public/js/korap-plugin-<%= pkg.pluginVersion %>.js': ['dev/js/src/plugin/client.js']
Akron94477f62018-07-19 12:18:40 +020026 };
Helgeef0a26e2023-11-22 16:59:17 +010027
Akrone91da782017-12-15 17:17:50 +010028 for (var i in {'en' : 0, 'de' : 1}) {
29
Akrone91da782017-12-15 17:17:50 +010030 reqTasks.push({
31 options: {
Akron80055992017-12-20 16:30:52 +010032
Akron70821ba2018-07-16 17:24:36 +020033 optimize: "none",
Akrone91da782017-12-15 17:17:50 +010034 baseUrl: 'dev/js/src',
35 paths : {
Akron80055992017-12-20 16:30:52 +010036 'lib': '../lib',
37 'root' : '../../..'
Akrone91da782017-12-15 17:17:50 +010038 },
Akron80055992017-12-20 16:30:52 +010039 wrap: true,
Akrone91da782017-12-15 17:17:50 +010040 // dir : 'public/js',
41 name: 'lib/almond',
Helgeef0a26e2023-11-22 16:59:17 +010042 include : ["app/" + i],
Akrone91da782017-12-15 17:17:50 +010043 out: 'public/js/kalamar-<%= pkg.version %>-' + i + '.js'
44 }
Akron70821ba2018-07-16 17:24:36 +020045 });
46
47 uglyFiles['public/js/kalamar-<%= pkg.version %>-' + i + '.js'] = ['public/js/kalamar-<%= pkg.version %>-' + i + '.js'];
Akrone91da782017-12-15 17:17:50 +010048 };
49
Nils Diewaldea236742015-03-26 21:55:36 +000050 grunt.initConfig({
51 pkg: grunt.file.readJSON('package.json'),
Nils Diewaldc2826192015-05-07 19:23:44 +000052 requirejs: reqTasks,
Akron020c3632020-01-16 09:25:32 +010053 terser: {
Akron70821ba2018-07-16 17:24:36 +020054 kalamar : {
Akron5e5cf1e2018-07-25 13:41:25 +020055 files: uglyFiles,
56 options : {
57 sourceMap: {
58 includeSources: true
59 }
60 }
Akron70821ba2018-07-16 17:24:36 +020061 }
62 },
Nils Diewaldea236742015-03-26 21:55:36 +000063 imagemin: {
64 dynamic: {
Akron49bfdbf2016-11-22 21:47:33 +010065 files: [{
66 expand: true,
67 cwd: 'dev/img/',
68 src: ['*.{png,gif,jpg}'],
69 dest: 'public/img/'
70 }]
Nils Diewaldea236742015-03-26 21:55:36 +000071 }
72 },
73 sass: {
74 dist: {
75 options: {
Akron7ca73872021-03-08 11:29:11 +010076 implementation: sass,
77 style: 'compressed',
Akronba21f6d2021-07-23 12:48:33 +020078 outputStyle: 'compressed',
Akron7ca73872021-03-08 11:29:11 +010079 sourceMap: true
Nils Diewaldea236742015-03-26 21:55:36 +000080 },
81 files: {
Nils Diewaldce328112015-04-08 22:48:18 +000082 'public/css/kalamar-<%= pkg.version %>.css' : 'dev/scss/kalamar.scss',
Akron7e5afce2020-08-25 15:50:19 +020083 'public/css/kalamar-plugin-<%= pkg.pluginVersion %>.css' : 'dev/scss/plugin.scss',
Akron49bfdbf2016-11-22 21:47:33 +010084 'dev/css/kalamar.css' : 'dev/scss/kalamar.scss',
hebasta75cfca52019-02-19 13:15:27 +010085 'dev/css/kwic.css' : 'dev/scss/main/kwic.scss',
Akron7e5afce2020-08-25 15:50:19 +020086 'dev/css/kalamar-plugin.css' : 'dev/scss/plugin.scss'
Nils Diewaldea236742015-03-26 21:55:36 +000087 }
88 }
89 },
Nils Diewaldaa17d142015-04-08 23:32:23 +000090 // see https://github.com/gruntjs/grunt-contrib-copy/issues/64
Akrondf5ad372018-07-02 14:47:57 +020091 jasmine: {
92 pivotal: {
93 src: [
94 'dev/js/src/menu.js',
95 'dev/js/src/match.js',
96 'dev/js/src/hint.js',
97 'dev/js/src/vc.js'
98 ],
99 options: {
100 specs: 'dev/js/spec/*Spec.js',
101 vendor: ['dev/js/lib/require.js']
102 }
103 }
104 },
105
106 // see https://github.com/gruntjs/grunt-contrib-copy/issues/64
Nils Diewald2488d052015-04-09 21:46:02 +0000107 // for copying binary files
Nils Diewaldce328112015-04-08 22:48:18 +0000108 copy : {
Nils Diewaldaa17d142015-04-08 23:32:23 +0000109 options: {
Akron49bfdbf2016-11-22 21:47:33 +0100110 process:false
Nils Diewaldaa17d142015-04-08 23:32:23 +0000111 },
112 main: {
Akron49bfdbf2016-11-22 21:47:33 +0100113 files:[
Helgeef0a26e2023-11-22 16:59:17 +0100114 {
115 expand: true,
116 src: 'kalamar.conf.js',
117 dest:'public/js/hintc/',
118 filter: 'isFile',
119 timestamp: true
120 },
121 {
122 expand: true,
123 cwd: 'dev/js/src/',
124 src: ['default.js','util.js'],
125 dest:'public/js/hintc/',
126 filter: 'isFile',
127 timestamp: true
128 },
129 {
130 expand: true,
131 cwd: 'dev/js/lib/',
132 src: 'require.js',
133 dest:'public/js/hintc/',
134 filter: 'isFile',
135 timestamp: true
136 },
137 {
138 expand: true,
139 cwd: 'dev/js/src/hint/foundries',
140 src: '**',
141 dest:'public/js/hintc/hint/foundries',
142 timestamp: true
143 },
144 {
145 expand: true,
146 cwd: 'dev/js/src/hint/',
147 src: 'foundries.js',
148 dest:'public/js/hintc/hint',
149 filter: 'isFile',
150 timestamp: true
151 },
Akron49bfdbf2016-11-22 21:47:33 +0100152 {
153 expand: true,
154 cwd: 'dev/font/',
155 src: '**',
156 dest: 'public/font/',
157 filter: 'isFile',
158 nonull: true,
159 timestamp: true
160 },
161 {
162 expand: true,
163 cwd: 'dev/img/',
Akron49bfdbf2016-11-22 21:47:33 +0100164 src: '*.svg',
165 dest: 'public/img/',
166 filter: 'isFile',
167 nonull:true,
168 timestamp:true
Akron88c26b12020-09-07 12:44:18 +0200169 },
170 {
171 src: 'dev/img/favicon.ico',
172 dest: 'public/favicon.ico',
173 timestamp:true
174 },
175 {
176 src: 'dev/robots.txt',
177 dest: 'public/robots.txt',
178 timestamp: true
Akron9adf2cc2020-09-24 07:19:08 +0200179 },
180 {
181 src: 'public/css/kalamar-plugin-<%= pkg.pluginVersion %>.css',
182 dest: 'public/css/kalamar-plugin-latest.css',
183 timestamp: true
184 },
185 {
186 src: 'public/js/korap-plugin-<%= pkg.pluginVersion %>.js',
Akron8bcb3542020-10-01 21:43:30 +0200187 dest: 'public/js/korap-plugin-latest.js',
Akron9adf2cc2020-09-24 07:19:08 +0200188 timestamp: true
Akron49bfdbf2016-11-22 21:47:33 +0100189 }
190 ]
Nils Diewaldaa17d142015-04-08 23:32:23 +0000191 }
Nils Diewaldce328112015-04-08 22:48:18 +0000192 },
Nils Diewaldea236742015-03-26 21:55:36 +0000193 watch: {
Nils Diewaldea236742015-03-26 21:55:36 +0000194 css: {
Akron7918e392020-04-16 18:52:27 +0200195 files: ['dev/scss/**/*.scss'],
Akron49bfdbf2016-11-22 21:47:33 +0100196 tasks: ['sass'],
197 options: {
198 spawn: false
199 }
Nils Diewaldea236742015-03-26 21:55:36 +0000200 }
Akron08648842019-03-28 11:55:22 +0100201 },
Nils Diewaldea236742015-03-26 21:55:36 +0000202 });
203
Nils Diewaldea236742015-03-26 21:55:36 +0000204 grunt.loadNpmTasks('grunt-contrib-imagemin');
205 grunt.loadNpmTasks('grunt-contrib-watch');
Akron7ca73872021-03-08 11:29:11 +0100206 grunt.loadNpmTasks('grunt-sass');
Nils Diewaldce328112015-04-08 22:48:18 +0000207 grunt.loadNpmTasks('grunt-contrib-copy');
Akron020c3632020-01-16 09:25:32 +0100208 grunt.loadNpmTasks('grunt-terser');
Nils Diewald0e6992a2015-04-14 20:13:52 +0000209 grunt.loadNpmTasks('grunt-contrib-requirejs');
Nils Diewalda31a5152015-04-17 21:05:23 +0000210 grunt.registerTask('img', ['imagemin','copy']);
Akron9f64fd02016-02-13 05:51:38 +0100211 grunt.registerTask('js', ['requirejs']);
Nils Diewaldea236742015-03-26 21:55:36 +0000212 grunt.registerTask('css', ['sass']);
Nils Diewaldce328112015-04-08 22:48:18 +0000213 grunt.registerTask(
214 'default',
Akronf1c51522023-01-27 14:18:09 +0100215 ['requirejs', 'terser', 'imagemin', 'sass', 'copy']
Nils Diewaldce328112015-04-08 22:48:18 +0000216 );
Nils Diewaldea236742015-03-26 21:55:36 +0000217};