Skip to content
Snippets Groups Projects
Select Git revision
  • 5be8e1d8e9b9e6d52f6be83c11430c59c47b6340
  • v3.3 default protected
  • experimental protected
  • nrb/airmax-test
  • nrb/ro-flash-nanostation-airmax
  • nrb/add-node-whisperer
  • v3.2 protected
  • v3.1 protected
  • nrb-domains
  • v3.0 protected
  • nrb/dns-cache
  • v2.9 protected
  • feature/addMikrotikwAP
  • v2.8 protected
  • v2.5.1 protected
  • v2.7 protected
  • v2.6 protected
  • v2.5 protected
  • v2.4 protected
  • cpe510
  • nrb/gluon-master-cpe510
  • v3.2.1+2024-12-15
  • v3.2+2024-12-04
  • v3.1+2024-07-08
  • v2.9+2023-05-13
  • v2.9+2023-05-12
  • v2.9+2023-05-10
  • v2.8+2023-03-05
  • v2.7+2022-12-03
  • v2.6+2022-09-06
  • v2.5+2022-05-07
  • v2.5+2022-05-05
  • v2.4+2022-02-26
  • v2.3+2021-06-03
  • v2.3+2021-04-30
  • v2.2+2021-04-16
  • v2.2+2020-04-16
  • v2.1+2020-12-11
  • v2.1+2020-11-17
  • v2.0+2020-09-26
  • v2.0+2020-06-28
41 results

image-customization.lua

Blame
  • main.js 5.49 KiB
    define(['moment', 'utils/router', 'leaflet', 'gui', 'helper', 'utils/language'],
      function (moment, Router, L, GUI, helper, Language) {
        'use strict';
    
        return function (config) {
          function handleData(data) {
            var dataNodes = {};
            dataNodes.nodes = [];
            var dataGraph = {};
            dataGraph.batadv = {};
            dataGraph.batadv.nodes = [];
            dataGraph.batadv.links = [];
    
            function rearrangeLinks(d) {
              d.source += dataGraph.batadv.nodes.length;
              d.target += dataGraph.batadv.nodes.length;
            }
    
            for (var i = 0; i < data.length; ++i) {
              var vererr;
              if (i % 2) {
                if (data[i].version !== 1) {
                  vererr = 'Unsupported graph version: ' + data[i].version;
                  console.error(vererr); // silent fail
                } else {
                  data[i].batadv.links.forEach(rearrangeLinks);
                  dataGraph.batadv.nodes = dataGraph.batadv.nodes.concat(data[i].batadv.nodes);
                  dataGraph.batadv.links = dataGraph.batadv.links.concat(data[i].batadv.links);
                  dataGraph.timestamp = data[i].timestamp;
                }
              } else if (data[i].version !== 2) {
                vererr = 'Unsupported nodes version: ' + data[i].version;
                console.error(vererr); // silent fail
              } else {
                dataNodes.nodes = dataNodes.nodes.concat(data[i].nodes);
                dataNodes.timestamp = data[i].timestamp;
              }
            }
    
            var nodes = dataNodes.nodes.filter(function (d) {
              return 'firstseen' in d && 'lastseen' in d;
            });
    
            nodes.forEach(function (node) {
              node.firstseen = moment.utc(node.firstseen).local();
              node.lastseen = moment.utc(node.lastseen).local();
            });
    
            var now = moment();
            var age = moment(now).subtract(config.maxAge, 'days');
    
            var newnodes = helper.limit('firstseen', age, helper.sortByKey('firstseen', nodes).filter(helper.online));
            var lostnodes = helper.limit('lastseen', age, helper.sortByKey('lastseen', nodes).filter(helper.offline));
    
            var graphnodes = {};
    
            dataNodes.nodes.forEach(function (d) {
              graphnodes[d.nodeinfo.node_id] = d;
            });
    
            var graph = dataGraph.batadv;
    
            graph.nodes.forEach(function (d) {
              if (d.node_id in graphnodes) {
                d.node = graphnodes[d.node_id];
                if (d.unseen) {
                  d.node.flags.online = true;
                  d.node.flags.unseen = true;
                }
              }
            });
    
            graph.links.forEach(function (d) {
              d.source = graph.nodes[d.source];
    
              if (graph.nodes[d.target].node) {
                d.target = graph.nodes[d.target];
              } else {
                d.target = undefined;
              }
            });
    
            var links = graph.links.filter(function (d) {
              return d.target !== undefined;
            });
    
            nodes.forEach(function (d) {
              d.neighbours = [];
            });
    
            links.forEach(function (d) {
              var ids;
    
              ids = [d.source.node.nodeinfo.node_id, d.target.node.nodeinfo.node_id];
              d.source.node.neighbours.push({ node: d.target.node, link: d, incoming: false });
              d.target.node.neighbours.push({ node: d.source.node, link: d, incoming: true });
              if (d.vpn) {
                d.source.node.meshlinks = d.source.node.meshlinks ? d.source.node.meshlinks + 1 : 1;
              }
    
              d.id = ids.join('-');
    
              try {
                d.latlngs = [];
                d.latlngs.push(L.latLng(d.source.node.nodeinfo.location.latitude, d.source.node.nodeinfo.location.longitude));
                d.latlngs.push(L.latLng(d.target.node.nodeinfo.location.latitude, d.target.node.nodeinfo.location.longitude));
    
                d.distance = d.latlngs[0].distanceTo(d.latlngs[1]);
              } catch (e) {
                // ignore exception
              }
            });
    
            links.sort(function (a, b) {
              return b.tq - a.tq;
            });
    
            return {
              now: now,
              timestamp: moment.utc(dataNodes.timestamp).local(),
              nodes: {
                all: nodes,
                new: newnodes,
                lost: lostnodes
              },
              graph: {
                links: links,
                nodes: graph.nodes
              }
            };
          }
    
          var language = new Language(config);
          var router = new Router(language);
    
          var urls = [];
    
          if (typeof config.dataPath === 'string' || config.dataPath instanceof String) {
            config.dataPath = [config.dataPath];
          }
    
          for (var i in config.dataPath) {
            if (config.dataPath.hasOwnProperty(i)) {
              urls.push(config.dataPath[i] + 'nodes.json');
              urls.push(config.dataPath[i] + 'graph.json');
            }
          }
    
          function update() {
            language.init(router);
            return Promise.all(urls.map(helper.getJSON))
              .then(handleData);
          }
    
          update()
            .then(function (d) {
              var gui = new GUI(config, router, language);
              gui.setData(d);
              router.setData(d);
              router.resolve();
    
              window.setInterval(function () {
                update().then(function (n) {
                  gui.setData(n);
                  router.setData(n);
                });
              }, 60000);
            })
            .catch(function (e) {
              document.querySelector('.loader').innerHTML += e.message
                + '<br /><br /><button onclick="location.reload(true)" class="btn text">Try to reload</button><br /> or report to your community';
              console.warn(e);
            });
        };
      });