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.

605 lines
13 KiB

11 years ago
Merge branch 'css' of github.com:jlukic/Semantic-UI into css Conflicts: Gruntfile.js build/less/elements/button.less build/less/modules/rating.js build/minified/elements/button.min.css build/minified/modules/rating.js build/minified/modules/rating.min.css build/minified/modules/rating.min.js build/packaged/css/semantic.css.REMOVED.git-id build/packaged/css/semantic.min.css.REMOVED.git-id build/packaged/javascript/semantic.js.REMOVED.git-id build/packaged/javascript/semantic.min.js.REMOVED.git-id build/uncompressed/elements/button.css build/uncompressed/modules/rating.js node/src/files/build/less/elements/button.less node/src/files/build/less/modules/rating.js node/src/files/build/less/modules/rating.less node/src/files/build/minified/elements/button.min.css node/src/files/build/minified/modules/rating.js node/src/files/build/minified/modules/rating.min.css node/src/files/build/minified/modules/rating.min.js node/src/files/build/packaged/css/semantic.css.REMOVED.git-id node/src/files/build/packaged/css/semantic.min.css.REMOVED.git-id node/src/files/build/packaged/javascript/semantic.js.REMOVED.git-id node/src/files/build/packaged/javascript/semantic.min.js.REMOVED.git-id node/src/files/build/semantic.zip.REMOVED.git-id node/src/files/build/uncompressed/elements/button.css node/src/files/build/uncompressed/modules/rating.css node/src/files/build/uncompressed/modules/rating.js rtl/less/elements/button.less rtl/less/modules/rating.js rtl/minified/elements/button.min.css rtl/minified/modules/rating.js rtl/minified/modules/rating.min.css rtl/minified/modules/rating.min.js rtl/packaged/css/semantic.css.REMOVED.git-id rtl/packaged/css/semantic.min.css.REMOVED.git-id rtl/packaged/javascript/semantic.js.REMOVED.git-id rtl/packaged/javascript/semantic.min.js.REMOVED.git-id rtl/uncompressed/elements/button.css rtl/uncompressed/modules/rating.js src/elements/button.less
11 years ago
11 years ago
  1. module.exports = function(grunt) {
  2. var
  3. defaultTasks = [
  4. // run grunt watch
  5. 'watch'
  6. ],
  7. watchTasks = [
  8. // compiles less to docs
  9. 'less:buildDocsCSS',
  10. // auto prefix doc files
  11. 'autoprefixer:prefixDocs',
  12. // copies assets and js over to docs
  13. 'copy:srcToDocs',
  14. // copies examples over to docs
  15. 'copy:examplesToDocs'
  16. ],
  17. testWatchTasks = [
  18. 'clear',
  19. 'karma:watch:run'
  20. ],
  21. testTasks = [
  22. // compiles less to docs so phantomjs can read
  23. 'less:buildTestCSS',
  24. // test components
  25. 'karma:travis'
  26. ],
  27. specTasks = [
  28. // generate code docs
  29. 'docco:generate',
  30. // copies spec files over to docs
  31. 'copy:specToDocs'
  32. ],
  33. buildTasks = [
  34. // clean build directory
  35. 'clean:build',
  36. // compiles less
  37. 'less:buildCSS',
  38. // copies assets and js over to build dir
  39. 'copy:srcToBuild',
  40. // creates minified css of each file
  41. 'cssmin:minifyCSS',
  42. // adds custom license in header
  43. 'cssmin:addBanner',
  44. // create concatenated css release
  45. 'concat:concatenateCSS',
  46. // create concatenated js release
  47. 'concat:concatenateJS',
  48. // creates minified js of each file
  49. 'uglify:minifyJS',
  50. // creates release js of all together
  51. 'uglify:buildReleaseJS',
  52. // creates minified css of each file
  53. 'cssmin:minifyCSS',
  54. // creates custom license in header
  55. 'cssmin:addBanner',
  56. // auto prefix build files
  57. 'autoprefixer:prefixBuild',
  58. // cleans previous generated release
  59. 'clean:release',
  60. // creates release zip
  61. 'compress:everything',
  62. // copies assets to rtl
  63. 'copy:buildToRTL',
  64. // create rtl release
  65. 'cssjanus:rtl',
  66. // copies examples over to docs
  67. 'copy:examplesToDocs',
  68. // copies files over to docs
  69. 'copy:buildToDocs',
  70. // generate code docs
  71. 'docco:generate',
  72. // copies spec files over to docs
  73. 'copy:specToDocs'
  74. ],
  75. setWatchTests = function(action, filePath) {
  76. var
  77. karmaFiles = grunt.config('karma.watch.files'),
  78. isJavascript = (filePath.search('.js') !== -1),
  79. isModule = (filePath.search('modules/') !== -1),
  80. isSpec = (filePath.search('.spec') !== -1),
  81. specFile = (isSpec)
  82. ? filePath
  83. : filePath
  84. .replace('src/', 'test/')
  85. .replace('.js', '.spec.js')
  86. ;
  87. if(isJavascript && (isSpec || isModule) ) {
  88. karmaFiles.pop();
  89. karmaFiles.push(specFile);
  90. }
  91. },
  92. setWatchFiles = function(action, filePath) {
  93. var
  94. buildPath = filePath.replace('src/', 'docs/build/uncompressed/').replace('less', 'css')
  95. ;
  96. if(filePath.search('.less') !== -1) {
  97. grunt.config('less.buildDocsCSS.src', filePath);
  98. grunt.config('less.buildDocsCSS.dest', buildPath);
  99. grunt.config('autoprefixer.prefixDocs.src', buildPath);
  100. }
  101. else {
  102. grunt.config('less.buildDocsCSS.src', 'non/existant/path');
  103. grunt.config('less.buildDocsCSS.dest', 'non/existant/path');
  104. }
  105. },
  106. // this allows filenames with multiple extensions to be preserved
  107. preserveFileExtensions = function(folder, filename) {
  108. return folder + filename.substring(0, filename.lastIndexOf('.') ) + '.css';
  109. },
  110. config
  111. ;
  112. config = {
  113. package : grunt.file.readJSON('package.json'),
  114. /*******************************
  115. Watch
  116. *******************************/
  117. // watches for changes in a source folder
  118. watch: {
  119. options: {
  120. spawn: false
  121. },
  122. scripts: {
  123. files: [
  124. 'test/**/*.js',
  125. 'src/**/*.js'
  126. ],
  127. tasks : testWatchTasks
  128. },
  129. src: {
  130. files: [
  131. 'build/examples/**/*',
  132. 'src/**/*.less',
  133. 'src/**/*.variables',
  134. 'src/**/*.js'
  135. ],
  136. tasks : watchTasks
  137. }
  138. },
  139. /*******************************
  140. Test
  141. *******************************/
  142. clear: {
  143. terminal: {
  144. }
  145. },
  146. karma: {
  147. watch: {
  148. configFile : 'karma.conf.js',
  149. background : true
  150. },
  151. travis: {
  152. configFile : 'karma.conf.js',
  153. singleRun : true
  154. }
  155. },
  156. /*******************************
  157. Build
  158. *******************************/
  159. autoprefixer: {
  160. options: {
  161. browsers: [
  162. 'last 2 version',
  163. '> 1%',
  164. 'ie 9',
  165. 'bb 10',
  166. 'android 4'
  167. ]
  168. },
  169. prefixBuild: {
  170. src : 'build/**/*.css'
  171. },
  172. prefixDocs: {
  173. src : 'docs/build/**/*.css'
  174. }
  175. },
  176. clean: {
  177. options: {
  178. force: true
  179. },
  180. build : [
  181. 'build/less',
  182. 'build/minified',
  183. 'build/packaged',
  184. 'build/uncompressed'
  185. ],
  186. release : [
  187. 'docs/build',
  188. 'docs',
  189. 'rtl'
  190. ]
  191. },
  192. docco: {
  193. generate: {
  194. options: {
  195. css : 'spec/assets/docco.css',
  196. output : 'spec/docs/'
  197. },
  198. files: [
  199. {
  200. expand : true,
  201. cwd : 'spec/',
  202. src : [
  203. '**.commented.js'
  204. ]
  205. }
  206. ]
  207. }
  208. },
  209. cssjanus: {
  210. rtl: {
  211. expand : true,
  212. cwd : 'build/',
  213. src : [
  214. '**/*.less',
  215. '**/*.css',
  216. ],
  217. dest : 'rtl'
  218. },
  219. },
  220. less: {
  221. options: {
  222. paths : ['src'],
  223. compress : false,
  224. optimization : 2
  225. },
  226. // optimized for watch, src is built on watch task using callbacks
  227. buildDocsCSS: {
  228. src : 'src',
  229. dest : 'docs/build/uncompressed/',
  230. rename : preserveFileExtensions
  231. },
  232. buildTestCSS: {
  233. expand : true,
  234. cwd : 'src',
  235. src : [
  236. '**/*.less'
  237. ],
  238. dest : 'docs/build/uncompressed/',
  239. rename: preserveFileExtensions
  240. },
  241. buildCSS: {
  242. expand : true,
  243. cwd : 'src',
  244. src : [
  245. '**/*.less'
  246. ],
  247. dest : 'build/uncompressed/',
  248. rename: preserveFileExtensions
  249. }
  250. },
  251. copy: {
  252. srcToDocs: {
  253. files: [
  254. // exact copy for less
  255. {
  256. expand : true,
  257. cwd : 'src/**/*.less',
  258. src : [
  259. '**/*'
  260. ],
  261. dest : 'docs/build/less'
  262. },
  263. // copy everything but less files for uncompressed release
  264. {
  265. expand : true,
  266. cwd : 'src/',
  267. src : [
  268. '**/*.js',
  269. 'images/*',
  270. 'fonts/*'
  271. ],
  272. dest : 'docs/build/uncompressed'
  273. },
  274. // copy assets only for minified version
  275. {
  276. expand : true,
  277. cwd : 'src/',
  278. src : [
  279. 'images/*',
  280. 'fonts/*'
  281. ],
  282. dest : 'docs/build/minified'
  283. },
  284. // copy assets only for packaged version
  285. {
  286. expand : true,
  287. cwd : 'src/',
  288. src : [
  289. 'images/*',
  290. 'fonts/*'
  291. ],
  292. dest : 'docs/build/packaged'
  293. }
  294. ]
  295. },
  296. srcToBuild: {
  297. files: [
  298. // exact copy for less
  299. {
  300. expand : true,
  301. cwd : 'src/',
  302. src : [
  303. '**/*'
  304. ],
  305. dest : 'build/less'
  306. },
  307. // copy everything but less files for uncompressed release
  308. {
  309. expand : true,
  310. cwd : 'src/',
  311. src : [
  312. '**/*.js',
  313. 'images/*',
  314. 'fonts/*'
  315. ],
  316. dest : 'build/uncompressed'
  317. },
  318. // copy assets only for minified version
  319. {
  320. expand : true,
  321. cwd : 'src/',
  322. src : [
  323. 'images/*',
  324. 'fonts/*'
  325. ],
  326. dest : 'build/minified'
  327. },
  328. // copy assets only for packaged version
  329. {
  330. expand : true,
  331. cwd : 'src/',
  332. src : [
  333. 'images/*',
  334. 'fonts/*'
  335. ],
  336. dest : 'build/packaged'
  337. }
  338. ]
  339. },
  340. // create new rtl assets
  341. buildToRTL: {
  342. files: [
  343. {
  344. expand : true,
  345. cwd : 'build/',
  346. src : [
  347. '**'
  348. ],
  349. dest : 'rtl'
  350. }
  351. ]
  352. },
  353. // make library available in docs
  354. buildToDocs: {
  355. files: [
  356. {
  357. expand : true,
  358. cwd : 'build/',
  359. src : [
  360. '**'
  361. ],
  362. dest : 'docs/build/'
  363. }
  364. ]
  365. },
  366. // copy spec files to docs
  367. specToDocs: {
  368. files: [
  369. {
  370. expand : true,
  371. cwd : 'spec',
  372. src : [
  373. '**'
  374. ],
  375. dest : 'docs/spec/'
  376. }
  377. ]
  378. },
  379. // copy spec files to docs
  380. examplesToDocs: {
  381. files: [
  382. {
  383. expand : true,
  384. cwd : 'build/examples',
  385. src : [
  386. '**'
  387. ],
  388. dest : 'docs/examples/'
  389. }
  390. ]
  391. }
  392. },
  393. compress: {
  394. options: {
  395. archive: 'docs/build/semantic.zip'
  396. },
  397. everything: {
  398. files: [
  399. {
  400. expand : true,
  401. cwd : 'build/',
  402. src : [
  403. '**'
  404. ]
  405. }
  406. ]
  407. }
  408. },
  409. concat: {
  410. options: {
  411. },
  412. concatenateCSS: {
  413. src: ['build/uncompressed/**/*.css'],
  414. dest: 'build/packaged/css/semantic.css'
  415. },
  416. concatenateJS: {
  417. src: ['build/uncompressed/**/*.js'],
  418. dest: 'build/packaged/javascript/semantic.js'
  419. },
  420. },
  421. cssmin: {
  422. // copy minified css to minified release
  423. minifyCSS: {
  424. expand : true,
  425. cwd : 'build/uncompressed',
  426. src : [
  427. '**/*.css'
  428. ],
  429. dest : 'build/minified',
  430. ext : '.min.css'
  431. },
  432. // add comment banner to css release
  433. addBanner: {
  434. options : {
  435. banner : '' +
  436. '/*\n' +
  437. '* # <%= package.title %>\n' +
  438. '* Version: <%= package.version %>\n' +
  439. '* http://github.com/jlukic/semantic-ui\n' +
  440. '*\n' +
  441. '*\n' +
  442. '* Copyright <%= grunt.template.today("yyyy") %> Contributors\n' +
  443. '* Released under the MIT license\n' +
  444. '* http://opensource.org/licenses/MIT\n' +
  445. '*\n' +
  446. '* Released: <%= grunt.template.today("mm/dd/yyyy") %>\n' +
  447. '*/\n'
  448. },
  449. files: {
  450. 'build/packaged/css/semantic.min.css': [
  451. 'build/uncompressed/**/*.css'
  452. ]
  453. }
  454. }
  455. },
  456. uglify: {
  457. minifyJS: {
  458. expand : true,
  459. cwd : 'build/uncompressed',
  460. src : [
  461. '**/*.js'
  462. ],
  463. dest : 'build/minified',
  464. ext : '.min.js',
  465. banner : '' +
  466. '/*' +
  467. '* # <%= package.title %>\n' +
  468. '* Version: <%= package.version %>\n' +
  469. '* http://github.com/jlukic/semantic-ui\n' +
  470. '*\n' +
  471. '*\n' +
  472. '* Copyright <%= grunt.template.today("yyyy") %> Contributors\n' +
  473. '* Released under the MIT license\n' +
  474. '* http://opensource.org/licenses/MIT\n' +
  475. '*\n' +
  476. '* Release Date: <%= grunt.template.today("mm/dd/yyyy") %>\n' +
  477. '*/\n'
  478. },
  479. buildReleaseJS: {
  480. options: {
  481. mangle : true,
  482. compress : true,
  483. banner : '' +
  484. '/*' +
  485. '* # <%= package.title %>\n' +
  486. '* Version: <%= package.version %>\n' +
  487. '* http://github.com/jlukic/semantic-ui\n' +
  488. '*\n' +
  489. '*\n' +
  490. '* Copyright <%= grunt.template.today("yyyy") %> Contributors\n' +
  491. '* Released under the MIT license\n' +
  492. '* http://opensource.org/licenses/MIT\n' +
  493. '*\n' +
  494. '* Release Date: <%= grunt.template.today("mm/dd/yyyy") %>\n' +
  495. '*/\n'
  496. },
  497. files: {
  498. 'build/packaged/javascript/semantic.min.js': [
  499. 'build/uncompressed/**/*.js'
  500. ]
  501. }
  502. }
  503. }
  504. };
  505. grunt.loadNpmTasks('grunt-contrib-clean');
  506. grunt.loadNpmTasks('grunt-contrib-compress');
  507. grunt.loadNpmTasks('grunt-contrib-concat');
  508. grunt.loadNpmTasks('grunt-contrib-copy');
  509. grunt.loadNpmTasks('grunt-contrib-cssmin');
  510. grunt.loadNpmTasks('grunt-contrib-less');
  511. grunt.loadNpmTasks('grunt-contrib-uglify');
  512. grunt.loadNpmTasks('grunt-contrib-watch');
  513. grunt.loadNpmTasks('grunt-autoprefixer');
  514. grunt.loadNpmTasks('grunt-docco-multi');
  515. grunt.loadNpmTasks('grunt-cssjanus');
  516. grunt.loadNpmTasks('grunt-clear');
  517. grunt.loadNpmTasks('grunt-karma');
  518. grunt.initConfig(config);
  519. grunt.registerTask('default', defaultTasks);
  520. grunt.registerTask('build', buildTasks);
  521. grunt.registerTask('spec', specTasks);
  522. grunt.registerTask('test', testTasks);
  523. // compiles only changed less files <https://npmjs.org/package/grunt-contrib-watch>
  524. grunt.event.on('watch', setWatchFiles);
  525. };