The Perl Toolchain Summit needs more sponsors. If your company depends on Perl, please support this very important event.
<table class="table table-bordered table-striped">
  <thead>
    <tr>
      <th></th>
      [% FOREACH item IN vars.port_columns %]
      [% NEXT IF item.name == 'c_admin' %]
      [% NEXT IF item.name == 'c_nodes' AND params.c_nodes AND params.c_neighbors %]
        [% NEXT UNLESS params.${item.name} %]
        <th[% ' class="nd_nudge-for-icon"' IF
          (vars.user.port_control AND params.c_admin AND (item.name == 'c_port' OR item.name == 'c_name')) %]>
          [% item.label | html_entity %]
        </th>
      [% END %]
    </tr>
  </thead>
  </tbody>
    [% FOREACH row IN results %]
    <tr>
      <td>
        [% IF row.up_admin == 'down' %]
        <span class="label">S</span>
        [% ELSIF row.stp == 'blocking' %]
        <span class="label label-info">B</span>
        [% ELSIF params.free OR row.is_free %]
        <span class="label label-success">F</span>
        [% ELSIF row.up_admin == 'up' AND row.up == 'down' %]
        <span class="label label-warning">D</span>
        [% END %]
      </td>

      [% FOREACH config IN settings._extra_device_port_cols %]
        [% NEXT UNLESS config.position == 'left' AND params.${config.name} %]
        <td>
          [% TRY %]
          [% INCLUDE "plugin/${config.name}/device_port_column.tt" %]
          [% CATCH %]
          <!-- dummy content required by Template Toolkit TRY -->
          [% END %]
        </td>
      [% END %]

      [% IF params.c_port %]
      [% IF vars.user.port_control AND params.c_admin %]
      [% IF row.up_admin == 'up' %]
      <td nowrap class="nd_editable-cell" data-action="down"
        data-field="c_port" data-for-device="[% device.ip | html_entity %]" data-for-port="[% row.port | html_entity %]">
        <i class="icon-hand-down nd_hand-icon"
          rel="tooltip" data-placement="top" data-offset="3"
          data-animation="" data-title="Click to Disable"></i>
      [% ELSE %]
      <td nowrap class="nd_editable-cell" data-action="up"
        data-field="c_port" data-for-device="[% device.ip | html_entity %]" data-for-port="[% row.port | html_entity %]">
        <i class="icon-hand-up nd_hand-icon"
          rel="tooltip" data-placement="top" data-offset="3"
          data-animation="" data-title="Click to Enable"></i>
      [% END %]
      [% ELSE %]
      <td nowrap>
      [% END %]
        <a class="nd_linkcell nd_this-port-only" href="[% uri_for('/device',
            self_options) %]&q=[% params.q | uri %]&f=[% row.port | uri %]">
        [% row.port | html_entity %]
      </a></td>
      [% END %]

      [% FOREACH config IN settings._extra_device_port_cols %]
        [% NEXT UNLESS config.position == 'mid' AND params.${config.name} %]
        <td>
          [% TRY %]
          [% INCLUDE "plugin/${config.name}/device_port_column.tt" %]
          [% CATCH %]
          <!-- dummy content required by Template Toolkit TRY -->
          [% END %]
        </td>
      [% END %]

      [% IF params.c_descr %]
      <td nowrap>[% row.descr | html_entity %]</td>
      [% END %]

      [% IF params.c_type %]
      <td>[% row.type | html_entity %]</td>
      [% END %]

      [% IF params.c_duplex %]
      <td>
        [% IF row.up == 'up' AND row.duplex %]
        [% row.duplex_admin.ucfirst | html_entity %] / [% row.duplex.ucfirst | html_entity %]
        [% END %]
      </td>
      [% END %]

      [% IF params.c_lastchange %]
      <td>[% row.lastchange_stamp | html_entity %]</td>
      [% END %]

      [% IF params.c_name %]
      [% IF vars.user.port_control AND params.c_admin %]
      <td nowrap class="nd_editable-cell" contenteditable="true"
          data-field="c_name" data-for-device="[% device.ip | html_entity %]" data-for-port="[% row.port | html_entity %]">
      <i class="icon-edit nd_edit-icon"></i>
      [% ELSE %]
      <td nowrap>
      [% END %]
      <div class="nd_editable-cell-content">
        [% row.name | html_entity %]
      </div>
      </td>
      [% END %]

      [% IF params.c_speed %]
      <td>[% row.speed | html_entity %]</td>
      [% END %]

      [% IF params.c_mac %]
      <td>[% row.mac | html_entity %]</td>
      [% END %]

      [% IF params.c_mtu %]
      <td>[% row.mtu | html_entity %]</td>
      [% END %]

      [% IF params.c_vlan %]
      [% IF vars.user.port_control AND params.c_admin %]
      <td class="nd_editable-cell" contenteditable="true"
        data-field="c_vlan" data-for-device="[% device.ip | html_entity %]" data-for-port="[% row.port | html_entity %]">
      <i class="icon-edit nd_edit-icon"></i>
      <div class="nd_editable-cell-content">
        [% IF row.vlan %][% row.vlan | html_entity %][% END %]
      </div>
      </td>
      [% ELSE %]
      <td>
        <a class="nd_linkcell"
          href="[% uri_for('/search') %]?tab=vlan&q=[% row.vlan | uri %]">
            [% row.vlan | html_entity %]</a>
      </td>
      [% END %]
      [% END %]

      [% IF params.c_vmember %]
      <td>
        [% IF row.tagged_vlans_count %]
        [% SET output = '' %]
        [% FOREACH vlan IN row.tagged_vlans %]
          [% SET output = output _
            '<a href="' _ uri_for('/search') _ '?tab=vlan&q=' _ vlan.vlan _ '">' _ vlan.vlan _ '</a>' %]
          [% SET output = output _ ', ' IF NOT loop.last %]
        [% END %]
        [% IF row.tagged_vlans_count > 10 %] [%# TODO make this a settable variable %]
          [% SET output = '<div class="nd_vlan-total">(' _ row.tagged_vlans_count
            _ ')</div><span class="nd_linkcell nd_collapse-vlans">
              <div class="nd_arrow-up-down-left icon-chevron-up icon-large"></div>Show VLANs</span>
              <div class="nd_collapsing nd_collapse-pre-hidden">' _ output %]
          [% SET output = output _ '</div>' %]
        [% END %]
        [% output %]
        [% END %]
      </td>
      [% END %]

      [% IF params.c_power %]
        [% IF row.power %]
          [% IF row.power.admin == 'true' %]
            [% IF vars.user.port_control AND params.c_admin %]
              <td nowrap data-action="false"
                data-field="c_power" data-for-device="[% device.ip | html_entity %]"
                data-for-port="[% row.port | html_entity %]">

                <i class="icon-off nd_power-icon nd_power-on"
                  rel="tooltip" data-placement="top" data-offset="3"
                  data-animation="" data-title="Click to Disable"></i>
            [% ELSE %]
              <td nowrap>
                <i class="icon-off nd_power-on"></i>
            [% END %]
                <span>
                [% IF row.power.power > 0 %]
                  [% row.power.power | html_entity %]&nbsp;mW
                [% ELSE %]
                  ([% row.power.status | html_entity %])
                [% END %]
                </span>
          [% ELSE %]
            [% IF vars.user.port_control AND params.c_admin %]
              <td nowrap data-action="true"
                data-field="c_power" data-for-device="[% device.ip | html_entity %]"
                data-for-port="[% row.port | html_entity %]">

                <i class="icon-off nd_power-icon"
                  rel="tooltip" data-placement="top" data-offset="3"
                  data-animation="" data-title="Click to Enable"></i>
            [% ELSE %]
              <td>
                <i class="icon-off"></i>
            [% END %]
          [% END %]
              </td>
        [% ELSE %]
          <td></td>
        [% END %]
      [% END %]

      [% IF params.c_nodes OR params.c_neighbors %]
      <td>
        [% IF params.c_neighbors AND (row.remote_ip OR row.is_uplink) %]
          [% IF row.neighbor %]
          <a href="[% uri_for('/device',
                self_options) %]&q=[% row.neighbor.dns || row.neighbor.ip | uri %]&f=[% row.remote_port | uri %]">
            [% row.neighbor.dns.remove(settings.domain_suffix) || row.neighbor.ip | html_entity %]
            ([% row.remote_port | html_entity %])</a>
          [% ELSIF row.remote_ip AND row.remote_port %]
          <span class="label label-important">N</span>
          <a href="[% search_node %]&q=[% row.remote_ip | uri %]">
            [% row.remote_ip | html_entity %] (port: [% row.remote_port | html_entity %]
            [% ' id: '_ row.remote_id IF row.remote_id %]
            [% ' type: '_ row.remote_type IF row.remote_type %])</a>
          [% ELSE %]
          <span class="label label-important">N</span> (possible uplink)
          [% END %]
        [% END %]
        [% IF params.c_nodes %]
        [% FOREACH node IN row.$nodes %]
          [% '<br/>' IF (row.remote_ip OR row.is_uplink) OR NOT loop.first %]
          [% '<span class="label label-warning">A</span> &nbsp;' IF NOT node.active %]
          <a href="[% search_node %]&q=[% node.net_mac.$mac_format_call | uri %]">
            [% node.net_mac.$mac_format_call | html_entity %]</a>
          [% ' (' _ node.time_last_age _ ')' IF params.n_age %]
          [% IF params.n_ip %]
            [% FOREACH ip IN node.ips %]
            <br/>&nbsp; [% '<span class="label label-warning">A</span> &nbsp;' IF NOT ip.active %]
              [% SET dns = ip.dns %]
              [% IF dns %]
              <a href="[% search_node %]&q=[% ip.ip | uri %]">[% dns %] ([% ip.ip | html_entity %])</a>
              [% ELSE %]
              <a href="[% search_node %]&q=[% ip.ip | uri %]">[% ip.ip | html_entity %]</a>
              [% END %]
            [% END %]
          [% END %]
        [% END %]
        [% END %]
      </td>
      [% END %]

      [% IF params.c_stp %]
      <td>[% row.stp | html_entity %]</td>
      [% END %]

      [% IF params.c_up %]
      <td>
        [% row.up_admin.ucfirst | html_entity %] / [% row.up.ucfirst | html_entity %]
      </td>
      [% END %]

      [% FOREACH config IN settings._extra_device_port_cols %]
        [% NEXT UNLESS config.position == 'right' AND params.${config.name} %]
        <td>
          [% TRY %]
          [% INCLUDE "plugin/${config.name}/device_port_column.tt" %]
          [% CATCH %]
          <!-- dummy content required by Template Toolkit TRY -->
          [% END %]
        </td>
      [% END %]
    </tr>
    [% END %]
  </tbody>
</table>