| OLD | NEW |
| 1 'use strict'; | 1 'use strict'; |
| 2 | 2 |
| 3 var express = require('express'), | 3 var express = require('express'), |
| 4 server = express(), | 4 server = express(), |
| 5 fs = require('fs'), | 5 fs = require('fs'), |
| 6 path = require('path'), | 6 path = require('path'), |
| 7 config = require('../config').config.server, | 7 config = require('../config').config.server, |
| 8 debugMode = (String(process.argv[2]).toLowerCase() === 'debug'), | 8 debugMode = (String(process.argv[2]).toLowerCase() === 'debug'), |
| 9 public_dir = config.public_dir, | 9 public_dir = config.public_dir, |
| 10 Templates = require('./templates.js'), | 10 Templates = require('./templates.js'), |
| 11 view = require('./view.js'); | 11 view = require('./view.js'); |
| 12 | 12 |
| 13 | 13 |
| 14 /** |
| 15 * It finds a file under the given path. The first match wins. |
| 16 * @param {string} path starting point. |
| 17 * @param {string} fileName name of the file to be found. |
| 18 * @return {string} the file path. |
| 19 */ |
| 20 function findFile(path, fileName) { |
| 21 var file, files = fs.readdirSync(path); |
| 22 for (var i = 0; i < files.length; i = i + 1) { |
| 23 if (files[i] === fileName) { |
| 24 return path + '/' + files[i]; |
| 25 } |
| 26 file = fs.statSync(path + '/' + files[i]); |
| 27 if (file.isDirectory()) { |
| 28 file = findFile(path + '/' + files[i], fileName); |
| 29 if (file) { |
| 30 return file; |
| 31 } |
| 32 } |
| 33 } |
| 34 return null; |
| 35 } |
| 36 |
| 14 server.configure(function() { | 37 server.configure(function() { |
| 15 server.set('views', __dirname + './lib/views/'); | 38 server.set('views', __dirname + './lib/views/'); |
| 16 server.set('view engine', 'handlebars'); | 39 server.set('view engine', 'handlebars'); |
| 17 server.set('view options', {layout: false}); | 40 server.set('view options', {layout: false}); |
| 18 server.engine('handlebars', view.handlebars); | 41 server.engine('handlebars', view.handlebars); |
| 19 | 42 |
| 20 server.use(express.logger('dev')); | 43 server.use(express.logger('dev')); |
| 21 // 'static' is a reserved word so dot notation is not used to | 44 // 'static' is a reserved word so dot notation is not used to |
| 22 // avoid annoying the linter. | 45 // avoid annoying the linter. |
| 23 server.use('/juju-ui', express['static'](public_dir)); | 46 server.use('/juju-ui', express['static'](public_dir)); |
| (...skipping 16 matching lines...) Expand all Loading... |
| 40 // Handles requests to the root path ('/') my simply sending the 'shell' page | 63 // Handles requests to the root path ('/') my simply sending the 'shell' page |
| 41 // which creates the `Y.App` instance. | 64 // which creates the `Y.App` instance. |
| 42 | 65 |
| 43 server.get('/stats/', function(req, res) { | 66 server.get('/stats/', function(req, res) { |
| 44 res.json({ | 67 res.json({ |
| 45 uptime: process.uptime(), | 68 uptime: process.uptime(), |
| 46 memory: process.memoryUsage() | 69 memory: process.memoryUsage() |
| 47 }); | 70 }); |
| 48 }); | 71 }); |
| 49 | 72 |
| 50 server.get('/assets/all-third.js', function(req, res) { | 73 server.get('/juju-ui/assets/stylesheets/:file', function(req, res) { |
| 74 var file, fileName = req.params.file; |
| 75 if (path.extname(fileName).toLowerCase() === '.css') { |
| 76 res.sendfile('app/assets/stylesheets/' + fileName); |
| 77 } else { |
| 78 // We've merged all the yui and third party files into a single css file. |
| 79 // YUI expects to load its images from the same path as its css files, so |
| 80 // we need to mock this position. When the system tries to load a resource |
| 81 // from "app/assets/stylesheets/", it tries to find this resource under the |
| 82 // "./app/assets" directory. The first match wins. Another solution would |
| 83 // be to manually copy all the images we need to the |
| 84 // "./app/assets/stylesheets" directory. |
| 85 // This is an example of image... |
| 86 // ./yui/datatable-sort/assets/skins/sam/sort-arrow-sprite-ie.png |
| 87 file = findFile('./app/assets', fileName); |
| 88 res.sendfile(file); |
| 89 } |
| 90 }); |
| 91 |
| 92 server.get('/juju-ui/assets/all-third.js', function(req, res) { |
| 51 res.sendfile('app/assets/javascripts/generated/all-third.js'); | 93 res.sendfile('app/assets/javascripts/generated/all-third.js'); |
| 52 }); | 94 }); |
| 53 | 95 |
| 54 server.get('/assets/modules.js', function(req, res) { | 96 server.get('/juju-ui/assets/modules.js', function(req, res) { |
| 55 if (debugMode) { | 97 if (debugMode) { |
| 56 res.sendfile('app/assets/javascripts/generated/all-app-debug.js'); | 98 res.sendfile('app/assets/javascripts/generated/all-app-debug.js'); |
| 57 } else { | 99 } else { |
| 58 res.sendfile('app/assets/javascripts/generated/all-app.js'); | 100 res.sendfile('app/assets/javascripts/generated/all-app.js'); |
| 59 } | 101 } |
| 60 }); | 102 }); |
| 61 | 103 |
| 62 server.get('/assets/yui.js', function(req, res) { | 104 server.get('/juju-ui/assets/yui.js', function(req, res) { |
| 63 if (debugMode) { | 105 if (debugMode) { |
| 64 res.sendfile('app/assets/javascripts/yui/yui/yui-debug.js'); | 106 res.sendfile('app/assets/javascripts/yui/yui/yui-debug.js'); |
| 65 } else { | 107 } else { |
| 66 res.sendfile('app/assets/javascripts/generated/all-yui.js'); | 108 res.sendfile('app/assets/javascripts/generated/all-yui.js'); |
| 67 } | 109 } |
| 68 }); | 110 }); |
| 69 | 111 |
| 70 server.get('*', function(req, res) { | 112 server.get('*', function(req, res) { |
| 71 res.sendfile('app/index.html'); | 113 res.sendfile('app/index.html'); |
| 72 }); | 114 }); |
| 73 | 115 |
| 74 exports.server = server; | 116 exports.server = server; |
| OLD | NEW |