Modules.coffee 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839
  1. fs = require "fs"
  2. Path = require "path"
  3. jade = require "jade"
  4. MODULE_BASE_PATH = Path.resolve(__dirname + "/../../../modules")
  5. module.exports = Modules =
  6. modules: []
  7. loadModules: () ->
  8. for moduleName in fs.readdirSync(MODULE_BASE_PATH)
  9. if fs.existsSync(Path.join(MODULE_BASE_PATH, moduleName, "index.js"))
  10. loadedModule = require(Path.join(MODULE_BASE_PATH, moduleName, "index"))
  11. loadedModule.name = moduleName
  12. @modules.push loadedModule
  13. applyRouter: (app) ->
  14. for module in @modules
  15. module.router?.apply(app)
  16. viewIncludes: {}
  17. loadViewIncludes: (app) ->
  18. @viewIncludes = {}
  19. for module in @modules
  20. for view, partial of module.viewIncludes or {}
  21. @viewIncludes[view] ||= []
  22. @viewIncludes[view].push fs.readFileSync(Path.join(MODULE_BASE_PATH, module.name, "app/views", partial + ".jade"))
  23. moduleIncludes: (view, locals) ->
  24. partials = Modules.viewIncludes[view] or []
  25. html = ""
  26. for partial in partials
  27. compiler = jade.compile(partial, doctype: "html")
  28. html += compiler(locals)
  29. return html
  30. moduleIncludesAvailable: (view) ->
  31. return (Modules.viewIncludes[view] or []).length > 0
  32. Modules.loadModules()