css-build.js 1.8 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778
  1. /** plugin builder for requirejs optimization
  2. */
  3. define(function() {
  4. var fs = require.nodeRequire('fs');
  5. function loadfile (url, callback) {
  6. var file = fs.readFileSync(url, 'utf8');
  7. //Remove BOM (Byte Mark Order) from utf8 files if it is there.
  8. if (file.indexOf('\uFEFF') === 0) {
  9. file = file.substring(1);
  10. }
  11. callback(file);
  12. };
  13. function strip (content) {
  14. return content.replace(/[\r\n]+/g," ").replace(/[\t]/g," ");
  15. }
  16. var buildMap = {};
  17. var writeonce = false;
  18. var loader =
  19. {
  20. load: function (name, require, load, config) {
  21. //console.log('css-build: load: '+name);
  22. load(true);
  23. loadfile(config.baseUrl+name,function(F){
  24. buildMap[name]=strip(F);
  25. });
  26. },
  27. write: function (pluginName, moduleName, write, config) {
  28. if( !writeonce)
  29. {
  30. writeonce=true;
  31. write(
  32. "define('"+pluginName+"-embed', function()\n{\n"+
  33. "\tfunction embed_css(content)\n"+
  34. "\t{\n"+
  35. "\t\tvar head = document.getElementsByTagName('head')[0],\n"+
  36. "\t\tstyle = document.createElement('style'),\n"+
  37. "\t\trules = document.createTextNode(content);\n"+
  38. "\t\tstyle.type = 'text/css';\n"+
  39. "\t\tif(style.styleSheet)\n"+
  40. "\t\t\tstyle.styleSheet.cssText = rules.nodeValue;\n"+
  41. "\t\telse style.appendChild(rules);\n"+
  42. "\t\t\thead.appendChild(style);\n"+
  43. "\t}\n"+
  44. "\treturn embed_css;\n"+
  45. "});\n"
  46. );
  47. }
  48. write(
  49. "define('"+pluginName+'!'+moduleName+"', ['"+pluginName+"-embed'], \n"+
  50. "function(embed)\n{\n"+
  51. "\tembed(\n\t'"+buildMap[moduleName].replace(/'/g, "\\'")+"'\n\t);\n"+
  52. "\treturn true;\n"+
  53. "});\n"
  54. );
  55. },
  56. writeFile: function (pluginName, moduleName, write)
  57. {
  58. //console.log('css-build: writeFile');
  59. },
  60. onLayerEnd: function (write, data)
  61. {
  62. //console.log('css-build: onLayerEnd');
  63. }
  64. };
  65. return loader;
  66. });