前端代码
This commit is contained in:
132
node_modules/browser-sync-ui/lib/plugins/history/history.js
generated
vendored
Normal file
132
node_modules/browser-sync-ui/lib/plugins/history/history.js
generated
vendored
Normal file
@ -0,0 +1,132 @@
|
||||
var url = require("url");
|
||||
var Immutable = require("immutable");
|
||||
|
||||
module.exports.init = function (ui, bs) {
|
||||
|
||||
var validUrls = Immutable.OrderedSet();
|
||||
|
||||
var methods = {
|
||||
/**
|
||||
* Send the url list to UI
|
||||
* @param urls
|
||||
*/
|
||||
sendUpdatedUrls: function (urls) {
|
||||
ui.socket.emit("ui:history:update", decorateUrls(urls));
|
||||
},
|
||||
/**
|
||||
* Only send to UI if list changed
|
||||
* @param current
|
||||
* @param temp
|
||||
*/
|
||||
sendUpdatedIfChanged: function (current, temp) {
|
||||
if (!Immutable.is(current, temp)) {
|
||||
validUrls = temp;
|
||||
methods.sendUpdatedUrls(validUrls);
|
||||
}
|
||||
},
|
||||
/**
|
||||
* Send all clients to a URL - this is a proxy
|
||||
* in case we need to limit/check anything.
|
||||
* @param data
|
||||
*/
|
||||
sendToUrl: function (data) {
|
||||
|
||||
var parsed = url.parse(data.path);
|
||||
|
||||
data.override = true;
|
||||
data.path = parsed.path;
|
||||
data.url = parsed.href;
|
||||
|
||||
ui.clients.emit("browser:location", data);
|
||||
},
|
||||
/**
|
||||
* Add a new path
|
||||
* @param data
|
||||
*/
|
||||
addPath: function (data) {
|
||||
var temp = addPath(validUrls, url.parse(data.href), bs.options.get("mode"));
|
||||
methods.sendUpdatedIfChanged(validUrls, temp, ui.socket);
|
||||
},
|
||||
/**
|
||||
* Remove a path
|
||||
* @param data
|
||||
*/
|
||||
removePath: function (data) {
|
||||
var temp = removePath(validUrls, data.path);
|
||||
methods.sendUpdatedIfChanged(validUrls, temp, ui.socket);
|
||||
},
|
||||
/**
|
||||
* Get the current list
|
||||
*/
|
||||
getVisited: function () {
|
||||
ui.socket.emit("ui:receive:visited", decorateUrls(validUrls));
|
||||
}
|
||||
};
|
||||
|
||||
ui.clients.on("connection", function (client) {
|
||||
client.on("ui:history:connected", methods.addPath);
|
||||
});
|
||||
|
||||
ui.socket.on("connection", function (uiClient) {
|
||||
/**
|
||||
* Send urls on first connection
|
||||
*/
|
||||
uiClient.on("ui:get:visited", methods.getVisited);
|
||||
methods.sendUpdatedUrls(validUrls);
|
||||
});
|
||||
|
||||
ui.listen("history", {
|
||||
"sendAllTo": methods.sendToUrl,
|
||||
"remove": methods.removePath,
|
||||
"clear": function () {
|
||||
validUrls = Immutable.OrderedSet([]);
|
||||
methods.sendUpdatedUrls(validUrls);
|
||||
}
|
||||
});
|
||||
|
||||
return methods;
|
||||
};
|
||||
|
||||
/**
|
||||
* @param {Immutable.Set} urls
|
||||
* @returns {Array}
|
||||
*/
|
||||
function decorateUrls (urls) {
|
||||
var count = 0;
|
||||
return urls.map(function (value) {
|
||||
count += 1;
|
||||
return {
|
||||
path: value,
|
||||
key: count
|
||||
};
|
||||
}).toJS().reverse();
|
||||
}
|
||||
|
||||
/**
|
||||
* If snippet mode, add the full URL
|
||||
* if server/proxy, add JUST the path
|
||||
* @param immSet
|
||||
* @param urlObj
|
||||
* @param mode
|
||||
* @returns {Set}
|
||||
*/
|
||||
function addPath(immSet, urlObj, mode) {
|
||||
return immSet.add(
|
||||
mode === "snippet"
|
||||
? urlObj.href
|
||||
: urlObj.path
|
||||
);
|
||||
}
|
||||
|
||||
module.exports.addPath = addPath;
|
||||
|
||||
/**
|
||||
* @param immSet
|
||||
* @param urlPath
|
||||
* @returns {*}
|
||||
*/
|
||||
function removePath(immSet, urlPath) {
|
||||
return immSet.remove(url.parse(urlPath).path);
|
||||
}
|
||||
|
||||
module.exports.removePath = removePath;
|
Reference in New Issue
Block a user