Gruntfile.js 17 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381382383384385386387388389390391392393394395396397398399400401402403404405406407408409410411412413414415416417418419420421422423424425426427428429430431432433434435436437438439
  1. /* jshint node:true */
  2. var shell = require( 'shelljs' );
  3. module.exports = function( grunt ) {
  4. // Project configuration.
  5. grunt.initConfig(
  6. {
  7. pkg: grunt.file.readJSON( 'package.json' ),
  8. concat: {
  9. options: {
  10. separator: ';'
  11. },
  12. core: {
  13. src: [
  14. 'ReduxCore/assets/js/vendor/cookie.js',
  15. 'ReduxCore/assets/js/vendor/jquery.typewatch.js',
  16. 'ReduxCore/assets/js/vendor/jquery.serializeForm.js',
  17. 'ReduxCore/assets/js/vendor/jquery.alphanum.js',
  18. 'ReduxCore/assets/js/redux.js'
  19. ],
  20. dest: 'ReduxCore/assets/js/redux.min.js'
  21. },
  22. vendor: {
  23. src: [
  24. 'ReduxCore/assets/js/vendor/cookie.js',
  25. 'ReduxCore/assets/js/vendor/jquery.serializeForm.js',
  26. 'ReduxCore/assets/js/vendor/jquery.typewatch.js',
  27. 'ReduxCore/assets/js/vendor/jquery.alphanum.js'
  28. ],
  29. dest: 'ReduxCore/assets/js/vendor.min.js'
  30. }
  31. },
  32. 'gh-pages': {
  33. options: {
  34. base: 'docs',
  35. message: 'Update docs and files to distribute'
  36. },
  37. dev: {
  38. src: ['docs/**/*', 'bin/CNAME']
  39. },
  40. travis: {
  41. options: {
  42. repo: 'https://' + process.env.GH_TOKEN + '@github.com/ReduxFramework/docs.reduxframework.com.git',
  43. user: {
  44. name: 'Travis',
  45. email: 'travis@travis-ci.org'
  46. },
  47. silent: false
  48. },
  49. src: ['**/*']
  50. }
  51. },
  52. uglify: {
  53. fields: {
  54. files: [
  55. {
  56. expand: true,
  57. cwd: 'ReduxCore/inc/fields',
  58. src: ['**/*.js', '!**/*.min.js', '!ace_editor/vendor/*.js', '!ace_editor/vendor/snippets/*.js', '!slider/vendor/nouislider/*.*', '!spinner/vendor/*.*'],
  59. ext: '.min.js',
  60. dest: 'ReduxCore/inc/fields'
  61. }
  62. ]
  63. },
  64. extensions: {
  65. files: [
  66. {
  67. expand: true,
  68. cwd: 'ReduxCore/inc/extensions',
  69. src: ['**/*.js', '!**/*.min.js'],
  70. ext: '.min.js',
  71. dest: 'ReduxCore/inc/extensions'
  72. }
  73. ]
  74. },
  75. core: {
  76. files: {
  77. 'ReduxCore/assets/js/redux.min.js': [
  78. 'ReduxCore/assets/js/redux.min.js'
  79. ],
  80. 'ReduxCore/assets/js/vendor/spectrum/redux-spectrum.min.js': [
  81. 'ReduxCore/assets/js/vendor/spectrum/redux-spectrum.js'
  82. ],
  83. 'ReduxCore/assets/js/vendor/redux.select2.sortable.min.js': [
  84. 'ReduxCore/assets/js/vendor/redux.select2.sortable.js'
  85. ],
  86. 'ReduxCore/assets/js/media/media.min.js': [
  87. 'ReduxCore/assets/js/media/media.js'
  88. ]
  89. }
  90. },
  91. vendor: {
  92. files: {
  93. 'ReduxCore/assets/js/vendor.min.js': [
  94. 'ReduxCore/assets/js/vendor.min.js'
  95. ]
  96. }
  97. }
  98. },
  99. qunit: {
  100. files: ['test/qunit/**/*.html']
  101. },
  102. // JavaScript linting with JSHint.
  103. jshint: {
  104. options: {
  105. jshintrc: '.jshintrc',
  106. reporterOutput: ''
  107. },
  108. files: [
  109. //'Gruntfile.js',
  110. //'ReduxCore/assecd ..
  111. //ts/js/import_export/import_export.js',
  112. 'ReduxCore/assets/js/media/media.js',
  113. 'ReduxCore/inc/fields/ace_editor/field_ace_editor.js',
  114. 'ReduxCore/inc/fields/background/field_background.js',
  115. 'ReduxCore/inc/fields/border/field_border.js',
  116. 'ReduxCore/inc/fields/button_set/field_button_set.js',
  117. 'ReduxCore/inc/fields/checkbox/field_checkbox.js',
  118. 'ReduxCore/inc/fields/color/field_color.js',
  119. 'ReduxCore/inc/fields/color_rgba/field_color_rgba.js',
  120. 'ReduxCore/inc/fields/date/field_date.js',
  121. 'ReduxCore/inc/fields/dimensions/field_dimensions.js',
  122. 'ReduxCore/inc/fields/editor/field_editor.js',
  123. 'ReduxCore/inc/fields/gallery/field_gallery.js',
  124. 'ReduxCore/inc/fields/image_select/field_image_select.js',
  125. 'ReduxCore/inc/fields/multi_text/field_multitext.js',
  126. 'ReduxCore/inc/fields/palette/field_palette.js',
  127. 'ReduxCore/inc/fields/select/field_select.js',
  128. 'ReduxCore/inc/fields/select_image/field_select_image.js',
  129. 'ReduxCore/inc/fields/slider/field_slider.js',
  130. 'ReduxCore/inc/fields/slides/field_slides.js',
  131. 'ReduxCore/inc/fields/sortable/field_sortable.js',
  132. 'ReduxCore/inc/fields/sorter/field_sorter.js',
  133. 'ReduxCore/inc/fields/spacing/field_spacing.js',
  134. 'ReduxCore/inc/fields/spinner/field_spinner.js',
  135. 'ReduxCore/inc/fields/switch/field_switch.js',
  136. 'ReduxCore/inc/fields/typography/field_typography.js',
  137. //'ReduxCore/inc/extensions/customizer/extension_customizer.js',
  138. 'ReduxCore/inc/extensions/import_export/import_export/field_import_export.js',
  139. 'ReduxCore/inc/extensions/options_object/options_object/field_options_object.js',
  140. 'ReduxCore/assets/js/redux.js'
  141. ]
  142. },
  143. // Watch changes for files.
  144. watch: {
  145. ui: {
  146. files: ['<%= jshint.files %>'],
  147. tasks: ['jshint']
  148. },
  149. php: {
  150. files: ['ReduxCore/**/*.php'],
  151. //tasks: ['phplint:core']
  152. },
  153. css: {
  154. files: ['ReduxCore/**/*.less'],
  155. tasks: ['less:development']
  156. }
  157. },
  158. // Add textdomain.
  159. addtextdomain: {
  160. options: {
  161. textdomain: 'redux-framework', // Project text domain.
  162. updateDomains: ['redux', 'redux-framework-demo', 'v'] // List of text domains to replace.
  163. },
  164. target: {
  165. files: {
  166. src: ['*.php', '**/*.php', '!node_modules/**', '!tests/**', '!sample/**']
  167. }
  168. }
  169. },
  170. // Generate POT files.
  171. makepot: {
  172. redux: {
  173. options: {
  174. type: 'wp-plugin',
  175. domainPath: 'ReduxCore/languages',
  176. potFilename: 'redux-framework.pot',
  177. include: [],
  178. exclude: [
  179. 'sample/.*'
  180. ],
  181. potHeaders: {
  182. poedit: true,
  183. 'report-msgid-bugs-to': 'https://github.com/ReduxFramework/ReduxFramework/issues',
  184. 'language-team': 'LANGUAGE <support@reduxframework.com>'
  185. }
  186. }
  187. }
  188. },
  189. // Check textdomain errors.
  190. checktextdomain: {
  191. options: {
  192. keywords: [
  193. '__:1,2d',
  194. '_e:1,2d',
  195. '_x:1,2c,3d',
  196. 'esc_html__:1,2d',
  197. 'esc_html_e:1,2d',
  198. 'esc_html_x:1,2c,3d',
  199. 'esc_attr__:1,2d',
  200. 'esc_attr_e:1,2d',
  201. 'esc_attr_x:1,2c,3d',
  202. '_ex:1,2c,3d',
  203. '_n:1,2,4d',
  204. '_nx:1,2,4c,5d',
  205. '_n_noop:1,2,3d',
  206. '_nx_noop:1,2,3c,4d'
  207. ]
  208. },
  209. redux: {
  210. cwd: 'ReduxCore/',
  211. options: {
  212. text_domain: 'redux-framework',
  213. },
  214. src: ['**/*.php'],
  215. expand: true
  216. },
  217. sample: {
  218. cwd: 'sample',
  219. options: {
  220. text_domain: 'redux-framework-demo',
  221. },
  222. src: ['**/*.php'],
  223. expand: true
  224. }
  225. },
  226. // Exec shell commands.
  227. shell: {
  228. options: {
  229. stdout: true,
  230. stderr: true
  231. },
  232. // Limited to Maintainers so
  233. // txpush: {
  234. // command: 'tx push -s' // push the resources
  235. // },
  236. txpull: {
  237. command: 'tx pull -a --minimum-perc=25' // pull the .po files
  238. }
  239. },
  240. // Generate MO files.
  241. potomo: {
  242. dist: {
  243. options: {
  244. poDel: true
  245. },
  246. files: [{
  247. expand: true,
  248. cwd: 'ReduxCore/languages/',
  249. src: ['*.po'],
  250. dest: 'ReduxCore/languages/',
  251. ext: '.mo',
  252. nonull: true
  253. }]
  254. }
  255. },
  256. // phpdocumentor: {
  257. // options: {
  258. // directory: 'ReduxCore/',
  259. // target: 'docs/'
  260. // },
  261. // generate: {}
  262. // },
  263. //
  264. // phplint: {
  265. // options: {
  266. // swapPath: './'
  267. // },
  268. // core: ["ReduxCore/**/*.php"],
  269. // plugin: ["class-redux-plugin.php", "index.php", "redux-framework.php"]
  270. // },
  271. sass: {
  272. fields: {
  273. options: {
  274. sourcemap: 'none',
  275. style: 'compressed',
  276. noCache: true
  277. },
  278. files: [{
  279. expand: true, // Enable dynamic expansion.
  280. cwd: 'ReduxCore/inc/fields', // Src matches are relative to this path.
  281. src: ['**/*.scss'], // Actual pattern(s) to match.
  282. dest: 'ReduxCore/inc/fields', // Destination path prefix.
  283. ext: '.css' // Dest filepaths will have this extension.
  284. }]
  285. },
  286. extensions: {
  287. options: {
  288. sourcemap: 'none',
  289. style: 'compressed',
  290. noCache: true,
  291. },
  292. files: [{
  293. expand: true, // Enable dynamic expansion.
  294. cwd: 'ReduxCore/inc/extensions', // Src matches are relative to this path.
  295. src: ['**/*.scss'], // Actual pattern(s) to match.
  296. dest: 'ReduxCore/inc/extensions', // Destination path prefix.
  297. ext: '.css' // Dest filepaths will have this extension.
  298. }]
  299. },
  300. vendor: {
  301. options: {
  302. sourcemap: 'none',
  303. style: 'compressed',
  304. noCache: true
  305. },
  306. files: {
  307. "ReduxCore/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.css": [
  308. "ReduxCore/assets/css/vendor/jquery-ui-bootstrap/jquery-ui-1.10.0.custom.scss"
  309. ],
  310. "ReduxCore/assets/css/vendor/elusive-icons/elusive-icons.css": [
  311. "ReduxCore/assets/css/vendor/elusive-icons/scss/elusive-icons.scss"
  312. ],
  313. }
  314. },
  315. admin: {
  316. options: {
  317. sourcemap: 'none',
  318. style: 'compressed',
  319. noCache: true
  320. },
  321. files: {
  322. "ReduxCore/assets/css/color-picker/color-picker.css": [
  323. "ReduxCore/assets/css/color-picker/color-picker.scss"
  324. ],
  325. "ReduxCore/assets/css/media/media.css": [
  326. "ReduxCore/assets/css/media/media.scss"
  327. ],
  328. "ReduxCore/assets/css/redux-admin.css": [
  329. "ReduxCore/assets/css/redux-admin.scss"
  330. ],
  331. "ReduxCore/assets/css/rtl.css": [
  332. "ReduxCore/assets/css/rtl.scss"
  333. ]
  334. }
  335. },
  336. welcome: {
  337. options: {
  338. sourcemap: 'none',
  339. style: 'compressed',
  340. noCache: true
  341. },
  342. files: {
  343. "ReduxCore/inc/welcome/css/redux-welcome.css": [
  344. "ReduxCore/inc/welcome/css/redux-welcome.scss"
  345. ]
  346. }
  347. }
  348. },
  349. cssmin: {
  350. fields: {
  351. files: {
  352. 'ReduxCore/assets/css/redux-fields.css': [
  353. 'ReduxCore/inc/fields/**/*.css',
  354. "ReduxCore/assets/css/color-picker/color-picker.css",
  355. "ReduxCore/assets/css/media/media.css"
  356. ]
  357. }
  358. },
  359. }
  360. }
  361. );
  362. // Load NPM tasks to be used here
  363. grunt.loadNpmTasks( 'grunt-shell' );
  364. grunt.loadNpmTasks( 'grunt-potomo' );
  365. grunt.loadNpmTasks( 'grunt-wp-i18n' );
  366. grunt.loadNpmTasks( 'grunt-checktextdomain' );
  367. grunt.loadNpmTasks( 'grunt-contrib-jshint' );
  368. grunt.loadNpmTasks( 'grunt-contrib-sass' );
  369. grunt.loadNpmTasks( 'grunt-contrib-uglify' );
  370. grunt.loadNpmTasks( 'grunt-contrib-watch' );
  371. grunt.loadNpmTasks( 'grunt-contrib-cssmin' );
  372. grunt.loadNpmTasks( 'grunt-contrib-concat' );
  373. grunt.loadNpmTasks( 'grunt-gh-pages' );
  374. //grunt.loadNpmTasks( "grunt-phplint" );
  375. grunt.registerTask(
  376. 'langUpdate', [
  377. 'addtextdomain',
  378. 'makepot',
  379. 'shell:txpull',
  380. 'potomo'
  381. ]
  382. );
  383. // Default task(s).
  384. grunt.registerTask(
  385. 'default', [
  386. 'jshint',
  387. 'concat:core',
  388. 'uglify:core',
  389. 'concat:vendor',
  390. 'uglify:vendor',
  391. 'uglify:fields',
  392. 'uglify:extensions',
  393. "sass:admin",
  394. "sass:fields",
  395. "sass:extensions",
  396. "sass:vendor",
  397. 'cssmin'
  398. ]
  399. );
  400. //grunt.registerTask( 'travis', ['jshint', 'lintPHP'] );
  401. // this would be run by typing "grunt test" on the command line
  402. grunt.registerTask( 'testJS', ['jshint', 'concat:core', 'concat:vendor'] );
  403. grunt.registerTask( 'watchUI', ['watch:ui'] );
  404. grunt.registerTask( 'watchPHP', ['watch:php', 'phplint:core', 'phplint:plugin'] );
  405. //grunt.registerTask( "lintPHP", ["phplint:plugin", "phplint:core"] );
  406. grunt.registerTask( "compileSCSS", ["sass:admin", "sass:fields", "sass:extensions", "sass:vendor", "sass:welcome"] );
  407. grunt.registerTask(
  408. 'compileJS',
  409. ['jshint', 'concat:core', 'uglify:core', 'concat:vendor', 'uglify:vendor', 'uglify:fields', 'uglify:extensions']
  410. );
  411. grunt.registerTask( 'compileTestJS', ['jshint', 'concat:core', 'concat:vendor'] );
  412. grunt.registerTask( 'compileCSS', ['cssmin'] );
  413. };