You can not select more than 25 topics Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.

188 lines
6.7 KiB

1 year ago
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
​
  1. const sass = require('node-sass'), tildeImporter = require('grunt-sass-tilde-importer');
  2. module.exports = function (grunt) {
  3. grunt.initConfig({
  4. pkg: grunt.file.readJSON('package.json'),
  5. banner: '/*@preserve\n' +
  6. ' * Tempus Dominus Bootstrap4 v<%= pkg.version %> (<%= pkg.homepage %>)\n' +
  7. ' * Copyright 2016-<%= grunt.template.today("yyyy") %> <%= pkg.author %>\n' +
  8. ' * Licensed under MIT (https://github.com/tempusdominus/bootstrap-3/blob/master/LICENSE)\n' +
  9. ' */\n',
  10. jqueryCheck: 'if (typeof jQuery === \'undefined\') {\n' +
  11. ' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires jQuery. jQuery must be included before Tempus Dominus Bootstrap4\\\'s JavaScript.\');\n' +
  12. '}\n',
  13. jqueryVersionCheck: '+function ($) {\n' +
  14. ' var version = $.fn.jquery.split(\' \')[0].split(\'.\');\n' +
  15. ' if ((version[0] < 2 && version[1] < 9) || (version[0] === 1 && version[1] === 9 && version[2] < 1) || (version[0] >= 4)) {\n' +
  16. ' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires at least jQuery v3.0.0 but less than v4.0.0\');\n' +
  17. ' }\n' +
  18. '}(jQuery);\n\n',
  19. momentCheck: 'if (typeof moment === \'undefined\') {\n' +
  20. ' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires moment.js. Moment.js must be included before Tempus Dominus Bootstrap4\\\'s JavaScript.\');\n' +
  21. '}\n',
  22. momentVersionCheck: 'var version = moment.version.split(\'.\')\n' +
  23. 'if ((version[0] <= 2 && version[1] < 17) || (version[0] >= 3)) {\n' +
  24. ' throw new Error(\'Tempus Dominus Bootstrap4\\\'s requires at least moment.js v2.17.0 but less than v3.0.0\');\n' +
  25. '}\n',
  26. uglify: {
  27. target: {
  28. files: {
  29. 'build/js/<%= pkg.name %>.min.js': 'build/js/<%= pkg.name %>.js'
  30. }
  31. },
  32. options: {
  33. mangle: true,
  34. compress: {
  35. dead_code: false // eslint-disable-line
  36. },
  37. output: {
  38. ascii_only: true // eslint-disable-line
  39. },
  40. report: 'min',
  41. preserveComments: 'some'
  42. }
  43. },
  44. eslint: {
  45. options: {
  46. configFile: 'eslintrc.json'
  47. },
  48. target: ['Gruntfile.js', 'src/js/*.js', 'test/*.js']
  49. },
  50. babel: {
  51. dev: {
  52. options: {
  53. sourceMap: false,
  54. compact: false
  55. },
  56. files: {
  57. 'build/js/<%= pkg.name %>.js': 'src/js/<%= pkg.name %>.js'
  58. }
  59. },
  60. dist: {
  61. options: {
  62. compact: false,
  63. 'presets': [
  64. [
  65. 'es2015',
  66. {
  67. 'modules': false,
  68. 'loose': true
  69. }
  70. ]
  71. ],
  72. 'plugins': [
  73. 'transform-es2015-modules-strip'
  74. ]
  75. },
  76. files: {
  77. 'build/js/<%= pkg.name %>.js': 'build/js/<%= pkg.name %>.js'
  78. }
  79. }
  80. },
  81. concat: {
  82. options: {
  83. // Custom function to remove all export and import statements
  84. process: function (src) {
  85. return src.replace(/^(export|import).*/gm, '');
  86. }
  87. },
  88. bootstrap: {
  89. src: [
  90. 'node_modules/tempusdominus-core/src/js/tempusdominus-core.js',
  91. 'src/js/<%= pkg.name %>.js'
  92. ],
  93. dest: 'build/js/<%= pkg.name %>.js'
  94. }
  95. },
  96. sass: {
  97. production: {
  98. options: {
  99. cleancss: true,
  100. compress: true,
  101. implementation: sass,
  102. importer: tildeImporter
  103. },
  104. files: {
  105. 'build/css/<%= pkg.name %>.min.css': 'src/sass/<%= pkg.name %>-build.scss'
  106. }
  107. },
  108. development: {
  109. options: {
  110. importer: tildeImporter,
  111. implementation: sass
  112. },
  113. files: {
  114. 'build/css/<%= pkg.name %>.css': 'src/sass/<%= pkg.name %>-build.scss'
  115. }
  116. }
  117. },
  118. stamp: {
  119. bootstrap: {
  120. options: {
  121. banner: '<%= banner %>\n<%= jqueryCheck %>\n<%= jqueryVersionCheck %>\n<%= momentCheck %>\n<%= momentVersionCheck %>\n+function () {\n',
  122. footer: '\n}();'
  123. },
  124. files: {
  125. src: '<%= concat.bootstrap.dest %>'
  126. }
  127. },
  128. css: {
  129. options: {
  130. banner: '<%= banner %>'
  131. },
  132. files: {
  133. src: 'build/css/*.css'
  134. }
  135. }
  136. },
  137. watch: {
  138. src: {
  139. files: '<%= concat.bootstrap.src %>',
  140. tasks: ['default']
  141. }
  142. },
  143. mkdocs: {
  144. dist: {
  145. src: '.',
  146. options: {
  147. clean: true
  148. }
  149. }
  150. }
  151. });
  152. grunt.loadTasks('tasks');
  153. grunt.loadNpmTasks('grunt-mkdocs');
  154. require('load-grunt-tasks')(grunt);
  155. grunt.registerTask('default', 'build:js');
  156. grunt.registerTask('build:travis', [
  157. 'build:js', 'build:style'//,
  158. // tests
  159. //'env:paris', 'connect', 'jasmine'
  160. ]);
  161. // Task to be run when building
  162. grunt.registerTask('build:js', ['babel:dev', 'concat', 'eslint', 'babel:dist', 'stamp:bootstrap', 'uglify', 'copy']);
  163. grunt.registerTask('build:style', ['sass', 'stamp:css', 'copy']);
  164. grunt.registerTask('copy', 'Generate docs', function () {
  165. grunt.file.copy('build/js/tempusdominus-bootstrap-4.js', 'src/docs/theme/js/tempusdominus-bootstrap-4.js');
  166. grunt.file.copy('build/css/tempusdominus-bootstrap-4.css', 'src/docs/theme/css/tempusdominus-bootstrap-4.css');
  167. });
  168. grunt.registerTask('docs', ['copy', 'mkdocs']);
  169. grunt.registerTask('release', function (version) {
  170. if (!version || version.split('.').length !== 3) {
  171. grunt.fail.fatal('malformed version. Use grunt release:1.2.3');
  172. }
  173. grunt.task.run([
  174. 'bump_version:' + version,
  175. 'build:travis',
  176. 'docs'
  177. ]);
  178. });
  179. };