template_code.py 26 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208209210211212213214215216217218219220221222223224225226227228229230231232233234235236237238239240241242243244245246247248249250251252253254255256257258259260261262263264265266267268269270271272273274275276277278279280281282283284285286287288289290291292293294295296297298299300301302303304305306307308309310311312313314315316317318319320321322323324325326327328329330331332333334335336337338339340341342343344345346347348349350351352353354355356357358359360361362363364365366367368369370371372373374375376377378379380381
  1. LINKTERMINATION = """
  2. {% for termination in value %}
  3. <a href="{{ termination.get_absolute_url }}">{{ termination }}</a>{% if not forloop.last %},{% endif %}
  4. {% empty %}
  5. {{ ''|placeholder }}
  6. {% endfor %}
  7. """
  8. CABLE_LENGTH = """
  9. {% load helpers %}
  10. {% if record.length %}{{ record.length|simplify_decimal }} {{ record.length_unit }}{% endif %}
  11. """
  12. DEVICE_LINK = """
  13. <a href="{% url 'dcim:device' pk=record.pk %}">
  14. {{ record.name|default:'<span class="badge bg-info">Unnamed device</span>' }}
  15. </a>
  16. """
  17. DEVICEBAY_STATUS = """
  18. {% if record.installed_device_id %}
  19. <span class="badge bg-{{ record.installed_device.get_status_color }}">
  20. {{ record.installed_device.get_status_display }}
  21. </span>
  22. {% else %}
  23. <span class="badge bg-secondary">Vacant</span>
  24. {% endif %}
  25. """
  26. INTERFACE_IPADDRESSES = """
  27. <div class="table-badge-group">
  28. {% for ip in record.ip_addresses.all %}
  29. {% if ip.status != 'active' %}
  30. <a href="{{ ip.get_absolute_url }}" class="table-badge badge bg-{{ ip.get_status_color }}" data-bs-toggle="tooltip" data-bs-placement="left" title="{{ ip.get_status_display }}">{{ ip }}</a>
  31. {% else %}
  32. <a href="{{ ip.get_absolute_url }}" class="table-badge">{{ ip }}</a>
  33. {% endif %}
  34. {% endfor %}
  35. </div>
  36. """
  37. INTERFACE_FHRPGROUPS = """
  38. <div class="table-badge-group">
  39. {% for assignment in value.all %}
  40. <a href="{{ assignment.group.get_absolute_url }}">{{ assignment.group.get_protocol_display }}: {{ assignment.group.group_id }}</a>
  41. {% endfor %}
  42. </div>
  43. """
  44. INTERFACE_TAGGED_VLANS = """
  45. {% if record.mode == 'tagged' %}
  46. {% for vlan in record.tagged_vlans.all %}
  47. <a href="{{ vlan.get_absolute_url }}">{{ vlan }}</a><br />
  48. {% endfor %}
  49. {% elif record.mode == 'tagged-all' %}
  50. All
  51. {% endif %}
  52. """
  53. INTERFACE_WIRELESS_LANS = """
  54. {% for wlan in record.wireless_lans.all %}
  55. <a href="{{ wlan.get_absolute_url }}">{{ wlan }}</a><br />
  56. {% endfor %}
  57. """
  58. POWERFEED_CABLE = """
  59. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  60. <a href="{% url 'dcim:powerfeed_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace">
  61. <i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i>
  62. </a>
  63. """
  64. POWERFEED_CABLETERMINATION = """
  65. <a href="{{ value.parent_object.get_absolute_url }}">{{ value.parent_object }}</a>
  66. <i class="mdi mdi-chevron-right"></i>
  67. <a href="{{ value.get_absolute_url }}">{{ value }}</a>
  68. """
  69. LOCATION_BUTTONS = """
  70. <a href="{% url 'dcim:rack_elevation_list' %}?site={{ record.site.slug }}&location_id={{ record.pk }}" class="btn btn-sm btn-primary" title="View elevations">
  71. <i class="mdi mdi-server"></i>
  72. </a>
  73. """
  74. #
  75. # Device component templatebuttons
  76. #
  77. MODULAR_COMPONENT_TEMPLATE_BUTTONS = """
  78. {% load helpers %}
  79. {% if perms.dcim.add_inventoryitemtemplate %}
  80. <a href="{% url 'dcim:inventoryitemtemplate_add' %}?device_type={{ record.device_type_id }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={{ request.path }}" title="Add inventory item" class="btn btn-primary btn-sm">
  81. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  82. </a>
  83. {% endif %}
  84. """
  85. #
  86. # Device component buttons
  87. #
  88. CONSOLEPORT_BUTTONS = """
  89. {% if perms.dcim.add_inventoryitem %}
  90. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device.pk }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}" class="btn btn-sm btn-success" title="Add inventory item">
  91. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  92. </a>
  93. {% endif %}
  94. {% if record.cable %}
  95. <a href="{% url 'dcim:consoleport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  96. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  97. {% if perms.dcim.delete_cable %}
  98. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_consoleports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  99. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  100. </a>
  101. {% endif %}
  102. {% elif perms.dcim.add_cable %}
  103. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  104. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  105. <span class="dropdown">
  106. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  107. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  108. </button>
  109. <ul class="dropdown-menu dropdown-menu-end">
  110. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleserverport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Console Server Port</a></li>
  111. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleport&a_terminations={{ record.pk }}&b_terminations_type=dcim.frontport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Front Port</a></li>
  112. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleport&a_terminations={{ record.pk }}&b_terminations_type=dcim.rearport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleports' pk=object.pk %}">Rear Port</a></li>
  113. </ul>
  114. </span>
  115. {% else %}
  116. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  117. {% endif %}
  118. """
  119. CONSOLESERVERPORT_BUTTONS = """
  120. {% if perms.dcim.add_inventoryitem %}
  121. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device.pk }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" class="btn btn-sm btn-success" title="Add inventory item">
  122. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  123. </a>
  124. {% endif %}
  125. {% if record.cable %}
  126. <a href="{% url 'dcim:consoleserverport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  127. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  128. {% if perms.dcim.delete_cable %}
  129. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  130. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  131. </a>
  132. {% endif %}
  133. {% elif perms.dcim.add_cable %}
  134. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  135. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  136. <span class="dropdown">
  137. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  138. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  139. </button>
  140. <ul class="dropdown-menu dropdown-menu-end">
  141. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleserverport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Console Port</a></li>
  142. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleserverport&a_terminations={{ record.pk }}&b_terminations_type=dcim.frontport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Front Port</a></li>
  143. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.consoleserverport&a_terminations={{ record.pk }}&b_terminations_type=dcim.rearport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_consoleserverports' pk=object.pk %}">Rear Port</a></li>
  144. </ul>
  145. </span>
  146. {% else %}
  147. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  148. {% endif %}
  149. """
  150. POWERPORT_BUTTONS = """
  151. {% if perms.dcim.add_inventoryitem %}
  152. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device.pk }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_powerports' pk=object.pk %}" class="btn btn-sm btn-primary" title="Add inventory item">
  153. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  154. </a>
  155. {% endif %}
  156. {% if record.cable %}
  157. <a href="{% url 'dcim:powerport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  158. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  159. {% if perms.dcim.delete_cable %}
  160. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_powerports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  161. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  162. </a>
  163. {% endif %}
  164. {% elif perms.dcim.add_cable %}
  165. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  166. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  167. <span class="dropdown">
  168. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  169. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  170. </button>
  171. <ul class="dropdown-menu dropdown-menu-end">
  172. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.powerport&a_terminations={{ record.pk }}&b_terminations_type=dcim.poweroutlet&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_powerports' pk=object.pk %}">Power Outlet</a></li>
  173. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.powerport&a_terminations={{ record.pk }}&b_terminations_type=dcim.powerfeed&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_powerports' pk=object.pk %}">Power Feed</a></li>
  174. </ul>
  175. </span>
  176. {% else %}
  177. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  178. {% endif %}
  179. """
  180. POWEROUTLET_BUTTONS = """
  181. {% if perms.dcim.add_inventoryitem %}
  182. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device.pk }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" class="btn btn-sm btn-primary" title="Add inventory item">
  183. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  184. </a>
  185. {% endif %}
  186. {% if record.cable %}
  187. <a href="{% url 'dcim:poweroutlet_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  188. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  189. {% if perms.dcim.delete_cable %}
  190. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  191. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  192. </a>
  193. {% endif %}
  194. {% elif perms.dcim.add_cable %}
  195. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  196. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  197. {% if not record.mark_connected %}
  198. <a href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.poweroutlet&a_terminations={{ record.pk }}&b_terminations_type=dcim.powerport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_poweroutlets' pk=object.pk %}" title="Connect" class="btn btn-success btn-sm">
  199. <i class="mdi mdi-ethernet-cable" aria-hidden="true"></i>
  200. </a>
  201. {% else %}
  202. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  203. {% endif %}
  204. {% endif %}
  205. """
  206. INTERFACE_BUTTONS = """
  207. {% if perms.ipam.add_ipaddress or perms.dcim.add_inventoryitem %}
  208. <span class="dropdown">
  209. <button type="button" class="btn btn-primary btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="Add">
  210. <span class="mdi mdi-plus-thick" aria-hidden="true"></span>
  211. </button>
  212. <ul class="dropdown-menu dropdown-menu-end">
  213. {% if perms.ipam.add_ipaddress %}
  214. <li><a class="dropdown-item" href="{% url 'ipam:ipaddress_add' %}?interface={{ record.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">IP Address</a></li>
  215. {% endif %}
  216. {% if perms.dcim.add_inventoryitem %}
  217. <li><a class="dropdown-item" href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device.pk }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Inventory Item</a></li>
  218. {% endif %}
  219. </ul>
  220. </span>
  221. {% endif %}
  222. {% if record.link %}
  223. <a href="{% url 'dcim:interface_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  224. {% endif %}
  225. {% if record.cable %}
  226. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  227. {% if perms.dcim.delete_cable %}
  228. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  229. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  230. </a>
  231. {% endif %}
  232. {% elif record.wireless_link %}
  233. {% if perms.wireless.delete_wirelesslink %}
  234. <a href="{% url 'wireless:wirelesslink_delete' pk=record.wireless_link.pk %}?return_url={% url 'dcim:device_interfaces' pk=object.pk %}" title="Delete wireless link" class="btn btn-danger btn-sm">
  235. <i class="mdi mdi-wifi-off" aria-hidden="true"></i>
  236. </a>
  237. {% endif %}
  238. {% elif record.is_wired and perms.dcim.add_cable %}
  239. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  240. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  241. {% if not record.mark_connected %}
  242. <span class="dropdown">
  243. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false" title="Connect cable">
  244. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  245. </button>
  246. <ul class="dropdown-menu dropdown-menu-end">
  247. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.interface&a_terminations={{ record.pk }}&b_terminations_type=dcim.interface&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Interface</a></li>
  248. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.interface&a_terminations={{ record.pk }}&b_terminations_type=dcim.frontport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Front Port</a></li>
  249. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.interface&a_terminations={{ record.pk }}&b_terminations_type=dcim.rearport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Rear Port</a></li>
  250. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.interface&a_terminations={{ record.pk }}&b_terminations_type=circuits.circuittermination&termination_b_site={{ object.site.pk }}&return_url={% url 'dcim:device_interfaces' pk=object.pk %}">Circuit Termination</a></li>
  251. </ul>
  252. </span>
  253. {% else %}
  254. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  255. {% endif %}
  256. {% elif record.is_wireless and perms.wireless.add_wirelesslink %}
  257. <a href="{% url 'wireless:wirelesslink_add' %}?site_a={{ record.device.site.pk }}&location_a={{ record.device.location.pk }}&device_a={{ record.device.pk }}&interface_a={{ record.pk }}&site_b={{ record.device.site.pk }}&location_b={{ record.device.location.pk }}" class="btn btn-success btn-sm">
  258. <span class="mdi mdi-wifi-plus" aria-hidden="true"></span>
  259. </a>
  260. {% endif %}
  261. """
  262. FRONTPORT_BUTTONS = """
  263. {% if perms.dcim.add_inventoryitem %}
  264. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device.pk }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}" class="btn btn-sm btn-primary" title="Add inventory item">
  265. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  266. </a>
  267. {% endif %}
  268. {% if record.cable %}
  269. <a href="{% url 'dcim:frontport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  270. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  271. {% if perms.dcim.delete_cable %}
  272. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_frontports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  273. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  274. </a>
  275. {% endif %}
  276. {% elif perms.dcim.add_cable %}
  277. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  278. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  279. {% if not record.mark_connected %}
  280. <span class="dropdown">
  281. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  282. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  283. </button>
  284. <ul class="dropdown-menu dropdown-menu-end">
  285. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=dcim.interface&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Interface</a></li>
  286. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleserverport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Console Server Port</a></li>
  287. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Console Port</a></li>
  288. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=dcim.frontport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Front Port</a></li>
  289. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=dcim.rearport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Rear Port</a></li>
  290. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.frontport&a_terminations={{ record.pk }}&b_terminations_type=circuits.circuittermination&termination_b_site={{ object.site.pk }}&return_url={% url 'dcim:device_frontports' pk=object.pk %}">Circuit Termination</a></li>
  291. </ul>
  292. </span>
  293. {% else %}
  294. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  295. {% endif %}
  296. {% endif %}
  297. """
  298. REARPORT_BUTTONS = """
  299. {% if perms.dcim.add_inventoryitem %}
  300. <a href="{% url 'dcim:inventoryitem_add' %}?device={{ record.device.pk }}&component_type={{ record|content_type_id }}&component_id={{ record.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}" class="btn btn-sm btn-primary" title="Add inventory item">
  301. <i class="mdi mdi-plus-thick" aria-hidden="true"></i>
  302. </a>
  303. {% endif %}
  304. {% if record.cable %}
  305. <a href="{% url 'dcim:rearport_trace' pk=record.pk %}" class="btn btn-primary btn-sm" title="Trace"><i class="mdi mdi-transit-connection-variant"></i></a>
  306. {% include 'dcim/inc/cable_toggle_buttons.html' with cable=record.cable %}
  307. {% if perms.dcim.delete_cable %}
  308. <a href="{% url 'dcim:cable_delete' pk=record.cable.pk %}?return_url={% url 'dcim:device_rearports' pk=object.pk %}" title="Remove cable" class="btn btn-danger btn-sm">
  309. <i class="mdi mdi-ethernet-cable-off" aria-hidden="true"></i>
  310. </a>
  311. {% endif %}
  312. {% elif perms.dcim.add_cable %}
  313. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-transit-connection-variant" aria-hidden="true"></i></a>
  314. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-lan-connect" aria-hidden="true"></i></a>
  315. {% if not record.mark_connected %}
  316. <span class="dropdown">
  317. <button type="button" class="btn btn-success btn-sm dropdown-toggle" data-bs-toggle="dropdown" aria-haspopup="true" aria-expanded="false">
  318. <span class="mdi mdi-ethernet-cable" aria-hidden="true"></span>
  319. </button>
  320. <ul class="dropdown-menu dropdown-menu-end">
  321. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=dcim.interface&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Interface</a></li>
  322. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleserverport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Console Server Port</a></li>
  323. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=dcim.consoleport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Console Port</a></li>
  324. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=dcim.frontport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Front Port</a></li>
  325. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=dcim.rearport&termination_b_site={{ object.site.pk }}&termination_b_rack={{ object.rack.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Rear Port</a></li>
  326. <li><a class="dropdown-item" href="{% url 'dcim:cable_add' %}?a_terminations_type=dcim.rearport&a_terminations={{ record.pk }}&b_terminations_type=circuits.circuittermination&termination_b_site={{ object.site.pk }}&return_url={% url 'dcim:device_rearports' pk=object.pk %}">Circuit Termination</a></li>
  327. </ul>
  328. </span>
  329. {% else %}
  330. <a href="#" class="btn btn-outline-dark btn-sm disabled"><i class="mdi mdi-ethernet-cable" aria-hidden="true"></i></a>
  331. {% endif %}
  332. {% endif %}
  333. """
  334. DEVICEBAY_BUTTONS = """
  335. {% if perms.dcim.change_devicebay %}
  336. {% if record.installed_device %}
  337. <a href="{% url 'dcim:devicebay_depopulate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-danger btn-sm">
  338. <i class="mdi mdi-server-minus" aria-hidden="true" title="Remove device"></i>
  339. </a>
  340. {% else %}
  341. <a href="{% url 'dcim:devicebay_populate' pk=record.pk %}?return_url={% url 'dcim:device_devicebays' pk=object.pk %}" class="btn btn-success btn-sm">
  342. <i class="mdi mdi-server-plus" aria-hidden="true" title="Install device"></i>
  343. </a>
  344. {% endif %}
  345. {% endif %}
  346. """
  347. MODULEBAY_BUTTONS = """
  348. {% if perms.dcim.add_module %}
  349. {% if record.installed_module %}
  350. <a href="{% url 'dcim:module_delete' pk=record.installed_module.pk %}?return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-danger btn-sm">
  351. <i class="mdi mdi-server-minus" aria-hidden="true" title="Remove module"></i>
  352. </a>
  353. {% else %}
  354. <a href="{% url 'dcim:module_add' %}?device={{ record.device.pk }}&module_bay={{ record.pk }}&manufacturer={{ object.device_type.manufacturer_id }}&return_url={% url 'dcim:device_modulebays' pk=object.pk %}" class="btn btn-success btn-sm">
  355. <i class="mdi mdi-server-plus" aria-hidden="true" title="Install module"></i>
  356. </a>
  357. {% endif %}
  358. {% endif %}
  359. """