ld31-space-diggers/node_modules/browser-sync/lib/server/utils.js
Ruben Müller 760c1838ed Add game
2014-12-07 20:57:49 +01:00

135 lines
3.4 KiB
JavaScript

"use strict";
var filePath = require("path");
var serveIndex = require("serve-index");
var serveStatic = require("serve-static");
var _ = require("lodash");
var snippetUtils = require("./../snippet").utils;
module.exports = {
/**
* The middleware that can emit location change events.
* @param {Object} io
* @param {Object} options
* @returns {Function}
*/
navigateCallback: function (io, options) {
var disabled = false;
var navigating = false;
var canNavigate = this.canNavigate;
return function (req, res, next) {
if (canNavigate(req, options, io)) {
var clients = io.sockets.clients();
if (clients.length && !disabled && !navigating) {
navigating = true;
disabled = true;
io.sockets.emit("location", {
url: req.url
});
var timer = setTimeout(function () {
disabled = false;
navigating = false;
clearInterval(timer);
}, 300);
}
}
if (typeof next === "function") {
next();
}
};
},
/**
* All the conditions that determine if we should emit
* a location:change event
* @param {Object} req
* @param {Object} options
* @returns {Boolean}
*/
canNavigate: function (req, options) {
var headers = req.headers || {};
if (req.method !== "GET") {
return false;
}
if (headers["x-requested-with"] !== undefined && headers["x-requested-with"] === "XMLHttpRequest") {
return false;
}
if (!options || !options.ghostMode || !options.ghostMode.location) {
return false;
}
if (snippetUtils.isExcluded(req.url, options.excludedFileTypes)) {
return false;
}
return true;
},
/**
* @param app
* @param middleware
* @returns {*}
*/
addMiddleware: function (app, middleware) {
if (Array.isArray(middleware)) {
middleware.forEach(function (item) {
app.use(item);
});
} else if (typeof middleware === "function") {
app.use(middleware);
}
return app;
},
/**
* @param app
* @param base
* @param index
*/
addBaseDir: function (app, base, index) {
if (Array.isArray(base)) {
base.forEach(function (item) {
app.use(serveStatic(filePath.resolve(item), {index: index}));
});
} else {
if ("string" === typeof base) {
app.use(serveStatic(filePath.resolve(base), {index: index}));
}
}
},
/**
* @param app
* @param base
*/
addDirectory: function (app, base) {
if (Array.isArray(base)) {
base = base[0];
}
app.use(serveIndex(filePath.resolve(base), {icons:true}));
},
/**
* @param app
* @param {Object} routes
*/
addRoutes: function (app, routes) {
Object.keys(routes).forEach(function (key) {
if (_.isString(key) && _.isString(routes[key])) {
app.use(key, serveStatic(filePath.resolve(routes[key])));
}
});
}
};