App-Netdisco

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

  * #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>&nbsp; Link Up</li>
                  <li><i class="icon-li icon-arrow-down text-error"></i>&nbsp; Link Down</li>
                  <li><i class="icon-li icon-circle-arrow-down text-success"></i>&nbsp; Port Free</li>
                  <li><i class="icon-li icon-remove"></i>&nbsp; Admin Disabled</li>
                  <li><i class="icon-li icon-exclamation-sign text-error"></i>&nbsp; Error Disabled</li>
                  <li><i class="icon-li icon-ban-circle text-info"></i>&nbsp; Blocking</li>
                  <li><i class="icon-li icon-off"></i>&nbsp; PoE Disabled</li>
                  <li><i class="icon-li icon-off nd_power-on"></i>&nbsp; PoE Enabled</li>
                  <li><i class="icon-li icon-link text-warning"></i>&nbsp; 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 &nbsp;<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">



( run in 1.336 second using v1.01-cache-2.11-cpan-49f99fa48dc )