Gruntfile.js 2.8 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586878889909192939495969798
  1. module.exports = function(grunt) {
  2. /**
  3. * Load tasks
  4. */
  5. grunt.loadNpmTasks('lesshat-devstack');
  6. grunt.loadNpmTasks('grunt-prompt');
  7. /**
  8. * Grunt config
  9. */
  10. grunt.initConfig({
  11. pkg: grunt.file.readJSON('package.json'),
  12. generator: {
  13. settings: {
  14. mixin_name: null,
  15. default_value: null,
  16. vendors: null
  17. }
  18. },
  19. version: {
  20. settings: {
  21. version: null
  22. }
  23. },
  24. prompt: {
  25. version: {
  26. options: {
  27. questions: [{
  28. config: 'version.settings.version',
  29. type: 'input',
  30. validate: function(value) {
  31. return (value && true);
  32. },
  33. message: 'LESS Hat next version number? Current is ' + '<%= pkg.version %>'.green + ':',
  34. }],
  35. }
  36. },
  37. generate: {
  38. options: {
  39. questions: [{
  40. config: 'generator.settings.mixin_name',
  41. type: 'input',
  42. message: 'What is the name of new mixin? (e.g. animationDelay)',
  43. filter: function(value) {
  44. grunt.config('generator.settings.mixin_css_name', value.replace(/([A-Z])/g, function(upperCase) {
  45. return '-' + upperCase.toLowerCase();
  46. }));
  47. grunt.config('generator.settings.mixin_name | firstLetter', value[0].toUpperCase() + value.slice(1));
  48. return value[0].toLowerCase() + value.slice(1);
  49. },
  50. validate: function(value) {
  51. if (/[a-z0-9]+/i.test(value)) {
  52. return true;
  53. } else {
  54. return 'Please fill only valid characters [a-zA-Z0-9].';
  55. }
  56. }
  57. }, {
  58. config: 'generator.settings.vendors',
  59. type: 'checkbox',
  60. message: 'For which browsers is this mixin?',
  61. choices: [{
  62. name: 'webkit'
  63. }, {
  64. name: 'moz'
  65. }, {
  66. name: 'opera'
  67. }, {
  68. name: 'ms',
  69. }]
  70. }, {
  71. config: 'generator.settings.default_value',
  72. type: 'input',
  73. default: 'none',
  74. filter: function(value) {
  75. return '\'' + value + '\'';
  76. },
  77. message: 'What is default value of the mixin? Optional – you can skip',
  78. }]
  79. }
  80. }
  81. }
  82. });
  83. /**
  84. * Register tasks
  85. */
  86. grunt.registerTask('version', ['prompt:version', 'iterate', 'build', 'mixins_update']);
  87. grunt.registerTask('dev', ['build', 'test']);
  88. grunt.registerTask('generate', ['prompt:generate', 'generator']);
  89. grunt.registerTask('contrib', ['build', 'test', 'mixins_update', 'prefix', 'documentation']);
  90. grunt.registerTask('default', ['version','build', 'test', 'mixins_update', 'prefix', 'documentation', 'git']);
  91. };