├── requirements.txt
├── nextUI
├── images
│ ├── bma.png
│ ├── bma1.png
│ └── bma2.png
├── bower_components
│ └── next-bower
│ │ ├── fonts
│ │ ├── next-font.eot
│ │ ├── next-font.ttf
│ │ ├── next-font.woff
│ │ └── cisco
│ │ │ ├── CiscoSansRegular.otf
│ │ │ ├── CiscoSansExtraLight.otf
│ │ │ ├── ciscosansregular-webfont.eot
│ │ │ ├── ciscosansregular-webfont.ttf
│ │ │ ├── ciscosansregular-webfont.woff
│ │ │ ├── ciscosansextralight-webfont.eot
│ │ │ ├── ciscosansextralight-webfont.ttf
│ │ │ └── ciscosansextralight-webfont.woff
│ │ ├── doc
│ │ ├── assets
│ │ │ ├── favicon.png
│ │ │ ├── css
│ │ │ │ ├── logo.png
│ │ │ │ └── external-small.png
│ │ │ ├── img
│ │ │ │ └── spinner.gif
│ │ │ ├── index.html
│ │ │ ├── js
│ │ │ │ ├── yui-prettify.js
│ │ │ │ ├── api-filter.js
│ │ │ │ ├── api-search.js
│ │ │ │ ├── api-list.js
│ │ │ │ └── apidocs.js
│ │ │ └── vendor
│ │ │ │ └── prettify
│ │ │ │ ├── prettify-min.css
│ │ │ │ ├── CHANGES.html
│ │ │ │ ├── README.html
│ │ │ │ ├── COPYING
│ │ │ │ └── prettify-min.js
│ │ ├── files
│ │ │ └── index.html
│ │ ├── classes
│ │ │ ├── index.html
│ │ │ ├── nx.geometry.Math.html
│ │ │ └── nx.geometry.Matrix.html
│ │ ├── modules
│ │ │ └── index.html
│ │ ├── api.js
│ │ └── index.html
│ │ ├── bower.json
│ │ └── README.md
├── index.html
└── app
│ ├── main.js
│ ├── topology.js
│ └── topology_data.js
├── templates
├── sh_ospf_db_router_det_jun.tmpl
├── sh_isis_db_det_cisco.tmpl
├── disp_ospf_lsdb_router_huawei.tmpl
├── sh_ip_ospf_db_router_cisco.tmpl
├── disp_isis_lsdb_verbose_huawei.tmpl
├── sh_isis_db_ext_jun.tmpl
├── sh_rou_ospf_db_type_router_det_nokia.tmpl
└── sh_rou_isis_db_det_nokia.tmpl
├── config.yaml
├── README.md
├── igp_topo_light.py
└── test_files
├── sh_router_isis_db_det_nokia.txt
├── sh_ospf_router_det_jun.txt
└── sh_isis_db_det_cisco.txt
/requirements.txt:
--------------------------------------------------------------------------------
1 | textfsm
2 | PyYAML
--------------------------------------------------------------------------------
/nextUI/images/bma.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/images/bma.png
--------------------------------------------------------------------------------
/nextUI/images/bma1.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/images/bma1.png
--------------------------------------------------------------------------------
/nextUI/images/bma2.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/images/bma2.png
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/fonts/next-font.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/fonts/next-font.eot
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/fonts/next-font.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/fonts/next-font.ttf
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/fonts/next-font.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/fonts/next-font.woff
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/favicon.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/doc/assets/favicon.png
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/css/logo.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/doc/assets/css/logo.png
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/img/spinner.gif:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/doc/assets/img/spinner.gif
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/fonts/cisco/CiscoSansRegular.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/fonts/cisco/CiscoSansRegular.otf
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/css/external-small.png:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/doc/assets/css/external-small.png
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/fonts/cisco/CiscoSansExtraLight.otf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/fonts/cisco/CiscoSansExtraLight.otf
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/fonts/cisco/ciscosansregular-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/fonts/cisco/ciscosansregular-webfont.eot
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/fonts/cisco/ciscosansregular-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/fonts/cisco/ciscosansregular-webfont.ttf
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/fonts/cisco/ciscosansregular-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/fonts/cisco/ciscosansregular-webfont.woff
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/fonts/cisco/ciscosansextralight-webfont.eot:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/fonts/cisco/ciscosansextralight-webfont.eot
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/fonts/cisco/ciscosansextralight-webfont.ttf:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/fonts/cisco/ciscosansextralight-webfont.ttf
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/fonts/cisco/ciscosansextralight-webfont.woff:
--------------------------------------------------------------------------------
https://raw.githubusercontent.com/a-kuzik/igp_topo_multi/HEAD/nextUI/bower_components/next-bower/fonts/cisco/ciscosansextralight-webfont.woff
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | "
6 | ],
7 | "description": "NeXt UI Toolkit bower and npm distribution.",
8 | "main": [
9 | "js/next.js",
10 | "css/next.css"
11 | ],
12 | "moduleType": [],
13 | "keywords": [
14 | "NeXt",
15 | "topology",
16 | "SDN"
17 | ],
18 | "ignore": [],
19 | "version": "1.0.1",
20 | "license": "EPL-1.0"
21 | }
--------------------------------------------------------------------------------
/templates/sh_ip_ospf_db_router_cisco.tmpl:
--------------------------------------------------------------------------------
1 | Value Required,Filldown Area (\S+)
2 | Value Required,Filldown RID ((\d+\.){3}\d+)
3 | Value Required LinkType ((point-to-point)|(Transit)|(Stub))
4 | Value Nbr ((\d+\.){3}\d+)
5 | Value Mtrc (\d+)
6 |
7 | Start
8 | ^.*\(Area\s+${Area}\) -> Continue.Record
9 | ^\s+Advertising\s+Router:\s+${RID} -> Continue.Record
10 | ^\s+Link\s+connected\s+to:.*${LinkType} -> Continue
11 | ^\s+\(Link\s+ID\).*:\s+${Nbr} -> Continue
12 | ^.*Metrics:\s+${Mtrc} -> Continue.Record
13 |
--------------------------------------------------------------------------------
/templates/disp_isis_lsdb_verbose_huawei.tmpl:
--------------------------------------------------------------------------------
1 | Value Filldown Source (\S+)
2 | Value Filldown Hostname (\S+)
3 | Value Filldown Area (\S+)
4 | Value Required Nbr (\S+)
5 | Value Required Metric (\d+)
6 | Value Fillup RID ((\d+\.){3}\d+)
7 |
8 | Start
9 | ^\s+SOURCE\s+${Source} -> Continue.Record
10 | ^\s+HOST\s+NAME\s+${Hostname} -> Continue.Record
11 | ^\s+AREA\s+ADDR\s+${Area} -> Continue.Record
12 | ^\S+NBR\s+ID\s+${Nbr}\s+COST:\s+${Metric} -> Continue.Record
13 | ^\s+Router\s+ID\s+${RID} -> Continue.Record
14 |
15 |
16 |
--------------------------------------------------------------------------------
/templates/sh_isis_db_ext_jun.tmpl:
--------------------------------------------------------------------------------
1 | Value Filldown LSPID (\S+\.\d{2})
2 | Value Filldown Area (\S+)
3 | Value Filldown RID ((\d+\.){3}\d+)
4 | Value Required,Filldown Hostname (\S+)
5 | Value Required Nbr (\S+)
6 | Value Required Metric (\d+)
7 |
8 | Start
9 | ^${LSPID}-\d+\s+Sequence:.* -> Continue.Record
10 | ^\s+Area\s+address:\s+${Area}.* -> Continue.Record
11 | ^\s+IP\s+router\s+id:\s+${RID} -> Continue.Record
12 | ^\s+Hostname:\s+${Hostname} -> Continue.Record
13 | ^\s+IS\s+extended\s+neighbor:\s+${Nbr},.*\s+Metric:\s+\S+\s+${Metric} -> Continue.Record
14 |
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/js/yui-prettify.js:
--------------------------------------------------------------------------------
1 | YUI().use('node', function(Y) {
2 | var code = Y.all('.prettyprint.linenums');
3 | if (code.size()) {
4 | code.each(function(c) {
5 | var lis = c.all('ol li'),
6 | l = 1;
7 | lis.each(function(n) {
8 | n.prepend(' ');
9 | l++;
10 | });
11 | });
12 | var h = location.hash;
13 | location.hash = '';
14 | h = h.replace('LINE_', 'LINENUM_');
15 | location.hash = h;
16 | }
17 | });
18 |
--------------------------------------------------------------------------------
/nextUI/index.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | IGP Topology
5 |
6 |
7 |
8 |
9 |
10 |
11 |
12 |
13 |
14 |
15 |
16 |
17 |
--------------------------------------------------------------------------------
/templates/sh_rou_ospf_db_type_router_det_nokia.tmpl:
--------------------------------------------------------------------------------
1 | Value Required,Filldown Area ((\d+\.){3}\d+)
2 | Value Required,Filldown RID ((\d+\.){3}\d+)
3 | Value Required,Filldown LSAType (\S+)
4 | Value LinkType ((\S+\s+)+)
5 | Value Nbr ((\d+\.){3}\d+)
6 | Value Mtrc (\d+)
7 |
8 | Start
9 | ^Area\s+Id\s+:\s+${Area}.* -> Continue
10 | ^Link\s+State\s+Id\s+:\s+${RID}.* -> Continue
11 | ^LSA\s+Type\s+:\s+${LSAType} -> Continue
12 | ^Link\s+Type.*:\s+${LinkType} -> Continue
13 | ^((Nbr\s+Rtr\s+Id\s+\(\d+\))|(Network\s+\(\d+\))|(DR\s+Rtr\s+Id\s+\(\d+\)))\s+:\s+${Nbr}.* -> Continue
14 | ^.*Metric-\d+.*\s+:\s+${Mtrc}.* -> Continue.Record
--------------------------------------------------------------------------------
/templates/sh_rou_isis_db_det_nokia.tmpl:
--------------------------------------------------------------------------------
1 | Value Required,Filldown LSPID (\S+)
2 | Value Required,Filldown Level (\S+)
3 | Value Required,Filldown Area (\d+\.\d+)
4 | Value Required,Filldown RID ((\d+\.){3}\d+)
5 | Value Required Nbr (\S+)
6 | Value Mtrc (\d+)
7 | Value NbrIP ((\d+\.){3}\d+)
8 |
9 |
10 | Start
11 | ^LSP\s+ID\s+:\s+${LSPID}-00\s+Level\s+:\s+${Level} -> Continue.Record
12 | ^\s+Area\s+Address\s+:\s+\(\d+\)\s+${Area}.* -> Continue.Record
13 | ^\s+Router\s+ID\s+:\s+${RID} -> Continue.Record
14 | ^\s+Nbr\s+:\s+${Nbr} -> Continue
15 | ^\s+Default\s+Metric\s+:\s+${Mtrc} -> Continue
16 | ^\s+Nbr\s+IP\s+:\s+${NbrIP} -> Continue.Record
17 |
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/vendor/prettify/prettify-min.css:
--------------------------------------------------------------------------------
1 | .pln{color:#000}@media screen{.str{color:#080}.kwd{color:#008}.com{color:#800}.typ{color:#606}.lit{color:#066}.pun,.opn,.clo{color:#660}.tag{color:#008}.atn{color:#606}.atv{color:#080}.dec,.var{color:#606}.fun{color:red}}@media print,projection{.str{color:#060}.kwd{color:#006;font-weight:bold}.com{color:#600;font-style:italic}.typ{color:#404;font-weight:bold}.lit{color:#044}.pun,.opn,.clo{color:#440}.tag{color:#006;font-weight:bold}.atn{color:#404}.atv{color:#060}}pre.prettyprint{padding:2px;border:1px solid #888}ol.linenums{margin-top:0;margin-bottom:0}li.L0,li.L1,li.L2,li.L3,li.L5,li.L6,li.L7,li.L8{list-style-type:none}li.L1,li.L3,li.L5,li.L7,li.L9{background:#eee}
--------------------------------------------------------------------------------
/nextUI/app/main.js:
--------------------------------------------------------------------------------
1 | (function(nx){
2 |
3 | // instantiate NeXt app
4 | var app = new nx.ui.Application();
5 |
6 | // instantiate Topology class
7 | var topology = new MyTopology();
8 |
9 | // add customs icons
10 | topology.registerIcon("bma", "images/bma.png", 15, 15);
11 | topology.registerIcon("bma1", "images/bma1.png", 40, 48);
12 | topology.registerIcon("bma2", "images/bma2.png", 15, 15);
13 |
14 | // load topology data from app/data.js
15 | topology.data(topologyData);
16 |
17 | // bind the topology object to the app
18 | topology.attach(app);
19 |
20 | // app must run inside a specific container. In our case this is the one with id="topology-container"
21 | app.container(document.getElementById("topology-container"));
22 |
23 | })(nx);
24 |
--------------------------------------------------------------------------------
/config.yaml:
--------------------------------------------------------------------------------
1 | ###############################################################
2 | ###Please specify here host's vendor and type of IGP
3 | ###############################################################
4 | host_type: huawei
5 | igp: ospf
6 |
7 | ###############################################################
8 | ####Please specify here path to your file with LSDB information
9 | ###############################################################
10 | #lsdb_file: test_files/sh_ospf_router_det_jun.txt
11 | #lsdb_file: test_files/sh_isis_db_ext_jun.txt
12 | #lsdb_file: test_files/sh_isis_db_det_cisco.txt
13 | #lsdb_file: test_files/sh_ip_ospf_db_router_cisco.txt
14 | #lsdb_file: test_files/sh_router_isis_db_det_nokia.txt
15 | lsdb_file: test_files/displ_ospf_lsdb_router_huawei.txt
16 |
17 |
--------------------------------------------------------------------------------
/nextUI/app/topology.js:
--------------------------------------------------------------------------------
1 | (function (nx) {
2 | nx.define('MyTopology', nx.graphic.Topology, {
3 | methods: {
4 | "init": function(){
5 | this.inherited({
6 | // width 100% if true
7 | 'adaptive': false,
8 | // show icons' nodes, otherwise display dots
9 | 'showIcon': true,
10 | // special configuration for nodes
11 | 'nodeConfig': {
12 | 'label': 'model.name',
13 | 'iconType': 'model.icon',
14 | 'color': '#0how00'
15 | },
16 | // special configuration for links
17 | 'linkConfig': {
18 | 'linkType': 'curve',
19 | 'color': "model.color"
20 | },
21 | // property name to identify unique nodes
22 | 'identityKey': 'id', // helps to link source and target
23 | // canvas size
24 | 'width': 1900,
25 | 'height': 1000,
26 | // "engine" that process topology prior to rendering
27 | 'dataProcessor': 'force',
28 | // moves the labels in order to avoid overlay
29 | 'enableSmartLabel': true,
30 | // smooth scaling. may slow down, if true
31 | 'enableGradualScaling': true,
32 | // if true, two nodes can have more than one link
33 | 'supportMultipleLink': true,
34 | // enable scaling
35 | "scalable": true
36 | });
37 | }
38 | }
39 | });
40 | })(nx);
41 |
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/js/api-filter.js:
--------------------------------------------------------------------------------
1 | YUI.add('api-filter', function (Y) {
2 |
3 | Y.APIFilter = Y.Base.create('apiFilter', Y.Base, [Y.AutoCompleteBase], {
4 | // -- Initializer ----------------------------------------------------------
5 | initializer: function () {
6 | this._bindUIACBase();
7 | this._syncUIACBase();
8 | },
9 | getDisplayName: function(name) {
10 |
11 | Y.each(Y.YUIDoc.meta.allModules, function(i) {
12 | if (i.name === name && i.displayName) {
13 | name = i.displayName;
14 | }
15 | });
16 |
17 | return name;
18 | }
19 |
20 | }, {
21 | // -- Attributes -----------------------------------------------------------
22 | ATTRS: {
23 | resultHighlighter: {
24 | value: 'phraseMatch'
25 | },
26 |
27 | // May be set to "classes" or "modules".
28 | queryType: {
29 | value: 'classes'
30 | },
31 |
32 | source: {
33 | valueFn: function() {
34 | var self = this;
35 | return function(q) {
36 | var data = Y.YUIDoc.meta[self.get('queryType')],
37 | out = [];
38 | Y.each(data, function(v) {
39 | if (v.toLowerCase().indexOf(q.toLowerCase()) > -1) {
40 | out.push(v);
41 | }
42 | });
43 | return out;
44 | };
45 | }
46 | }
47 | }
48 | });
49 |
50 | }, '3.4.0', {requires: [
51 | 'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources'
52 | ]});
53 |
--------------------------------------------------------------------------------
/README.md:
--------------------------------------------------------------------------------
1 | # igp_topo_multi
2 |
3 | ### IGP topology with NeXt UI ###
4 |
5 | This is not the first network topology drawing tool that use the NeXt UI.
6 | The NeXt UI Toolkit is an HTML5 / JavaScript based toolbox for networked web applications.
7 | https://creations.devnetcloud.com/detail?cid=1e4a9f92-deea-11e7-9d2f-aed03b171102
8 | https://github.com/NeXt-UI
9 |
10 | This small project contains Python script and templates for parsing IGP LSDB (OSPF and ISIS) such vendors as Nokia, Juniper, Cisco and Huawei, creating topology in json format for drawing network topology in NeXt UI and showing it in your browser.
11 |
12 | Using this script is very easy.
13 |
14 | 1. Please load a file with LSDB in directory ```/test_files```. Currently contains the few tests files.
15 | 2. In the file config.yaml specify the path and name to your LSDB file, vendor name, where did you get the LSDB file, and type of IGP (OPSF or ISIS).
16 | 3. Install requirements from ```requirements.txt```.
17 | 4. Runnig the script ```igp_topo_light.py``` and enjoy your network topology in a browser.
18 |
19 | Currently supported:
20 |
21 | - Nokia - OSPF and ISIS;
22 | - Juniper - OSPF and ISIS;
23 | - Cisco - OSPF and ISIS;
24 | - Huawei - OSPF and ISIS.
25 |
26 | Following commands outputs are possible for parsing:
27 |
28 | Nokia:
29 |
30 | ```show router isis database detail```
31 |
32 | ```show router ospf database type router detail```
33 |
34 | Juniper:
35 |
36 | ```show isis database extensive```
37 |
38 | ```show ospf database router detail```
39 |
40 | Cisco:
41 |
42 | ```show isis database detail```
43 |
44 | ```show ip ospf database router```
45 |
46 | Huawei:
47 |
48 | ```display isis lsdb verbose```
49 |
50 | ```display ospf lsdb router```
51 |
52 |
53 | **If you clone, don't forget to leave a star :-)**
54 |
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/js/api-search.js:
--------------------------------------------------------------------------------
1 | YUI.add('api-search', function (Y) {
2 |
3 | var Lang = Y.Lang,
4 | Node = Y.Node,
5 | YArray = Y.Array;
6 |
7 | Y.APISearch = Y.Base.create('apiSearch', Y.Base, [Y.AutoCompleteBase], {
8 | // -- Public Properties ----------------------------------------------------
9 | RESULT_TEMPLATE:
10 | '' +
11 | '' +
12 | '{name} ' +
13 | '{resultType} ' +
14 | '{description}
' +
15 | '{class} ' +
16 | ' ' +
17 | ' ',
18 |
19 | // -- Initializer ----------------------------------------------------------
20 | initializer: function () {
21 | this._bindUIACBase();
22 | this._syncUIACBase();
23 | },
24 |
25 | // -- Protected Methods ----------------------------------------------------
26 | _apiResultFilter: function (query, results) {
27 | // Filter components out of the results.
28 | return YArray.filter(results, function (result) {
29 | return result.raw.resultType === 'component' ? false : result;
30 | });
31 | },
32 |
33 | _apiResultFormatter: function (query, results) {
34 | return YArray.map(results, function (result) {
35 | var raw = Y.merge(result.raw), // create a copy
36 | desc = raw.description || '';
37 |
38 | // Convert description to text and truncate it if necessary.
39 | desc = Node.create('' + desc + '
').get('text');
40 |
41 | if (desc.length > 65) {
42 | desc = Y.Escape.html(desc.substr(0, 65)) + ' …';
43 | } else {
44 | desc = Y.Escape.html(desc);
45 | }
46 |
47 | raw['class'] || (raw['class'] = '');
48 | raw.description = desc;
49 |
50 | // Use the highlighted result name.
51 | raw.name = result.highlighted;
52 |
53 | return Lang.sub(this.RESULT_TEMPLATE, raw);
54 | }, this);
55 | },
56 |
57 | _apiTextLocator: function (result) {
58 | return result.displayName || result.name;
59 | }
60 | }, {
61 | // -- Attributes -----------------------------------------------------------
62 | ATTRS: {
63 | resultFormatter: {
64 | valueFn: function () {
65 | return this._apiResultFormatter;
66 | }
67 | },
68 |
69 | resultFilters: {
70 | valueFn: function () {
71 | return this._apiResultFilter;
72 | }
73 | },
74 |
75 | resultHighlighter: {
76 | value: 'phraseMatch'
77 | },
78 |
79 | resultListLocator: {
80 | value: 'data.results'
81 | },
82 |
83 | resultTextLocator: {
84 | valueFn: function () {
85 | return this._apiTextLocator;
86 | }
87 | },
88 |
89 | source: {
90 | value: '/api/v1/search?q={query}&count={maxResults}'
91 | }
92 | }
93 | });
94 |
95 | }, '3.4.0', {requires: [
96 | 'autocomplete-base', 'autocomplete-highlighters', 'autocomplete-sources',
97 | 'escape'
98 | ]});
99 |
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/README.md:
--------------------------------------------------------------------------------
1 | # NeXt UI Framework
2 |
3 | NeXt UI toolkit is an HTML5/JavaScript based toolkit for network web application. It provides a network centric topology UI component featuring high performance and rich functionality. NeXt can display large complex network topologies, aggregated network nodes, traffic/path/tunnel/group visualizations and it includes different layout algorithms, map overlays, and preset user friendly interactions. NeXt can work together with DLUX to build ODL apps.
4 |
5 | Homepage : https://wiki.opendaylight.org/view/NeXt:Main
6 |
7 | UI Toolkit Quicklook : https://www.youtube.com/watch?v=gBsUDu8aucs
8 |
9 | Current version : 1.0.0
10 |
11 | ## Key Features
12 |
13 | * Large complex network topologies
14 | * Aggregated network nodes
15 | * Traffic/path/tunnel/group visualizations
16 | * Different layout algorithms
17 | * Map overlays
18 | * Preset user-friendly interactions
19 |
20 | ## File structure
21 | ```
22 | next/
23 | |- css/
24 | | |- next.css // next stylesheet file
25 | | |- next.min.css // minimized stylesheet file
26 | | |- next-componentized.css
27 | | |- next-componentized.min.css
28 | |- js
29 | | |- next.js // next js library
30 | | |- next.min.js // minimized js library
31 | |- fonts/ // font resources foler
32 | | doc/ //APi manual
33 | |- README.md
34 | ```
35 |
36 | ## Quick start
37 |
38 | 1) Create a HTML file.
39 |
40 | ```HTML
41 |
42 |
43 |
44 |
45 |
46 |
47 |
48 |
51 |
52 |
53 | ```
54 |
55 | 2) Edit next code
56 |
57 | ```javascript
58 | // Initialize a topology component
59 | var topo = new nx.graphic.Topology({
60 | });
61 |
62 | // Create new app
63 | var app = new nx.ui.Application();
64 |
65 | // Attach topo to app
66 | topo.attach(app);
67 | ```
68 |
69 | 3) Open html file with Chrome
70 |
71 | ### Tutorials and Sample code
72 |
73 | Tutorials : https://wiki.opendaylight.org/view/NeXt:Main
74 |
75 | Opendaylight sample code intergrate DLUX with NeXt: https://github.com/CiscoDevNet/opendaylight-sample-apps
76 |
77 | BIERMAN : https://github.com/zverevalexei/bierman-gui
78 |
79 | ## Build instructions from source code
80 |
81 | Git : https://git.opendaylight.org/gerrit/p/next
82 |
83 | ### Environment requirements
84 |
85 | In order to build NeXt from sources, you must have [Node.js](https://nodejs.org/) installed.
86 |
87 | After that, make sure to have [Grunt](https://www.npmjs.com/package/grunt) installed. To do so, run:
88 |
89 | ```
90 | npm install grunt
91 | ```
92 |
93 | ### Build process
94 | * ```npm install``` to install npm modules
95 | * ```grunt``` to build from sources
96 |
97 | ### Authorized Devs Only: Bower Updates
98 | You should only update Bower if the build is stable, or a major issue has been fixed.
99 |
100 | To do so, type in the command line:
101 |
102 | ```
103 | node update-bower.js -u {{GITHUB USERNAME}} -p {{GITHUB PASSWORD}} -v {{VERSION NUMBER}}
104 | ```
105 | Make sure to turn ```{{GITHUB USERNAME}}```, ```{{GITHUB PASSWORD}}``` and ```{{NEW VERSION}}``` into appropriate values.
106 |
107 | Example:
108 |
109 | ```
110 | node update-bower.js -u gituser -p 123456 -v 0.1.0
111 | ```
112 |
113 | Leave the terminal window open until you see ```Done!``` message.
114 |
115 | ## Who's Using NeXt
116 | Here we feature a few customers who choose NeXt framework as their topology visualization tool and use it in their products.
117 |
118 | * [Cisco](https://cisco.com/)
119 | * [Verizon](https://www.verizonwireless.com)
120 | * [AT&T](https://att.com)
121 | * [HP Enterprise](https://hpe.com)
122 | * [NTS Netzwerk Telekom Service AG](http://www.nts.eu/en/)
123 |
124 | Are you *next*?
125 |
126 | ## Bugs
127 |
128 | [Open Bugs](https://bugs.opendaylight.org/buglist.cgi?bug_status=__open__&product=next)
129 |
130 | ## Team
131 |
132 | * Aikepaer Abuduweili (aaikepae@cisco.com)
133 | * Kang Li (lkang2@cisco.com)
134 | * Alexei Zverev (alzverev@cisco.com)
135 | * Xu Yangyang(yangyxu@cisco.com)
136 |
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/api.js:
--------------------------------------------------------------------------------
1 | YUI.add("yuidoc-meta", function(Y) {
2 | Y.YUIDoc = { meta: {
3 | "classes": [
4 | "nx",
5 | "nx.Iterable",
6 | "nx.Object",
7 | "nx.Observable",
8 | "nx.data.Collection",
9 | "nx.data.Convex",
10 | "nx.data.Counter",
11 | "nx.data.Dictionary",
12 | "nx.data.Edge",
13 | "nx.data.EdgeSet",
14 | "nx.data.EdgeSetCollection",
15 | "nx.data.Force",
16 | "nx.data.ObservableCollection",
17 | "nx.data.ObservableDictionary",
18 | "nx.data.ObservableGraph",
19 | "nx.data.ObservableGraph.ForceProcessor",
20 | "nx.data.ObservableObject",
21 | "nx.data.Query",
22 | "nx.data.SortedMap",
23 | "nx.data.Vertex",
24 | "nx.data.VertexSet",
25 | "nx.data.nx.Env",
26 | "nx.data.nx.Util",
27 | "nx.data.nx.dom.Document",
28 | "nx.data.nx.dom.Element",
29 | "nx.data.nx.dom.Fragment",
30 | "nx.data.nx.dom.Node",
31 | "nx.data.nx.dom.Text",
32 | "nx.geometry.BezierCurve",
33 | "nx.geometry.Line",
34 | "nx.geometry.Math",
35 | "nx.geometry.Matrix",
36 | "nx.geometry.Vector",
37 | "nx.graphic.Arc",
38 | "nx.graphic.BezierCurves",
39 | "nx.graphic.Circle",
40 | "nx.graphic.Group",
41 | "nx.graphic.Icon",
42 | "nx.graphic.Icons",
43 | "nx.graphic.Image",
44 | "nx.graphic.Line",
45 | "nx.graphic.LinkSetTooltipContent",
46 | "nx.graphic.LinkTooltipContent",
47 | "nx.graphic.NodeTooltipContent",
48 | "nx.graphic.Path",
49 | "nx.graphic.Polygon",
50 | "nx.graphic.Rect",
51 | "nx.graphic.Stage",
52 | "nx.graphic.Text",
53 | "nx.graphic.Topology",
54 | "nx.graphic.Topology.AbstractLink",
55 | "nx.graphic.Topology.AbstractNode",
56 | "nx.graphic.Topology.BasePath",
57 | "nx.graphic.Topology.Categories",
58 | "nx.graphic.Topology.CircleGroup",
59 | "nx.graphic.Topology.Config",
60 | "nx.graphic.Topology.DefaultScene",
61 | "nx.graphic.Topology.Event",
62 | "nx.graphic.Topology.Graph",
63 | "nx.graphic.Topology.GroupItem",
64 | "nx.graphic.Topology.GroupsLayer",
65 | "nx.graphic.Topology.Layer",
66 | "nx.graphic.Topology.LayoutMixin",
67 | "nx.graphic.Topology.Link",
68 | "nx.graphic.Topology.LinkMixin",
69 | "nx.graphic.Topology.LinkSet",
70 | "nx.graphic.Topology.LinksLayer",
71 | "nx.graphic.Topology.NeXtForceLayout",
72 | "nx.graphic.Topology.Node",
73 | "nx.graphic.Topology.NodeMixin",
74 | "nx.graphic.Topology.NodeSet",
75 | "nx.graphic.Topology.NodeSetPath",
76 | "nx.graphic.Topology.NodesLayer",
77 | "nx.graphic.Topology.Path",
78 | "nx.graphic.Topology.PathLayer",
79 | "nx.graphic.Topology.PolygonGroup",
80 | "nx.graphic.Topology.RectGroup",
81 | "nx.graphic.Topology.Scene",
82 | "nx.graphic.Topology.SceneMixin",
83 | "nx.graphic.Topology.SelectionNodeScene",
84 | "nx.graphic.Topology.SelectionScene",
85 | "nx.graphic.Topology.StageMixin",
86 | "nx.graphic.Topology.Tooltip",
87 | "nx.graphic.Topology.TooltipManager",
88 | "nx.graphic.Topology.TooltipMixin",
89 | "nx.graphic.Topology.TooltipPolicy",
90 | "nx.graphic.Topology.USMapLayout",
91 | "nx.graphic.Topology.ZoomBySelection",
92 | "nx.graphic.Triangle",
93 | "nx.ui.Application",
94 | "nx.ui.Collection",
95 | "nx.ui.Component",
96 | "nx.ui.CssClass",
97 | "nx.ui.CssStyle",
98 | "nx.ui.DOMComponent",
99 | "nx.ui.Popover",
100 | "nx.ui.Popup",
101 | "nx.ui.PopupContainer",
102 | "nx.ui.nx.graphic.Component",
103 | "nx.ui.nx.graphic.DragManager",
104 | "nx.ui.nx.widget.ZIndexManager",
105 | "nxex.toolkit.collection.CollectionRelation"
106 | ],
107 | "modules": [
108 | "nx",
109 | "nx.data",
110 | "nx.geometry",
111 | "nx.graphic",
112 | "nx.graphic.Topology",
113 | "nx.graphic.Topology.Group"
114 | ],
115 | "allModules": [
116 | {
117 | "displayName": "nx",
118 | "name": "nx"
119 | },
120 | {
121 | "displayName": "nx.data",
122 | "name": "nx.data",
123 | "description": "Vertex class"
124 | },
125 | {
126 | "displayName": "nx.geometry",
127 | "name": "nx.geometry",
128 | "description": "Mathematics Line class"
129 | },
130 | {
131 | "displayName": "nx.graphic",
132 | "name": "nx.graphic",
133 | "description": "Base class of graphic component"
134 | },
135 | {
136 | "displayName": "nx.graphic.Topology",
137 | "name": "nx.graphic.Topology",
138 | "description": "A topology path class\n Path's background colors : ['#b2e47f', '#e4e47f', '#bec2f9', '#b6def7', '#89f0de']"
139 | },
140 | {
141 | "displayName": "nx.graphic.Topology.Group",
142 | "name": "nx.graphic.Topology.Group",
143 | "description": "Base group shape class"
144 | }
145 | ]
146 | } };
147 | });
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/vendor/prettify/CHANGES.html:
--------------------------------------------------------------------------------
1 |
2 |
3 |
4 | Change Log
5 |
6 |
7 | README
8 |
9 | Known Issues
10 |
11 | Perl formatting is really crappy. Partly because the author is lazy and
12 | partly because Perl is
13 | hard to parse.
14 | On some browsers, <code> elements with newlines in the text
15 | which use CSS to specify white-space:pre will have the newlines
16 | improperly stripped if the element is not attached to the document at the time
17 | the stripping is done. Also, on IE 6, all newlines will be stripped from
18 | <code> elements because of the way IE6 produces
19 | innerHTML. Workaround: use <pre> for code with
20 | newlines.
21 |
22 |
23 | Change Log
24 | 29 March 2007
25 |
26 | Added tests for PHP support
27 | to address
28 | issue 3 .
30 | Fixed
31 | bug : prettyPrintOne was not halting. This was not
33 | reachable through the normal entry point.
34 | Fixed
35 | bug : recursing into a script block or PHP tag that was not properly
37 | closed would not silently drop the content.
38 | (test )
39 | Fixed
40 | bug : was eating tabs
42 | (test )
43 | Fixed entity handling so that the caveat
44 |
45 | Caveats: please properly escape less-thans. x<y
46 | instead of x<y , and use " instead of
47 | " for string delimiters.
48 |
49 | is no longer applicable.
50 | Added noisefree's C#
51 | patch
53 | Added a distribution that has comments and
54 | whitespace removed to reduce download size from 45.5kB to 12.8kB.
55 |
56 | 4 Jul 2008
57 |
58 | Added language specific formatters that are triggered by the presence
59 | of a lang-<language-file-extension>
60 | Fixed bug : python handling of '''string'''
61 | Fixed bug: / in regex [charsets] should not end regex
62 |
63 | 5 Jul 2008
64 |
65 | Defined language extensions for Lisp and Lua
66 |
67 | 14 Jul 2008
68 |
69 | Language handlers for F#, OCAML, SQL
70 | Support for nocode spans to allow embedding of line
71 | numbers and code annotations which should not be styled or otherwise
72 | affect the tokenization of prettified code.
73 | See the issue 22
74 | testcase .
75 |
76 | 6 Jan 2009
77 |
78 | Language handlers for Visual Basic, Haskell, CSS, and WikiText
79 | Added .mxml extension to the markup style handler for
80 | Flex MXML files . See
81 | issue 37 .
84 | Added .m extension to the C style handler so that Objective
85 | C source files properly highlight. See
86 | issue 58 .
89 | Changed HTML lexer to use the same embedded source mechanism as the
90 | wiki language handler, and changed to use the registered
91 | CSS handler for STYLE element content.
92 |
93 | 21 May 2009
94 |
95 | Rewrote to improve performance on large files.
96 | See benchmarks .
97 | Fixed bugs with highlighting of Haskell line comments, Lisp
98 | number literals, Lua strings, C preprocessor directives,
99 | newlines in Wiki code on Windows, and newlines in IE6.
100 |
101 | 14 August 2009
102 |
103 | Fixed prettifying of <code> blocks with embedded newlines.
104 |
105 | 3 October 2009
106 |
107 | Fixed prettifying of XML/HTML tags that contain uppercase letters.
108 |
109 | 19 July 2010
110 |
111 | Added support for line numbers. Bug
112 | 22
114 | Added YAML support. Bug
115 | 123
117 | Added VHDL support courtesy Le Poussin.
118 | IE performance improvements. Bug
119 | 102 courtesy jacobly.
121 | A variety of markup formatting fixes courtesy smain and thezbyg.
122 | Fixed copy and paste in IE[678].
123 | Changed output to use   instead of
124 | so that the output works when embedded in XML.
125 | Bug
126 | 108 .
128 |
129 |
130 |
131 |
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/js/api-list.js:
--------------------------------------------------------------------------------
1 | YUI.add('api-list', function (Y) {
2 |
3 | var Lang = Y.Lang,
4 | YArray = Y.Array,
5 |
6 | APIList = Y.namespace('APIList'),
7 |
8 | classesNode = Y.one('#api-classes'),
9 | inputNode = Y.one('#api-filter'),
10 | modulesNode = Y.one('#api-modules'),
11 | tabviewNode = Y.one('#api-tabview'),
12 |
13 | tabs = APIList.tabs = {},
14 |
15 | filter = APIList.filter = new Y.APIFilter({
16 | inputNode : inputNode,
17 | maxResults: 1000,
18 |
19 | on: {
20 | results: onFilterResults
21 | }
22 | }),
23 |
24 | search = APIList.search = new Y.APISearch({
25 | inputNode : inputNode,
26 | maxResults: 100,
27 |
28 | on: {
29 | clear : onSearchClear,
30 | results: onSearchResults
31 | }
32 | }),
33 |
34 | tabview = APIList.tabview = new Y.TabView({
35 | srcNode : tabviewNode,
36 | panelNode: '#api-tabview-panel',
37 | render : true,
38 |
39 | on: {
40 | selectionChange: onTabSelectionChange
41 | }
42 | }),
43 |
44 | focusManager = APIList.focusManager = tabviewNode.plug(Y.Plugin.NodeFocusManager, {
45 | circular : true,
46 | descendants: '#api-filter, .yui3-tab-panel-selected .api-list-item a, .yui3-tab-panel-selected .result a',
47 | keys : {next: 'down:40', previous: 'down:38'}
48 | }).focusManager,
49 |
50 | LIST_ITEM_TEMPLATE =
51 | '' +
52 | '{displayName} ' +
53 | ' ';
54 |
55 | // -- Init ---------------------------------------------------------------------
56 |
57 | // Duckpunch FocusManager's key event handling to prevent it from handling key
58 | // events when a modifier is pressed.
59 | Y.before(function (e, activeDescendant) {
60 | if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
61 | return new Y.Do.Prevent();
62 | }
63 | }, focusManager, '_focusPrevious', focusManager);
64 |
65 | Y.before(function (e, activeDescendant) {
66 | if (e.altKey || e.ctrlKey || e.metaKey || e.shiftKey) {
67 | return new Y.Do.Prevent();
68 | }
69 | }, focusManager, '_focusNext', focusManager);
70 |
71 | // Create a mapping of tabs in the tabview so we can refer to them easily later.
72 | tabview.each(function (tab, index) {
73 | var name = tab.get('label').toLowerCase();
74 |
75 | tabs[name] = {
76 | index: index,
77 | name : name,
78 | tab : tab
79 | };
80 | });
81 |
82 | // Switch tabs on Ctrl/Cmd-Left/Right arrows.
83 | tabviewNode.on('key', onTabSwitchKey, 'down:37,39');
84 |
85 | // Focus the filter input when the `/` key is pressed.
86 | Y.one(Y.config.doc).on('key', onSearchKey, 'down:83');
87 |
88 | // Keep the Focus Manager up to date.
89 | inputNode.on('focus', function () {
90 | focusManager.set('activeDescendant', inputNode);
91 | });
92 |
93 | // Update all tabview links to resolved URLs.
94 | tabview.get('panelNode').all('a').each(function (link) {
95 | link.setAttribute('href', link.get('href'));
96 | });
97 |
98 | // -- Private Functions --------------------------------------------------------
99 | function getFilterResultNode() {
100 | return filter.get('queryType') === 'classes' ? classesNode : modulesNode;
101 | }
102 |
103 | // -- Event Handlers -----------------------------------------------------------
104 | function onFilterResults(e) {
105 | var frag = Y.one(Y.config.doc.createDocumentFragment()),
106 | resultNode = getFilterResultNode(),
107 | typePlural = filter.get('queryType'),
108 | typeSingular = typePlural === 'classes' ? 'class' : 'module';
109 |
110 | if (e.results.length) {
111 | YArray.each(e.results, function (result) {
112 | frag.append(Lang.sub(LIST_ITEM_TEMPLATE, {
113 | rootPath : APIList.rootPath,
114 | displayName : filter.getDisplayName(result.highlighted),
115 | name : result.text,
116 | typePlural : typePlural,
117 | typeSingular: typeSingular
118 | }));
119 | });
120 | } else {
121 | frag.append(
122 | '' +
123 | 'No ' + typePlural + ' found.' +
124 | ' '
125 | );
126 | }
127 |
128 | resultNode.empty(true);
129 | resultNode.append(frag);
130 |
131 | focusManager.refresh();
132 | }
133 |
134 | function onSearchClear(e) {
135 |
136 | focusManager.refresh();
137 | }
138 |
139 | function onSearchKey(e) {
140 | var target = e.target;
141 |
142 | if (target.test('input,select,textarea')
143 | || target.get('isContentEditable')) {
144 | return;
145 | }
146 |
147 | e.preventDefault();
148 |
149 | inputNode.focus();
150 | focusManager.refresh();
151 | }
152 |
153 | function onSearchResults(e) {
154 | var frag = Y.one(Y.config.doc.createDocumentFragment());
155 |
156 | if (e.results.length) {
157 | YArray.each(e.results, function (result) {
158 | frag.append(result.display);
159 | });
160 | } else {
161 | frag.append(
162 | '' +
163 | 'No results found. Maybe you\'ll have better luck with a ' +
164 | 'different query?' +
165 | ' '
166 | );
167 | }
168 |
169 |
170 | focusManager.refresh();
171 | }
172 |
173 | function onTabSelectionChange(e) {
174 | var tab = e.newVal,
175 | name = tab.get('label').toLowerCase();
176 |
177 | tabs.selected = {
178 | index: tab.get('index'),
179 | name : name,
180 | tab : tab
181 | };
182 |
183 | switch (name) {
184 | case 'classes': // fallthru
185 | case 'modules':
186 | filter.setAttrs({
187 | minQueryLength: 0,
188 | queryType : name
189 | });
190 |
191 | search.set('minQueryLength', -1);
192 |
193 | // Only send a request if this isn't the initially-selected tab.
194 | if (e.prevVal) {
195 | filter.sendRequest(filter.get('value'));
196 | }
197 | break;
198 |
199 | case 'everything':
200 | filter.set('minQueryLength', -1);
201 | search.set('minQueryLength', 1);
202 |
203 | if (search.get('value')) {
204 | search.sendRequest(search.get('value'));
205 | } else {
206 | inputNode.focus();
207 | }
208 | break;
209 |
210 | default:
211 | // WTF? We shouldn't be here!
212 | filter.set('minQueryLength', -1);
213 | search.set('minQueryLength', -1);
214 | }
215 |
216 | if (focusManager) {
217 | setTimeout(function () {
218 | focusManager.refresh();
219 | }, 1);
220 | }
221 | }
222 |
223 | function onTabSwitchKey(e) {
224 | var currentTabIndex = tabs.selected.index;
225 |
226 | if (!(e.ctrlKey || e.metaKey)) {
227 | return;
228 | }
229 |
230 | e.preventDefault();
231 |
232 | switch (e.keyCode) {
233 | case 37: // left arrow
234 | if (currentTabIndex > 0) {
235 | tabview.selectChild(currentTabIndex - 1);
236 | inputNode.focus();
237 | }
238 | break;
239 |
240 | case 39: // right arrow
241 | if (currentTabIndex < (Y.Object.size(tabs) - 2)) {
242 | tabview.selectChild(currentTabIndex + 1);
243 | inputNode.focus();
244 | }
245 | break;
246 | }
247 | }
248 |
249 | }, '3.4.0', {requires: [
250 | 'api-filter', 'api-search', 'event-key', 'node-focusmanager', 'tabview'
251 | ]});
252 |
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/vendor/prettify/README.html:
--------------------------------------------------------------------------------
1 |
3 |
4 |
5 |
6 | Javascript code prettifier
7 |
8 |
9 |
10 |
11 |
12 |
16 |
17 |
18 |
19 | Languages : CH
20 | Javascript code prettifier
21 |
22 | Setup
23 |
24 | Download a distribution
25 | Include the script and stylesheets in your document
26 | (you will need to make sure the css and js file are on your server, and
27 | adjust the paths in the script and link tag)
28 |
29 | <link href="prettify.css" type="text/css" rel="stylesheet" />
30 | <script type="text/javascript" src="prettify.js"></script>
31 | Add onload="prettyPrint()" to your
32 | document's body tag.
33 | Modify the stylesheet to get the coloring you prefer
34 |
35 |
36 | Usage
37 | Put code snippets in
38 | <pre class="prettyprint">...</pre>
39 | or <code class="prettyprint">...</code>
40 | and it will automatically be pretty printed.
41 |
42 |
43 |
44 | The original
45 | Prettier
46 |
47 | class Voila {
49 | public:
50 | // Voila
51 | static const string VOILA = "Voila";
52 |
53 | // will not interfere with embedded tags .
54 | }
55 |
56 | class Voila {
57 | public:
58 | // Voila
59 | static const string VOILA = "Voila";
60 |
61 | // will not interfere with embedded tags .
62 | }
63 |
64 |
65 | FAQ
66 | Which languages does it work for?
67 | The comments in prettify.js are authoritative but the lexer
68 | should work on a number of languages including C and friends,
69 | Java, Python, Bash, SQL, HTML, XML, CSS, Javascript, and Makefiles.
70 | It works passably on Ruby, PHP, VB, and Awk and a decent subset of Perl
71 | and Ruby, but, because of commenting conventions, doesn't work on
72 | Smalltalk, or CAML-like languages.
73 |
74 | LISPy languages are supported via an extension:
75 | lang-lisp.js .
77 | And similarly for
78 | CSS ,
80 | Haskell ,
82 | Lua ,
84 | OCAML, SML, F# ,
86 | Visual Basic ,
88 | SQL ,
90 | Protocol Buffers , and
92 | WikiText ..
94 |
95 |
If you'd like to add an extension for your favorite language, please
96 | look at src/lang-lisp.js and file an
97 | issue including your language extension, and a testcase.
99 |
100 | How do I specify which language my code is in?
101 | You don't need to specify the language since prettyprint()
102 | will guess. You can specify a language by specifying the language extension
103 | along with the prettyprint class like so:
104 | <pre class="prettyprint lang-html ">
106 | The lang-* class specifies the language file extensions.
107 | File extensions supported by default include
108 | "bsh", "c", "cc", "cpp", "cs", "csh", "cyc", "cv", "htm", "html",
109 | "java", "js", "m", "mxml", "perl", "pl", "pm", "py", "rb", "sh",
110 | "xhtml", "xml", "xsl".
111 | </pre>
112 |
113 | It doesn't work on <obfuscated code sample> ?
114 | Yes. Prettifying obfuscated code is like putting lipstick on a pig
115 | — i.e. outside the scope of this tool.
116 |
117 | Which browsers does it work with?
118 | It's been tested with IE 6, Firefox 1.5 & 2, and Safari 2.0.4.
119 | Look at the test page to see if it
120 | works in your browser.
121 |
122 | What's changed?
123 | See the change log
124 |
125 | Why doesn't Prettyprinting of strings work on WordPress?
126 | Apparently wordpress does "smart quoting" which changes close quotes.
127 | This causes end quotes to not match up with open quotes.
128 |
This breaks prettifying as well as copying and pasting of code samples.
129 | See
130 | WordPress's help center for info on how to stop smart quoting of code
132 | snippets.
133 |
134 | How do I put line numbers in my code?
135 | You can use the linenums class to turn on line
136 | numbering. If your code doesn't start at line number 1, you can
137 | add a colon and a line number to the end of that class as in
138 | linenums:52.
139 |
140 |
For example
141 |
<pre class="prettyprint linenums:4 "
142 | >// This is line 4.
143 | foo();
144 | bar();
145 | baz();
146 | boo();
147 | far();
148 | faz();
149 | <pre>
150 | produces
151 | // This is line 4.
153 | foo();
154 | bar();
155 | baz();
156 | boo();
157 | far();
158 | faz();
159 |
160 |
161 | How do I prevent a portion of markup from being marked as code?
162 | You can use the nocode class to identify a span of markup
163 | that is not code.
164 |
<pre class=prettyprint>
165 | int x = foo(); /* This is a comment <span class="nocode">This is not code</span>
166 | Continuation of comment */
167 | int y = bar();
168 | </pre>
169 | produces
170 |
171 | int x = foo(); /* This is a comment This is not code
172 | Continuation of comment */
173 | int y = bar();
174 |
175 |
176 | For a more complete example see the issue22
177 | testcase .
178 |
179 | I get an error message "a is not a function" or "opt_whenDone is not a function"
180 | If you are calling prettyPrint via an event handler, wrap it in a function.
181 | Instead of doing
182 |
183 | addEventListener('load', prettyPrint, false);
185 |
186 | wrap it in a closure like
187 |
188 | addEventListener('load', function (event) { prettyPrint() }, false);
190 |
191 | so that the browser does not pass an event object to prettyPrint which
192 | will confuse it.
193 |
194 |
195 |
196 |
202 |
203 |
204 |
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/js/apidocs.js:
--------------------------------------------------------------------------------
1 | YUI().use(
2 | 'yuidoc-meta',
3 | 'api-list', 'history-hash', 'node-screen', 'node-style', 'pjax',
4 | function (Y) {
5 |
6 | var win = Y.config.win,
7 | localStorage = win.localStorage,
8 |
9 | bdNode = Y.one('#bd'),
10 |
11 | pjax,
12 | defaultRoute,
13 |
14 | classTabView,
15 | selectedTab;
16 |
17 | // Kill pjax functionality unless serving over HTTP.
18 | if (!Y.getLocation().protocol.match(/^https?\:/)) {
19 | Y.Router.html5 = false;
20 | }
21 |
22 | // Create the default route with middleware which enables syntax highlighting
23 | // on the loaded content.
24 | defaultRoute = Y.Pjax.defaultRoute.concat(function (req, res, next) {
25 | prettyPrint();
26 | bdNode.removeClass('loading');
27 |
28 | next();
29 | });
30 |
31 | pjax = new Y.Pjax({
32 | container : '#docs-main',
33 | contentSelector: '#docs-main > .content',
34 | linkSelector : '#bd a',
35 | titleSelector : '#xhr-title',
36 |
37 | navigateOnHash: true,
38 | root : '/',
39 | routes : [
40 | // -- / ----------------------------------------------------------------
41 | {
42 | path : '/(index.html)?',
43 | callbacks: defaultRoute
44 | },
45 |
46 | // -- /classes/* -------------------------------------------------------
47 | {
48 | path : '/classes/:class.html*',
49 | callbacks: [defaultRoute, 'handleClasses']
50 | },
51 |
52 | // -- /files/* ---------------------------------------------------------
53 | {
54 | path : '/files/*file',
55 | callbacks: [defaultRoute, 'handleFiles']
56 | },
57 |
58 | // -- /modules/* -------------------------------------------------------
59 | {
60 | path : '/modules/:module.html*',
61 | callbacks: defaultRoute
62 | }
63 | ]
64 | });
65 |
66 | // -- Utility Functions --------------------------------------------------------
67 |
68 | pjax.checkVisibility = function (tab) {
69 | tab || (tab = selectedTab);
70 |
71 | if (!tab) { return; }
72 |
73 | var panelNode = tab.get('panelNode'),
74 | visibleItems;
75 |
76 | // If no items are visible in the tab panel due to the current visibility
77 | // settings, display a message to that effect.
78 | visibleItems = panelNode.all('.item,.index-item').some(function (itemNode) {
79 | if (itemNode.getComputedStyle('display') !== 'none') {
80 | return true;
81 | }
82 | });
83 |
84 | panelNode.all('.no-visible-items').remove();
85 |
86 | if (!visibleItems) {
87 | if (Y.one('#index .index-item')) {
88 | panelNode.append(
89 | '' +
90 | '
' +
91 | 'Some items are not shown due to the current visibility ' +
92 | 'settings. Use the checkboxes at the upper right of this ' +
93 | 'page to change the visibility settings.' +
94 | '
' +
95 | '
'
96 | );
97 | } else {
98 | panelNode.append(
99 | '' +
100 | '
' +
101 | 'This class doesn\'t provide any methods, properties, ' +
102 | 'attributes, or events.' +
103 | '
' +
104 | '
'
105 | );
106 | }
107 | }
108 |
109 | // Hide index sections without any visible items.
110 | Y.all('.index-section').each(function (section) {
111 | var items = 0,
112 | visibleItems = 0;
113 |
114 | section.all('.index-item').each(function (itemNode) {
115 | items += 1;
116 |
117 | if (itemNode.getComputedStyle('display') !== 'none') {
118 | visibleItems += 1;
119 | }
120 | });
121 |
122 | section.toggleClass('hidden', !visibleItems);
123 | section.toggleClass('no-columns', visibleItems < 4);
124 | });
125 | };
126 |
127 | pjax.initClassTabView = function () {
128 | if (!Y.all('#classdocs .api-class-tab').size()) {
129 | return;
130 | }
131 |
132 | if (classTabView) {
133 | classTabView.destroy();
134 | selectedTab = null;
135 | }
136 |
137 | classTabView = new Y.TabView({
138 | srcNode: '#classdocs',
139 |
140 | on: {
141 | selectionChange: pjax.onTabSelectionChange
142 | }
143 | });
144 |
145 | pjax.updateTabState();
146 | classTabView.render();
147 | };
148 |
149 | pjax.initLineNumbers = function () {
150 | var hash = win.location.hash.substring(1),
151 | container = pjax.get('container'),
152 | hasLines, node;
153 |
154 | // Add ids for each line number in the file source view.
155 | container.all('.linenums>li').each(function (lineNode, index) {
156 | lineNode.set('id', 'l' + (index + 1));
157 | lineNode.addClass('file-line');
158 | hasLines = true;
159 | });
160 |
161 | // Scroll to the desired line.
162 | if (hasLines && /^l\d+$/.test(hash)) {
163 | if ((node = container.getById(hash))) {
164 | win.scroll(0, node.getY());
165 | }
166 | }
167 | };
168 |
169 | pjax.initRoot = function () {
170 | var terminators = /^(?:classes|files|modules)$/,
171 | parts = pjax._getPathRoot().split('/'),
172 | root = [],
173 | i, len, part;
174 |
175 | for (i = 0, len = parts.length; i < len; i += 1) {
176 | part = parts[i];
177 |
178 | if (part.match(terminators)) {
179 | // Makes sure the path will end with a "/".
180 | root.push('');
181 | break;
182 | }
183 |
184 | root.push(part);
185 | }
186 |
187 | pjax.set('root', root.join('/'));
188 | };
189 |
190 | pjax.updateTabState = function (src) {
191 | var hash = win.location.hash.substring(1),
192 | defaultTab, node, tab, tabPanel;
193 |
194 | function scrollToNode() {
195 | if (node.hasClass('protected')) {
196 | Y.one('#api-show-protected').set('checked', true);
197 | pjax.updateVisibility();
198 | }
199 |
200 | if (node.hasClass('private')) {
201 | Y.one('#api-show-private').set('checked', true);
202 | pjax.updateVisibility();
203 | }
204 |
205 | setTimeout(function () {
206 | // For some reason, unless we re-get the node instance here,
207 | // getY() always returns 0.
208 | var node = Y.one('#classdocs').getById(hash);
209 | win.scrollTo(0, node.getY() - 70);
210 | }, 1);
211 | }
212 |
213 | if (!classTabView) {
214 | return;
215 | }
216 |
217 | if (src === 'hashchange' && !hash) {
218 | defaultTab = 'index';
219 | } else {
220 | if (localStorage) {
221 | defaultTab = localStorage.getItem('tab_' + pjax.getPath()) ||
222 | 'index';
223 | } else {
224 | defaultTab = 'index';
225 | }
226 | }
227 |
228 | if (hash && (node = Y.one('#classdocs').getById(hash))) {
229 | if ((tabPanel = node.ancestor('.api-class-tabpanel', true))) {
230 | if ((tab = Y.one('#classdocs .api-class-tab.' + tabPanel.get('id')))) {
231 | if (classTabView.get('rendered')) {
232 | Y.Widget.getByNode(tab).set('selected', 1);
233 | } else {
234 | tab.addClass('yui3-tab-selected');
235 | }
236 | }
237 | }
238 |
239 | // Scroll to the desired element if this is a hash URL.
240 | if (node) {
241 | if (classTabView.get('rendered')) {
242 | scrollToNode();
243 | } else {
244 | classTabView.once('renderedChange', scrollToNode);
245 | }
246 | }
247 | } else {
248 | tab = Y.one('#classdocs .api-class-tab.' + defaultTab);
249 |
250 | // When the `defaultTab` node isn't found, `localStorage` is stale.
251 | if (!tab && defaultTab !== 'index') {
252 | tab = Y.one('#classdocs .api-class-tab.index');
253 | }
254 |
255 | if (classTabView.get('rendered')) {
256 | Y.Widget.getByNode(tab).set('selected', 1);
257 | } else {
258 | tab.addClass('yui3-tab-selected');
259 | }
260 | }
261 | };
262 |
263 | pjax.updateVisibility = function () {
264 | var container = pjax.get('container');
265 |
266 | container.toggleClass('hide-inherited',
267 | !Y.one('#api-show-inherited').get('checked'));
268 |
269 | container.toggleClass('show-deprecated',
270 | Y.one('#api-show-deprecated').get('checked'));
271 |
272 | container.toggleClass('show-protected',
273 | Y.one('#api-show-protected').get('checked'));
274 |
275 | container.toggleClass('show-private',
276 | Y.one('#api-show-private').get('checked'));
277 |
278 | pjax.checkVisibility();
279 | };
280 |
281 | // -- Route Handlers -----------------------------------------------------------
282 |
283 | pjax.handleClasses = function (req, res, next) {
284 | var status = res.ioResponse.status;
285 |
286 | // Handles success and local filesystem XHRs.
287 | if (res.ioResponse.readyState === 4 && (!status || (status >= 200 && status < 300))) {
288 | pjax.initClassTabView();
289 | }
290 |
291 | next();
292 | };
293 |
294 | pjax.handleFiles = function (req, res, next) {
295 | var status = res.ioResponse.status;
296 |
297 | // Handles success and local filesystem XHRs.
298 | if (res.ioResponse.readyState === 4 && (!status || (status >= 200 && status < 300))) {
299 | pjax.initLineNumbers();
300 | }
301 |
302 | next();
303 | };
304 |
305 | // -- Event Handlers -----------------------------------------------------------
306 |
307 | pjax.onNavigate = function (e) {
308 | var hash = e.hash,
309 | originTarget = e.originEvent && e.originEvent.target,
310 | tab;
311 |
312 | if (hash) {
313 | tab = originTarget && originTarget.ancestor('.yui3-tab', true);
314 |
315 | if (hash === win.location.hash) {
316 | pjax.updateTabState('hashchange');
317 | } else if (!tab) {
318 | win.location.hash = hash;
319 | }
320 |
321 | e.preventDefault();
322 | return;
323 | }
324 |
325 | // Only scroll to the top of the page when the URL doesn't have a hash.
326 | this.set('scrollToTop', !e.url.match(/#.+$/));
327 |
328 | bdNode.addClass('loading');
329 | };
330 |
331 | pjax.onOptionClick = function (e) {
332 | pjax.updateVisibility();
333 | };
334 |
335 | pjax.onTabSelectionChange = function (e) {
336 | var tab = e.newVal,
337 | tabId = tab.get('contentBox').getAttribute('href').substring(1);
338 |
339 | selectedTab = tab;
340 |
341 | // If switching from a previous tab (i.e., this is not the default tab),
342 | // replace the history entry with a hash URL that will cause this tab to
343 | // be selected if the user navigates away and then returns using the back
344 | // or forward buttons.
345 | if (e.prevVal && localStorage) {
346 | localStorage.setItem('tab_' + pjax.getPath(), tabId);
347 | }
348 |
349 | pjax.checkVisibility(tab);
350 | };
351 |
352 | // -- Init ---------------------------------------------------------------------
353 |
354 | pjax.on('navigate', pjax.onNavigate);
355 |
356 | pjax.initRoot();
357 | pjax.upgrade();
358 | pjax.initClassTabView();
359 | pjax.initLineNumbers();
360 | pjax.updateVisibility();
361 |
362 | Y.APIList.rootPath = pjax.get('root');
363 |
364 | Y.one('#api-options').delegate('click', pjax.onOptionClick, 'input');
365 |
366 | Y.on('hashchange', function (e) {
367 | pjax.updateTabState('hashchange');
368 | }, win);
369 |
370 | });
371 |
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/vendor/prettify/COPYING:
--------------------------------------------------------------------------------
1 |
2 | Apache License
3 | Version 2.0, January 2004
4 | http://www.apache.org/licenses/
5 |
6 | TERMS AND CONDITIONS FOR USE, REPRODUCTION, AND DISTRIBUTION
7 |
8 | 1. Definitions.
9 |
10 | "License" shall mean the terms and conditions for use, reproduction,
11 | and distribution as defined by Sections 1 through 9 of this document.
12 |
13 | "Licensor" shall mean the copyright owner or entity authorized by
14 | the copyright owner that is granting the License.
15 |
16 | "Legal Entity" shall mean the union of the acting entity and all
17 | other entities that control, are controlled by, or are under common
18 | control with that entity. For the purposes of this definition,
19 | "control" means (i) the power, direct or indirect, to cause the
20 | direction or management of such entity, whether by contract or
21 | otherwise, or (ii) ownership of fifty percent (50%) or more of the
22 | outstanding shares, or (iii) beneficial ownership of such entity.
23 |
24 | "You" (or "Your") shall mean an individual or Legal Entity
25 | exercising permissions granted by this License.
26 |
27 | "Source" form shall mean the preferred form for making modifications,
28 | including but not limited to software source code, documentation
29 | source, and configuration files.
30 |
31 | "Object" form shall mean any form resulting from mechanical
32 | transformation or translation of a Source form, including but
33 | not limited to compiled object code, generated documentation,
34 | and conversions to other media types.
35 |
36 | "Work" shall mean the work of authorship, whether in Source or
37 | Object form, made available under the License, as indicated by a
38 | copyright notice that is included in or attached to the work
39 | (an example is provided in the Appendix below).
40 |
41 | "Derivative Works" shall mean any work, whether in Source or Object
42 | form, that is based on (or derived from) the Work and for which the
43 | editorial revisions, annotations, elaborations, or other modifications
44 | represent, as a whole, an original work of authorship. For the purposes
45 | of this License, Derivative Works shall not include works that remain
46 | separable from, or merely link (or bind by name) to the interfaces of,
47 | the Work and Derivative Works thereof.
48 |
49 | "Contribution" shall mean any work of authorship, including
50 | the original version of the Work and any modifications or additions
51 | to that Work or Derivative Works thereof, that is intentionally
52 | submitted to Licensor for inclusion in the Work by the copyright owner
53 | or by an individual or Legal Entity authorized to submit on behalf of
54 | the copyright owner. For the purposes of this definition, "submitted"
55 | means any form of electronic, verbal, or written communication sent
56 | to the Licensor or its representatives, including but not limited to
57 | communication on electronic mailing lists, source code control systems,
58 | and issue tracking systems that are managed by, or on behalf of, the
59 | Licensor for the purpose of discussing and improving the Work, but
60 | excluding communication that is conspicuously marked or otherwise
61 | designated in writing by the copyright owner as "Not a Contribution."
62 |
63 | "Contributor" shall mean Licensor and any individual or Legal Entity
64 | on behalf of whom a Contribution has been received by Licensor and
65 | subsequently incorporated within the Work.
66 |
67 | 2. Grant of Copyright License. Subject to the terms and conditions of
68 | this License, each Contributor hereby grants to You a perpetual,
69 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
70 | copyright license to reproduce, prepare Derivative Works of,
71 | publicly display, publicly perform, sublicense, and distribute the
72 | Work and such Derivative Works in Source or Object form.
73 |
74 | 3. Grant of Patent License. Subject to the terms and conditions of
75 | this License, each Contributor hereby grants to You a perpetual,
76 | worldwide, non-exclusive, no-charge, royalty-free, irrevocable
77 | (except as stated in this section) patent license to make, have made,
78 | use, offer to sell, sell, import, and otherwise transfer the Work,
79 | where such license applies only to those patent claims licensable
80 | by such Contributor that are necessarily infringed by their
81 | Contribution(s) alone or by combination of their Contribution(s)
82 | with the Work to which such Contribution(s) was submitted. If You
83 | institute patent litigation against any entity (including a
84 | cross-claim or counterclaim in a lawsuit) alleging that the Work
85 | or a Contribution incorporated within the Work constitutes direct
86 | or contributory patent infringement, then any patent licenses
87 | granted to You under this License for that Work shall terminate
88 | as of the date such litigation is filed.
89 |
90 | 4. Redistribution. You may reproduce and distribute copies of the
91 | Work or Derivative Works thereof in any medium, with or without
92 | modifications, and in Source or Object form, provided that You
93 | meet the following conditions:
94 |
95 | (a) You must give any other recipients of the Work or
96 | Derivative Works a copy of this License; and
97 |
98 | (b) You must cause any modified files to carry prominent notices
99 | stating that You changed the files; and
100 |
101 | (c) You must retain, in the Source form of any Derivative Works
102 | that You distribute, all copyright, patent, trademark, and
103 | attribution notices from the Source form of the Work,
104 | excluding those notices that do not pertain to any part of
105 | the Derivative Works; and
106 |
107 | (d) If the Work includes a "NOTICE" text file as part of its
108 | distribution, then any Derivative Works that You distribute must
109 | include a readable copy of the attribution notices contained
110 | within such NOTICE file, excluding those notices that do not
111 | pertain to any part of the Derivative Works, in at least one
112 | of the following places: within a NOTICE text file distributed
113 | as part of the Derivative Works; within the Source form or
114 | documentation, if provided along with the Derivative Works; or,
115 | within a display generated by the Derivative Works, if and
116 | wherever such third-party notices normally appear. The contents
117 | of the NOTICE file are for informational purposes only and
118 | do not modify the License. You may add Your own attribution
119 | notices within Derivative Works that You distribute, alongside
120 | or as an addendum to the NOTICE text from the Work, provided
121 | that such additional attribution notices cannot be construed
122 | as modifying the License.
123 |
124 | You may add Your own copyright statement to Your modifications and
125 | may provide additional or different license terms and conditions
126 | for use, reproduction, or distribution of Your modifications, or
127 | for any such Derivative Works as a whole, provided Your use,
128 | reproduction, and distribution of the Work otherwise complies with
129 | the conditions stated in this License.
130 |
131 | 5. Submission of Contributions. Unless You explicitly state otherwise,
132 | any Contribution intentionally submitted for inclusion in the Work
133 | by You to the Licensor shall be under the terms and conditions of
134 | this License, without any additional terms or conditions.
135 | Notwithstanding the above, nothing herein shall supersede or modify
136 | the terms of any separate license agreement you may have executed
137 | with Licensor regarding such Contributions.
138 |
139 | 6. Trademarks. This License does not grant permission to use the trade
140 | names, trademarks, service marks, or product names of the Licensor,
141 | except as required for reasonable and customary use in describing the
142 | origin of the Work and reproducing the content of the NOTICE file.
143 |
144 | 7. Disclaimer of Warranty. Unless required by applicable law or
145 | agreed to in writing, Licensor provides the Work (and each
146 | Contributor provides its Contributions) on an "AS IS" BASIS,
147 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or
148 | implied, including, without limitation, any warranties or conditions
149 | of TITLE, NON-INFRINGEMENT, MERCHANTABILITY, or FITNESS FOR A
150 | PARTICULAR PURPOSE. You are solely responsible for determining the
151 | appropriateness of using or redistributing the Work and assume any
152 | risks associated with Your exercise of permissions under this License.
153 |
154 | 8. Limitation of Liability. In no event and under no legal theory,
155 | whether in tort (including negligence), contract, or otherwise,
156 | unless required by applicable law (such as deliberate and grossly
157 | negligent acts) or agreed to in writing, shall any Contributor be
158 | liable to You for damages, including any direct, indirect, special,
159 | incidental, or consequential damages of any character arising as a
160 | result of this License or out of the use or inability to use the
161 | Work (including but not limited to damages for loss of goodwill,
162 | work stoppage, computer failure or malfunction, or any and all
163 | other commercial damages or losses), even if such Contributor
164 | has been advised of the possibility of such damages.
165 |
166 | 9. Accepting Warranty or Additional Liability. While redistributing
167 | the Work or Derivative Works thereof, You may choose to offer,
168 | and charge a fee for, acceptance of support, warranty, indemnity,
169 | or other liability obligations and/or rights consistent with this
170 | License. However, in accepting such obligations, You may act only
171 | on Your own behalf and on Your sole responsibility, not on behalf
172 | of any other Contributor, and only if You agree to indemnify,
173 | defend, and hold each Contributor harmless for any liability
174 | incurred by, or claims asserted against, such Contributor by reason
175 | of your accepting any such warranty or additional liability.
176 |
177 | END OF TERMS AND CONDITIONS
178 |
179 | APPENDIX: How to apply the Apache License to your work.
180 |
181 | To apply the Apache License to your work, attach the following
182 | boilerplate notice, with the fields enclosed by brackets "[]"
183 | replaced with your own identifying information. (Don't include
184 | the brackets!) The text should be enclosed in the appropriate
185 | comment syntax for the file format. We also recommend that a
186 | file or class name and description of purpose be included on the
187 | same "printed page" as the copyright notice for easier
188 | identification within third-party archives.
189 |
190 | Copyright [yyyy] [name of copyright owner]
191 |
192 | Licensed under the Apache License, Version 2.0 (the "License");
193 | you may not use this file except in compliance with the License.
194 | You may obtain a copy of the License at
195 |
196 | http://www.apache.org/licenses/LICENSE-2.0
197 |
198 | Unless required by applicable law or agreed to in writing, software
199 | distributed under the License is distributed on an "AS IS" BASIS,
200 | WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied.
201 | See the License for the specific language governing permissions and
202 | limitations under the License.
203 |
--------------------------------------------------------------------------------
/igp_topo_light.py:
--------------------------------------------------------------------------------
1 | import textfsm
2 | import yaml
3 | import webbrowser
4 | from pprint import pprint
5 |
6 | with open("config.yaml", "r") as file:
7 | conf = yaml.load(file, Loader=yaml.FullLoader)
8 |
9 | host_type = conf["host_type"]
10 | igp = conf["igp"]
11 | lsdb_file = conf["lsdb_file"]
12 |
13 | try:
14 | with open(lsdb_file) as file:
15 | lsdb = file.read()
16 | except Exception as err:
17 | print(err)
18 |
19 | tmpl1 = "templates/sh_ospf_db_router_det_jun.tmpl"
20 | tmpl3 = "templates/sh_isis_db_det_cisco.tmpl"
21 | tmpl4 = "templates/sh_isis_db_ext_jun.tmpl"
22 | tmpl5 = "templates/disp_isis_lsdb_verbose_huawei.tmpl"
23 | tmpl6 = "templates/sh_rou_ospf_db_type_router_det_nokia.tmpl"
24 | tmpl7 = "templates/sh_rou_isis_db_det_nokia.tmpl"
25 | tmpl8 = "templates/sh_ip_ospf_db_router_cisco.tmpl"
26 | tmpl9 = "templates/disp_ospf_lsdb_router_huawei.tmpl"
27 |
28 | pw_nodes = []
29 | hostnames = []
30 | hosts = []
31 |
32 | ###Function for parsing raw data
33 | def parse_textfsm(template, raw):
34 | templ = open(template)
35 | re_table = textfsm.TextFSM(templ)
36 | parse_data = re_table.ParseText(raw)
37 | return parse_data
38 |
39 |
40 | ###Function for creating lists of hosts and pseudonodes for ISIS
41 | def hosts_pwnodes(links):
42 | for L61 in links:
43 | if L61[0].split(".")[1] == "00":
44 | if L61[0] not in hosts:
45 | hosts.append(L61[0])
46 | if L61[1].split(".")[1] == "00":
47 | if L61[1] not in hosts:
48 | hosts.append(L61[1])
49 | if L61[0].split(".")[1] != "00":
50 | if L61[0] not in pw_nodes:
51 | pw_nodes.append(L61[0])
52 | if L61[1].split(".")[1] != "00":
53 | if L61[1] not in pw_nodes:
54 | pw_nodes.append(L61[1])
55 | return hosts, pw_nodes
56 |
57 |
58 | #######################
59 | ###Nokia
60 | #######################
61 | if host_type == "nokia":
62 | ##Creating topology from OSPF LSDB
63 | if igp == "ospf":
64 | list4 = []
65 | list5 = []
66 | out = parse_textfsm(tmpl6, lsdb)
67 | for L4 in out:
68 | if L4[2] == "Router":
69 | if L4[1] not in hosts:
70 | hosts.append(L4[1])
71 | if "Point To Point" in L4[3]:
72 | list4.append((L4[1], L4[4]))
73 | if "Transit" in L4[3]:
74 | list5.append((L4[1], L4[4]))
75 | if L4[4] not in pw_nodes:
76 | pw_nodes.append(L4[4])
77 | # Removing doubles from links for P2P and BMA types of connections
78 | for L5 in list4:
79 | for L6 in list4:
80 | if L5[0] == L6[1]:
81 | if L5[1] == L6[0]:
82 | list4.remove(L6)
83 | for L7 in list5:
84 | for L8 in list5:
85 | if L7[0] == L8[1]:
86 | if L7[1] == L8[0]:
87 | list5.remove(L8)
88 | for L9 in list5:
89 | list4.append(L9)
90 | links = list4
91 |
92 | ##Creating topology from ISIS LSDB
93 | if igp == "isis":
94 | list6 = []
95 | out1 = parse_textfsm(tmpl7, lsdb)
96 | for L10 in out1:
97 | if L10[0] not in hostnames:
98 | hostnames.append(L10[0])
99 | # Creating links between hosts and pseudonodes
100 | # Removing the lines with the same contents
101 | n = 0
102 | while True:
103 | n += 1
104 | for L11 in out1:
105 | if L11[0] == L11[4]:
106 | out1.remove(L11)
107 | if n == 2:
108 | break
109 | # Removing cross links between nodes and hosts
110 | for L12 in out1:
111 | list6.append((L12[0], L12[4]))
112 | for L13 in list6:
113 | for L2 in list6:
114 | if L13[0] == L2[1]:
115 | if L13[1] == L2[0]:
116 | list6.remove(L2)
117 | links = list6
118 | # Creating lists of hosts and pseudo nodes
119 | hosts, pw_nodes = hosts_pwnodes(list6)
120 |
121 | #######################
122 | ###Juniper
123 | #######################
124 | if host_type == "juniper":
125 | ##Creating topology from OSPF LSDB
126 | if igp == "ospf":
127 | list14 = []
128 | list15 = []
129 | out2 = parse_textfsm(tmpl1, lsdb)
130 | for L14 in out2:
131 | if L14[0] == "Router":
132 | if L14[1] not in hosts:
133 | hosts.append(L14[1])
134 | if L14[2] == "PointToPoint":
135 | list14.append((L14[1], L14[3]))
136 | if L14[2] == "Transit":
137 | list15.append((L14[1], L14[3]))
138 | if L14[3] not in pw_nodes:
139 | pw_nodes.append(L14[3])
140 | # Removing doubles from links for P2P and BMA types of connections
141 | for L15 in list14:
142 | for L16 in list14:
143 | if L15[0] == L16[1]:
144 | if L15[1] == L16[0]:
145 | list14.remove(L16)
146 | for L17 in list15:
147 | for L18 in list15:
148 | if L17[0] == L18[1]:
149 | if L17[1] == L18[0]:
150 | list15.remove(L18)
151 | for L19 in list15:
152 | list14.append(L19)
153 | links = list14
154 | ##Creating topology from ISIS LSDB
155 | if igp == "isis":
156 | out3 = parse_textfsm(tmpl4, lsdb)
157 | list20 = []
158 | # Creating list of hostnames
159 | for L26 in out3:
160 | if L26[3] not in hostnames:
161 | hostnames.append(L26[3])
162 | # Creating links between hosts and pseudonodes
163 | # Removing the lines with the same contents
164 | n = 0
165 | while True:
166 | n += 1
167 | for L27 in out3:
168 | if L27[0] == L27[4]:
169 | out3.remove(L27)
170 | if n == 2:
171 | break
172 | # Removing cross links between nodes and hosts
173 | for L28 in out3:
174 | list20.append((L28[0], L28[4]))
175 | for L24 in list20:
176 | for L25 in list20:
177 | if L24[0] == L25[1]:
178 | if L24[1] == L25[0]:
179 | list20.remove(L25)
180 | links = list20
181 | # Creating lists of hosts and pseudo nodes
182 | hosts, pw_nodes = hosts_pwnodes(list20)
183 |
184 | #######################
185 | ###Cisco
186 | #######################
187 | if host_type == "cisco":
188 | if igp == "isis":
189 | list21 = []
190 | out4 = parse_textfsm(tmpl3, lsdb)
191 | # Spliting elements in lists and create list of links
192 | for L41 in out4:
193 | list21.append((L41[0], L41[4]))
194 | # Removing lines where element with index 0 is the same as index 1
195 | n = 0
196 | while True:
197 | n += 1
198 | for L42 in list21:
199 | if L42[0] == L42[1]:
200 | list21.remove(L42)
201 | if n == 2:
202 | break
203 | # Removing double links
204 | for L44 in list21:
205 | for L45 in list21:
206 | if L44[0] == L45[1]:
207 | if L44[1] == L45[0]:
208 | list21.remove(L45)
209 | links = list21
210 | # Creating lists of hosts and pseudo nodes
211 | hosts, pw_nodes = hosts_pwnodes(list21)
212 |
213 | ##Creating topology from OSPF LSDB
214 | if igp == "ospf":
215 | list24 = []
216 | list25 = []
217 | out5 = parse_textfsm(tmpl8, lsdb)
218 | for L46 in out5:
219 | if L46[1] not in hosts:
220 | hosts.append(L46[1])
221 | if "point-to-point" in L46[2]:
222 | list24.append((L46[1], L46[3]))
223 | if "Transit" in L46[2]:
224 | list25.append((L46[1], L46[3]))
225 | if L46[3] not in pw_nodes:
226 | pw_nodes.append(L46[3])
227 | # Removing doubles from links for P2P and BMA types of connections
228 | for L47 in list24:
229 | for L48 in list24:
230 | if L47[0] == L48[1]:
231 | if L47[1] == L48[0]:
232 | list24.remove(L48)
233 | for L49 in list25:
234 | for L50 in list25:
235 | if L49[0] == L50[1]:
236 | if L49[1] == L50[0]:
237 | list25.remove(L50)
238 | for L51 in list25:
239 | list24.append(L51)
240 | links = list24
241 |
242 | #######################
243 | ###Huawei
244 | #######################
245 | if host_type == "huawei":
246 | if igp == "isis":
247 | out6 = parse_textfsm(tmpl5, lsdb)
248 | list23 = []
249 | # Creating list of hostnames
250 | for L52 in out6:
251 | if L52[1] not in hostnames:
252 | hostnames.append(L52[1])
253 | # Creating links between hosts and pseudonodes
254 | # Removing the lines with the same contents
255 | n = 0
256 | while True:
257 | n += 1
258 | for L53 in out6:
259 | if L53[0] == L53[3]:
260 | out6.remove(L53)
261 | if n == 2:
262 | break
263 | # Removing cross links between nodes and hosts
264 | for L54 in out6:
265 | list23.append((L54[0], L54[3]))
266 | for L55 in list23:
267 | for L56 in list23:
268 | if L55[0] == L56[1]:
269 | if L55[1] == L56[0]:
270 | list23.remove(L56)
271 | links = list23
272 | # Creating lists of hosts and pseudo nodes
273 | hosts, pw_nodes = hosts_pwnodes(list23)
274 |
275 | ##Creating topology from OSPF LSDB
276 | if igp == "ospf":
277 | out7 = parse_textfsm(tmpl9, lsdb)
278 | list26 = []
279 | list27 = []
280 | for L76 in out7:
281 | if L76[1] not in hosts:
282 | hosts.append(L76[1])
283 | if "P-2-P" in L76[4]:
284 | list26.append((L76[1], L76[2]))
285 | if "TransNet" in L76[4]:
286 | list27.append((L76[1], L76[2]))
287 | if L76[2] == L76[3]:
288 | if L76[3] not in pw_nodes:
289 | pw_nodes.append(L76[2])
290 | # Removing doubles from links for P2P and BMA types of connections
291 | for L77 in list26:
292 | for L78 in list26:
293 | if L77[0] == L78[1]:
294 | if L77[1] == L78[0]:
295 | list26.remove(L78)
296 | for L79 in list27:
297 | for L80 in list27:
298 | if L79[0] == L80[1]:
299 | if L79[1] == L80[0]:
300 | list27.remove(L80)
301 | for L81 in list27:
302 | list26.append(L81)
303 | links = list26
304 |
305 | ###Create json file for NeXUI
306 | topologyData = {}
307 | topologyData["nodes"] = []
308 | for L35 in hosts:
309 | topologyData["nodes"].append({"id": L35, "name": L35, "icon": "router"})
310 |
311 | try:
312 | if len(pw_nodes) != 0:
313 | for L36 in pw_nodes:
314 | topologyData["nodes"].append({"id": L36, "icon": "bma"})
315 | except Exception as err:
316 | print(err)
317 |
318 | topologyData.update({"links": []})
319 | ids = 0
320 | for l17 in links:
321 | topologyData["links"].append(
322 | {"id": ids, "source": l17[0], "target": l17[1], "color": "blue"}
323 | )
324 | ids += 1
325 |
326 | text = "var topologyData = {}".format(topologyData)
327 | with open("nextUI/app/topology_data.js", "w") as file:
328 | file.write(text)
329 | print(
330 | """File for NeXtUI was created. If the drawing didn't opened in your browser
331 | automatically, you can find file index.html in the directory /nextUI and open it manually"""
332 | )
333 |
334 | # Opening topology draw in browser
335 | webbrowser.open_new_tab("nextUI/index.html")
336 |
--------------------------------------------------------------------------------
/test_files/sh_router_isis_db_det_nokia.txt:
--------------------------------------------------------------------------------
1 | *A:DR14# show router isis database detail
2 |
3 | ===============================================================================
4 | Rtr Base ISIS Instance 0 Database (detail)
5 | ===============================================================================
6 |
7 | Displaying Level 1 database
8 | -------------------------------------------------------------------------------
9 | LSP ID : MX480-2_5-Core_stand-AR11.00-00 Level : L1
10 | Sequence : 0x2ee7 Checksum : 0x4821 Lifetime : 615
11 | Version : 1 Pkt Type : 18 Pkt Ver : 1
12 | Attributes: L1 Max Area : 0 Alloc Len : 285
13 | SYS ID : 0100.0000.0001 SysID Len : 6 Used Len : 285
14 |
15 | TLVs :
16 | Area Addresses:
17 | Area Address : (3) 49.0001
18 | Unknown TLV : 14 Len 2 :
19 | 05 D4
20 | Supp Protocols:
21 | Protocols : IPv4
22 | Protocols : IPv6
23 | Router ID :
24 | Router ID : 10.0.0.1
25 | I/F Addresses :
26 | I/F Address : 10.0.0.1
27 | IS-Hostname : MX480-2_5-Core_stand-AR11
28 | TE IS Nbrs :
29 | Nbr : DR13.00
30 | Default Metric : 10
31 | Sub TLV Len : 74
32 | IF Addr : 10.1.5.1
33 | Nbr IP : 10.1.5.5
34 | LclId : 1209
35 | RmtId : 2
36 | Unresvd BW:
37 | BW[0] : 10000000 kbps
38 | BW[1] : 10000000 kbps
39 | BW[2] : 10000000 kbps
40 | BW[3] : 10000000 kbps
41 | BW[4] : 10000000 kbps
42 | BW[5] : 10000000 kbps
43 | BW[6] : 10000000 kbps
44 | BW[7] : 10000000 kbps
45 | Resvble BW: 10000000 kbps
46 | MaxLink BW: 10000000 kbps
47 | Admin Grp : 0x0
48 | Nbr : DR14.00
49 | Default Metric : 10
50 | Sub TLV Len : 74
51 | IF Addr : 10.1.6.1
52 | Nbr IP : 10.1.6.6
53 | LclId : 1400
54 | RmtId : 2
55 | Unresvd BW:
56 | BW[0] : 10000000 kbps
57 | BW[1] : 10000000 kbps
58 | BW[2] : 10000000 kbps
59 | BW[3] : 10000000 kbps
60 | BW[4] : 10000000 kbps
61 | BW[5] : 10000000 kbps
62 | BW[6] : 10000000 kbps
63 | BW[7] : 10000000 kbps
64 | Resvble BW: 10000000 kbps
65 | MaxLink BW: 10000000 kbps
66 | Admin Grp : 0x0
67 | TE IP Reach :
68 | Default Metric : 0
69 | Control Info: , prefLen 32
70 | Prefix : 10.0.0.1
71 | Default Metric : 0
72 | Control Info: , prefLen 32
73 | Prefix : 10.0.1.1
74 | I/F Addresses :
75 | I/F Address : 10.0.1.1
76 | Router Cap : 10.0.0.1, D:0, S:0
77 |
78 | -------------------------------------------------------------------------------
79 | LSP ID : AR12.00-00 Level : L1
80 | Sequence : 0x1bf8 Checksum : 0x6f8e Lifetime : 663
81 | Version : 1 Pkt Type : 18 Pkt Ver : 1
82 | Attributes: L1 Max Area : 3 Alloc Len : 139
83 | SYS ID : 0100.0000.0002 SysID Len : 6 Used Len : 139
84 |
85 | TLVs :
86 | Area Addresses:
87 | Area Address : (3) 49.0001
88 | Supp Protocols:
89 | Protocols : IPv4
90 | IS-Hostname : AR12
91 | Router ID :
92 | Router ID : 10.0.0.2
93 | I/F Addresses :
94 | I/F Address : 10.0.0.2
95 | I/F Address : 10.2.5.2
96 | I/F Address : 10.2.6.2
97 | TE IS Nbrs :
98 | Nbr : DR14.00
99 | Default Metric : 10
100 | Sub TLV Len : 12
101 | IF Addr : 10.2.6.2
102 | Nbr IP : 10.2.6.6
103 | TE IS Nbrs :
104 | Nbr : DR13.00
105 | Default Metric : 10
106 | Sub TLV Len : 12
107 | IF Addr : 10.2.5.2
108 | Nbr IP : 10.2.5.5
109 | TE IP Reach :
110 | Default Metric : 0
111 | Control Info: , prefLen 32
112 | Prefix : 10.0.0.2
113 | Default Metric : 10
114 | Control Info: , prefLen 24
115 | Prefix : 10.2.5.0
116 | Default Metric : 10
117 | Control Info: , prefLen 24
118 | Prefix : 10.2.6.0
119 |
120 | -------------------------------------------------------------------------------
121 | LSP ID : DR13.00-00 Level : L1
122 | Sequence : 0x2f48 Checksum : 0x6e90 Lifetime : 1098
123 | Version : 1 Pkt Type : 18 Pkt Ver : 1
124 | Attributes: L1 Max Area : 3 Alloc Len : 360
125 | SYS ID : 0100.0000.1005 SysID Len : 6 Used Len : 360
126 |
127 | TLVs :
128 | Area Addresses:
129 | Area Address : (3) 49.0001
130 | Supp Protocols:
131 | Protocols : IPv4
132 | IS-Hostname : DR13
133 | Router ID :
134 | Router ID : 10.0.1.5
135 | I/F Addresses :
136 | I/F Address : 10.0.0.5
137 | I/F Address : 10.0.1.5
138 | I/F Address : 10.1.5.5
139 | I/F Address : 10.2.5.5
140 | I/F Address : 10.5.6.5
141 | TE IS Nbrs :
142 | Nbr : DR14.00
143 | Default Metric : 10
144 | Sub TLV Len : 69
145 | IF Addr : 10.5.6.5
146 | Nbr IP : 10.5.6.6
147 | MaxLink BW: 199999995 kbps
148 | Resvble BW: 199999995 kbps
149 | Unresvd BW:
150 | BW[0] : 199999995 kbps
151 | BW[1] : 199999995 kbps
152 | BW[2] : 199999995 kbps
153 | BW[3] : 199999995 kbps
154 | BW[4] : 199999995 kbps
155 | BW[5] : 199999995 kbps
156 | BW[6] : 199999995 kbps
157 | BW[7] : 199999995 kbps
158 | Admin Grp : 0x0
159 | TE Metric : 10
160 | TE IS Nbrs :
161 | Nbr : AR12.00
162 | Default Metric : 10
163 | Sub TLV Len : 69
164 | IF Addr : 10.2.5.5
165 | Nbr IP : 10.2.5.2
166 | MaxLink BW: 10000000 kbps
167 | Resvble BW: 10000000 kbps
168 | Unresvd BW:
169 | BW[0] : 10000000 kbps
170 | BW[1] : 10000000 kbps
171 | BW[2] : 10000000 kbps
172 | BW[3] : 10000000 kbps
173 | BW[4] : 10000000 kbps
174 | BW[5] : 10000000 kbps
175 | BW[6] : 10000000 kbps
176 | BW[7] : 10000000 kbps
177 | Admin Grp : 0x0
178 | TE Metric : 10
179 | TE IS Nbrs :
180 | Nbr : MX480-2_5-Core_stand-AR11.00
181 | Default Metric : 10
182 | Sub TLV Len : 69
183 | IF Addr : 10.1.5.5
184 | Nbr IP : 10.1.5.1
185 | MaxLink BW: 10000000 kbps
186 | Resvble BW: 10000000 kbps
187 | Unresvd BW:
188 | BW[0] : 10000000 kbps
189 | BW[1] : 10000000 kbps
190 | BW[2] : 10000000 kbps
191 | BW[3] : 10000000 kbps
192 | BW[4] : 10000000 kbps
193 | BW[5] : 10000000 kbps
194 | BW[6] : 10000000 kbps
195 | BW[7] : 10000000 kbps
196 | Admin Grp : 0x0
197 | TE Metric : 10
198 | TE IP Reach :
199 | Default Metric : 0
200 | Control Info: , prefLen 32
201 | Prefix : 10.0.0.5
202 | Default Metric : 0
203 | Control Info: , prefLen 32
204 | Prefix : 10.0.1.5
205 | Default Metric : 10
206 | Control Info: , prefLen 24
207 | Prefix : 10.1.5.0
208 | Default Metric : 10
209 | Control Info: , prefLen 24
210 | Prefix : 10.2.5.0
211 | Default Metric : 10
212 | Control Info: , prefLen 24
213 | Prefix : 10.5.6.0
214 |
215 | -------------------------------------------------------------------------------
216 | LSP ID : DR14.00-00 Level : L1
217 | Sequence : 0x2f35 Checksum : 0x591 Lifetime : 747
218 | Version : 1 Pkt Type : 18 Pkt Ver : 1
219 | Attributes: L1 Max Area : 3 Alloc Len : 1492
220 | SYS ID : 0100.0000.1006 SysID Len : 6 Used Len : 372
221 |
222 | TLVs :
223 | Area Addresses:
224 | Area Address : (3) 49.0001
225 | Supp Protocols:
226 | Protocols : IPv4
227 | IS-Hostname : DR14
228 | Router ID :
229 | Router ID : 10.0.1.6
230 | I/F Addresses :
231 | I/F Address : 10.0.0.6
232 | I/F Address : 10.0.1.6
233 | I/F Address : 10.1.6.6
234 | I/F Address : 10.2.6.6
235 | I/F Address : 10.5.6.6
236 | I/F Address : 10.10.6.6
237 | TE IS Nbrs :
238 | Nbr : DR13.00
239 | Default Metric : 10
240 | Sub TLV Len : 69
241 | IF Addr : 10.5.6.6
242 | Nbr IP : 10.5.6.5
243 | MaxLink BW: 199999995 kbps
244 | Resvble BW: 199999995 kbps
245 | Unresvd BW:
246 | BW[0] : 199999995 kbps
247 | BW[1] : 199999995 kbps
248 | BW[2] : 199999995 kbps
249 | BW[3] : 199999995 kbps
250 | BW[4] : 199999995 kbps
251 | BW[5] : 199999995 kbps
252 | BW[6] : 199999995 kbps
253 | BW[7] : 199999995 kbps
254 | Admin Grp : 0x0
255 | TE Metric : 10
256 | TE IS Nbrs :
257 | Nbr : AR12.00
258 | Default Metric : 10
259 | Sub TLV Len : 69
260 | IF Addr : 10.2.6.6
261 | Nbr IP : 10.2.6.2
262 | MaxLink BW: 10000000 kbps
263 | Resvble BW: 10000000 kbps
264 | Unresvd BW:
265 | BW[0] : 10000000 kbps
266 | BW[1] : 10000000 kbps
267 | BW[2] : 10000000 kbps
268 | BW[3] : 10000000 kbps
269 | BW[4] : 10000000 kbps
270 | BW[5] : 10000000 kbps
271 | BW[6] : 10000000 kbps
272 | BW[7] : 10000000 kbps
273 | Admin Grp : 0x0
274 | TE Metric : 10
275 | TE IS Nbrs :
276 | Nbr : MX480-2_5-Core_stand-AR11.00
277 | Default Metric : 10
278 | Sub TLV Len : 69
279 | IF Addr : 10.1.6.6
280 | Nbr IP : 10.1.6.1
281 | MaxLink BW: 10000000 kbps
282 | Resvble BW: 10000000 kbps
283 | Unresvd BW:
284 | BW[0] : 10000000 kbps
285 | BW[1] : 10000000 kbps
286 | BW[2] : 10000000 kbps
287 | BW[3] : 10000000 kbps
288 | BW[4] : 10000000 kbps
289 | BW[5] : 10000000 kbps
290 | BW[6] : 10000000 kbps
291 | BW[7] : 10000000 kbps
292 | Admin Grp : 0x0
293 | TE Metric : 10
294 | TE IP Reach :
295 | Default Metric : 0
296 | Control Info: , prefLen 32
297 | Prefix : 10.0.0.6
298 | Default Metric : 0
299 | Control Info: , prefLen 32
300 | Prefix : 10.0.1.6
301 | Default Metric : 10
302 | Control Info: , prefLen 24
303 | Prefix : 10.1.6.0
304 | Default Metric : 10
305 | Control Info: , prefLen 24
306 | Prefix : 10.2.6.0
307 | Default Metric : 10
308 | Control Info: , prefLen 24
309 | Prefix : 10.5.6.0
310 | Default Metric : 10
311 | Control Info: , prefLen 24
312 | Prefix : 10.10.6.0
313 |
314 | Level (1) LSP Count : 4
315 |
316 | Displaying Level 2 database
317 | -------------------------------------------------------------------------------
318 | Level (2) LSP Count : 0
319 | -------------------------------------------------------------------------------
320 | Control Info : D = Prefix Leaked Down
321 | S = Sub-TLVs Present
322 | Attribute Flags : N = Node Flag
323 | R = Re-advertisement Flag
324 | X = External Prefix Flag
325 | E = Entropy Label Capability (ELC) Flag
326 | Adj-SID Flags : v4/v6 = IPv4 or IPv6 Address-Family
327 | B = Backup Flag
328 | V = Adj-SID carries a value
329 | L = value/index has local significance
330 | S = Set of Adjacencies
331 | P = Persistently allocated
332 | Prefix-SID Flags : R = Re-advertisement Flag
333 | N = Node-SID Flag
334 | nP = no penultimate hop POP
335 | E = Explicit-Null Flag
336 | V = Prefix-SID carries a value
337 | L = value/index has local significance
338 | Lbl-Binding Flags: v4/v6 = IPv4 or IPv6 Address-Family
339 | M = Mirror Context Flag
340 | S = SID/Label Binding flooding
341 | D = Prefix Leaked Down
342 | A = Attached Flag
343 | SABM-flags Flags: R = RSVP-TE
344 | S = SR-TE
345 | F = LFA
346 | X = FLEX-ALGO
347 | FAD-flags Flags: M = Prefix Metric
348 | ===============================================================================
349 | *A:DR14#
350 |
351 |
--------------------------------------------------------------------------------
/test_files/sh_ospf_router_det_jun.txt:
--------------------------------------------------------------------------------
1 | lab@DR1# run show ospf database router detail | no-more
2 |
3 | OSPF database, Area 0.0.0.0
4 | Type ID Adv Rtr Seq Age Opt Cksum Len
5 | Router 10.10.10.1 10.10.10.1 0x80000004 1082 0x22 0xb831 84
6 | bits 0x0, link count 5
7 | id 10.10.10.253, data 172.16.25.6, Type PointToPoint (1)
8 | Topology count: 0, Default metric: 1
9 | id 172.16.25.4, data 255.255.255.252, Type Stub (3)
10 | Topology count: 0, Default metric: 1
11 | id 10.10.10.2, data 172.16.25.9, Type PointToPoint (1)
12 | Topology count: 0, Default metric: 1
13 | id 172.16.25.8, data 255.255.255.252, Type Stub (3)
14 | Topology count: 0, Default metric: 1
15 | id 10.10.10.1, data 255.255.255.255, Type Stub (3)
16 | Topology count: 0, Default metric: 0
17 | Topology default (ID 0)
18 | Type: PointToPoint, Node ID: 10.10.10.2
19 | Metric: 1, Bidirectional
20 | Type: PointToPoint, Node ID: 10.10.10.253
21 | Metric: 1, Bidirectional
22 | Router 10.10.10.2 10.10.10.2 0x8000000c 1091 0x22 0x93b8 108
23 | bits 0x0, link count 7
24 | id 172.16.25.70, data 172.16.25.69, Type Transit (2)
25 | Topology count: 0, Default metric: 1
26 | id 10.10.10.1, data 172.16.25.10, Type PointToPoint (1)
27 | Topology count: 0, Default metric: 1
28 | id 172.16.25.8, data 255.255.255.252, Type Stub (3)
29 | Topology count: 0, Default metric: 1
30 | id 10.10.10.3, data 172.16.25.13, Type PointToPoint (1)
31 | Topology count: 0, Default metric: 1
32 | id 172.16.25.12, data 255.255.255.252, Type Stub (3)
33 | Topology count: 0, Default metric: 1
34 | id 172.16.25.62, data 172.16.25.61, Type Transit (2)
35 | Topology count: 0, Default metric: 1
36 | id 10.10.10.2, data 255.255.255.255, Type Stub (3)
37 | Topology count: 0, Default metric: 0
38 | Topology default (ID 0)
39 | Type: Transit, Node ID: 172.16.25.62
40 | Metric: 1, Bidirectional
41 | Type: PointToPoint, Node ID: 10.10.10.3
42 | Metric: 1, Bidirectional
43 | Type: PointToPoint, Node ID: 10.10.10.1
44 | Metric: 1, Bidirectional
45 | Type: Transit, Node ID: 172.16.25.70
46 | Metric: 1, Bidirectional
47 | Router 10.10.10.3 10.10.10.3 0x80000008 378 0x22 0x5c5d 84
48 | bits 0x0, link count 5
49 | id 10.10.10.4, data 172.16.25.17, Type PointToPoint (1)
50 | Topology count: 0, Default metric: 1
51 | id 172.16.25.16, data 255.255.255.252, Type Stub (3)
52 | Topology count: 0, Default metric: 1
53 | id 10.10.10.2, data 172.16.25.14, Type PointToPoint (1)
54 | Topology count: 0, Default metric: 1
55 | id 172.16.25.12, data 255.255.255.252, Type Stub (3)
56 | Topology count: 0, Default metric: 1
57 | id 10.10.10.3, data 255.255.255.255, Type Stub (3)
58 | Topology count: 0, Default metric: 0
59 | Topology default (ID 0)
60 | Type: PointToPoint, Node ID: 10.10.10.2
61 | Metric: 1, Bidirectional
62 | Type: PointToPoint, Node ID: 10.10.10.4
63 | Metric: 1, Bidirectional
64 | Router 10.10.10.4 10.10.10.4 0x80000005 914 0x22 0x7334 84
65 | bits 0x0, link count 5
66 | id 10.10.10.3, data 172.16.25.18, Type PointToPoint (1)
67 | Topology count: 0, Default metric: 1
68 | id 172.16.25.16, data 255.255.255.252, Type Stub (3)
69 | Topology count: 0, Default metric: 1
70 | id 10.10.10.5, data 172.16.25.21, Type PointToPoint (1)
71 | Topology count: 0, Default metric: 1
72 | id 172.16.25.20, data 255.255.255.252, Type Stub (3)
73 | Topology count: 0, Default metric: 1
74 | id 10.10.10.4, data 255.255.255.255, Type Stub (3)
75 | Topology count: 0, Default metric: 0
76 | Topology default (ID 0)
77 | Type: PointToPoint, Node ID: 10.10.10.5
78 | Metric: 1, Bidirectional
79 | Type: PointToPoint, Node ID: 10.10.10.3
80 | Metric: 1, Bidirectional
81 | Router 10.10.10.5 10.10.10.5 0x80000009 1964 0x22 0xdab9 84
82 | bits 0x0, link count 5
83 | id 10.10.10.4, data 172.16.25.22, Type PointToPoint (1)
84 | Topology count: 0, Default metric: 1
85 | id 172.16.25.20, data 255.255.255.252, Type Stub (3)
86 | Topology count: 0, Default metric: 1
87 | id 10.10.10.254, data 172.16.25.26, Type PointToPoint (1)
88 | Topology count: 0, Default metric: 1
89 | id 172.16.25.24, data 255.255.255.252, Type Stub (3)
90 | Topology count: 0, Default metric: 1
91 | id 10.10.10.5, data 255.255.255.255, Type Stub (3)
92 | Topology count: 0, Default metric: 0
93 | Topology default (ID 0)
94 | Type: PointToPoint, Node ID: 10.10.10.254
95 | Metric: 1, Bidirectional
96 | Type: PointToPoint, Node ID: 10.10.10.4
97 | Metric: 1, Bidirectional
98 | Router 10.10.10.6 10.10.10.6 0x80000003 1178 0x22 0x274 84
99 | bits 0x0, link count 5
100 | id 10.10.10.7, data 172.16.25.33, Type PointToPoint (1)
101 | Topology count: 0, Default metric: 1
102 | id 172.16.25.32, data 255.255.255.252, Type Stub (3)
103 | Topology count: 0, Default metric: 1
104 | id 10.10.10.253, data 172.16.25.30, Type PointToPoint (1)
105 | Topology count: 0, Default metric: 1
106 | id 172.16.25.28, data 255.255.255.252, Type Stub (3)
107 | Topology count: 0, Default metric: 1
108 | id 10.10.10.6, data 255.255.255.255, Type Stub (3)
109 | Topology count: 0, Default metric: 0
110 | Topology default (ID 0)
111 | Type: PointToPoint, Node ID: 10.10.10.253
112 | Metric: 1, Bidirectional
113 | Type: PointToPoint, Node ID: 10.10.10.7
114 | Metric: 1, Bidirectional
115 | Router 10.10.10.7 10.10.10.7 0x80000004 1182 0x22 0xff59 84
116 | bits 0x0, link count 5
117 | id 10.10.10.6, data 172.16.25.34, Type PointToPoint (1)
118 | Topology count: 0, Default metric: 1
119 | id 172.16.25.32, data 255.255.255.252, Type Stub (3)
120 | Topology count: 0, Default metric: 1
121 | id 10.10.10.8, data 172.16.25.37, Type PointToPoint (1)
122 | Topology count: 0, Default metric: 1
123 | id 172.16.25.36, data 255.255.255.252, Type Stub (3)
124 | Topology count: 0, Default metric: 1
125 | id 10.10.10.7, data 255.255.255.255, Type Stub (3)
126 | Topology count: 0, Default metric: 0
127 | Topology default (ID 0)
128 | Type: PointToPoint, Node ID: 10.10.10.8
129 | Metric: 1, Bidirectional
130 | Type: PointToPoint, Node ID: 10.10.10.6
131 | Metric: 1, Bidirectional
132 | Router 10.10.10.8 10.10.10.8 0x80000006 1975 0x22 0x340e 84
133 | bits 0x0, link count 5
134 | id 10.10.10.7, data 172.16.25.38, Type PointToPoint (1)
135 | Topology count: 0, Default metric: 1
136 | id 172.16.25.36, data 255.255.255.252, Type Stub (3)
137 | Topology count: 0, Default metric: 1
138 | id 10.10.10.9, data 172.16.25.41, Type PointToPoint (1)
139 | Topology count: 0, Default metric: 1
140 | id 172.16.25.40, data 255.255.255.252, Type Stub (3)
141 | Topology count: 0, Default metric: 1
142 | id 10.10.10.8, data 255.255.255.255, Type Stub (3)
143 | Topology count: 0, Default metric: 0
144 | Topology default (ID 0)
145 | Type: PointToPoint, Node ID: 10.10.10.9
146 | Metric: 1, Bidirectional
147 | Type: PointToPoint, Node ID: 10.10.10.7
148 | Metric: 1, Bidirectional
149 | Router 10.10.10.9 10.10.10.9 0x80000013 42 0x22 0x76f0 120
150 | bits 0x0, link count 8
151 | id 10.10.10.11, data 172.16.25.57, Type PointToPoint (1)
152 | Topology count: 0, Default metric: 1
153 | id 172.16.25.56, data 255.255.255.252, Type Stub (3)
154 | Topology count: 0, Default metric: 1
155 | id 172.16.25.81, data 172.16.25.82, Type Transit (2)
156 | Topology count: 0, Default metric: 1
157 | id 10.10.10.8, data 172.16.25.42, Type PointToPoint (1)
158 | Topology count: 0, Default metric: 1
159 | id 172.16.25.40, data 255.255.255.252, Type Stub (3)
160 | Topology count: 0, Default metric: 1
161 | id 10.10.10.254, data 172.16.25.46, Type PointToPoint (1)
162 | Topology count: 0, Default metric: 1
163 | id 172.16.25.44, data 255.255.255.252, Type Stub (3)
164 | Topology count: 0, Default metric: 1
165 | id 10.10.10.9, data 255.255.255.255, Type Stub (3)
166 | Topology count: 0, Default metric: 0
167 | Topology default (ID 0)
168 | Type: PointToPoint, Node ID: 10.10.10.254
169 | Metric: 1, Bidirectional
170 | Type: PointToPoint, Node ID: 10.10.10.8
171 | Metric: 1, Bidirectional
172 | Type: Transit, Node ID: 172.16.25.81
173 | Metric: 1, Bidirectional
174 | Type: PointToPoint, Node ID: 10.10.10.11
175 | Metric: 1, Bidirectional
176 | Router 10.10.10.10 10.10.10.10 0x8000000f 1965 0x22 0x51d6 72
177 | bits 0x0, link count 4
178 | id 172.16.25.49, data 172.16.25.50, Type Transit (2)
179 | Topology count: 0, Default metric: 1
180 | id 172.16.25.66, data 172.16.25.65, Type Transit (2)
181 | Topology count: 0, Default metric: 1
182 | id 172.16.25.53, data 172.16.25.53, Type Transit (2)
183 | Topology count: 0, Default metric: 1
184 | id 10.10.10.10, data 255.255.255.255, Type Stub (3)
185 | Topology count: 0, Default metric: 0
186 | Topology default (ID 0)
187 | Type: Transit, Node ID: 172.16.25.53
188 | Metric: 1, Bidirectional
189 | Type: Transit, Node ID: 172.16.25.66
190 | Metric: 1, Bidirectional
191 | Type: Transit, Node ID: 172.16.25.49
192 | Metric: 1, Bidirectional
193 | Router 10.10.10.11 10.10.10.11 0x8000000e 36 0x22 0x22c5 72
194 | bits 0x0, link count 4
195 | id 10.10.10.9, data 172.16.25.58, Type PointToPoint (1)
196 | Topology count: 0, Default metric: 1
197 | id 172.16.25.56, data 255.255.255.252, Type Stub (3)
198 | Topology count: 0, Default metric: 1
199 | id 172.16.25.81, data 172.16.25.83, Type Transit (2)
200 | Topology count: 0, Default metric: 1
201 | id 10.10.10.11, data 255.255.255.255, Type Stub (3)
202 | Topology count: 0, Default metric: 0
203 | Topology default (ID 0)
204 | Type: Transit, Node ID: 172.16.25.81
205 | Metric: 1, Bidirectional
206 | Type: PointToPoint, Node ID: 10.10.10.9
207 | Metric: 1, Bidirectional
208 | Router *10.10.10.253 10.10.10.253 0x80000009 1186 0x22 0x5763 120
209 | bits 0x0, link count 8
210 | id 10.10.10.1, data 172.16.25.5, Type PointToPoint (1)
211 | Topology count: 0, Default metric: 1
212 | id 172.16.25.4, data 255.255.255.252, Type Stub (3)
213 | Topology count: 0, Default metric: 1
214 | id 172.16.25.49, data 172.16.25.49, Type Transit (2)
215 | Topology count: 0, Default metric: 1
216 | id 10.10.10.254, data 172.16.25.1, Type PointToPoint (1)
217 | Topology count: 0, Default metric: 1
218 | id 172.16.25.0, data 255.255.255.252, Type Stub (3)
219 | Topology count: 0, Default metric: 1
220 | id 10.10.10.6, data 172.16.25.29, Type PointToPoint (1)
221 | Topology count: 0, Default metric: 1
222 | id 172.16.25.28, data 255.255.255.252, Type Stub (3)
223 | Topology count: 0, Default metric: 1
224 | id 10.10.10.253, data 255.255.255.255, Type Stub (3)
225 | Topology count: 0, Default metric: 0
226 | Topology default (ID 0)
227 | Type: PointToPoint, Node ID: 10.10.10.6
228 | Metric: 1, Bidirectional
229 | Type: PointToPoint, Node ID: 10.10.10.254
230 | Metric: 1, Bidirectional
231 | Type: Transit, Node ID: 172.16.25.49
232 | Metric: 1, Bidirectional
233 | Type: PointToPoint, Node ID: 10.10.10.1
234 | Metric: 1, Bidirectional
235 | Router 10.10.10.254 10.10.10.254 0x80000014 36 0x22 0x54a1 132
236 | bits 0x0, link count 9
237 | id 172.16.25.81, data 172.16.25.81, Type Transit (2)
238 | Topology count: 0, Default metric: 1
239 | id 10.10.10.253, data 172.16.25.2, Type PointToPoint (1)
240 | Topology count: 0, Default metric: 1
241 | id 172.16.25.0, data 255.255.255.252, Type Stub (3)
242 | Topology count: 0, Default metric: 1
243 | id 10.10.10.9, data 172.16.25.45, Type PointToPoint (1)
244 | Topology count: 0, Default metric: 1
245 | id 172.16.25.44, data 255.255.255.252, Type Stub (3)
246 | Topology count: 0, Default metric: 1
247 | id 172.16.25.53, data 172.16.25.54, Type Transit (2)
248 | Topology count: 0, Default metric: 1
249 | id 10.10.10.5, data 172.16.25.25, Type PointToPoint (1)
250 | Topology count: 0, Default metric: 1
251 | id 172.16.25.24, data 255.255.255.252, Type Stub (3)
252 | Topology count: 0, Default metric: 1
253 | id 10.10.10.254, data 255.255.255.255, Type Stub (3)
254 | Topology count: 0, Default metric: 0
255 | Topology default (ID 0)
256 | Type: PointToPoint, Node ID: 10.10.10.5
257 | Metric: 1, Bidirectional
258 | Type: Transit, Node ID: 172.16.25.53
259 | Metric: 1, Bidirectional
260 | Type: PointToPoint, Node ID: 10.10.10.9
261 | Metric: 1, Bidirectional
262 | Type: PointToPoint, Node ID: 10.10.10.253
263 | Metric: 1, Bidirectional
264 | Type: Transit, Node ID: 172.16.25.81
265 | Metric: 1, Bidirectional
266 | Router 10.10.20.1 10.10.20.1 0x80000008 2026 0x22 0x5fd0 60
267 | bits 0x0, link count 3
268 | id 172.16.25.70, data 172.16.25.70, Type Transit (2)
269 | Topology count: 0, Default metric: 1
270 | id 172.16.25.62, data 172.16.25.62, Type Transit (2)
271 | Topology count: 0, Default metric: 1
272 | id 10.10.20.1, data 255.255.255.255, Type Stub (3)
273 | Topology count: 0, Default metric: 0
274 | Topology default (ID 0)
275 | Type: Transit, Node ID: 172.16.25.62
276 | Metric: 1, Bidirectional
277 | Type: Transit, Node ID: 172.16.25.70
278 | Metric: 1, Bidirectional
279 | Router 10.10.20.2 10.10.20.2 0x8000000b 1301 0x22 0x3535 48
280 | bits 0x0, link count 2
281 | id 172.16.25.66, data 172.16.25.66, Type Transit (2)
282 | Topology count: 0, Default metric: 1
283 | id 10.10.20.2, data 255.255.255.255, Type Stub (3)
284 | Topology count: 0, Default metric: 0
285 | Topology default (ID 0)
286 | Type: Transit, Node ID: 172.16.25.66
287 | Metric: 1, Bidirectional
288 |
289 | [edit]
290 | lab@DR1#
291 |
292 |
--------------------------------------------------------------------------------
/test_files/sh_isis_db_det_cisco.txt:
--------------------------------------------------------------------------------
1 | AR16#sh isis database detail
2 |
3 | IS-IS Level-1 Link State Database:
4 | LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
5 | AR16.00-00 * 0x00000003 0x02BD 532/* 0/0/0
6 | Area Address: 49.0002
7 | NLPID: 0xCC
8 | Hostname: AR16
9 | Metric: 10 IS AR16.01
10 | IP Address: 10.10.10.16
11 | Metric: 0 IP 10.10.10.16 255.255.255.255
12 | Metric: 10 IP 172.16.25.72 255.255.255.252
13 | AR16.01-00 * 0x00000001 0xC1D0 532/* 0/0/0
14 | Metric: 0 IS AR16.00
15 | IS-IS Level-2 Link State Database:
16 | LSPID LSP Seq Num LSP Checksum LSP Holdtime/Rcvd ATT/P/OL
17 | AR1.00-00 0x00000003 0x3C4B 955/1194 0/0/0
18 | Area Address: 49.0002
19 | Code: 14 Length: 2
20 | NLPID: 0xCC 0x8E
21 | Router ID: 10.10.10.1
22 | IP Address: 10.10.10.1
23 | Hostname: AR1
24 | Metric: 10 IP 172.16.25.4 255.255.255.252
25 | Metric: 10 IP 172.16.25.8 255.255.255.252
26 | Metric: 0 IP 10.10.10.1 255.255.255.255
27 | Metric: 10 IP 172.16.25.4/30
28 | Metric: 10 IP 172.16.25.8/30
29 | Metric: 0 IP 10.10.10.1/32
30 | Metric: 10 IS AR2.00
31 | Metric: 10 IS DR1.00
32 | Metric: 10 IS-Extended AR2.00
33 | Metric: 10 IS-Extended DR1.00
34 | AR2.00-00 0x0000000D 0x47E9 1058/1192 0/0/0
35 | Area Address: 49.0002
36 | Code: 14 Length: 2
37 | NLPID: 0xCC 0x8E
38 | Router ID: 10.10.10.2
39 | IP Address: 10.10.10.2
40 | Hostname: AR2
41 | Metric: 10 IP 172.16.25.68 255.255.255.252
42 | Metric: 10 IP 172.16.25.8 255.255.255.252
43 | Metric: 10 IP 172.16.25.12 255.255.255.252
44 | Metric: 10 IP 172.16.25.60 255.255.255.252
45 | Metric: 0 IP 10.10.10.2 255.255.255.255
46 | Metric: 10 IP 172.16.25.68/30
47 | Metric: 10 IP 172.16.25.8/30
48 | Metric: 10 IP 172.16.25.12/30
49 | Metric: 10 IP 172.16.25.60/30
50 | Metric: 0 IP 10.10.10.2/32
51 | Metric: 10 IS ASW1.02
52 | Metric: 10 IS AR3.00
53 | Metric: 10 IS AR1.00
54 | Metric: 10 IS ASW1.03
55 | Metric: 10 IS-Extended ASW1.02
56 | Metric: 10 IS-Extended AR3.00
57 | Metric: 10 IS-Extended AR1.00
58 | Metric: 10 IS-Extended ASW1.03
59 | AR3.00-00 0x00000003 0xB923 989/1192 0/0/0
60 | Area Address: 49.0002
61 | Code: 14 Length: 2
62 | NLPID: 0xCC 0x8E
63 | Router ID: 10.10.10.3
64 | IP Address: 10.10.10.3
65 | Hostname: AR3
66 | Metric: 10 IP 172.16.25.16 255.255.255.252
67 | Metric: 10 IP 172.16.25.12 255.255.255.252
68 | Metric: 0 IP 10.10.10.3 255.255.255.255
69 | Metric: 10 IP 172.16.25.16/30
70 | Metric: 10 IP 172.16.25.12/30
71 | Metric: 0 IP 10.10.10.3/32
72 | Metric: 10 IS AR2.00
73 | Metric: 10 IS AR4.00
74 | Metric: 10 IS-Extended AR2.00
75 | Metric: 10 IS-Extended AR4.00
76 | AR4.00-00 0x00000003 0xD3E0 989/1194 0/0/0
77 | Area Address: 49.0002
78 | Code: 14 Length: 2
79 | NLPID: 0xCC 0x8E
80 | Router ID: 10.10.10.4
81 | IP Address: 10.10.10.4
82 | Hostname: AR4
83 | Metric: 10 IP 172.16.25.16 255.255.255.252
84 | Metric: 10 IP 172.16.25.20 255.255.255.252
85 | Metric: 0 IP 10.10.10.4 255.255.255.255
86 | Metric: 10 IP 172.16.25.16/30
87 | Metric: 10 IP 172.16.25.20/30
88 | Metric: 0 IP 10.10.10.4/32
89 | Metric: 10 IS AR5.00
90 | Metric: 10 IS AR3.00
91 | Metric: 10 IS-Extended AR5.00
92 | Metric: 10 IS-Extended AR3.00
93 | AR5.00-00 0x00000003 0x9B48 963/1196 0/0/0
94 | Area Address: 49.0002
95 | Code: 14 Length: 2
96 | NLPID: 0xCC 0x8E
97 | Router ID: 10.10.10.5
98 | IP Address: 10.10.10.5
99 | Hostname: AR5
100 | Metric: 10 IP 172.16.25.20 255.255.255.252
101 | Metric: 10 IP 172.16.25.24 255.255.255.252
102 | Metric: 0 IP 10.10.10.5 255.255.255.255
103 | Metric: 10 IP 172.16.25.20/30
104 | Metric: 10 IP 172.16.25.24/30
105 | Metric: 0 IP 10.10.10.5/32
106 | Metric: 10 IS DR2.00
107 | Metric: 10 IS AR4.00
108 | Metric: 10 IS-Extended DR2.00
109 | Metric: 10 IS-Extended AR4.00
110 | AR6.00-00 0x00000003 0x7725 858/1194 0/0/0
111 | Area Address: 49.0002
112 | Code: 14 Length: 2
113 | NLPID: 0xCC 0x8E
114 | Router ID: 10.10.10.6
115 | IP Address: 10.10.10.6
116 | Hostname: AR6
117 | Metric: 10 IP 172.16.25.32 255.255.255.252
118 | Metric: 10 IP 172.16.25.28 255.255.255.252
119 | Metric: 0 IP 10.10.10.6 255.255.255.255
120 | Metric: 10 IP 172.16.25.32/30
121 | Metric: 10 IP 172.16.25.28/30
122 | Metric: 0 IP 10.10.10.6/32
123 | Metric: 10 IS DR1.00
124 | Metric: 10 IS AR7.00
125 | Metric: 10 IS-Extended DR1.00
126 | Metric: 10 IS-Extended AR7.00
127 | AR7.00-00 0x00000003 0xEB2A 1006/1192 0/0/0
128 | Area Address: 49.0002
129 | Code: 14 Length: 2
130 | NLPID: 0xCC 0x8E
131 | Router ID: 10.10.10.7
132 | IP Address: 10.10.10.7
133 | Hostname: AR7
134 | Metric: 10 IP 172.16.25.32 255.255.255.252
135 | Metric: 10 IP 172.16.25.36 255.255.255.252
136 | Metric: 0 IP 10.10.10.7 255.255.255.255
137 | Metric: 10 IP 172.16.25.32/30
138 | Metric: 10 IP 172.16.25.36/30
139 | Metric: 0 IP 10.10.10.7/32
140 | Metric: 10 IS AR6.00
141 | Metric: 10 IS AR8.00
142 | Metric: 10 IS-Extended AR6.00
143 | Metric: 10 IS-Extended AR8.00
144 | AR8.00-00 0x00000004 0xBF28 1033/1194 0/0/0
145 | Area Address: 49.0002
146 | Code: 14 Length: 2
147 | NLPID: 0xCC 0x8E
148 | Router ID: 10.10.10.8
149 | IP Address: 10.10.10.8
150 | Hostname: AR8
151 | Metric: 0 IP 10.10.10.8 255.255.255.255
152 | Metric: 10 IP 172.16.25.36 255.255.255.252
153 | Metric: 10 IP 172.16.25.40 255.255.255.252
154 | Metric: 0 IP 10.10.10.8/32
155 | Metric: 10 IP 172.16.25.36/30
156 | Metric: 10 IP 172.16.25.40/30
157 | Metric: 10 IS AR7.00
158 | Metric: 10 IS AR9.00
159 | Metric: 10 IS-Extended AR7.00
160 | Metric: 10 IS-Extended AR9.00
161 | AR9.00-00 0x00000005 0x6616 1033/1196 0/0/0
162 | Area Address: 49.0002
163 | Code: 14 Length: 2
164 | NLPID: 0xCC 0x8E
165 | Router ID: 10.10.10.9
166 | IP Address: 10.10.10.9
167 | Hostname: AR9
168 | Metric: 10 IP 172.16.25.56 255.255.255.252
169 | Metric: 10 IP 172.16.25.80 255.255.255.248
170 | Metric: 10 IP 172.16.25.40 255.255.255.252
171 | Metric: 10 IP 172.16.25.44 255.255.255.252
172 | Metric: 0 IP 10.10.10.9 255.255.255.255
173 | Metric: 10 IP 172.16.25.56/30
174 | Metric: 10 IP 172.16.25.80/29
175 | Metric: 10 IP 172.16.25.40/30
176 | Metric: 10 IP 172.16.25.44/30
177 | Metric: 0 IP 10.10.10.9/32
178 | Metric: 10 IS DR2.03
179 | Metric: 10 IS DR2.00
180 | Metric: 10 IS AR11.02
181 | Metric: 10 IS AR8.00
182 | Metric: 10 IS-Extended DR2.03
183 | Metric: 10 IS-Extended DR2.00
184 | Metric: 10 IS-Extended AR11.02
185 | Metric: 10 IS-Extended AR8.00
186 | AR10.00-00 0x00000005 0xED09 773/1196 0/0/0
187 | Area Address: 49.0002
188 | Code: 14 Length: 2
189 | NLPID: 0xCC 0x8E
190 | Router ID: 10.10.10.10
191 | IP Address: 10.10.10.10
192 | Hostname: AR10
193 | Metric: 10 IP 172.16.25.48 255.255.255.252
194 | Metric: 10 IP 172.16.25.64 255.255.255.252
195 | Metric: 10 IP 172.16.25.52 255.255.255.252
196 | Metric: 0 IP 10.10.10.10 255.255.255.255
197 | Metric: 10 IP 172.16.25.48/30
198 | Metric: 10 IP 172.16.25.64/30
199 | Metric: 10 IP 172.16.25.52/30
200 | Metric: 0 IP 10.10.10.10/32
201 | Metric: 10 IS DR2.02
202 | Metric: 10 IS DR1.02
203 | Metric: 10 IS-Extended DR2.02
204 | Metric: 10 IS-Extended DR1.02
205 | AR11.00-00 0x00000003 0x2DD5 926/1196 0/0/0
206 | Area Address: 49.0002
207 | Code: 14 Length: 2
208 | NLPID: 0xCC 0x8E
209 | Router ID: 10.10.10.11
210 | IP Address: 10.10.10.11
211 | Hostname: AR11
212 | Metric: 10 IP 172.16.25.56 255.255.255.252
213 | Metric: 10 IP 172.16.25.80 255.255.255.248
214 | Metric: 0 IP 10.10.10.11 255.255.255.255
215 | Metric: 10 IP 172.16.25.56/30
216 | Metric: 10 IP 172.16.25.80/29
217 | Metric: 0 IP 10.10.10.11/32
218 | Metric: 10 IS DR2.03
219 | Metric: 10 IS AR11.02
220 | Metric: 10 IS-Extended DR2.03
221 | Metric: 10 IS-Extended AR11.02
222 | AR11.02-00 0x00000001 0x739E 926/1196 0/0/0
223 | Metric: 0 IS AR11.00
224 | Metric: 0 IS AR9.00
225 | Metric: 0 IS-Extended AR11.00
226 | Metric: 0 IS-Extended AR9.00
227 | AR16.00-00 * 0x00000003 0x02BD 574/* 0/0/0
228 | Area Address: 49.0002
229 | NLPID: 0xCC
230 | Hostname: AR16
231 | Metric: 10 IS AR16.01
232 | IP Address: 10.10.10.16
233 | Metric: 0 IP 10.10.10.16 255.255.255.255
234 | Metric: 10 IP 172.16.25.72 255.255.255.252
235 | AR16.01-00 * 0x00000001 0x64C1 574/* 0/0/0
236 | Metric: 0 IS AR16.00
237 | Metric: 0 IS DR2.00
238 | DR1.00-00 0x00000006 0x66C1 954/1196 0/0/0
239 | Area Address: 49.0002
240 | Code: 14 Length: 2
241 | NLPID: 0xCC 0x8E
242 | Router ID: 10.10.10.253
243 | IP Address: 10.10.10.253
244 | Hostname: DR1
245 | Metric: 10 IP 172.16.25.4 255.255.255.252
246 | Metric: 10 IP 172.16.25.48 255.255.255.252
247 | Metric: 10 IP 172.16.25.0 255.255.255.252
248 | Metric: 10 IP 172.16.25.28 255.255.255.252
249 | Metric: 0 IP 10.10.10.253 255.255.255.255
250 | Metric: 10 IP 172.16.25.4/30
251 | Metric: 10 IP 172.16.25.48/30
252 | Metric: 10 IP 172.16.25.0/30
253 | Metric: 10 IP 172.16.25.28/30
254 | Metric: 0 IP 10.10.10.253/32
255 | Metric: 10 IS DR2.00
256 | Metric: 10 IS DR1.02
257 | Metric: 10 IS AR6.00
258 | Metric: 10 IS AR1.00
259 | Metric: 10 IS-Extended DR2.00
260 | Metric: 10 IS-Extended DR1.02
261 | Metric: 10 IS-Extended AR6.00
262 | Metric: 10 IS-Extended AR1.00
263 | DR1.02-00 0x00000003 0xFF35 773/1196 0/0/0
264 | Metric: 0 IS DR1.00
265 | Metric: 0 IS AR10.00
266 | Metric: 0 IS-Extended DR1.00
267 | Metric: 0 IS-Extended AR10.00
268 | DR2.00-00 0x00000007 0x6130 926/1198 0/0/0
269 | Area Address: 49.0002
270 | Code: 14 Length: 2
271 | NLPID: 0xCC 0x8E
272 | Router ID: 10.10.10.254
273 | IP Address: 10.10.10.254
274 | Hostname: DR2
275 | Metric: 10 IP 172.16.25.72 255.255.255.252
276 | Metric: 10 IP 172.16.25.80 255.255.255.248
277 | Metric: 10 IP 172.16.25.0 255.255.255.252
278 | Metric: 10 IP 172.16.25.44 255.255.255.252
279 | Metric: 10 IP 172.16.25.52 255.255.255.252
280 | Metric: 10 IP 172.16.25.24 255.255.255.252
281 | Metric: 0 IP 10.10.10.254 255.255.255.255
282 | Metric: 10 IP 172.16.25.72/30
283 | Metric: 10 IP 172.16.25.80/29
284 | Metric: 10 IP 172.16.25.0/30
285 | Metric: 10 IP 172.16.25.44/30
286 | Metric: 10 IP 172.16.25.52/30
287 | Metric: 10 IP 172.16.25.24/30
288 | Metric: 0 IP 10.10.10.254/32
289 | Metric: 10 IS DR1.00
290 | Metric: 10 IS AR16.01
291 | Metric: 10 IS DR2.02
292 | Metric: 10 IS DR2.03
293 | Metric: 10 IS AR5.00
294 | Metric: 10 IS AR9.00
295 | Metric: 10 IS-Extended DR1.00
296 | Metric: 10 IS-Extended AR16.01
297 | Metric: 10 IS-Extended DR2.02
298 | Metric: 10 IS-Extended DR2.03
299 | Metric: 10 IS-Extended AR5.00
300 | Metric: 10 IS-Extended AR9.00
301 | DR2.02-00 0x00000001 0x2C08 602/1198 0/0/0
302 | Metric: 0 IS DR2.00
303 | Metric: 0 IS AR10.00
304 | Metric: 0 IS-Extended DR2.00
305 | Metric: 0 IS-Extended AR10.00
306 | DR2.03-00 0x00000002 0x431F 895/1198 0/0/0
307 | Metric: 0 IS DR2.00
308 | Metric: 0 IS AR11.00
309 | Metric: 0 IS AR9.00
310 | Metric: 0 IS-Extended DR2.00
311 | Metric: 0 IS-Extended AR11.00
312 | Metric: 0 IS-Extended AR9.00
313 | ASW1.00-00 0x0000000B 0xD8E4 1058/1190 0/0/0
314 | Area Address: 49.0002
315 | Code: 14 Length: 2
316 | NLPID: 0xCC 0x8E
317 | Router ID: 10.10.20.1
318 | IP Address: 10.10.20.1
319 | Hostname: ASW1
320 | Metric: 10 IP 172.16.25.68 255.255.255.252
321 | Metric: 10 IP 172.16.25.60 255.255.255.252
322 | Metric: 0 IP 10.10.20.1 255.255.255.255
323 | Metric: 10 IP 172.16.25.68/30
324 | Metric: 10 IP 172.16.25.60/30
325 | Metric: 0 IP 10.10.20.1/32
326 | Metric: 10 IS ASW1.02
327 | Metric: 10 IS ASW1.03
328 | Metric: 10 IS-Extended ASW1.02
329 | Metric: 10 IS-Extended ASW1.03
330 | ASW1.02-00 0x00000001 0x2726 964/951 0/0/0
331 | Metric: 0 IS ASW1.00
332 | Metric: 0 IS AR2.00
333 | Metric: 0 IS-Extended ASW1.00
334 | Metric: 0 IS-Extended AR2.00
335 | ASW1.03-00 0x00000005 0x1830 1052/1190 0/0/0
336 | Metric: 0 IS ASW1.00
337 | Metric: 0 IS AR2.00
338 | Metric: 0 IS-Extended ASW1.00
339 | Metric: 0 IS-Extended AR2.00
340 | AR16#
341 |
342 |
--------------------------------------------------------------------------------
/nextUI/app/topology_data.js:
--------------------------------------------------------------------------------
1 | var topologyData = {'nodes': [{'id': '10.0.10.165', 'name': '10.0.10.165', 'icon': 'router'}, {'id': '10.0.10.166', 'name': '10.0.10.166', 'icon': 'router'}, {'id': '10.0.10.167', 'name': '10.0.10.167', 'icon': 'router'}, {'id': '10.0.255.1', 'name': '10.0.255.1', 'icon': 'router'}, {'id': '10.0.255.2', 'name': '10.0.255.2', 'icon': 'router'}, {'id': '10.0.255.3', 'name': '10.0.255.3', 'icon': 'router'}, {'id': '10.0.255.4', 'name': '10.0.255.4', 'icon': 'router'}, {'id': '10.0.255.5', 'name': '10.0.255.5', 'icon': 'router'}, {'id': '10.0.255.6', 'name': '10.0.255.6', 'icon': 'router'}, {'id': '10.0.255.7', 'name': '10.0.255.7', 'icon': 'router'}, {'id': '10.0.255.9', 'name': '10.0.255.9', 'icon': 'router'}, {'id': '10.0.255.10', 'name': '10.0.255.10', 'icon': 'router'}, {'id': '10.0.255.11', 'name': '10.0.255.11', 'icon': 'router'}, {'id': '10.0.255.12', 'name': '10.0.255.12', 'icon': 'router'}, {'id': '10.0.255.13', 'name': '10.0.255.13', 'icon': 'router'}, {'id': '10.0.255.14', 'name': '10.0.255.14', 'icon': 'router'}, {'id': '10.0.255.15', 'name': '10.0.255.15', 'icon': 'router'}, {'id': '10.0.255.16', 'name': '10.0.255.16', 'icon': 'router'}, {'id': '10.0.255.17', 'name': '10.0.255.17', 'icon': 'router'}, {'id': '10.0.255.18', 'name': '10.0.255.18', 'icon': 'router'}, {'id': '10.0.255.19', 'name': '10.0.255.19', 'icon': 'router'}, {'id': '10.0.255.20', 'name': '10.0.255.20', 'icon': 'router'}, {'id': '10.0.255.21', 'name': '10.0.255.21', 'icon': 'router'}, {'id': '10.0.255.24', 'name': '10.0.255.24', 'icon': 'router'}, {'id': '10.0.255.25', 'name': '10.0.255.25', 'icon': 'router'}, {'id': '10.0.255.106', 'name': '10.0.255.106', 'icon': 'router'}, {'id': '10.0.255.107', 'name': '10.0.255.107', 'icon': 'router'}, {'id': '10.0.255.108', 'name': '10.0.255.108', 'icon': 'router'}, {'id': '10.0.255.109', 'name': '10.0.255.109', 'icon': 'router'}, {'id': '10.238.255.1', 'name': '10.238.255.1', 'icon': 'router'}, {'id': '77.82.0.1', 'name': '77.82.0.1', 'icon': 'router'}, {'id': '77.82.0.2', 'name': '77.82.0.2', 'icon': 'router'}, {'id': '77.82.0.30', 'name': '77.82.0.30', 'icon': 'router'}, {'id': '77.82.0.31', 'name': '77.82.0.31', 'icon': 'router'}, {'id': '77.82.0.192', 'name': '77.82.0.192', 'icon': 'router'}, {'id': '77.82.0.194', 'name': '77.82.0.194', 'icon': 'router'}, {'id': '77.82.0.203', 'name': '77.82.0.203', 'icon': 'router'}, {'id': '77.82.0.204', 'name': '77.82.0.204', 'icon': 'router'}, {'id': '77.82.0.205', 'name': '77.82.0.205', 'icon': 'router'}, {'id': '77.82.0.206', 'name': '77.82.0.206', 'icon': 'router'}, {'id': '77.82.0.207', 'name': '77.82.0.207', 'icon': 'router'}, {'id': '77.82.0.208', 'name': '77.82.0.208', 'icon': 'router'}, {'id': '77.82.0.209', 'name': '77.82.0.209', 'icon': 'router'}, {'id': '77.82.0.210', 'name': '77.82.0.210', 'icon': 'router'}, {'id': '85.28.192.1', 'name': '85.28.192.1', 'icon': 'router'}, {'id': '85.28.192.2', 'name': '85.28.192.2', 'icon': 'router'}, {'id': '85.28.192.3', 'name': '85.28.192.3', 'icon': 'router'}, {'id': '85.28.192.4', 'name': '85.28.192.4', 'icon': 'router'}, {'id': '85.28.192.5', 'name': '85.28.192.5', 'icon': 'router'}, {'id': '85.28.192.6', 'name': '85.28.192.6', 'icon': 'router'}, {'id': '85.28.192.7', 'name': '85.28.192.7', 'icon': 'router'}, {'id': '85.28.192.8', 'name': '85.28.192.8', 'icon': 'router'}, {'id': '85.28.192.9', 'name': '85.28.192.9', 'icon': 'router'}, {'id': '85.28.192.10', 'name': '85.28.192.10', 'icon': 'router'}, {'id': '85.28.192.11', 'name': '85.28.192.11', 'icon': 'router'}, {'id': '85.28.192.12', 'name': '85.28.192.12', 'icon': 'router'}, {'id': '85.28.192.13', 'name': '85.28.192.13', 'icon': 'router'}, {'id': '85.28.192.14', 'name': '85.28.192.14', 'icon': 'router'}, {'id': '85.28.192.16', 'name': '85.28.192.16', 'icon': 'router'}, {'id': '85.28.192.19', 'name': '85.28.192.19', 'icon': 'router'}, {'id': '85.28.192.20', 'name': '85.28.192.20', 'icon': 'router'}, {'id': '85.28.192.21', 'name': '85.28.192.21', 'icon': 'router'}, {'id': '85.28.192.23', 'name': '85.28.192.23', 'icon': 'router'}, {'id': '85.28.192.24', 'name': '85.28.192.24', 'icon': 'router'}, {'id': '85.28.192.25', 'name': '85.28.192.25', 'icon': 'router'}, {'id': '85.28.192.26', 'name': '85.28.192.26', 'icon': 'router'}, {'id': '85.28.192.27', 'name': '85.28.192.27', 'icon': 'router'}, {'id': '85.28.192.28', 'name': '85.28.192.28', 'icon': 'router'}, {'id': '85.28.192.30', 'name': '85.28.192.30', 'icon': 'router'}, {'id': '85.28.192.31', 'name': '85.28.192.31', 'icon': 'router'}, {'id': '85.28.192.64', 'name': '85.28.192.64', 'icon': 'router'}, {'id': '85.28.192.65', 'name': '85.28.192.65', 'icon': 'router'}, {'id': '85.28.192.68', 'name': '85.28.192.68', 'icon': 'router'}, {'id': '85.28.192.69', 'name': '85.28.192.69', 'icon': 'router'}, {'id': '85.28.192.70', 'name': '85.28.192.70', 'icon': 'router'}, {'id': '85.28.192.71', 'name': '85.28.192.71', 'icon': 'router'}, {'id': '85.28.192.72', 'name': '85.28.192.72', 'icon': 'router'}, {'id': '85.28.192.73', 'name': '85.28.192.73', 'icon': 'router'}, {'id': '85.28.192.74', 'name': '85.28.192.74', 'icon': 'router'}, {'id': '85.28.192.79', 'name': '85.28.192.79', 'icon': 'router'}, {'id': '85.28.194.136', 'name': '85.28.194.136', 'icon': 'router'}, {'id': '85.28.194.137', 'name': '85.28.194.137', 'icon': 'router'}, {'id': '85.28.194.138', 'name': '85.28.194.138', 'icon': 'router'}, {'id': '77.82.0.54', 'icon': 'bma'}, {'id': '77.82.0.82', 'icon': 'bma'}, {'id': '77.82.0.78', 'icon': 'bma'}, {'id': '85.28.192.97', 'icon': 'bma'}, {'id': '77.82.0.65', 'icon': 'bma'}, {'id': '77.82.0.69', 'icon': 'bma'}, {'id': '77.82.0.73', 'icon': 'bma'}, {'id': '77.82.0.85', 'icon': 'bma'}, {'id': '77.82.0.89', 'icon': 'bma'}, {'id': '85.28.192.54', 'icon': 'bma'}, {'id': '85.28.192.114', 'icon': 'bma'}], 'links': [{'id': 0, 'source': '10.0.10.165', 'target': '10.0.255.20', 'color': 'blue'}, {'id': 1, 'source': '10.0.10.166', 'target': '10.0.255.20', 'color': 'blue'}, {'id': 2, 'source': '10.0.10.166', 'target': '10.0.10.167', 'color': 'blue'}, {'id': 3, 'source': '10.0.10.167', 'target': '85.28.194.136', 'color': 'blue'}, {'id': 4, 'source': '10.0.255.1', 'target': '77.82.0.30', 'color': 'blue'}, {'id': 5, 'source': '10.0.255.1', 'target': '10.0.255.3', 'color': 'blue'}, {'id': 6, 'source': '10.0.255.2', 'target': '10.0.255.4', 'color': 'blue'}, {'id': 7, 'source': '10.0.255.2', 'target': '77.82.0.30', 'color': 'blue'}, {'id': 8, 'source': '10.0.255.3', 'target': '10.0.255.5', 'color': 'blue'}, {'id': 9, 'source': '10.0.255.4', 'target': '10.0.255.6', 'color': 'blue'}, {'id': 10, 'source': '10.0.255.5', 'target': '77.82.0.209', 'color': 'blue'}, {'id': 11, 'source': '10.0.255.5', 'target': '10.0.255.7', 'color': 'blue'}, {'id': 12, 'source': '10.0.255.6', 'target': '10.0.255.7', 'color': 'blue'}, {'id': 13, 'source': '10.0.255.9', 'target': '10.0.255.10', 'color': 'blue'}, {'id': 14, 'source': '10.0.255.9', 'target': '77.82.0.30', 'color': 'blue'}, {'id': 15, 'source': '10.0.255.10', 'target': '10.0.255.11', 'color': 'blue'}, {'id': 16, 'source': '10.0.255.11', 'target': '10.0.255.12', 'color': 'blue'}, {'id': 17, 'source': '10.0.255.12', 'target': '10.0.255.13', 'color': 'blue'}, {'id': 18, 'source': '10.0.255.13', 'target': '10.0.255.14', 'color': 'blue'}, {'id': 19, 'source': '10.0.255.14', 'target': '10.0.255.15', 'color': 'blue'}, {'id': 20, 'source': '10.0.255.15', 'target': '10.0.255.16', 'color': 'blue'}, {'id': 21, 'source': '10.0.255.16', 'target': '10.0.255.20', 'color': 'blue'}, {'id': 22, 'source': '10.0.255.17', 'target': '10.0.255.20', 'color': 'blue'}, {'id': 23, 'source': '10.0.255.17', 'target': '10.0.255.18', 'color': 'blue'}, {'id': 24, 'source': '10.0.255.18', 'target': '77.82.0.210', 'color': 'blue'}, {'id': 25, 'source': '10.0.255.18', 'target': '10.0.255.19', 'color': 'blue'}, {'id': 26, 'source': '10.0.255.19', 'target': '85.28.192.26', 'color': 'blue'}, {'id': 27, 'source': '10.0.255.20', 'target': '77.82.0.30', 'color': 'blue'}, {'id': 28, 'source': '10.0.255.21', 'target': '85.28.194.136', 'color': 'blue'}, {'id': 29, 'source': '10.0.255.21', 'target': '10.0.255.106', 'color': 'blue'}, {'id': 30, 'source': '10.0.255.21', 'target': '10.0.255.107', 'color': 'blue'}, {'id': 31, 'source': '10.0.255.24', 'target': '10.0.255.109', 'color': 'blue'}, {'id': 32, 'source': '10.0.255.24', 'target': '85.28.192.24', 'color': 'blue'}, {'id': 33, 'source': '10.0.255.24', 'target': '10.0.255.109', 'color': 'blue'}, {'id': 34, 'source': '10.0.255.25', 'target': '85.28.192.21', 'color': 'blue'}, {'id': 35, 'source': '10.0.255.25', 'target': '77.82.0.194', 'color': 'blue'}, {'id': 36, 'source': '10.0.255.25', 'target': '77.82.0.210', 'color': 'blue'}, {'id': 37, 'source': '10.0.255.25', 'target': '77.82.0.210', 'color': 'blue'}, {'id': 38, 'source': '10.0.255.108', 'target': '85.28.194.136', 'color': 'blue'}, {'id': 39, 'source': '10.0.255.109', 'target': '85.28.194.136', 'color': 'blue'}, {'id': 40, 'source': '10.238.255.1', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 41, 'source': '10.238.255.1', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 42, 'source': '77.82.0.1', 'target': '77.82.0.206', 'color': 'blue'}, {'id': 43, 'source': '77.82.0.1', 'target': '85.28.192.1', 'color': 'blue'}, {'id': 44, 'source': '77.82.0.2', 'target': '77.82.0.205', 'color': 'blue'}, {'id': 45, 'source': '77.82.0.30', 'target': '85.28.192.8', 'color': 'blue'}, {'id': 46, 'source': '77.82.0.30', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 47, 'source': '77.82.0.30', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 48, 'source': '77.82.0.31', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 49, 'source': '77.82.0.31', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 50, 'source': '77.82.0.31', 'target': '77.82.0.205', 'color': 'blue'}, {'id': 51, 'source': '77.82.0.203', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 52, 'source': '77.82.0.203', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 53, 'source': '77.82.0.203', 'target': '77.82.0.206', 'color': 'blue'}, {'id': 54, 'source': '77.82.0.204', 'target': '85.28.192.69', 'color': 'blue'}, {'id': 55, 'source': '77.82.0.204', 'target': '77.82.0.207', 'color': 'blue'}, {'id': 56, 'source': '77.82.0.204', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 57, 'source': '77.82.0.204', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 58, 'source': '77.82.0.204', 'target': '77.82.0.206', 'color': 'blue'}, {'id': 59, 'source': '77.82.0.205', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 60, 'source': '77.82.0.205', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 61, 'source': '77.82.0.206', 'target': '85.28.192.71', 'color': 'blue'}, {'id': 62, 'source': '77.82.0.206', 'target': '85.28.192.68', 'color': 'blue'}, {'id': 63, 'source': '77.82.0.206', 'target': '85.28.192.16', 'color': 'blue'}, {'id': 64, 'source': '77.82.0.206', 'target': '85.28.192.13', 'color': 'blue'}, {'id': 65, 'source': '77.82.0.206', 'target': '85.28.192.16', 'color': 'blue'}, {'id': 66, 'source': '77.82.0.206', 'target': '77.82.0.207', 'color': 'blue'}, {'id': 67, 'source': '77.82.0.206', 'target': '85.28.192.14', 'color': 'blue'}, {'id': 68, 'source': '77.82.0.206', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 69, 'source': '77.82.0.206', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 70, 'source': '77.82.0.206', 'target': '85.28.192.19', 'color': 'blue'}, {'id': 71, 'source': '77.82.0.206', 'target': '85.28.192.64', 'color': 'blue'}, {'id': 72, 'source': '77.82.0.207', 'target': '85.28.192.65', 'color': 'blue'}, {'id': 73, 'source': '77.82.0.207', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 74, 'source': '77.82.0.207', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 75, 'source': '77.82.0.208', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 76, 'source': '77.82.0.208', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 77, 'source': '77.82.0.209', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 78, 'source': '77.82.0.209', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 79, 'source': '77.82.0.209', 'target': '85.28.192.9', 'color': 'blue'}, {'id': 80, 'source': '77.82.0.210', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 81, 'source': '85.28.192.10', 'target': '85.28.194.136', 'color': 'blue'}, {'id': 82, 'source': '85.28.192.11', 'target': '85.28.192.14', 'color': 'blue'}, {'id': 83, 'source': '85.28.192.12', 'target': '85.28.192.14', 'color': 'blue'}, {'id': 84, 'source': '85.28.192.12', 'target': '85.28.192.14', 'color': 'blue'}, {'id': 85, 'source': '85.28.192.14', 'target': '85.28.192.25', 'color': 'blue'}, {'id': 86, 'source': '85.28.192.14', 'target': '85.28.192.27', 'color': 'blue'}, {'id': 87, 'source': '85.28.192.14', 'target': '85.28.192.28', 'color': 'blue'}, {'id': 88, 'source': '85.28.192.14', 'target': '85.28.192.20', 'color': 'blue'}, {'id': 89, 'source': '85.28.192.14', 'target': '85.28.192.23', 'color': 'blue'}, {'id': 90, 'source': '85.28.192.14', 'target': '85.28.192.73', 'color': 'blue'}, {'id': 91, 'source': '85.28.192.14', 'target': '85.28.192.28', 'color': 'blue'}, {'id': 92, 'source': '85.28.192.14', 'target': '85.28.192.27', 'color': 'blue'}, {'id': 93, 'source': '85.28.192.14', 'target': '85.28.192.26', 'color': 'blue'}, {'id': 94, 'source': '85.28.192.14', 'target': '85.28.192.25', 'color': 'blue'}, {'id': 95, 'source': '85.28.192.14', 'target': '85.28.192.26', 'color': 'blue'}, {'id': 96, 'source': '85.28.192.14', 'target': '85.28.192.72', 'color': 'blue'}, {'id': 97, 'source': '85.28.192.14', 'target': '85.28.192.23', 'color': 'blue'}, {'id': 98, 'source': '85.28.192.14', 'target': '85.28.192.20', 'color': 'blue'}, {'id': 99, 'source': '85.28.192.70', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 100, 'source': '85.28.192.74', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 101, 'source': '85.28.192.74', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 102, 'source': '85.28.194.136', 'target': '85.28.194.137', 'color': 'blue'}, {'id': 103, 'source': '85.28.194.137', 'target': '85.28.194.138', 'color': 'blue'}, {'id': 104, 'source': '77.82.0.1', 'target': '77.82.0.89', 'color': 'blue'}, {'id': 105, 'source': '77.82.0.1', 'target': '77.82.0.54', 'color': 'blue'}, {'id': 106, 'source': '77.82.0.2', 'target': '77.82.0.54', 'color': 'blue'}, {'id': 107, 'source': '77.82.0.31', 'target': '77.82.0.82', 'color': 'blue'}, {'id': 108, 'source': '77.82.0.192', 'target': '85.28.192.97', 'color': 'blue'}, {'id': 109, 'source': '77.82.0.203', 'target': '77.82.0.65', 'color': 'blue'}, {'id': 110, 'source': '77.82.0.204', 'target': '77.82.0.78', 'color': 'blue'}, {'id': 111, 'source': '77.82.0.205', 'target': '85.28.192.97', 'color': 'blue'}, {'id': 112, 'source': '77.82.0.205', 'target': '77.82.0.85', 'color': 'blue'}, {'id': 113, 'source': '77.82.0.206', 'target': '85.28.192.54', 'color': 'blue'}, {'id': 114, 'source': '77.82.0.207', 'target': '77.82.0.69', 'color': 'blue'}, {'id': 115, 'source': '77.82.0.208', 'target': '77.82.0.73', 'color': 'blue'}, {'id': 116, 'source': '85.28.192.1', 'target': '85.28.192.114', 'color': 'blue'}, {'id': 117, 'source': '85.28.192.2', 'target': '77.82.0.65', 'color': 'blue'}, {'id': 118, 'source': '85.28.192.3', 'target': '77.82.0.69', 'color': 'blue'}, {'id': 119, 'source': '85.28.192.4', 'target': '77.82.0.73', 'color': 'blue'}, {'id': 120, 'source': '85.28.192.5', 'target': '77.82.0.78', 'color': 'blue'}, {'id': 121, 'source': '85.28.192.6', 'target': '77.82.0.82', 'color': 'blue'}, {'id': 122, 'source': '85.28.192.7', 'target': '77.82.0.85', 'color': 'blue'}, {'id': 123, 'source': '85.28.192.30', 'target': '77.82.0.89', 'color': 'blue'}, {'id': 124, 'source': '85.28.192.31', 'target': '85.28.192.54', 'color': 'blue'}, {'id': 125, 'source': '85.28.192.79', 'target': '85.28.192.114', 'color': 'blue'}]}
--------------------------------------------------------------------------------
/nextUI/bower_components/next-bower/doc/assets/vendor/prettify/prettify-min.js:
--------------------------------------------------------------------------------
1 | window.PR_SHOULD_USE_CONTINUATION=true;var prettyPrintOne;var prettyPrint;(function(){var O=window;var j=["break,continue,do,else,for,if,return,while"];var v=[j,"auto,case,char,const,default,double,enum,extern,float,goto,int,long,register,short,signed,sizeof,static,struct,switch,typedef,union,unsigned,void,volatile"];var q=[v,"catch,class,delete,false,import,new,operator,private,protected,public,this,throw,true,try,typeof"];var m=[q,"alignof,align_union,asm,axiom,bool,concept,concept_map,const_cast,constexpr,decltype,dynamic_cast,explicit,export,friend,inline,late_check,mutable,namespace,nullptr,reinterpret_cast,static_assert,static_cast,template,typeid,typename,using,virtual,where"];var y=[q,"abstract,boolean,byte,extends,final,finally,implements,import,instanceof,null,native,package,strictfp,super,synchronized,throws,transient"];var T=[y,"as,base,by,checked,decimal,delegate,descending,dynamic,event,fixed,foreach,from,group,implicit,in,interface,internal,into,is,let,lock,object,out,override,orderby,params,partial,readonly,ref,sbyte,sealed,stackalloc,string,select,uint,ulong,unchecked,unsafe,ushort,var,virtual,where"];var s="all,and,by,catch,class,else,extends,false,finally,for,if,in,is,isnt,loop,new,no,not,null,of,off,on,or,return,super,then,throw,true,try,unless,until,when,while,yes";var x=[q,"debugger,eval,export,function,get,null,set,undefined,var,with,Infinity,NaN"];var t="caller,delete,die,do,dump,elsif,eval,exit,foreach,for,goto,if,import,last,local,my,next,no,our,print,package,redo,require,sub,undef,unless,until,use,wantarray,while,BEGIN,END";var J=[j,"and,as,assert,class,def,del,elif,except,exec,finally,from,global,import,in,is,lambda,nonlocal,not,or,pass,print,raise,try,with,yield,False,True,None"];var g=[j,"alias,and,begin,case,class,def,defined,elsif,end,ensure,false,in,module,next,nil,not,or,redo,rescue,retry,self,super,then,true,undef,unless,until,when,yield,BEGIN,END"];var I=[j,"case,done,elif,esac,eval,fi,function,in,local,set,then,until"];var B=[m,T,x,t+J,g,I];var f=/^(DIR|FILE|vector|(de|priority_)?queue|list|stack|(const_)?iterator|(multi)?(set|map)|bitset|u?(int|float)\d*)\b/;var D="str";var A="kwd";var k="com";var Q="typ";var H="lit";var M="pun";var G="pln";var n="tag";var F="dec";var K="src";var R="atn";var o="atv";var P="nocode";var N="(?:^^\\.?|[+-]|[!=]=?=?|\\#|%=?|&&?=?|\\(|\\*=?|[+\\-]=|->|\\/=?|::?|<=?|>>?>?=?|,|;|\\?|@|\\[|~|{|\\^\\^?=?|\\|\\|?=?|break|case|continue|delete|do|else|finally|instanceof|return|throw|try|typeof)\\s*";function l(ab){var af=0;var U=false;var ae=false;for(var X=0,W=ab.length;X122)){if(!(am<65||ai>90)){ah.push([Math.max(65,ai)|32,Math.min(am,90)|32])}if(!(am<97||ai>122)){ah.push([Math.max(97,ai)&~32,Math.min(am,122)&~32])}}}}ah.sort(function(aw,av){return(aw[0]-av[0])||(av[1]-aw[1])});var ak=[];var aq=[];for(var at=0;atau[0]){if(au[1]+1>au[0]){ao.push("-")}ao.push(V(au[1]))}}ao.push("]");return ao.join("")}function Y(an){var al=an.source.match(new RegExp("(?:\\[(?:[^\\x5C\\x5D]|\\\\[\\s\\S])*\\]|\\\\u[A-Fa-f0-9]{4}|\\\\x[A-Fa-f0-9]{2}|\\\\[0-9]+|\\\\[^ux0-9]|\\(\\?[:!=]|[\\(\\)\\^]|[^\\x5B\\x5C\\(\\)\\^]+)","g"));var aj=al.length;var ap=[];for(var am=0,ao=0;am=2&&ak==="["){al[am]=Z(ai)}else{if(ak!=="\\"){al[am]=ai.replace(/[a-zA-Z]/g,function(aq){var ar=aq.charCodeAt(0);return"["+String.fromCharCode(ar&~32,ar|32)+"]"})}}}}return al.join("")}var ac=[];for(var X=0,W=ab.length;X=0;){U[ae.charAt(ag)]=aa}}var ah=aa[1];var ac=""+ah;if(!ai.hasOwnProperty(ac)){aj.push(ah);ai[ac]=null}}aj.push(/[\0-\uffff]/);X=l(aj)})();var Z=V.length;var Y=function(aj){var ab=aj.sourceCode,aa=aj.basePos;var af=[aa,G];var ah=0;var ap=ab.match(X)||[];var al={};for(var ag=0,at=ap.length;ag=5&&"lang-"===ar.substring(0,5);if(ao&&!(ak&&typeof ak[1]==="string")){ao=false;ar=K}if(!ao){al[ai]=ar}}var ad=ah;ah+=ai.length;if(!ao){af.push(aa+ad,ar)}else{var an=ak[1];var am=ai.indexOf(an);var ae=am+an.length;if(ak[2]){ae=ai.length-ak[2].length;am=ae-an.length}var au=ar.substring(5);C(aa+ad,ai.substring(0,am),Y,af);C(aa+ad+am,an,r(au,an),af);C(aa+ad+ae,ai.substring(ae),Y,af)}}aj.decorations=af};return Y}function i(V){var Y=[],U=[];if(V.tripleQuotedStrings){Y.push([D,/^(?:\'\'\'(?:[^\'\\]|\\[\s\S]|\'{1,2}(?=[^\']))*(?:\'\'\'|$)|\"\"\"(?:[^\"\\]|\\[\s\S]|\"{1,2}(?=[^\"]))*(?:\"\"\"|$)|\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$))/,null,"'\""])}else{if(V.multiLineStrings){Y.push([D,/^(?:\'(?:[^\\\']|\\[\s\S])*(?:\'|$)|\"(?:[^\\\"]|\\[\s\S])*(?:\"|$)|\`(?:[^\\\`]|\\[\s\S])*(?:\`|$))/,null,"'\"`"])}else{Y.push([D,/^(?:\'(?:[^\\\'\r\n]|\\.)*(?:\'|$)|\"(?:[^\\\"\r\n]|\\.)*(?:\"|$))/,null,"\"'"])}}if(V.verbatimStrings){U.push([D,/^@\"(?:[^\"]|\"\")*(?:\"|$)/,null])}var ab=V.hashComments;if(ab){if(V.cStyleComments){if(ab>1){Y.push([k,/^#(?:##(?:[^#]|#(?!##))*(?:###|$)|.*)/,null,"#"])}else{Y.push([k,/^#(?:(?:define|e(?:l|nd)if|else|error|ifn?def|include|line|pragma|undef|warning)\b|[^\r\n]*)/,null,"#"])}U.push([D,/^<(?:(?:(?:\.\.\/)*|\/?)(?:[\w-]+(?:\/[\w-]+)+)?[\w-]+\.h(?:h|pp|\+\+)?|[a-z]\w*)>/,null])}else{Y.push([k,/^#[^\r\n]*/,null,"#"])}}if(V.cStyleComments){U.push([k,/^\/\/[^\r\n]*/,null]);U.push([k,/^\/\*[\s\S]*?(?:\*\/|$)/,null])}if(V.regexLiterals){var aa=("/(?=[^/*])(?:[^/\\x5B\\x5C]|\\x5C[\\s\\S]|\\x5B(?:[^\\x5C\\x5D]|\\x5C[\\s\\S])*(?:\\x5D|$))+/");U.push(["lang-regex",new RegExp("^"+N+"("+aa+")")])}var X=V.types;if(X){U.push([Q,X])}var W=(""+V.keywords).replace(/^ | $/g,"");if(W.length){U.push([A,new RegExp("^(?:"+W.replace(/[\s,]+/g,"|")+")\\b"),null])}Y.push([G,/^\s+/,null," \r\n\t\xA0"]);var Z=/^.[^\s\w\.$@\'\"\`\/\\]*/;U.push([H,/^@[a-z_$][a-z_$@0-9]*/i,null],[Q,/^(?:[@_]?[A-Z]+[a-z][A-Za-z_$@0-9]*|\w+_t\b)/,null],[G,/^[a-z_$][a-z_$@0-9]*/i,null],[H,new RegExp("^(?:0x[a-f0-9]+|(?:\\d(?:_\\d+)*\\d*(?:\\.\\d*)?|\\.\\d\\+)(?:e[+\\-]?\\d+)?)[a-z]*","i"),null,"0123456789"],[G,/^\\[\s\S]?/,null],[M,Z,null]);return h(Y,U)}var L=i({keywords:B,hashComments:true,cStyleComments:true,multiLineStrings:true,regexLiterals:true});function S(W,ah,aa){var V=/(?:^|\s)nocode(?:\s|$)/;var ac=/\r\n?|\n/;var ad=W.ownerDocument;var ag=ad.createElement("li");while(W.firstChild){ag.appendChild(W.firstChild)}var X=[ag];function af(am){switch(am.nodeType){case 1:if(V.test(am.className)){break}if("br"===am.nodeName){ae(am);if(am.parentNode){am.parentNode.removeChild(am)}}else{for(var ao=am.firstChild;ao;ao=ao.nextSibling){af(ao)}}break;case 3:case 4:if(aa){var an=am.nodeValue;var ak=an.match(ac);if(ak){var aj=an.substring(0,ak.index);am.nodeValue=aj;var ai=an.substring(ak.index+ak[0].length);if(ai){var al=am.parentNode;al.insertBefore(ad.createTextNode(ai),am.nextSibling)}ae(am);if(!aj){am.parentNode.removeChild(am)}}}break}}function ae(al){while(!al.nextSibling){al=al.parentNode;if(!al){return}}function aj(am,at){var ar=at?am.cloneNode(false):am;var ap=am.parentNode;if(ap){var aq=aj(ap,1);var ao=am.nextSibling;aq.appendChild(ar);for(var an=ao;an;an=ao){ao=an.nextSibling;aq.appendChild(an)}}return ar}var ai=aj(al.nextSibling,0);for(var ak;(ak=ai.parentNode)&&ak.nodeType===1;){ai=ak}X.push(ai)}for(var Z=0;Z=U){aj+=2}if(Y>=ar){ac+=2}}}finally{if(au){au.style.display=ak}}}var u={};function d(W,X){for(var U=X.length;--U>=0;){var V=X[U];if(!u.hasOwnProperty(V)){u[V]=W}else{if(O.console){console.warn("cannot override language handler %s",V)}}}}function r(V,U){if(!(V&&u.hasOwnProperty(V))){V=/^\s*]*(?:>|$)/],[k,/^<\!--[\s\S]*?(?:-\->|$)/],["lang-",/^<\?([\s\S]+?)(?:\?>|$)/],["lang-",/^<%([\s\S]+?)(?:%>|$)/],[M,/^(?:<[%?]|[%?]>)/],["lang-",/^]*>([\s\S]+?)<\/xmp\b[^>]*>/i],["lang-js",/^
11 |
12 |
13 |
14 |
15 |
25 |
26 |
27 |
28 |
270 |
271 |
272 |
273 | Show:
274 |
275 |
276 | Inherited
277 |
278 |
279 |
280 |
281 | Protected
282 |
283 |
284 |
285 |
286 | Private
287 |
288 |
289 |
290 | Deprecated
291 |
292 |
293 |
294 |
295 |
296 |
297 |
298 |
299 |
300 |
301 |
302 | Browse to a module or class using the sidebar to view its API documentation.
303 |
304 |
305 |
Keyboard Shortcuts
306 |
307 |
308 | Press s to focus the API search box.
309 |
310 | Use Up and Down to select classes, modules, and search results.
311 |
312 | With the API search box or sidebar focused, use ⌘ -Left or ⌘ -Right to switch sidebar tabs.
313 |
314 | With the API search box or sidebar focused, use Ctrl+Left and Ctrl+Right to switch sidebar tabs.
315 |
316 |
317 |
318 |
319 |
320 |
321 |
322 |
323 |
324 |
325 |
326 |
327 |
328 |
329 |
330 |
331 |
332 |
333 |
334 |
335 |
336 |