| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132 |
- 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;
|