view release on metacpan or search on metacpan
* #621 RADIUS authentication support for users
[ENHANCEMENTS]
* #587 #561 update pseudo devices to better support ssh arpnip
* #606 license file reformatted to work better within Github
* #630 display full OUI vendor name in web view
* #633 change Port Free icon to be more accessible
* #638 avoid page reload on admintask data updates
* #640 some documentation fixes
* add PoE on-off icons to legend in Device Ports view
[BUG FIXES]
* #610 better MAC addr input sanity checking
* #611 compare IEEE MAC addresses properly
* #622 workaround for changes in Test::Compile
* #624 device layers search should be OR (not AND)
* #625 make sidebar tiny bit wider
* #642 requests to /admin/unknown-thing should get 404
* handle row.power.power being NULL
share/public/css/bootstrap.min.css view on Meta::CPAN
.table tbody tr.success>td{background-color:#dff0d8;}
.table tbody tr.error>td{background-color:#f2dede;}
.table tbody tr.warning>td{background-color:#fcf8e3;}
.table tbody tr.info>td{background-color:#d9edf7;}
.table-hover tbody tr.success:hover>td{background-color:#d0e9c6;}
.table-hover tbody tr.error:hover>td{background-color:#ebcccc;}
.table-hover tbody tr.warning:hover>td{background-color:#faf2cc;}
.table-hover tbody tr.info:hover>td{background-color:#c4e3f3;}
form{margin:0 0 18px;}
fieldset{padding:0;margin:0;border:0;}
legend{display:block;width:100%;padding:0;margin-bottom:18px;font-size:19.5px;line-height:36px;color:#333333;border:0;border-bottom:1px solid #e5e5e5;}legend small{font-size:13.5px;color:#999999;}
label,input,button,select,textarea{font-size:13px;font-weight:normal;line-height:18px;}
input,button,select,textarea{font-family:"Helvetica Neue",Helvetica,Arial,sans-serif;}
label{display:block;margin-bottom:5px;}
select,textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],inpu...
input,textarea,.uneditable-input{width:206px;}
textarea{height:auto;}
textarea,input[type="text"],input[type="password"],input[type="datetime"],input[type="datetime-local"],input[type="date"],input[type="month"],input[type="time"],input[type="week"],input[type="number"],input[type="email"],input[type="url"],input[type=...
input[type="radio"],input[type="checkbox"]{margin:4px 0 0;*margin-top:0;margin-top:1px \9;line-height:normal;}
input[type="file"],input[type="image"],input[type="submit"],input[type="reset"],input[type="button"],input[type="radio"],input[type="checkbox"]{width:auto;}
select,input[type="file"]{height:28px;*margin-top:4px;line-height:28px;}
share/public/css/bootstrap.min.css view on Meta::CPAN
.form-search .input-append .btn{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;}
.form-search .input-prepend .search-query{-webkit-border-radius:0 14px 14px 0;-moz-border-radius:0 14px 14px 0;border-radius:0 14px 14px 0;}
.form-search .input-prepend .btn{-webkit-border-radius:14px 0 0 14px;-moz-border-radius:14px 0 0 14px;border-radius:14px 0 0 14px;}
.form-search input,.form-inline input,.form-horizontal input,.form-search textarea,.form-inline textarea,.form-horizontal textarea,.form-search select,.form-inline select,.form-horizontal select,.form-search .help-inline,.form-inline .help-inline,.fo...
.form-search .hide,.form-inline .hide,.form-horizontal .hide{display:none;}
.form-search label,.form-inline label,.form-search .btn-group,.form-inline .btn-group{display:inline-block;}
.form-search .input-append,.form-inline .input-append,.form-search .input-prepend,.form-inline .input-prepend{margin-bottom:0;}
.form-search .radio,.form-search .checkbox,.form-inline .radio,.form-inline .checkbox{padding-left:0;margin-bottom:0;vertical-align:middle;}
.form-search .radio input[type="radio"],.form-search .checkbox input[type="checkbox"],.form-inline .radio input[type="radio"],.form-inline .checkbox input[type="checkbox"]{float:left;margin-right:3px;margin-left:0;}
.control-group{margin-bottom:9px;}
legend+.control-group{margin-top:18px;-webkit-margin-top-collapse:separate;}
.form-horizontal .control-group{margin-bottom:18px;*zoom:1;}.form-horizontal .control-group:before,.form-horizontal .control-group:after{display:table;content:"";line-height:0;}
.form-horizontal .control-group:after{clear:both;}
.form-horizontal .control-label{float:left;width:160px;padding-top:5px;text-align:right;}
.form-horizontal .controls{*display:inline-block;*padding-left:20px;margin-left:180px;*margin-left:0;}.form-horizontal .controls:first-child{*padding-left:180px;}
.form-horizontal .help-block{margin-bottom:0;}
.form-horizontal input+.help-block,.form-horizontal select+.help-block,.form-horizontal textarea+.help-block,.form-horizontal .uneditable-input+.help-block,.form-horizontal .input-prepend+.help-block,.form-horizontal .input-append+.help-block{margin-...
.form-horizontal .form-actions{padding-left:180px;}
.btn{display:inline-block;*display:inline;*zoom:1;padding:4px 12px;margin-bottom:0;font-size:13px;line-height:18px;text-align:center;vertical-align:middle;cursor:pointer;color:#333333;text-shadow:0 1px 1px rgba(255, 255, 255, 0.75);background-color:#...
.btn:active,.btn.active{background-color:#cccccc \9;}
.btn:first-child{*margin-left:0;}
share/public/css/netdisco.css view on Meta::CPAN
/* bring sidebar items closer together */
.nd_inputs-list label {
margin-bottom: 1px;
}
/* nudge content closer to the header labels in the sidebar */
.nd_inputs-list li:first-child {
padding-top: 3px !important;
}
.nd_sidebar-legend {
margin-bottom: 9px;
}
.nd_netmap-sidebar {
margin-top: 0px;
margin-left: -5px;
}
.nd_netmap-sidebar > .input-prepend {
margin-left: 5px;
share/public/javascripts/d3-force-network-chart.js view on Meta::CPAN
// create overlay element to fetch events for lasso & zoom
v.dom.graphOverlay = v.dom.svg.append("g").attr("class", "graphOverlay");
// create element for resizing the overlay g element
v.dom.graphOverlaySizeHelper = v.dom.graphOverlay.append("rect").attr("class", "graphOverlaySizeHelper");
// create graph group element for zoom and pan
v.dom.graph = v.dom.graphOverlay.append("g").attr("class", "graph");
// create legend group element
v.dom.legend = v.dom.svg.append("g").attr("class", "legend");
// create loading indicator
v.dom.loading = v.dom.svg.append("svg:g")
.attr("class", "loading")
.style("display", "none");
v.dom.loadingRect = v.dom.loading
.append("svg:rect")
.attr("width", v.tools.getGraphWidth())
.attr("height", v.conf.height);
v.dom.loadingText = v.dom.loading
share/public/javascripts/d3-force-network-chart.js view on Meta::CPAN
var clientTop = docElem.clientTop || body.clientTop || 0;
var clientLeft = docElem.clientLeft || body.clientLeft || 0;
var top = box.top + scrollTop - clientTop;
var left = box.left + scrollLeft - clientLeft;
return {
top: Math.round(top),
left: Math.round(left)
};
};
// create legend
v.tools.createLegend = function() {
v.data.distinctNodeColorValues.forEach(function(colorString, i) {
var color = colorString.split(";");
v.dom.legend
.append("circle")
.attr("cx", 11)
.attr("cy", v.conf.height - ((i + 1) * 14 - 3))
.attr("r", 6)
.attr("fill", v.tools.color(color[1]));
v.dom.legend
.append("text")
.attr("x", 21)
.attr("y", v.conf.height - ((i + 1) * 14 - 6))
.text((color[0] ? color[0] : color[1]));
});
};
// remove legend
v.tools.removeLegend = function() {
v.dom.legend.selectAll("*").remove();
};
// write conf object into customization wizard
v.tools.writeConfObjectIntoWizard = function() {
if (v.status.customize) {
v.dom.customizeConfObject.text(JSON.stringify(graph.optionsCustomizationWizard(), null, " "));
}
};
// create customize link
share/public/javascripts/d3-force-network-chart.js view on Meta::CPAN
// sort out links with invalid node references
v.data.links = v.data.links.filter(function(l) {
return typeof l.source !== "undefined" && typeof l.target !== "undefined";
});
// create helper array to lookup if nodes are neighbors
v.data.neighbors = v.data.links.map(function(l) {
return l.FROMID + ":" + l.TOID;
});
// calculate distinct node colors for the legend
v.data.distinctNodeColorValues = v.data.nodes
.map(function(n) {
return (n.COLORLABEL ? n.COLORLABEL : "") + ";" + n.COLORVALUE;
})
// http://stackoverflow.com/questions/1960473/unique-values-in-an-array
.filter(function(value, index, self) {
return self.indexOf(value) === index;
})
.sort(function(a, b) { // http://www.sitepoint.com/sophisticated-sorting-in-javascript/
var x = a.toLowerCase(),
share/public/javascripts/d3-force-network-chart.js view on Meta::CPAN
}
v.conf.showBorder = value;
if (v.status.graphStarted) {
v.dom.svg.classed("border", v.conf.showBorder);
v.tools.createCustomizeWizardIfNotRendering();
}
return graph;
};
/**
* If true, a legend for all COLORVALUEs in the node data is rendered in the bottom left corner of the graph. No `render` or `resume` call needed to take into effect:
*
* example.showLegend(false);
* @param {boolean} [value=true] - The new config value.
* @returns {(boolean|Object)} The current config value if no parameter is given or the graph object for method chaining.
*/
graph.showLegend = function(value) {
if (!arguments.length) {
return v.conf.showLegend;
}
v.conf.showLegend = value;
share/public/javascripts/jquery-latest.min.js view on Meta::CPAN
/*! jQuery v1.12.4 | (c) jQuery Foundation | jquery.org/license */
!function(a,b){"object"==typeof module&&"object"==typeof module.exports?module.exports=a.document?b(a,!0):function(a){if(!a.document)throw new Error("jQuery requires a window with a document");return b(a)}:b(a)}("undefined"!=typeof window?window:this...
}return c}function Q(a){var b;for(b in a)if(("data"!==b||!n.isEmptyObject(a[b]))&&"toJSON"!==b)return!1;return!0}function R(a,b,d,e){if(M(a)){var f,g,h=n.expando,i=a.nodeType,j=i?n.cache:a,k=i?a[h]:a[h]&&h;if(k&&j[k]&&(e||j[k].data)||void 0!==d||"str...
marginLeft:0},function(){return a.getBoundingClientRect().left}):0))+"px":void 0}),n.each({margin:"",padding:"",border:"Width"},function(a,b){n.cssHooks[a+b]={expand:function(c){for(var d=0,e={},f="string"==typeof c?c.split(" "):[c];4>d;d++)e[a+V[d]+...
padding:"inner"+a,content:b,"":"outer"+a},function(c,d){n.fn[d]=function(d,e){var f=arguments.length&&(c||"boolean"!=typeof d),g=c||(d===!0||e===!0?"margin":"border");return Y(this,function(b,c,d){var e;return n.isWindow(b)?b.document.documentElement...
share/public/swagger-ui/swagger-ui-bundle.js view on Meta::CPAN
* @param {string} eventNameSuffix Event name, e.g. "click".
* @param {?boolean} capture Check if the capture phase is supported.
* @return {boolean} True if the event is supported.
* @internal
* @license Modernizr 3.0.0pre (Custom Build) | MIT
*/,e.exports=function(e,t){if(!o.canUseDOM||t&&!("addEventListener"in document))return!1;var n="on"+e,i=n in document;if(!i){var a=document.createElement("div");a.setAttribute(n,"return;"),i="function"==typeof a[n]}return!i&&r&&"wheel"===e&&(i=docum...
/*!
* https://github.com/Starcounter-Jack/JSON-Patch
* (c) 2017 Joachim Wester
* MIT license
*/function o(e,t){return r.call(e,t)}function i(e){if(Array.isArray(e)){for(var t=new Array(e.length),n=0;n<t.length;n++)t[n]=""+n;return t}if(Object.keys)return Object.keys(e);t=[];for(var r in e)o(e,r)&&t.push(r);return t}function a(e){return-1===...
/*!
* cookie
* Copyright(c) 2012-2014 Roman Shtylman
* Copyright(c) 2015 Douglas Christopher Wilson
* MIT Licensed
*/t.parse=function(e,t){if("string"!=typeof e)throw new TypeError("argument str must be a string");for(var n={},o=t||{},a=e.split(i),s=o.decode||r,l=0;l<a.length;l++){var c=a[l],f=c.indexOf("=");if(!(f<0)){var p=c.substr(0,f).trim(),d=c.substr(++f,c...
/*!
* repeat-string <https://github.com/jonschlinkert/repeat-string>
*
* Copyright (c) 2014-2015, Jon Schlinkert.
share/public/swagger-ui/swagger-ui-bundle.js view on Meta::CPAN
*/var r,o="";e.exports=function(e,t){if("string"!=typeof e)throw new TypeError("expected a string");if(1===t)return e;if(2===t)return e+e;var n=e.length*t;if(r!==e||void 0===r)r=e,o="";else if(o.length>=n)return o.substr(0,n);for(;n>o.length&&t>1;)1...
/*!
* Autolinker.js
* 0.15.3
*
* Copyright(c) 2015 Gregory Jacobs <greg@greg-jacobs.com>
* MIT Licensed. http://www.opensource.org/licenses/mit-license.php
*
* https://github.com/gregjacobs/Autolinker.js
*/
var e,t,n,r,o=function(e){o.Util.assign(this,e)};return o.prototype={constructor:o,urls:!0,email:!0,twitter:!0,newWindow:!0,stripPrefix:!0,truncate:void 0,className:"",htmlParser:void 0,matchParser:void 0,tagBuilder:void 0,link:function(e){for(var t=...
//# sourceMappingURL=swagger-ui-bundle.js.map
share/public/swagger-ui/swagger-ui-bundle.js.map view on Meta::CPAN
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 396b8c743e9ffbc09e47","webpack:///./node_modules/react/react.js","webpack:///./node_modules/prop-types/index.js","webpack:///./node_modules/babel-run...
share/public/swagger-ui/swagger-ui-standalone-preset.js view on Meta::CPAN
object-assign
(c) Sindre Sorhus
@license MIT
*/var r=Object.getOwnPropertySymbols,i=Object.prototype.hasOwnProperty,o=Object.prototype.propertyIsEnumerable;t.exports=function(){try{if(!Object.assign)return!1;var t=new String("abc");if(t[5]="de","5"===Object.getOwnPropertyNames(t)[0])return!1;fo...
/*!
* The buffer module from node.js, for the browser.
*
* @author Feross Aboukhadijeh <feross@feross.org> <http://feross.org>
* @license MIT
*/
var r=n(325),i=n(326),o=n(167);function u(){return a.TYPED_ARRAY_SUPPORT?2147483647:1073741823}function s(t,e){if(u()<e)throw new RangeError("Invalid typed array length");return a.TYPED_ARRAY_SUPPORT?(t=new Uint8Array(e)).__proto__=a.prototype:(null=...
//# sourceMappingURL=swagger-ui-standalone-preset.js.map
share/public/swagger-ui/swagger-ui-standalone-preset.js.map view on Meta::CPAN
{"version":3,"sources":["webpack:///webpack/universalModuleDefinition","webpack:///webpack/bootstrap 5e373a31950a06c8d2bb","webpack:///./node_modules/@kyleshockey/js-yaml/lib/js-yaml/type.js","webpack:///./node_modules/core-js/modules/_wks.js","webpa...
share/public/swagger-ui/swagger-ui.css view on Meta::CPAN
.swagger-ui{
/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */font-family:sans-serif;color:#3b4151}.swagger-ui html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text-size-adjust:100%}.swagger-ui body{margin:0}.swagger-ui article...
/*# sourceMappingURL=swagger-ui.css.map*/
share/views/sidebar/device/ports.tt view on Meta::CPAN
<label class="add-on nd_port-invert-label">
<input type="checkbox" id="invert"
name="invert"[% ' checked="checked"' IF vars.sidebar_defaults.device_ports.invert %]/>
</label>
<label class="nd_checkboxlabel" for="invert">
<span class="nd_port-invert-checkbox uneditable-input">Not</span>
</label>
</div>
</div>
<div class="clearfix">
<span data-toggle="collapse" data-target="#nd_legend">
<label class="nd_collapser">Legend
<i class="nd_arrow-up-down-right icon-chevron-up icon-large"></i>
</label></span>
<div id="nd_legend" class="collapse">
<ul class="icons-ul"><!-- nd_inputs-list unstyled"> -->
<li><i class="icon-li icon-angle-up text-success"></i> Link Up</li>
<li><i class="icon-li icon-arrow-down text-error"></i> Link Down</li>
<li><i class="icon-li icon-circle-arrow-down text-success"></i> Port Free</li>
<li><i class="icon-li icon-remove"></i> Admin Disabled</li>
<li><i class="icon-li icon-exclamation-sign text-error"></i> Error Disabled</li>
<li><i class="icon-li icon-ban-circle text-info"></i> Blocking</li>
<li><i class="icon-li icon-off"></i> PoE Disabled</li>
<li><i class="icon-li icon-off nd_power-on"></i> PoE Enabled</li>
<li><i class="icon-li icon-link text-warning"></i> Manual Topology</li>
share/views/sidebar/report/ipinventory.tt view on Meta::CPAN
<div class="clearfix">
<input id="nd_ipinventory-subnet" class="nd_sidebar-topinput nd_colored-input"
placeholder="CIDR Prefix/Subnet" required="required"
name="subnet" value="[% params.subnet | html_entity %]" type="text" autocomplete="off"
rel="tooltip" data-placement="left" data-offset="5" data-title="Prefix/Subnet in CIDR Format"/>
</div>
<fieldset>
<legend class="nd_sidebar-legend">
<label><em><strong>Date Range</strong></em></label>
</legend>
<div class="clearfix input-prepend">
<label class="add-on">
<input type="checkbox" id="age_invert"
name="age_invert"[% ' checked="checked"' IF params.age_invert %]/>
</label>
<label class="nd_checkboxlabel" for="age_invert">
<span class="nd_searchcheckbox uneditable-input">Not within...</span>
</label>
</div>
<div class="clearfix">
<input class="nd_side-input" id="daterange" required="required"
type="text" name="daterange" value="[%
(params.exists('daterange') ? params.daterange : to_daterange()) | html_entity %]"/>
</div>
</fieldset>
<fieldset>
<legend class="nd_sidebar-legend">
<label><em><strong>Options</strong></em></label>
</legend>
<div class="clearfix">
<ul class="unstyled">
<li>
<em class="muted">Oldest records limit:</em><br/>
<select id="nd_mac-format" class="nd_side-select" name="limit">
[% FOREACH size IN [ '32', '64', '128', '256', '512', '1024', '2048', '4096', '8192' ] %]
<option[% ' selected="selected"' IF (params.limit == size OR (NOT params.limit AND size == 2048)) %]>
[% size | html_entity %]</option>
[% END %]
</select>
share/views/sidebar/report/moduleinventory.tt view on Meta::CPAN
<div class="clearfix">
<select class="nd_side-select nd_colored-input" size="[% class_list.size > 5 ? 5 : class_list.size %]"
multiple name="class"
rel="tooltip" data-placement="left" data-offset="5" data-title="Module Class">
[% FOREACH opt IN class_list %]
<option[% ' selected="selected"' IF class_lkp.exists(opt) %]>[% opt | html_entity %]</option>
[% END %]
</select>
</div>
<fieldset>
<legend class="nd_sidebar-legend">
<label><em><strong>Options</strong></em></label>
</legend>
<div class="clearfix input-prepend">
<label class="add-on">
<input type="checkbox" id="fruonly"
name="fruonly"[% ' checked="checked"' IF (params.fruonly OR vars.sidebar_defaults.report_moduleinventory.fruonly) %]/>
</label>
<label class="nd_checkboxlabel" for="fruonly">
<span class="nd_searchcheckbox uneditable-input">FRU Only</span>
</label>
</div>
<div class="clearfix input-prepend">
share/views/sidebar/report/nodevendor.tt view on Meta::CPAN
<p class="nd_sidebar-title"><em>Node Vendor Search</em></p>
<fieldset>
<legend class="nd_sidebar-legend">
<label><em><strong>Vendor</strong></em></label>
</legend>
<div class="clearfix">
<select class="nd_side-select nd_colored-input" size="[% vendor_list.size > 8 ? 8 : vendor_list.size %]"
multiple name="vendor"
rel="tooltip" data-placement="left" data-offset="5" data-title="Vendor">
[% FOREACH opt IN vendor_list %]
[% NEXT IF opt == '' %]
<option[% ' selected="selected"' IF vendor_lkp.exists(opt) %]>[% opt | html_entity %]</option>
[% END %]
</select>
</div>
</fieldset>
<fieldset>
<legend class="nd_sidebar-legend">
<label><em><strong>Options</strong></em></label>
</legend>
<div class="clearfix input-prepend"
rel="tooltip" data-placement="left" data-offset="5" data-title="Include Archived Data">
<label class="add-on">
<input type="checkbox" id="archived"
name="archived"[% ' checked="checked"' IF params.archived %]/>
</label>
<label class="nd_checkboxlabel" for="archived">
<span class="nd_searchcheckbox uneditable-input">Archived Data</span>
</label>
</div>
share/views/sidebar/report/subnets.tt view on Meta::CPAN
<div class="clearfix">
<input id="nd_ipinventory-subnet" class="nd_sidebar-topinput nd_colored-input"
placeholder="0.0.0.0/0" required="required"
name="subnet" value="[% params.subnet | html_entity %]" type="text" autocomplete="off"
rel="tooltip" data-placement="left" data-offset="5" data-title="Prefix/Subnet in CIDR Format"/>
</div>
<fieldset>
<legend class="nd_sidebar-legend">
<label><em><strong>Date Range</strong></em></label>
</legend>
<!--
<div class="clearfix input-prepend">
<label class="add-on">
<input type="checkbox" id="age_invert"
name="age_invert"[% ' checked="checked"' IF params.age_invert %]/>
</label>
<label class="nd_checkboxlabel" for="age_invert">
<span class="nd_searchcheckbox uneditable-input">Not within...</span>
</label>
</div>
share/views/sidebar/search/node.tt view on Meta::CPAN
<input type="checkbox" id="archived"
name="archived"[% ' checked="checked"' IF vars.sidebar_defaults.search_node.archived %]/>
</label>
<label class="nd_checkboxlabel" for="archived">
<span class="nd_searchcheckbox uneditable-input">
Archived Data <i class="icon-book text-warning"></i></span>
</label>
</div>
<div class="clearfix input-prepend"
rel="tooltip" data-placement="left" data-offset="5" data-title="Only for IEEE format MACs">
<label class="add-on nd_sidebar-legend">
<input type="checkbox" id="node_partial"
name="partial"[% ' checked="checked"' IF vars.sidebar_defaults.search_node.partial %]/>
</label>
<label class="nd_checkboxlabel" for="node_partial">
<span class="nd_searchcheckbox uneditable-input">Partial Match</span>
</label>
</div>
<div class="clearfix">
<em class="muted">Date Range:</em><br/>
<div class="clearfix input-prepend">