App-Netdisco

 view release on metacpan or  search on metacpan

Changes  view on Meta::CPAN

  * #1411 scheduler takes IP Prefix in "device" param and multiple "device" params

  [BUG FIXES]

  * #1408 ignore SIGCHLD in perl ssh collector to avoid zombie processes

2.091000 - 2025-09-30

  [NEW FEATURES]

  * #1404 SSH collector for Arista EOS (Robert Lynch)
  * #1407 SSH collector for MAC entries from Cisco IOS-XE routers (alcatron)

  [ENHANCEMENTS]

  * #1406 Trim known vendor strings from the front of model strings
  * update Python integration to use native uv builder (fixes netdisco-docker:#83)

  [BUG FIXES]

  * #1403 allow models generated by SNMP::Info to remain

Changes  view on Meta::CPAN

2.056000 - 2022-09-24

  [NEW FEATURES]

  * #925 implement ignore_deviceports and hide_deviceports settings

2.055001 - 2022-09-02

  [BUG FIXES]

  * #928 404 page template broken
  * sorting vlans in device ports tab works for extended vlan ranges

2.055000 - 2022-08-16

  [NEW FEATURES]

  * #914 new setting macsuck_no_deviceport to ignore nodes on a device port

  [ENHANCEMENTS]

Changes  view on Meta::CPAN

  * #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
  * allow stats to run smoothly on ancient Pg 8.4

2.042010 - 2019-06-02

  [BUG FIXES]

  * #601 fix job queue no longer shows running or queued jobs

2.042009 - 2019-05-30

Changes  view on Meta::CPAN


2.039024 - 2018-04-22

  [ENHANCEMENTS]

  * #395 new landing page with Find Anything form
  * #400 add defanged_admin setting to support safe Heroku deployment

  [BUG FIXES]

  * #404 fix using 0 to disable max_deferrals and retry_after
  * #380 port searches should check descr field, not name, for "vlan"

2.039023 - 2018-04-19

  [NEW FEATURES]

  * #401 Autodiscovery via EIGRP peers

  [BUG FIXES]

lib/App/Netdisco/Web/API/Objects.pm  view on Meta::CPAN

  parameters  => [
    ip => {
      description => 'Canonical IP of the Device. Use Search methods to find this.',
      required => 1,
      in => 'path',
    },
  ],
  responses => { default => {} },
}, get '/api/v1/object/device/:ip' => require_role api => sub {
  my $device = try { schema(vars->{'tenant'})->resultset('Device')
    ->find( params->{ip} ) } or send_error('Bad Device', 404);

  my $data = $device->TO_JSON;

  my @modules = try {
    schema(vars->{'tenant'})->resultset('DevicePower')
      ->search({ 'me.ip' => $device->ip })->with_poestats->hri->all;
  } catch { () };

  if (@modules) {
    my %totals = (

lib/App/Netdisco/Web/API/Objects.pm  view on Meta::CPAN

      parameters  => [
        ip => {
          description => 'Canonical IP of the Device. Use Search methods to find this.',
          required => 1,
          in => 'path',
        },
      ],
      responses => { default => {} },
    }, get "/api/v1/object/device/:ip/$rel" => require_role api => sub {
      my $rows = try { schema(vars->{'tenant'})->resultset('Device')
        ->find( params->{ip} )->$rel } or send_error('Bad Device', 404);
      return to_json [ map {$_->TO_JSON} $rows->all ];
    };
}

swagger_path {
  tags => ['Objects'],
  path => (setting('api_base') || '').'/object/device/{ip}/power_modules',
  description => 'Returns PoE module status and aggregated port statistics for a given device',
  parameters  => [
    ip => {
      description => 'Canonical IP of the Device. Use Search methods to find this.',
      required => 1,
      in => 'path',
    },
  ],
  responses => { default => {} },
}, get '/api/v1/object/device/:ip/power_modules' => require_role api => sub {
  my $device = try { schema(vars->{'tenant'})->resultset('Device')
    ->find( params->{ip} ) } or send_error('Bad Device', 404);
  my @rows = try {
    schema(vars->{'tenant'})->resultset('DevicePower')
      ->search({ 'me.ip' => $device->ip })->with_poestats->hri->all;
  } catch { () };
  return to_json \@rows;
};

swagger_path {
  tags => ['Objects'],
  path => setting('api_base')."/object/device/{ip}/neighbors",

lib/App/Netdisco/Web/API/Objects.pm  view on Meta::CPAN

    userip => {
      description => 'IP address of the Job submitter',
    },
    backend => {
      description => 'Backend instance assigned the Job',
    },
  ],
  responses => { default => {} },
}, del '/api/v1/object/device/:ip/jobs' => require_role api_admin => sub {
  my $device = try { schema(vars->{'tenant'})->resultset('Device')
    ->find( params->{ip} ) } or send_error('Bad Device', 404);

  my $gone = schema(vars->{'tenant'})->resultset('Admin')->search({
    device => param('ip'),
    ( param('port')     ? ( port     => param('port') )     : () ),
    ( param('action')   ? ( action   => param('action') )   : () ),
    ( param('status')   ? ( status   => param('status') )   : () ),
    ( param('username') ? ( username => param('username') ) : () ),
    ( param('userip')   ? ( userip   => param('userip') )   : () ),
    ( param('backend')  ? ( backend  => param('backend') )  : () ),
  })->delete;

lib/App/Netdisco/Web/API/Objects.pm  view on Meta::CPAN

          description => 'Name of the port. Use the ".../device/{ip}/ports" method to find these.',
          required => 1,
          in => 'path',
        },
      ],
      responses => { default => {} },
    }, get qr{/api/v1/object/device/(?<ip>[^/]+)/port/(?<port>.+)/${rel}$} => require_role api => sub {
      my $params = captures;
      my $rows = try { schema(vars->{'tenant'})->resultset('DevicePort')
        ->find( _port_param($$params{port}), uri_unescape($$params{ip}) )->$rel }
        or send_error('Bad Device or Port', 404);
      return to_json [ map {$_->TO_JSON} $rows->all ];
    };
}

foreach my $rel (qw/power properties ssid wireless agg_master neighbor last_node/) {
    swagger_path {
      tags => ['Objects'],
      description => "Returns the related $rel table entry for a given port",
      path => (setting('api_base') || '')."/object/device/{ip}/port/{port}/$rel",
      parameters  => [

lib/App/Netdisco/Web/API/Objects.pm  view on Meta::CPAN

          description => 'Name of the port. Use the ".../device/{ip}/ports" method to find these.',
          required => 1,
          in => 'path',
        },
      ],
      responses => { default => {} },
    }, get qr{/api/v1/object/device/(?<ip>[^/]+)/port/(?<port>.+)/${rel}$} => require_role api => sub {
      my $params = captures;
      my $row = try { schema(vars->{'tenant'})->resultset('DevicePort')
        ->find( _port_param($$params{port}), uri_unescape($$params{ip}) )->$rel }
        or send_error('Bad Device or Port', 404);
      return to_json $row->TO_JSON;
    };
}

