sails-linker.js 6.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267
  1. /**
  2. * Autoinsert script tags (or other filebased tags) in an html file.
  3. *
  4. * ---------------------------------------------------------------
  5. *
  6. * Automatically inject <script> tags for javascript files and <link> tags
  7. * for css files. Also automatically links an output file containing precompiled
  8. * templates using a <script> tag.
  9. *
  10. * For usage docs see:
  11. * https://github.com/Zolmeister/grunt-sails-linker
  12. *
  13. */
  14. module.exports = function(grunt) {
  15. grunt.config.set('sails-linker', {
  16. devJs: {
  17. options: {
  18. startTag: '<!--SCRIPTS-->',
  19. endTag: '<!--SCRIPTS END-->',
  20. fileTmpl: '<script src="%s"></script>',
  21. appRoot: '.tmp/public'
  22. },
  23. files: {
  24. '.tmp/public/**/*.html': require('../pipeline').jsFilesToInject,
  25. 'views/**/*.html': require('../pipeline').jsFilesToInject,
  26. 'views/**/*.ejs': require('../pipeline').jsFilesToInject
  27. }
  28. },
  29. devJsRelative: {
  30. options: {
  31. startTag: '<!--SCRIPTS-->',
  32. endTag: '<!--SCRIPTS END-->',
  33. fileTmpl: '<script src="%s"></script>',
  34. appRoot: '.tmp/public',
  35. relative: true
  36. },
  37. files: {
  38. '.tmp/public/**/*.html': require('../pipeline').jsFilesToInject,
  39. 'views/**/*.html': require('../pipeline').jsFilesToInject,
  40. 'views/**/*.ejs': require('../pipeline').jsFilesToInject
  41. }
  42. },
  43. prodJs: {
  44. options: {
  45. startTag: '<!--SCRIPTS-->',
  46. endTag: '<!--SCRIPTS END-->',
  47. fileTmpl: '<script src="%s"></script>',
  48. appRoot: '.tmp/public'
  49. },
  50. files: {
  51. '.tmp/public/**/*.html': ['.tmp/public/min/production.min.js'],
  52. 'views/**/*.html': ['.tmp/public/min/production.min.js'],
  53. 'views/**/*.ejs': ['.tmp/public/min/production.min.js']
  54. }
  55. },
  56. prodJsRelative: {
  57. options: {
  58. startTag: '<!--SCRIPTS-->',
  59. endTag: '<!--SCRIPTS END-->',
  60. fileTmpl: '<script src="%s"></script>',
  61. appRoot: '.tmp/public',
  62. relative: true
  63. },
  64. files: {
  65. '.tmp/public/**/*.html': ['.tmp/public/min/production.min.js'],
  66. 'views/**/*.html': ['.tmp/public/min/production.min.js'],
  67. 'views/**/*.ejs': ['.tmp/public/min/production.min.js']
  68. }
  69. },
  70. devStyles: {
  71. options: {
  72. startTag: '<!--STYLES-->',
  73. endTag: '<!--STYLES END-->',
  74. fileTmpl: '<link rel="stylesheet" href="%s">',
  75. appRoot: '.tmp/public'
  76. },
  77. files: {
  78. '.tmp/public/**/*.html': require('../pipeline').cssFilesToInject,
  79. 'views/**/*.html': require('../pipeline').cssFilesToInject,
  80. 'views/**/*.ejs': require('../pipeline').cssFilesToInject
  81. }
  82. },
  83. devStylesRelative: {
  84. options: {
  85. startTag: '<!--STYLES-->',
  86. endTag: '<!--STYLES END-->',
  87. fileTmpl: '<link rel="stylesheet" href="%s">',
  88. appRoot: '.tmp/public',
  89. relative: true
  90. },
  91. files: {
  92. '.tmp/public/**/*.html': require('../pipeline').cssFilesToInject,
  93. 'views/**/*.html': require('../pipeline').cssFilesToInject,
  94. 'views/**/*.ejs': require('../pipeline').cssFilesToInject
  95. }
  96. },
  97. prodStyles: {
  98. options: {
  99. startTag: '<!--STYLES-->',
  100. endTag: '<!--STYLES END-->',
  101. fileTmpl: '<link rel="stylesheet" href="%s">',
  102. appRoot: '.tmp/public'
  103. },
  104. files: {
  105. '.tmp/public/index.html': ['.tmp/public/min/production.min.css'],
  106. 'views/**/*.html': ['.tmp/public/min/production.min.css'],
  107. 'views/**/*.ejs': ['.tmp/public/min/production.min.css']
  108. }
  109. },
  110. prodStylesRelative: {
  111. options: {
  112. startTag: '<!--STYLES-->',
  113. endTag: '<!--STYLES END-->',
  114. fileTmpl: '<link rel="stylesheet" href="%s">',
  115. appRoot: '.tmp/public',
  116. relative: true
  117. },
  118. files: {
  119. '.tmp/public/index.html': ['.tmp/public/min/production.min.css'],
  120. 'views/**/*.html': ['.tmp/public/min/production.min.css'],
  121. 'views/**/*.ejs': ['.tmp/public/min/production.min.css']
  122. }
  123. },
  124. // Bring in JST template object
  125. devTpl: {
  126. options: {
  127. startTag: '<!--TEMPLATES-->',
  128. endTag: '<!--TEMPLATES END-->',
  129. fileTmpl: '<script type="text/javascript" src="%s"></script>',
  130. appRoot: '.tmp/public'
  131. },
  132. files: {
  133. '.tmp/public/index.html': ['.tmp/public/jst.js'],
  134. 'views/**/*.html': ['.tmp/public/jst.js'],
  135. 'views/**/*.ejs': ['.tmp/public/jst.js']
  136. }
  137. },
  138. devJsJade: {
  139. options: {
  140. startTag: '// SCRIPTS',
  141. endTag: '// SCRIPTS END',
  142. fileTmpl: 'script(src="%s")',
  143. appRoot: '.tmp/public'
  144. },
  145. files: {
  146. 'views/**/*.jade': require('../pipeline').jsFilesToInject
  147. }
  148. },
  149. devJsRelativeJade: {
  150. options: {
  151. startTag: '// SCRIPTS',
  152. endTag: '// SCRIPTS END',
  153. fileTmpl: 'script(src="%s")',
  154. appRoot: '.tmp/public',
  155. relative: true
  156. },
  157. files: {
  158. 'views/**/*.jade': require('../pipeline').jsFilesToInject
  159. }
  160. },
  161. prodJsJade: {
  162. options: {
  163. startTag: '// SCRIPTS',
  164. endTag: '// SCRIPTS END',
  165. fileTmpl: 'script(src="%s")',
  166. appRoot: '.tmp/public'
  167. },
  168. files: {
  169. 'views/**/*.jade': ['.tmp/public/min/production.min.js']
  170. }
  171. },
  172. prodJsRelativeJade: {
  173. options: {
  174. startTag: '// SCRIPTS',
  175. endTag: '// SCRIPTS END',
  176. fileTmpl: 'script(src="%s")',
  177. appRoot: '.tmp/public',
  178. relative: true
  179. },
  180. files: {
  181. 'views/**/*.jade': ['.tmp/public/min/production.min.js']
  182. }
  183. },
  184. devStylesJade: {
  185. options: {
  186. startTag: '// STYLES',
  187. endTag: '// STYLES END',
  188. fileTmpl: 'link(rel="stylesheet", href="%s")',
  189. appRoot: '.tmp/public'
  190. },
  191. files: {
  192. 'views/**/*.jade': require('../pipeline').cssFilesToInject
  193. }
  194. },
  195. devStylesRelativeJade: {
  196. options: {
  197. startTag: '// STYLES',
  198. endTag: '// STYLES END',
  199. fileTmpl: 'link(rel="stylesheet", href="%s")',
  200. appRoot: '.tmp/public',
  201. relative: true
  202. },
  203. files: {
  204. 'views/**/*.jade': require('../pipeline').cssFilesToInject
  205. }
  206. },
  207. prodStylesJade: {
  208. options: {
  209. startTag: '// STYLES',
  210. endTag: '// STYLES END',
  211. fileTmpl: 'link(rel="stylesheet", href="%s")',
  212. appRoot: '.tmp/public'
  213. },
  214. files: {
  215. 'views/**/*.jade': ['.tmp/public/min/production.min.css']
  216. }
  217. },
  218. prodStylesRelativeJade: {
  219. options: {
  220. startTag: '// STYLES',
  221. endTag: '// STYLES END',
  222. fileTmpl: 'link(rel="stylesheet", href="%s")',
  223. appRoot: '.tmp/public',
  224. relative: true
  225. },
  226. files: {
  227. 'views/**/*.jade': ['.tmp/public/min/production.min.css']
  228. }
  229. },
  230. // Bring in JST template object
  231. devTplJade: {
  232. options: {
  233. startTag: '// TEMPLATES',
  234. endTag: '// TEMPLATES END',
  235. fileTmpl: 'script(type="text/javascript", src="%s")',
  236. appRoot: '.tmp/public'
  237. },
  238. files: {
  239. 'views/**/*.jade': ['.tmp/public/jst.js']
  240. }
  241. }
  242. });
  243. grunt.loadNpmTasks('grunt-sails-linker');
  244. };