grunt.js 4.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168
  1. module.exports = function(grunt) {
  2. grunt.loadTasks('./grunt/tasks');
  3. grunt.loadNpmTasks('grunt-image-embed');
  4. grunt.loadNpmTasks('grunt-contrib-mincss');
  5. grunt.registerTask('build:deploy', 'shell:compileDeploy concat:deploy min');
  6. grunt.registerTask('build:dev', 'shell:compileDev concat:css imageEmbed mincss css2js concat:dev');
  7. // grunt.registerTask('default', 'build:deploy build:dev');
  8. grunt.registerTask('default', 'amberc');
  9. grunt.initConfig({
  10. pkg: '<json:package.json>',
  11. meta: {
  12. banner: '/*! <%= pkg.title || pkg.name %> - v<%= pkg.version %> - <%= grunt.template.today("yyyy-mm-dd") %> */\n'
  13. },
  14. amberc: {
  15. _config: {
  16. amber_dir: process.cwd(),
  17. closure_jar: ''
  18. },
  19. amber_kernel: {
  20. working_dir: 'st',
  21. target_dir : 'js',
  22. src: ['Kernel-Objects.st', 'Kernel-Classes.st', 'Kernel-Methods.st', 'Kernel-Collections.st',
  23. 'Kernel-Exceptions.st', 'Kernel-Transcript.st', 'Kernel-Announcements.st'],
  24. deploy: true
  25. },
  26. amber_compiler: {
  27. working_dir: 'st',
  28. target_dir : 'js',
  29. src: ['Compiler.st', 'Compiler-Exceptions.st', 'Compiler-Core.st', 'Compiler-AST.st',
  30. 'Compiler-IR.st', 'Compiler-Inlining.st', 'Compiler-Semantic.st'],
  31. deploy: true
  32. },
  33. amber_canvas: {
  34. working_dir: 'st',
  35. target_dir : 'js',
  36. src: ['Canvas.st', 'SUnit.st'],
  37. deploy: true
  38. },
  39. amber_IDE: {
  40. working_dir: 'st',
  41. target_dir : 'js',
  42. src: ['IDE.st', 'Documentation.st'],
  43. libraries: ['Canvas'],
  44. deploy: true
  45. },
  46. amber_tests: {
  47. working_dir: 'st',
  48. target_dir : 'js',
  49. src: ['Kernel-Tests.st', 'Compiler-Tests.st'],
  50. libraries: ['SUnit']
  51. },
  52. amber_examples: {
  53. working_dir: 'st',
  54. target_dir : 'js',
  55. src: ['Examples.st'],
  56. libraries: ['Canvas', 'IDE']
  57. },
  58. amber_dev: {
  59. working_dir: 'js',
  60. src: ['Kernel-Objects.js', 'Kernel-Classes.js', 'Kernel-Methods.js', 'Kernel-Collections.js',
  61. 'Kernel-Exceptions.js', 'Kernel-Transcript.js', 'Kernel-Announcements.js',
  62. 'Compiler.js', 'Compiler-Exceptions.js', 'Compiler-Core.js', 'Compiler-AST.js',
  63. 'Compiler-IR.js', 'Compiler-Inlining.js', 'Compiler-Semantic.js',
  64. 'Kernel-Tests.js', 'Compiler-Tests.js',
  65. 'Canvas.js', 'IDE.js', 'SUnit.js', 'Documentation.js', 'Examples.js'],
  66. output_name: 'amber'
  67. },
  68. server: {
  69. working_dir: 'server',
  70. src: ['FileServer.st'],
  71. main_class: 'FileServer',
  72. output_name: 'server'
  73. },
  74. repl: {
  75. working_dir: 'repl',
  76. src: ['REPL.st'],
  77. main_class: 'Repl',
  78. output_name: 'amber'
  79. }
  80. },
  81. lint: {
  82. amber: ['js/*.js'],
  83. server: ['server/*.js'],
  84. repl: ['repl/*.js'],
  85. tests: ['test/*.js'],
  86. grunt: ['grunt.js', 'grunt/**/*.js']
  87. },
  88. concat: {
  89. deploy: {
  90. src: ['tmp/amber-compiled.deploy.js'],
  91. dest: 'dist/amber-<%= pkg.version %>.deploy.js'
  92. },
  93. css: {
  94. src: [
  95. 'css/amber.css',
  96. 'js/lib/CodeMirror/codemirror.css',
  97. 'js/lib/CodeMirror/amber.css'
  98. ],
  99. dest: 'tmp/amber.css'
  100. },
  101. dev: {
  102. src: [
  103. 'js/lib/jQuery/jquery-ui-1.8.16.custom.min.js',
  104. 'js/lib/jQuery/jquery.textarea.js',
  105. 'js/lib/CodeMirror/codemirror.js',
  106. 'js/lib/CodeMirror/smalltalk.js',
  107. 'tmp/amber-compiled.js',
  108. 'tmp/css.js'
  109. ],
  110. dest: 'dist/amber-<%= pkg.version %>.js'
  111. }
  112. },
  113. imageEmbed: {
  114. dev: {
  115. src: ['tmp/amber.css'],
  116. dest: 'tmp/amber-images.css',
  117. options: {baseDir: 'public'}
  118. }
  119. },
  120. mincss: {
  121. dev: {
  122. src: ['tmp/amber-images.css'],
  123. dest: 'tmp/amber.min.css'
  124. }
  125. },
  126. css2js: {
  127. dev: {
  128. src: 'tmp/amber.min.css',
  129. dest: 'tmp/css.js'
  130. }
  131. },
  132. min: {
  133. deploy: {
  134. src: 'dist/amber-<%= pkg.version %>.deploy.js',
  135. dest: 'dist/amber-<%= pkg.version %>.deploy.min.js'
  136. }
  137. }
  138. });
  139. grunt.registerMultiTask('css2js', 'Embed CSS into JS', function() {
  140. var cssContent = grunt.task.directive(grunt.file.expandFiles(this.data.src)[0], grunt.file.read);
  141. var content =
  142. 'var css="' + cssContent + '";' +
  143. 'var cssTag = document.createElement("link");' +
  144. 'document.head = document.head || document.getElementsByTagName("head")[0];' +
  145. 'cssTag.href = "data:text/css,"+css;' +
  146. 'cssTag.rel = "stylesheet";' +
  147. 'document.head.appendChild(cssTag);';
  148. grunt.file.write(this.data.dest, content);
  149. grunt.log.writeln('File "' + this.data.dest + '" created.');
  150. });
  151. };