# must come after the port methods above, so the route matches later
swagger_path {
  tags => ['Objects'],
  description => 'Returns a row from the device_port table',
  path => (setting('api_base') || '').'/object/device/{ip}/port/{port}',
  parameters  => [

lib/App/Netdisco/Web/API/Objects.pm  view on Meta::CPAN

      description => 'Name of the port. Use the ".../device/{ip}/ports" method to find these.',
      required => 1,
      in => 'path',
    },
  ],
  responses => { default => {} },
}, get qr{/api/v1/object/device/(?<ip>[^/]+)/port/(?<port>.+)$} => require_role api => sub {
  my $params = captures;
  my $port = try { schema(vars->{'tenant'})->resultset('DevicePort')
    ->find( _port_param($$params{port}), uri_unescape($$params{ip}) ) }
    or send_error('Bad Device or Port', 404);
  return to_json $port->TO_JSON;
};

swagger_path {
  tags => ['Objects'],
  path => (setting('api_base') || '').'/object/device/{ip}/nodes',
  description => "Returns the nodes found on a given Device",
  parameters  => [
    ip => {
      description => 'Canonical IP of the Device. Use Search methods to find this.',

lib/App/Netdisco/Web/API/Objects.pm  view on Meta::CPAN

      type => 'boolean',
      default => 'true',
      in => 'query',
    },
  ],
  responses => { default => {} },
}, get '/api/v1/object/device/:ip/nodes' => require_role api => sub {
  my $active = (params->{active_only} and ('true' eq params->{active_only})) ? 1 : 0;
  my $rows = try { schema(vars->{'tenant'})->resultset('Node')
    ->search({ switch => params->{ip}, ($active ? (-bool => 'active') : ()) }) }
    or send_error('Bad Device', 404);
  return to_json [ map {$_->TO_JSON} $rows->all ];
};

swagger_path {
  tags => ['Objects'],
  path => (setting('api_base') || '').'/object/device/{ip}/nodes',
  description => "Queue a job to store the nodes found on a given Device",
  parameters  => [
    ip => {
      description => 'Canonical IP of the Device. Use Search methods to find this.',

lib/App/Netdisco/Web/API/Objects.pm  view on Meta::CPAN

      type => 'boolean',
      default => 'true',
      in => 'query',
    },
  ],
  responses => { default => {} },
}, get '/api/v1/object/vlan/:vlan/nodes' => require_role api => sub {
  my $active = (params->{active_only} and ('true' eq params->{active_only})) ? 1 : 0;
  my $rows = try { schema(vars->{'tenant'})->resultset('Node')
    ->search({ vlan => params->{vlan}, ($active ? (-bool => 'active') : ()) }) }
    or send_error('Bad VLAN', 404);
  return to_json [ map {$_->TO_JSON} $rows->all ];
};

swagger_path {
  tags => ['Objects'],
  path => (setting('api_base') || '').'/object/device/{ip}/arps',
  description => "Queue a job to store the ARP entries found on a given Device",
  parameters  => [
    ip => {
      description => 'Canonical IP of the Device. Use Search methods to find this.',

lib/App/Netdisco/Web/API/Statistics.pm  view on Meta::CPAN

  tags => ['General'],
  path => (setting('api_base') || '').'/statistics',
  description => 'Returns the latest row from the statistics table',
  parameters => [],
  responses => { default => {} },

}, get '/api/v1/statistics' => require_role api => sub {
  my $stats = try {
    schema(vars->{'tenant'})->resultset('Statistics')
      ->search(undef, { order_by => { -desc => 'day' }, rows => 1 })->first
  } or send_error('No statistics available', 404);

  return to_json $stats->TO_JSON;
};

true;

lib/App/Netdisco/Web/Plugin/AdminTask/Users.pm  view on Meta::CPAN

    });

    return '';
};

ajax '/ajax/control/admin/users/token' => require_role setting('defanged_admin') => sub {
  send_error('Bad Request', 400) unless _sanity_ok();

  my $user = schema('netdisco')->resultset('User')
    ->find({ username => param('username') });
  send_error('Not Found', 404) unless $user and $user->in_storage;

  my $token;
  schema('netdisco')->txn_do(sub {
    $user->update({ token => \'md5(random()::text)', token_from => time });
    $user->discard_changes();
    $token = $user->token;
  });

  header('Content-Type' => 'text/plain');
  return $token;

lib/App/Netdisco/Web/Plugin/Device/SNMP.pm  view on Meta::CPAN

use App::Netdisco::Web::Plugin;
use App::Netdisco::Util::SNMP 'decode_and_munge';
use Module::Load ();
use Try::Tiny;

register_device_tab({ tag => 'snmp', label => 'SNMP' });

get '/ajax/content/device/snmp' => require_login sub {
    my $device = try { schema(vars->{'tenant'})->resultset('Device')
                                   ->search_for_device( param('q') ) }
       or send_error('Bad Device', 404);

    template 'ajax/device/snmp.tt', { device => $device->ip },
      { layout => 'noop' };
};

ajax '/ajax/data/device/:ip/snmptree/:base' => require_login sub {
    my $device = try { schema(vars->{'tenant'})->resultset('Device')
                                         ->find( param('ip') ) }
       or send_error('Bad Device', 404);

    my $base = param('base');
    $base =~ m/^\.1(\.\d+)*$/ or send_error('Bad OID Base', 404);

    content_type 'application/json';

    return to_json [{
      text => 'No data for this device. Admins can request a snapshot in the Details tab.',
      children => \0,
      state => { disabled => \1 },
      icon => 'fas fa-magnifying-glass',
    }] unless $device->oids->count;

lib/App/Netdisco/Web/Plugin/Device/SNMP.pm  view on Meta::CPAN

        push @results, "${last}.${part}";
    }

    content_type 'application/json';
    to_json \@results;
};

ajax '/ajax/content/device/:ip/snmpnode/:oid' => require_login sub {
    my $device = try { schema(vars->{'tenant'})->resultset('Device')
                                         ->find( param('ip') ) }
       or send_error('Bad Device', 404);

    my $oid = param('oid');
    $oid =~ m/^\.1(\.\d+)*$/ or send_error('Bad OID', 404);

    my $object = schema(vars->{'tenant'})->resultset('SNMPObject')
      ->find({'me.oid' => $oid},
               {join => ['snmp_filter'], prefetch => ['snmp_filter']})
      or send_error('Bad OID', 404);

    my $munge = (param('munge') ||
                 ($object->snmp_filter ? $object->snmp_filter->subname : undef));

    # this is a bit lazy, could be a join on above with some effort
    my $value = schema(vars->{'tenant'})->resultset('DeviceBrowser')
      ->search({-and => [-bool => \q{ array_length(oid_parts, 1) IS NOT NULL },
                         -bool => \q{ jsonb_typeof(value) = 'array' }]})
      ->find({'me.oid' => $oid, 'me.ip' => $device});

share/config.yml  view on Meta::CPAN

ignore_layers: []
force_macsuck: []
macsuck_no: []
macsuck_only: []
macsuck_all_vlans: false
macsuck_no_unnamed: false
macsuck_no_vlan:
  - 'SAM-vlan-appliance-management'
  - 'SAM-vlan-boot'
  - 'SAM-vlan-management'
  - 'fcoe-vsan-4048'
  - 'fddi-default'
  - 'fddinet-default'
  - 'token-ring-default'
  - 'trbrf-default'
  - 'trcrf-default'
  - 'trnet-default'
macsuck_no_devicevlan: []
macsuck_no_deviceports: []
macsuck_unsupported: []
macsuck_unsupported_type: []

share/public/css/bootstrap.min.css  view on Meta::CPAN

@charset "UTF-8";/*!
 * Bootstrap  v5.3.8 (https://getbootstrap.com/)
 * Copyright 2011-2025 The Bootstrap Authors
 * Licensed under MIT (https://github.com/twbs/bootstrap/blob/main/LICENSE)
 */:root,[data-bs-theme=light]{--bs-blue:#0d6efd;--bs-indigo:#6610f2;--bs-purple:#6f42c1;--bs-pink:#d63384;--bs-red:#dc3545;--bs-orange:#fd7e14;--bs-yellow:#ffc107;--bs-green:#198754;--bs-teal:#20c997;--bs-cyan:#0dcaf0;--bs-black:#000;--bs-white:#fff...
/*# sourceMappingURL=bootstrap.min.css.map */

share/public/css/font-awesome.min.css  view on Meta::CPAN

/*!
 * Font Awesome Free 7.3.1 by @fontawesome - https://fontawesome.com
 * License - https://fontawesome.com/license/free (Icons: CC BY 4.0, Fonts: SIL OFL 1.1, Code: MIT License)
 * Copyright 2026 Fonticons, Inc.
 */
.fa,.fa-brands,.fa-classic,.fa-regular,.fa-solid,.fab,.far,.fas{--_fa-family:var(--fa-family,var(--fa-style-family,"Font Awesome 7 Free"));-webkit-font-smoothing:antialiased;-moz-osx-font-smoothing:grayscale;display:var(--fa-display,inline-block);fon...

.fa-0{--fa:"\30 "}.fa-1{--fa:"\31 "}.fa-2{--fa:"\32 "}.fa-3{--fa:"\33 "}.fa-4{--fa:"\34 "}.fa-5{--fa:"\35 "}.fa-6{--fa:"\36 "}.fa-7{--fa:"\37 "}.fa-8{--fa:"\38 "}.fa-9{--fa:"\39 "}.fa-exclamation{--fa:"\!"}.fa-hashtag{--fa:"\#"}.fa-dollar,.fa-dollar-...
:host,:root{--fa-family-brands:"Font Awesome 7 Brands";--fa-font-brands:normal 400 1em/1 var(--fa-family-brands)}@font-face{font-family:"Font Awesome 7 Brands";font-style:normal;font-weight:400;font-display:block;src:url(../webfonts/fa-brands-400.wof...

share/public/css/netdisco.css  view on Meta::CPAN

/* make the whole cell become a hyperlink in results table */
.nd_linkcell {
  display: block;
  padding: 0px;
  height: 100%;
}

/* still a link, but styled like normal text */
.nd_stealth-link {
  text-decoration: none !important;
  color: #404040;
}

.nd_text-align-top {
  vertical-align: text-top;
}

/* make room for the port log icon */
.nd_this-port-only {
  margin-right: 15px;
}

share/public/javascripts/d3-3.5.17.min.js  view on Meta::CPAN

!function(){function n(n){return n&&(n.ownerDocument||n.document||n).documentElement}function t(n){return n&&(n.ownerDocument&&n.ownerDocument.defaultView||n.document&&n||n.defaultView)}function e(n,t){return t>n?-1:n>t?1:n>=t?0:NaN}function r(n){ret...
r(),S.point=c,S.lineEnd=s}function c(n,t){i(f=n,h=t),g=M,p=x,v=b,d=_,m=w,S.point=i}function s(){u(M,x,y,b,_,w,g,p,f,v,d,m,o,t),S.lineEnd=a,a()}var f,h,g,p,v,d,m,y,M,x,b,_,w,S={point:e,lineStart:r,lineEnd:a,polygonStart:function(){t.polygonStart(),S.l...
return g}:En(r),w=u===i?function(){return p}:En(i);++y<M;)a.call(this,h=t[y],y)?(d.push([g=+x.call(this,h,y),p=+b.call(this,h,y)]),m.push([+_.call(this,h,y),+w.call(this,h,y)])):d.length&&(l(),d=[],m=[]);return d.length&&l(),v.length?v.join(""):null}...
shortDays:["Sun","Mon","Tue","Wed","Thu","Fri","Sat"],months:["January","February","March","April","May","June","July","August","September","October","November","December"],shortMonths:["Jan","Feb","Mar","Apr","May","Jun","Jul","Aug","Sep","Oct","Nov...
if(t==e.dx){for((r||s>e.dy)&&(s=e.dy);++i<a;)u=n[i],u.x=o,u.y=c,u.dy=s,o+=u.dx=Math.min(e.x+e.dx-o,s?l(u.area/s):0);u.z=!0,u.dx+=e.x+e.dx-o,e.y+=s,e.dy-=s}else{for((r||s>e.dx)&&(s=e.dx);++i<a;)u=n[i],u.x=o,u.y=c,u.dx=s,c+=u.dy=Math.min(e.y+e.dy-c,s?l...

share/public/javascripts/he.js  view on Meta::CPAN

	// All ASCII symbols (not just printable ASCII) except those listed in the
	// first column of the overrides table.
	// http://whatwg.org/html/tokenization.html#table-charref-overrides
	var regexAsciiWhitelist = /[\x01-\x7F]/g;
	// All BMP symbols that are not ASCII newlines, printable ASCII symbols, or
	// code points listed in the first column of the overrides table on
	// http://whatwg.org/html/tokenization.html#table-charref-overrides.
	var regexBmpWhitelist = /[\x01-\t\x0B\f\x0E-\x1F\x7F\x81\x8D\x8F\x90\x9D\xA0-\uFFFF]/g;

	var regexEncodeNonAscii = /<\u20D2|=\u20E5|>\u20D2|\u205F\u200A|\u219D\u0338|\u2202\u0338|\u2220\u20D2|\u2229\uFE00|\u222A\uFE00|\u223C\u20D2|\u223D\u0331|\u223E\u0333|\u2242\u0338|\u224B\u0338|\u224D\u20D2|\u224E\u0338|\u224F\u0338|\u2250\u0338|\u2...
	var encodeMap = {'\xC1':'Aacute','\xE1':'aacute','\u0102':'Abreve','\u0103':'abreve','\u223E':'ac','\u223F':'acd','\u223E\u0333':'acE','\xC2':'Acirc','\xE2':'acirc','\xB4':'acute','\u0410':'Acy','\u0430':'acy','\xC6':'AElig','\xE6':'aelig','\u2061':...

	var regexEscape = /["&'<>`]/g;
	var escapeMap = {
		'"': '&quot;',
		'&': '&amp;',
		'\'': '&#x27;',
		'<': '&lt;',
		// See http://mathiasbynens.be/notes/ambiguous-ampersands: in HTML, the
		// following is not strictly necessary unless it’s part of a tag or an
		// unquoted attribute value. We’re only escaping it to support those

share/public/javascripts/he.js  view on Meta::CPAN

		// In Internet Explorer ≤ 8, the backtick character can be used
		// to break out of (un)quoted attribute values or HTML comments.
		// See http://html5sec.org/#102, http://html5sec.org/#108, and
		// http://html5sec.org/#133.
		'`': '&#x60;'
	};

	var regexInvalidEntity = /&#(?:[xX][^a-fA-F0-9]|[^0-9xX])/;
	var regexInvalidRawCodePoint = /[\0-\x08\x0B\x0E-\x1F\x7F-\x9F\uFDD0-\uFDEF\uFFFE\uFFFF]|[\uD83F\uD87F\uD8BF\uD8FF\uD93F\uD97F\uD9BF\uD9FF\uDA3F\uDA7F\uDABF\uDAFF\uDB3F\uDB7F\uDBBF\uDBFF][\uDFFE\uDFFF]|[\uD800-\uDBFF](?![\uDC00-\uDFFF])|(?:[^\uD800-...
	var regexDecode = /&#([0-9]+)(;?)|&#[xX]([a-fA-F0-9]+)(;?)|&([0-9a-zA-Z]+);|&(Aacute|iacute|Uacute|plusmn|otilde|Otilde|Agrave|agrave|yacute|Yacute|oslash|Oslash|Atilde|atilde|brvbar|Ccedil|ccedil|ograve|curren|divide|Eacute|eacute|Ograve|oacute|Egr...
	var decodeMap = {'Aacute':'\xC1','aacute':'\xE1','Abreve':'\u0102','abreve':'\u0103','ac':'\u223E','acd':'\u223F','acE':'\u223E\u0333','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','Acy':'\u0410','acy':'\u0430','AElig':'\xC6','aelig':'\xE6','af':'\u2...
	var decodeMapLegacy = {'Aacute':'\xC1','aacute':'\xE1','Acirc':'\xC2','acirc':'\xE2','acute':'\xB4','AElig':'\xC6','aelig':'\xE6','Agrave':'\xC0','agrave':'\xE0','amp':'&','AMP':'&','Aring':'\xC5','aring':'\xE5','Atilde':'\xC3','atilde':'\xE3','Auml...
	var decodeMapNumeric = {'0':'\uFFFD','128':'\u20AC','130':'\u201A','131':'\u0192','132':'\u201E','133':'\u2026','134':'\u2020','135':'\u2021','136':'\u02C6','137':'\u2030','138':'\u0160','139':'\u2039','140':'\u0152','142':'\u017D','145':'\u2018','1...
	var invalidReferenceCodePoints = [1,2,3,4,5,6,7,8,11,13,14,15,16,17,18,19,20,21,22,23,24,25,26,27,28,29,30,31,127,128,129,130,131,132,133,134,135,136,137,138,139,140,141,142,143,144,145,146,147,148,149,150,151,152,153,154,155,156,157,158,159,64976,6...

	/*--------------------------------------------------------------------------*/

	var stringFromCharCode = String.fromCharCode;

	var object = {};
	var hasOwnProperty = object.hasOwnProperty;

share/public/javascripts/jquery-latest.min.js  view on Meta::CPAN

/*! jQuery v3.7.1 | (c) OpenJS Foundation and other contributors | jquery.org/license */
!function(e,t){"use strict";"object"==typeof module&&"object"==typeof module.exports?module.exports=e.document?t(e,!0):function(e){if(!e.document)throw new Error("jQuery requires a window with a document");return t(e)}:t(e)}("undefined"!=typeof windo...

share/public/javascripts/jstree/themes/proton/fonts/titillium/titilliumweb-bold-webfont.svg  view on Meta::CPAN

<glyph unicode="}" horiz-adv-x="739" d="M74 1325v234q231 -8 324.5 -86t93.5 -273l-15 -260q0 -139 230 -192v-213q-229 -59 -230 -209l15 -248q0 -184 -93.5 -264t-320.5 -88v233q86 6 115.5 45t29.5 109l-14 239q0 131 44 193.5t187 97.5q-145 35 -187 90t-42 185l1...
<glyph unicode="~" d="M125 578q129 106 252 106q57 0 212.5 -45t196.5 -45q76 0 181 57l34 21l17 -219q-39 -39 -107.5 -72t-126 -33t-219.5 45t-200.5 45t-95 -20.5t-89.5 -40.5l-35 -19z" />
<glyph unicode="&#xa1;" horiz-adv-x="540" d="M121 -369l29 881h241l27 -881h-297zM123 694v330h295v-330h-295z" />
<glyph unicode="&#xa2;" d="M180 509q0 423 373 454v206h225v-215l162 -26l-8 -205q-162 6 -265.5 6t-155.5 -50t-52 -167t53 -168t182 -51l238 8l8 -205q-80 -20 -162 -26v-224h-225v213q-373 27 -373 450z" />
<glyph unicode="&#xa3;" d="M154 0v233h151v420h-131v234h131v121q0 213 82 289.5t258 76.5q137 0 268 -37l45 -12l-8 -213q-139 16 -268 16q-106 0 -107 -133v-108h314v-234h-314v-420h254l142 33l43 -229l-166 -37h-694z" />
<glyph unicode="&#xa4;" d="M61 193l148 147q-39 84 -39 175t39 175l-148 150l189 188l147 -149q82 41 175.5 41t175.5 -41l149 149l188 -188l-149 -150q41 -82 41 -175t-41 -175l149 -147l-188 -189l-149 150q-82 -41 -174.5 -41t-174.5 41l-149 -150zM397 516q0 -72 5...
<glyph unicode="&#xa5;" d="M10 1352h314l251 -432l250 432h314l-293 -527h182v-229h-309v-92h309v-230h-309v-274h-283v274h-317v230h317v92h-317v229h188z" />
<glyph unicode="&#xa6;" horiz-adv-x="557" d="M141 348h275v-778h-275v778zM141 672v762h275v-762h-275z" />
<glyph unicode="&#xa7;" horiz-adv-x="1058" d="M76 436q0 72 41 153t90 122q-90 66 -90 221q0 375 444 375q131 0 303 -37l58 -13l-13 -221q-231 33 -339.5 33t-147.5 -28.5t-39 -104.5q0 -45 55.5 -68.5t231.5 -66.5t239.5 -102.5t63.5 -202t-103 -287.5q41 -39 59.5 ...
<glyph unicode="&#xa8;" horiz-adv-x="548" d="M-61 1221v270h262v-270h-262zM381 1221v270h262v-270h-262z" />
<glyph unicode="&#xa9;" horiz-adv-x="1316" d="M94 892q0 249 160 413.5t408.5 164.5t404.5 -168.5t156 -416.5t-156 -413t-403.5 -165t-408.5 168t-161 417zM221 888.5q0 -190.5 125 -324.5t312.5 -134t312.5 133t125 323.5t-126 326t-311.5 135.5t-311.5 -134.5t-126...
<glyph unicode="&#xaa;" horiz-adv-x="851" d="M86 868q0 195 260 207l137 6v45q0 31 -90 31l-268 -14l-6 153q143 53 294.5 53.5t228.5 -50t77 -185.5v-289q16 -12 37 -16l-4 -168q-139 0 -187.5 15.5t-72.5 52.5q-86 -66 -188.5 -66t-160 60.5t-57.5 164.5zM322 877q0...
<glyph unicode="&#xab;" horiz-adv-x="1230" d="M82 397v197l457 336v-277l-224 -153l224 -176v-277zM662 397v197l456 336v-277l-223 -153l223 -176v-277z" />
<glyph unicode="&#xac;" d="M117 487v246h893v-520h-246v274h-647z" />
<glyph unicode="&#xad;" horiz-adv-x="835" d="M115 420v250h606v-250h-606z" />
<glyph unicode="&#xae;" horiz-adv-x="1316" d="M94 891q0 250 160 414.5t407.5 164.5t404.5 -168.5t157 -416.5t-155 -413t-403.5 -165t-409.5 167t-161 417zM221 888.5q0 -188.5 127 -323.5t312.5 -135t310.5 134t125 323.5t-126 325t-311.5 135.5t-311.5 -135.5t-126...
<glyph unicode="&#xaf;" horiz-adv-x="548" d="M-10 1223v204h588v-204h-588z" />
<glyph unicode="&#xb0;" d="M266 1110q0 137 85 222t222.5 85t222.5 -85t85 -222t-85 -221t-222.5 -84t-222.5 84t-85 221zM420 1110q0 -70 42 -113t111.5 -43t113.5 43t44 113t-44 114t-113.5 44t-111.5 -44t-42 -114z" />
<glyph unicode="&#xb1;" d="M102 39v246h942v-246h-942zM102 553v246h347v221h245v-221h350v-246h-350v-205h-245v205h-347z" />
<glyph unicode="&#xb2;" horiz-adv-x="573" d="M43 979v184l150 121q94 76 94 117q0 31 -76 31l-156 -13l-8 203q150 18 258.5 18t159.5 -47t51 -136t-26.5 -135t-88.5 -91l-77 -57h192v-195h-473z" />
<glyph unicode="&#xb3;" horiz-adv-x="573" d="M41 973l12 190q125 -12 188.5 -12t63.5 33q0 29 -53 28h-135v174h131q41 0 41 30t-56 30l-172 -10l-12 186q139 18 221 18q248 0 248 -182q0 -109 -59 -143q72 -31 71 -144q0 -215 -241 -215z" />
<glyph unicode="&#xb4;" horiz-adv-x="548" d="M10 1333l516 209l82 -235l-536 -152z" />
<glyph unicode="&#xb5;" d="M129 -430v1454h274v-592q2 -119 29 -165t115 -46q90 0 170 29l26 8v766h275v-1024h-273v57q-147 -82 -256 -82q-47 0 -86 7v-412h-274z" />
<glyph unicode="&#xb6;" horiz-adv-x="1226" d="M57 987q0 178 106.5 292t278.5 114h678v-234h-73v-1159h-234v1159h-127v-1159h-233v586h-15q-172 0 -276.5 111.5t-104.5 289.5z" />
<glyph unicode="&#xb7;" horiz-adv-x="524" d="M115 342v340h295v-340h-295z" />
<glyph unicode="&#xb8;" horiz-adv-x="540" d="M61 -471l9 160q63 -2 98 -2q78 0 78 53q0 45 -78 45h-49v217h108v-78q131 -2 191.5 -39t60.5 -149.5t-59.5 -171t-167.5 -58.5q-90 0 -162 17z" />

share/public/javascripts/jstree/themes/proton/fonts/titillium/titilliumweb-extralight-webfont.svg  view on Meta::CPAN

<glyph unicode="&#xf4;" horiz-adv-x="1077" d="M123 514q0 299 94 413.5t321.5 114.5t321.5 -114.5t94 -413.5t-84 -415.5t-331.5 -116.5t-331.5 116.5t-84 415.5zM199 530q0 -145 10 -226t46 -145.5t102.5 -88t181 -23.5t181 23.5t102.5 88t46.5 145.5t10.5 226q0 258...
<glyph unicode="&#xf5;" horiz-adv-x="1077" d="M123 514q0 299 94 413.5t321.5 114.5t321.5 -114.5t94 -413.5t-84 -415.5t-331.5 -116.5t-331.5 116.5t-84 415.5zM199 530q0 -145 10 -226t46 -145.5t102.5 -88t181 -23.5t181 23.5t102.5 88t46.5 145.5t10.5 226q0 258...
<glyph unicode="&#xf6;" horiz-adv-x="1077" d="M123 514q0 299 94 413.5t321.5 114.5t321.5 -114.5t94 -413.5t-84 -415.5t-331.5 -116.5t-331.5 116.5t-84 415.5zM199 530q0 -145 10 -226t46 -145.5t102.5 -88t181 -23.5t181 23.5t102.5 88t46.5 145.5t10.5 226q0 258...
<glyph unicode="&#xf7;" d="M119 479v70h909v-70h-909zM535 80v164h77v-164h-77zM535 784v164h77v-164h-77z" />
<glyph unicode="&#xf8;" horiz-adv-x="1077" d="M123 557q0 256 94.5 370.5t321.5 114.5q109 0 176 -22l90 219l61 -22l-92 -220q94 -51 137 -162.5t43 -304.5q0 -315 -84 -431.5t-331 -116.5q-100 0 -172 18l-95 -233l-61 20l94 231q-104 47 -143 165t-39 374zM199 557...
<glyph unicode="&#xf9;" horiz-adv-x="1056" d="M152 492v532h71v-528q0 -270 49.5 -359.5t214.5 -89.5q82 0 166 25.5t127 50.5l43 27v874h72v-1024h-72v82q-18 -10 -49 -27.5t-120 -45t-167 -27.5q-205 0 -270 103t-65 407zM256 1436l33 63l393 -196l-31 -56z" />
<glyph unicode="&#xfa;" horiz-adv-x="1056" d="M152 492v532h71v-528q0 -270 49.5 -359.5t214.5 -89.5q82 0 185.5 34t150.5 69v874h72v-1024h-72v82l-45 -25q-45 -27 -129 -51t-162 -24q-205 0 -270 103t-65 407zM352 1303l393 196l33 -63l-395 -189z" />
<glyph unicode="&#xfb;" horiz-adv-x="1056" d="M152 492v532h71v-528q0 -270 49.5 -359.5t214.5 -89.5q82 0 185.5 34t150.5 69v874h72v-1024h-72v82l-45 -25q-45 -27 -129 -51t-162 -24q-205 0 -270 103t-65 407zM248 1229l248 270h57l250 -270h-88l-189 205l-190 -20...
<glyph unicode="&#xfc;" horiz-adv-x="1056" d="M152 492v532h71v-528q0 -270 49.5 -359.5t214.5 -89.5q82 0 185.5 34t150.5 69v874h72v-1024h-72v82l-45 -25q-45 -27 -129 -51t-162 -24q-205 0 -270 103t-65 407zM305 1307v127h72v-127h-72zM694 1307v127h72v-127h-72...
<glyph unicode="&#xfd;" horiz-adv-x="964" d="M63 1024h76l301 -958h84l303 958h76l-469 -1495h-76l148 471h-125zM358 1303l394 196l32 -63l-395 -189z" />
<glyph unicode="&#xfe;" horiz-adv-x="1054" d="M162 -471v1966h71v-534q170 82 362.5 81.5t265.5 -116t73 -404.5t-96.5 -414.5t-370.5 -125.5l-234 12v-465h-71zM233 59q160 -12 259.5 -12t178.5 27.5t119.5 93t54 147.5t13.5 215q0 244 -54 345.5t-218 101.5q-82 0 -...
<glyph unicode="&#xff;" horiz-adv-x="964" d="M63 1024h76l301 -958h84l303 958h76l-469 -1495h-76l148 471h-125zM248 1307v127h71v-127h-71zM637 1307v127h72v-127h-72z" />
<glyph unicode="&#x152;" horiz-adv-x="1925" d="M133 706.5q0 186.5 24.5 316.5t84.5 230q119 199 440 199q207 0 322 -18h817v-74h-744v-586h621v-74h-621v-626h744v-76h-815q-172 -16 -330 -16t-266.5 45t-169 142t-84 224t-23.5 313.5zM211 710q0 -173 18.5 -286t68...
<glyph unicode="&#x153;" horiz-adv-x="1787" d="M123 518q0 299 95 411.5t325 112.5q299 0 377 -245q90 246 372 245q195 0 292 -116.5t97 -374.5v-68h-727q0 -221 70 -328.5t231.5 -107.5t321.5 14l61 5l4 -66q-229 -18 -378 -18q-266 0 -346 219q-37 -115 -125 -167t...
<glyph unicode="&#x178;" horiz-adv-x="1077" d="M35 1434h86l418 -736l417 736h86l-467 -818v-616h-73v616zM301 1716v127h72v-127h-72zM702 1716v127h72v-127h-72z" />
<glyph unicode="&#x2c6;" horiz-adv-x="440" d="M-31 1229l248 270h57l250 -270h-88l-188 205l-191 -205h-88z" />
<glyph unicode="&#x2dc;" horiz-adv-x="440" d="M-72 1368q100 96 168 96q43 0 157 -54t136 -54q43 0 111 61l24 23l19 -62q-86 -88 -139.5 -88t-167 55.5t-138.5 55.5q-45 0 -123 -70l-26 -22z" />
<glyph unicode="&#x2000;" horiz-adv-x="956" />
<glyph unicode="&#x2001;" horiz-adv-x="1913" />
<glyph unicode="&#x2002;" horiz-adv-x="956" />
<glyph unicode="&#x2003;" horiz-adv-x="1913" />

share/public/javascripts/jstree/themes/proton/fonts/titillium/titilliumweb-regular-webfont.svg  view on Meta::CPAN

<glyph unicode="&#x09;" horiz-adv-x="450" />
<glyph unicode="&#xa0;" horiz-adv-x="450" />
<glyph unicode="!" horiz-adv-x="505" d="M170 0v229h168v-229h-168zM172 1417h162l-10 -950h-142z" />
<glyph unicode="&#x22;" horiz-adv-x="763" d="M135 1417h154l-8 -454h-138zM475 1417h154l-8 -454h-138z" />
<glyph unicode="#" d="M49 356v131h227v381h-227v131h227v365h140v-365h315v365h139v-365h228v-131h-228v-381h228v-131h-228v-356h-139v356h-315v-356h-140v356h-227zM416 487h315v381h-315v-381z" />
<glyph unicode="$" d="M141 1010q0 362 434 362q31 0 48 -2l34 264h105l-35 -270l256 -31l-12 -127q-141 16 -260 27l-62 -477q199 -47 281 -121t82 -238q0 -416 -432 -415h-31l-29 -236q-104 6 -104 14l28 228l-292 37l16 125q158 -23 293 -31l67 512q-209 49 -298 126...
<glyph unicode="%" d="M57 1090q0 282 225.5 282t225.5 -282q0 -145 -59.5 -217t-166 -72t-166 71.5t-59.5 217.5zM182 1090q0 -184 101.5 -184.5t101.5 184.5q0 92 -23.5 135t-78 43t-78 -43t-23.5 -135zM317 -8l420 1403l99 -33l-420 -1399zM641 270q0 281 224.5 281t...
<glyph unicode="&#x26;" horiz-adv-x="1409" d="M86 396.5q0 195.5 75 286.5t242 146q-72 82 -94 145.5t-22 160.5q0 137 94 219t266 82t261 -82t89 -226.5t-71.5 -227.5t-243.5 -163l311 -307q45 131 58 332l149 -2q-27 -256 -94 -426l264 -250l-92 -102l-248 231q-141...
<glyph unicode="'" horiz-adv-x="425" d="M137 1417h154l-10 -454h-138z" />
<glyph unicode="(" horiz-adv-x="540" d="M104 616q0 197 53.5 427.5t106.5 361.5l53 131h148q-72 -188 -133.5 -465.5t-61.5 -453t49.5 -393.5t98.5 -349l47 -131h-148q-213 479 -213 872z" />
<glyph unicode=")" horiz-adv-x="540" d="M76 -256q70 164 132 431t62 442.5t-48 404.5t-97 371l-49 143h147q136 -305 191 -653q23 -143 22.5 -303t-53.5 -378t-107 -337l-53 -121h-147z" />
<glyph unicode="*" horiz-adv-x="860" d="M111 938l221 162l-217 157l63 86l217 -159l84 258l101 -33l-82 -260h266v-102h-270l84 -256l-101 -31l-84 258l-219 -162z" />
<glyph unicode="+" d="M113 444v140h387v399h143v-399h391v-140h-391v-403h-143v403h-387z" />
<glyph unicode="," horiz-adv-x="456" d="M70 -252l94 471h170l-137 -471h-127z" />
<glyph unicode="-" horiz-adv-x="897" d="M139 492v143h621v-143h-621z" />
<glyph unicode="." horiz-adv-x="442" d="M137 0v233h168v-233h-168z" />
<glyph unicode="/" horiz-adv-x="843" d="M66 20l577 1430l137 -51l-577 -1428z" />
<glyph unicode="0" d="M80 667q0 386 121.5 546.5t369.5 160.5q168 0 273 -63q221 -131 221 -656q0 -371 -123 -523t-368.5 -152t-369.5 150.5t-124 536.5zM244 653q0 -303 79.5 -418.5t249.5 -115.5t250 116.5t80 433t-77 440.5t-253 124q-117 0 -184 -49q-145 -100 -1...
<glyph unicode="1" d="M219 1065l430 287h148v-1352h-158v1176l-348 -230z" />
<glyph unicode="2" d="M141 0v133l396 416q102 106 149 161.5t85 131.5t38 151q0 131 -71.5 184.5t-223.5 53.5q-133 0 -297 -35l-53 -10l-12 131q195 55 401.5 55t312 -87t105.5 -275q0 -143 -63.5 -250t-219.5 -256l-360 -367h678v-137h-865z" />
<glyph unicode="3" d="M127 35l14 129q221 -45 414 -45q293 2 293 262q0 244 -279 254h-272v135h272q86 0 166 68.5t80 181.5t-63.5 163t-212.5 50q-164 0 -324 -31l-53 -10l-15 125q193 57 413 57t318.5 -84t98.5 -268q0 -94 -25.5 -136t-41 -64.5t-40.5 -43.5q-45 -35...

share/public/javascripts/jstree/themes/proton/fonts/titillium/titilliumweb-regular-webfont.svg  view on Meta::CPAN

<glyph unicode="I" horiz-adv-x="503" d="M174 0v1417h158v-1417h-158z" />
<glyph unicode="J" horiz-adv-x="591" d="M37 -6q147 0 189 36t42 187v1200h156l2 -1222q0 -172 -57 -252q-47 -68 -187 -84q-55 -6 -145 -6v141z" />
<glyph unicode="K" horiz-adv-x="1165" d="M174 0v1417h158v-659l233 8l363 651h180l-406 -712l428 -705h-186l-377 627l-235 -9v-618h-158z" />
<glyph unicode="L" horiz-adv-x="980" d="M174 0v1417h158v-1276h622v-141h-780z" />
<glyph unicode="M" horiz-adv-x="1720" d="M174 0v1417h285l401 -1198l402 1198h284v-1417h-157v1249h-29l-412 -1198h-176l-412 1198h-28v-1249h-158z" />
<glyph unicode="N" horiz-adv-x="1384" d="M174 0v1417h295l543 -1278h43v1278h155v-1417h-288l-551 1278h-39v-1278h-158z" />
<glyph unicode="O" horiz-adv-x="1351" d="M117 701.5q0 373.5 122.5 555t436 181.5t437.5 -180.5t124 -559.5t-121 -548.5t-439.5 -169.5t-439 174t-120.5 547.5zM279 702.5q0 -311.5 81.5 -447.5t316 -136t315.5 133t81 446.5t-84 456.5t-314.5 143t-313 -142t-82.5 -...
<glyph unicode="P" horiz-adv-x="1214" d="M174 0v1417h518q231 0 342 -112.5t111 -343.5q0 -484 -453 -484h-360v-477h-158zM332 616h358q293 0 293 345q0 164 -69.5 240.5t-223.5 76.5h-358v-662z" />
<glyph unicode="Q" horiz-adv-x="1351" d="M117 701.5q0 373.5 122.5 555t436 181.5t437.5 -180.5t124 -555.5q0 -260 -53.5 -416.5t-182.5 -232.5l175 -280l-148 -70l-180 295q-68 -18 -172 -18q-317 0 -438 174t-121 547.5zM279 702.5q0 -311.5 81.5 -447.5t316 -136t...
<glyph unicode="R" horiz-adv-x="1261" d="M174 0v1417h524q225 0 339 -104.5t114 -325.5q0 -328 -260 -412l272 -575h-174l-256 543h-401v-543h-158zM332 682h368q289 0 289 298t-291 298h-366v-596z" />
<glyph unicode="S" horiz-adv-x="1110" d="M98 1059q0 381 457 381q150 0 358 -31l70 -10l-14 -133q-285 34 -404 34q-307 0 -307 -231q0 -129 70.5 -177t286.5 -96t306.5 -125t90.5 -253q0 -436 -453 -436q-150 0 -375 34l-73 11l16 131q279 -37 424 -37q303 0 303 285...
<glyph unicode="T" horiz-adv-x="1077" d="M27 1276v141h1024v-141h-433v-1276h-155v1276h-436z" />
<glyph unicode="U" horiz-adv-x="1318" d="M164 430v987h158v-991q0 -307 331 -307q172 0 259 72.5t87 234.5v991h156v-987q0 -238 -126 -344t-371.5 -106t-369.5 106.5t-124 343.5z" />
<glyph unicode="V" horiz-adv-x="1191" d="M49 1417h164l326 -1278h114l326 1278h164l-371 -1417h-352z" />
<glyph unicode="W" horiz-adv-x="1814" d="M61 1417h164l242 -1278h59l289 1266h184l289 -1266h60l241 1278h162l-287 -1417h-288l-269 1210l-268 -1210h-289z" />
<glyph unicode="X" horiz-adv-x="1142" d="M39 0l438 694l-438 723h178l358 -606l361 606h170l-436 -719l436 -698h-178l-357 588l-362 -588h-170z" />
<glyph unicode="Y" horiz-adv-x="1101" d="M20 1417h179l352 -663l352 663h178l-450 -821v-596h-158v596z" />
<glyph unicode="Z" horiz-adv-x="1097" d="M88 -2v182l739 1053v45h-739v139h922v-184l-742 -1053v-41h742v-141h-922z" />
<glyph unicode="[" horiz-adv-x="673" d="M162 -252v1786h430v-137h-275v-1512h275v-137h-430z" />
<glyph unicode="\" horiz-adv-x="892" d="M61 1389l138 59l630 -1419l-137 -58z" />
<glyph unicode="]" horiz-adv-x="673" d="M82 -115h274v1512h-274v137h430v-1786h-430v137z" />

share/public/javascripts/jstree/themes/proton/fonts/titillium/titilliumweb-regular-webfont.svg  view on Meta::CPAN

<glyph unicode="&#xdc;" horiz-adv-x="1318" d="M164 430v987h158v-991q0 -307 331 -307q172 0 259 72.5t87 234.5v991h156v-987q0 -238 -126 -344t-371.5 -106t-369.5 106.5t-124 343.5zM377 1655v184h149v-184h-149zM795 1655v184h147v-184h-147z" />
<glyph unicode="&#xdd;" horiz-adv-x="1101" d="M20 1417h179l352 -663l352 663h178l-450 -821v-596h-158v596zM342 1702l442 205l54 -135l-449 -179z" />
<glyph unicode="&#xde;" horiz-adv-x="1226" d="M174 0v1425h158v-229h360q231 0 343 -112.5t112 -347t-114 -361.5t-341 -127h-360v-248h-158zM332 399h358q295 0 295 340q0 160 -70.5 232.5t-224.5 72.5h-358v-645z" />
<glyph unicode="&#xdf;" horiz-adv-x="1175" d="M147 0v1116q0 207 93.5 291t306.5 84t306 -69.5t93 -225.5q0 -109 -39 -167t-120.5 -94t-105.5 -54.5t-24 -50t34 -58.5t167 -92.5t189.5 -131t56.5 -186.5q0 -209 -93 -295.5t-319 -86.5q-102 0 -225 22l-43 8l6 129q17...
<glyph unicode="&#xe0;" horiz-adv-x="1026" d="M82 288.5q0 149.5 75.5 220.5t237.5 87l322 31v88q0 104 -45 149t-123 45q-164 0 -340 -20l-64 -6l-6 116q225 45 399.5 45t253 -79.5t78.5 -249.5v-525q6 -76 119 -90l-6 -120q-162 0 -244 81q-184 -82 -368 -81q-141 0...
<glyph unicode="&#xe1;" horiz-adv-x="1026" d="M82 288.5q0 149.5 75.5 220.5t237.5 87l322 31v88q0 104 -45 149t-123 45q-164 0 -340 -20l-64 -6l-6 116q225 45 399.5 45t253 -79.5t78.5 -249.5v-525q6 -76 119 -90l-6 -120q-162 0 -244 81q-184 -82 -368 -81q-141 0...
<glyph unicode="&#xe2;" horiz-adv-x="1026" d="M82 288.5q0 149.5 75.5 220.5t237.5 87l322 31v88q0 104 -45 149t-123 45q-164 0 -340 -20l-64 -6l-6 116q225 45 399.5 45t253 -79.5t78.5 -249.5v-525q6 -76 119 -90l-6 -120q-162 0 -244 81q-184 -82 -368 -81q-141 0...
<glyph unicode="&#xe3;" horiz-adv-x="1026" d="M82 288.5q0 149.5 75.5 220.5t237.5 87l322 31v88q0 104 -45 149t-123 45q-164 0 -340 -20l-64 -6l-6 116q225 45 399.5 45t253 -79.5t78.5 -249.5v-525q6 -76 119 -90l-6 -120q-162 0 -244 81q-184 -82 -368 -81q-141 0...
<glyph unicode="&#xe4;" horiz-adv-x="1026" d="M82 288.5q0 149.5 75.5 220.5t237.5 87l322 31v88q0 104 -45 149t-123 45q-164 0 -340 -20l-64 -6l-6 116q225 45 399.5 45t253 -79.5t78.5 -249.5v-525q6 -76 119 -90l-6 -120q-162 0 -244 81q-184 -82 -368 -81q-141 0...
<glyph unicode="&#xe5;" horiz-adv-x="1026" d="M82 288.5q0 149.5 75.5 220.5t237.5 87l322 31v88q0 104 -45 149t-123 45q-164 0 -340 -20l-64 -6l-6 116q225 45 399.5 45t253 -79.5t78.5 -249.5v-525q6 -76 119 -90l-6 -120q-162 0 -244 81q-184 -82 -368 -81q-141 0...
<glyph unicode="&#xe6;" horiz-adv-x="1646" d="M82 299q0 158 84 220.5t287 82.5l264 25v84q0 186 -178 186q-135 0 -326 -16l-63 -4l-7 137q244 31 404 30q209 0 276 -149q98 150 312.5 149.5t316.5 -116t102 -363.5l-8 -119h-676q0 -168 61.5 -247.5t187.5 -79.5t335...
<glyph unicode="&#xe7;" horiz-adv-x="892" d="M104 532.5q0 276.5 98.5 394t327.5 117.5q68 0 230 -24l49 -6l-6 -125q-164 18 -242 18q-174 0 -236.5 -83t-62.5 -307t58.5 -312t242.5 -88l242 18l6 -127q-190 -29 -285 -28h-16v-80q121 0 174 -33t53 -127q0 -184 -190...
<glyph unicode="&#xe8;" horiz-adv-x="1034" d="M102 506q0 539 428 538q207 0 309.5 -115.5t102.5 -363.5l-8 -116h-676q0 -170 61.5 -252t214 -82t310.5 12l59 6l4 -121q-233 -33 -399 -32q-221 0 -313.5 128t-92.5 398zM248 1386l53 132l442 -201l-43 -105zM256 571h...
<glyph unicode="&#xe9;" horiz-adv-x="1034" d="M102 506q0 539 428 538q207 0 309.5 -115.5t102.5 -363.5l-8 -116h-676q0 -170 61.5 -252t214 -82t310.5 12l59 6l4 -121q-233 -33 -399 -32q-221 0 -313.5 128t-92.5 398zM256 571h532q0 188 -60 266t-196.5 78t-205 -8...
<glyph unicode="&#xea;" horiz-adv-x="1034" d="M102 506q0 539 428 538q207 0 309.5 -115.5t102.5 -363.5l-8 -116h-676q0 -170 61.5 -252t214 -82t310.5 12l59 6l4 -121q-233 -33 -399 -32q-221 0 -313.5 128t-92.5 398zM229 1212l252 287h105l254 -287h-154l-149 179...
<glyph unicode="&#xeb;" horiz-adv-x="1034" d="M102 506q0 539 428 538q207 0 309.5 -115.5t102.5 -363.5l-8 -116h-676q0 -170 61.5 -252t214 -82t310.5 12l59 6l4 -121q-233 -33 -399 -32q-221 0 -313.5 128t-92.5 398zM246 1272v184h147v-184h-147zM256 571h532q0 1...
<glyph unicode="&#xec;" horiz-adv-x="448" d="M-123 1384l53 132l443 -201l-43 -105zM147 0v1024h154v-1024h-154z" />
<glyph unicode="&#xed;" horiz-adv-x="448" d="M78 1315l442 201l53 -132l-452 -174zM147 0v1024h154v-1024h-154z" />
<glyph unicode="&#xee;" horiz-adv-x="448" d="M-86 1212l252 287h104l254 -287h-153l-150 179l-153 -179h-154zM147 0v1024h154v-1024h-154z" />
<glyph unicode="&#xef;" horiz-adv-x="448" d="M-63 1272v184h147v-184h-147zM147 0v1024h154v-1024h-154zM346 1272v184h150v-184h-150z" />
<glyph unicode="&#xf0;" horiz-adv-x="1122" d="M86 429q0 212 112.5 332t317.5 120q133 0 287 -56l51 -18q-14 266 -281 424l-249 -166l-68 96l195 131q-111 47 -254 84l30 115q205 -41 355 -111l206 140l70 -97l-158 -106q315 -201 315.5 -597t-110 -567t-362.5 -171q...

share/public/swagger-ui/swagger-ui-bundle.js  view on Meta::CPAN

/*! For license information please see swagger-ui-bundle.js.LICENSE.txt */
!function webpackUniversalModuleDefinition(s,o){"object"==typeof exports&&"object"==typeof module?module.exports=o():"function"==typeof define&&define.amd?define([],o):"object"==typeof exports?exports.SwaggerUIBundle=o():s.SwaggerUIBundle=o()}(this,(...

share/public/swagger-ui/swagger-ui.css  view on Meta::CPAN

.swagger-ui{color:#3b4151;container-name:swagger-ui;container-type:inline-size;/*! normalize.css v7.0.0 | MIT License | github.com/necolas/normalize.css */font-family:sans-serif}.swagger-ui html{line-height:1.15;-ms-text-size-adjust:100%;-webkit-text...

/*# sourceMappingURL=swagger-ui.css.map*/

share/public/swagger-ui/swagger-ui.css.map  view on Meta::CPAN

{"version":3,"file":"swagger-ui.css","mappings":"AAAA,YCII,aCcU,CFfd,yBACE,2BACA,4EGEF,CFJE,sBEIF,CDWc,iCCCZ,0BACA,8BACA,kBAUF,QACE,iHAOF,aAME,gBAQF,aACE,eACA,4DAWF,aAGE,oBAOF,eACE,gBAQF,sBACE,SACA,iBACA,iBAQF,+BACE,cACA,eAWF,4BACE,qCACA,yBAQF,kBACE,...

xt/lib/Test/Netdisco/Snapshot.pm  view on Meta::CPAN


=cut

sub render_template {
  my $view = shift;
  my $engine = _engine();
  my $out = '';
  # Templates read empty values from the stash; that is expected here and the
  # resulting numeric warnings are noise, not signal.
  local $SIG{__WARN__} = sub { };
  # Mirrors lib/App/Netdisco/Web.pm:404, which the application sets before
  # every render so settings._foo keys resolve instead of being hidden by
  # Template::Stash's leading-underscore filter. This must run after the
  # _engine() call above: that call is what first loads Template::Stash and
  # assigns its qr/^[_.]/ default, so setting this beforehand would only be
  # overwritten by that load. Localized to this one process() call so the
  # package global cannot leak into another subtest in this process.
  local $Template::Stash::PRIVATE = undef;
  if ($engine->process($view, stash_for($view), \$out)) {
    return ($out, undef);
  }



( run in 1.904 second using v1.01-cache-2.11-cpan-744e820c463 )