Compare commits
14 Commits
9dea6729ff
...
1c7b49f7d0
Author | SHA1 | Date |
---|---|---|
Julio Oliveira at Encora | 1c7b49f7d0 | |
Jeremy Stretch | d606cf1b3c | |
Jeremy Stretch | 0b0dab42eb | |
Jeremy Stretch | d115601da3 | |
Jeremy Stretch | a61e20849b | |
Arthur Hanson | 1eca1c3d17 | |
Julio-Oliveira-Encora | 5fa9cbc4a9 | |
transifex-integration[bot] | 5d95d49268 | |
Jeremy Stretch | 6b8bfe9947 | |
Jeremy Stretch | e87877b6ea | |
Julio-Oliveira-Encora | f48cece10f | |
Julio-Oliveira-Encora | 9b219e0e42 | |
Julio-Oliveira-Encora | 1b932c7e92 | |
Julio-Oliveira-Encora | a02aadc3aa |
|
@ -26,7 +26,7 @@ body:
|
|||
attributes:
|
||||
label: NetBox Version
|
||||
description: What version of NetBox are you currently running?
|
||||
placeholder: v3.7.5
|
||||
placeholder: v3.7.6
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
|
|
|
@ -14,7 +14,7 @@ body:
|
|||
attributes:
|
||||
label: NetBox version
|
||||
description: What version of NetBox are you currently running?
|
||||
placeholder: v3.7.5
|
||||
placeholder: v3.7.6
|
||||
validations:
|
||||
required: true
|
||||
- type: dropdown
|
||||
|
|
|
@ -61,7 +61,8 @@ django-timezone-field
|
|||
|
||||
# A REST API framework for Django projects
|
||||
# https://www.django-rest-framework.org/community/release-notes/
|
||||
djangorestframework
|
||||
# Pinned to 3.14 for NetBox v3.7
|
||||
djangorestframework<3.15
|
||||
|
||||
# Sane and flexible OpenAPI 3 schema generation for Django REST framework.
|
||||
# https://github.com/tfranzel/drf-spectacular/blob/master/CHANGELOG.rst
|
||||
|
|
|
@ -62,7 +62,7 @@ class MyModelImportForm(NetBoxModelImportForm):
|
|||
site = CSVModelChoiceField(
|
||||
queryset=Site.objects.all(),
|
||||
to_field_name='name',
|
||||
help_text='Assigned site'
|
||||
help_text=_('Assigned site')
|
||||
)
|
||||
|
||||
class Meta:
|
||||
|
|
|
@ -1,20 +1,30 @@
|
|||
# NetBox v3.7
|
||||
|
||||
## v3.7.6 (FUTURE)
|
||||
## v3.7.7 (FUTURE)
|
||||
|
||||
---
|
||||
|
||||
## v3.7.6 (2024-04-22)
|
||||
|
||||
### Enhancements
|
||||
|
||||
* [#14690](https://github.com/netbox-community/netbox/issues/14690) - Improve rendering of JSON data in configuration form
|
||||
* [#15427](https://github.com/netbox-community/netbox/issues/15427) - Enable compatibility with non-Amazon S3 providers for remote data sources
|
||||
* [#15640](https://github.com/netbox-community/netbox/issues/15640) - Add global search support for L2VPN identifiers
|
||||
* [#15644](https://github.com/netbox-community/netbox/issues/15644) - Introduce new configuration parameters for enabling HTTP Strict Transport Security (HSTS)
|
||||
|
||||
### Bug Fixes
|
||||
|
||||
* [#15541](https://github.com/netbox-community/netbox/issues/15541) - Restore ability to modify assigned component template when adding/modifying an inventory item template
|
||||
* [#15582](https://github.com/netbox-community/netbox/issues/15582) - Fix permission constraints for synchronization of remote data sources
|
||||
* [#15588](https://github.com/netbox-community/netbox/issues/15588) - Correct OpenAPI schema definitions for read-only fields which may return null values
|
||||
* [#15635](https://github.com/netbox-community/netbox/issues/15635) - Extend plugin removal instruction to include reindexing the global search cache
|
||||
* [#15654](https://github.com/netbox-community/netbox/issues/15654) - Fix `AttributeError` exception when attempting to save an incomplete tunnel termination
|
||||
* [#15668](https://github.com/netbox-community/netbox/issues/15668) - Fix permission required to display virtual disks tab on virtual machine UI view
|
||||
* [#15685](https://github.com/netbox-community/netbox/issues/15685) - Allow filtering cables by decimal values using UI filter form
|
||||
* [#15761](https://github.com/netbox-community/netbox/issues/15761) - Add missing `ike_policy` & `ike_policy_id` filters for IKE proposals
|
||||
* [#15771](https://github.com/netbox-community/netbox/issues/15771) - Include `id` in list of supported fields for all bulk import forms
|
||||
* [#15790](https://github.com/netbox-community/netbox/issues/15790) - Fix live preview support for EventRule comments
|
||||
|
||||
---
|
||||
|
||||
|
|
|
@ -668,7 +668,7 @@ class DeviceSerializer(NetBoxModelSerializer):
|
|||
url = serializers.HyperlinkedIdentityField(view_name='dcim-api:device-detail')
|
||||
device_type = NestedDeviceTypeSerializer()
|
||||
role = NestedDeviceRoleSerializer()
|
||||
device_role = NestedDeviceRoleSerializer(read_only=True, help_text='Deprecated in v3.6 in favor of `role`.')
|
||||
device_role = NestedDeviceRoleSerializer(read_only=True, help_text=_('Deprecated in v3.6 in favor of `role`.'))
|
||||
tenant = NestedTenantSerializer(required=False, allow_null=True, default=None)
|
||||
platform = NestedPlatformSerializer(required=False, allow_null=True)
|
||||
site = NestedSiteSerializer()
|
||||
|
|
|
@ -1373,14 +1373,14 @@ class VirtualDeviceContextImportForm(NetBoxModelImportForm):
|
|||
label=_('Device'),
|
||||
queryset=Device.objects.all(),
|
||||
to_field_name='name',
|
||||
help_text='Assigned role'
|
||||
help_text=_('Assigned role')
|
||||
)
|
||||
tenant = CSVModelChoiceField(
|
||||
label=_('Tenant'),
|
||||
queryset=Tenant.objects.all(),
|
||||
required=False,
|
||||
to_field_name='name',
|
||||
help_text='Assigned tenant'
|
||||
help_text=_('Assigned tenant')
|
||||
)
|
||||
status = CSVChoiceField(
|
||||
label=_('Status'),
|
||||
|
|
|
@ -73,17 +73,12 @@ class NetBoxModelImportForm(CSVModelForm, NetBoxModelForm):
|
|||
"""
|
||||
Base form for creating a NetBox objects from CSV data. Used for bulk importing.
|
||||
"""
|
||||
id = forms.IntegerField(
|
||||
label=_('Id'),
|
||||
required=False,
|
||||
help_text='Numeric ID of an existing object to update (if not creating a new object)'
|
||||
)
|
||||
tags = CSVModelMultipleChoiceField(
|
||||
label=_('Tags'),
|
||||
queryset=Tag.objects.all(),
|
||||
required=False,
|
||||
to_field_name='slug',
|
||||
help_text='Tag slugs separated by commas, encased with double quotes (e.g. "tag1,tag2,tag3")'
|
||||
help_text=_('Tag slugs separated by commas, encased with double quotes (e.g. "tag1,tag2,tag3")')
|
||||
)
|
||||
|
||||
def _get_custom_fields(self, content_type):
|
||||
|
|
|
@ -28,7 +28,7 @@ from netbox.plugins import PluginConfig
|
|||
# Environment setup
|
||||
#
|
||||
|
||||
VERSION = '3.7.6-dev'
|
||||
VERSION = '3.7.7-dev'
|
||||
|
||||
# Hostname
|
||||
HOSTNAME = platform.node()
|
||||
|
|
File diff suppressed because one or more lines are too long
File diff suppressed because one or more lines are too long
|
@ -11,34 +11,71 @@ function quickSearchEventHandler(event: Event): void {
|
|||
if (isTruthy(inputgroup)) {
|
||||
if (quicksearch.value === "") {
|
||||
inputgroup.classList.add("hide-last-child");
|
||||
clearLinkParams();
|
||||
} else {
|
||||
inputgroup.classList.remove("hide-last-child");
|
||||
}
|
||||
}
|
||||
}
|
||||
|
||||
/**
|
||||
* Clear the existing search parameters in the link to export Current View.
|
||||
*/
|
||||
function clearLinkParams(): void {
|
||||
const link = document.getElementById("current_view") as HTMLLinkElement;
|
||||
let linkUpdated = link?.href.split("&")[0];
|
||||
link.setAttribute("href", linkUpdated);
|
||||
}
|
||||
|
||||
/**
|
||||
* Update the Export View link to add the Quick Search parameters.
|
||||
* @param event
|
||||
*/
|
||||
|
||||
function handleQuickSearchParams(event: Event): void {
|
||||
const quickSearchParameters = event.currentTarget as HTMLInputElement;
|
||||
|
||||
// Clear the existing search parameters
|
||||
clearLinkParams();
|
||||
|
||||
if (quickSearchParameters != null) {
|
||||
const link = document.getElementById("current_view") as HTMLLinkElement;
|
||||
const search_parameter = `q=${quickSearchParameters.value}`;
|
||||
const linkUpdated = link?.href + "&" + search_parameter;
|
||||
link.setAttribute("href", linkUpdated);
|
||||
}
|
||||
|
||||
}
|
||||
|
||||
/**
|
||||
* Initialize Quicksearch Event listener/handlers.
|
||||
*/
|
||||
export function initQuickSearch(): void {
|
||||
const quicksearch = document.getElementById("quicksearch") as HTMLInputElement;
|
||||
const clearbtn = document.getElementById("quicksearch_clear") as HTMLButtonElement;
|
||||
|
||||
if (isTruthy(quicksearch)) {
|
||||
quicksearch.addEventListener("keyup", quickSearchEventHandler, {
|
||||
passive: true
|
||||
})
|
||||
passive: true,
|
||||
});
|
||||
quicksearch.addEventListener("search", quickSearchEventHandler, {
|
||||
passive: true
|
||||
})
|
||||
passive: true,
|
||||
});
|
||||
quicksearch.addEventListener("change", handleQuickSearchParams);
|
||||
|
||||
if (isTruthy(clearbtn)) {
|
||||
clearbtn.addEventListener("click", async () => {
|
||||
const search = new Event('search');
|
||||
quicksearch.value = '';
|
||||
await new Promise(f => setTimeout(f, 100));
|
||||
quicksearch.dispatchEvent(search);
|
||||
}, {
|
||||
passive: true
|
||||
})
|
||||
clearbtn.addEventListener(
|
||||
"click",
|
||||
async () => {
|
||||
const search = new Event("search");
|
||||
quicksearch.value = "";
|
||||
await new Promise(f => setTimeout(f, 100));
|
||||
quicksearch.dispatchEvent(search);
|
||||
},
|
||||
{
|
||||
passive: true,
|
||||
},
|
||||
);
|
||||
}
|
||||
}
|
||||
}
|
||||
|
|
|
@ -4,16 +4,19 @@
|
|||
<div class="row mb-3">
|
||||
<div class="col-auto table-controls noprint">
|
||||
<div class="input-group input-group-sm me-2 quicksearch hide-last-child">
|
||||
<input type="search" results="5" name="q" id="quicksearch" class="form-control" placeholder="Quick search"
|
||||
hx-get="{{ request.full_path }}" hx-target="#object_list" hx-trigger="keyup changed delay:500ms, search" />
|
||||
<button class="btn bg-transparent" type="button" id="quicksearch_clear"><i class="mdi mdi-close-circle"></i></button>
|
||||
<input type="search" results="5" name="q" class="form-control" placeholder="Quick search" id="quicksearch"
|
||||
hx-get="{{ request.full_path }}" hx-target="#object_list"
|
||||
hx-trigger="keyup changed delay:500ms, search" />
|
||||
<button class="btn bg-transparent" type="button" id="quicksearch_clear"><i class="mdi mdi-close-circle"></i>
|
||||
</button>
|
||||
</div>
|
||||
{% block extra_table_controls %}{% endblock %}
|
||||
</div>
|
||||
<div class="col-auto ms-auto table-controls noprint">
|
||||
{% if request.user.is_authenticated and table_modal %}
|
||||
<div class="table-configure input-group input-group-sm">
|
||||
<button type="button" data-bs-toggle="modal" title="{% trans "Configure Table" %}" data-bs-target="#{{ table_modal }}"
|
||||
<button type="button" data-bs-toggle="modal" title="{% trans "Configure Table" %}"
|
||||
data-bs-target="#{{ table_modal }}"
|
||||
class="btn btn-sm btn-outline-dark">
|
||||
<i class="mdi mdi-cog"></i> {% trans "Configure Table" %}
|
||||
</button>
|
||||
|
|
File diff suppressed because it is too large
Load Diff
Binary file not shown.
|
@ -6,6 +6,7 @@
|
|||
# Translators:
|
||||
# Jonathan Senecal, 2024
|
||||
# Jeremy Stretch, 2024
|
||||
# Quentin Laurent, 2024
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
|
@ -14,7 +15,7 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-04-04 19:11+0000\n"
|
||||
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
||||
"Last-Translator: Jeremy Stretch, 2024\n"
|
||||
"Last-Translator: Quentin Laurent, 2024\n"
|
||||
"Language-Team: French (https://app.transifex.com/netbox-community/teams/178115/fr/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -3716,7 +3717,7 @@ msgstr "Réservation"
|
|||
#: dcim/forms/model_forms.py:301 dcim/forms/model_forms.py:384
|
||||
#: utilities/forms/fields/fields.py:47
|
||||
msgid "Slug"
|
||||
msgstr "limace"
|
||||
msgstr "Identifiant"
|
||||
|
||||
#: dcim/forms/model_forms.py:308 templates/dcim/devicetype.html:12
|
||||
msgid "Chassis"
|
||||
|
@ -5813,7 +5814,7 @@ msgstr "Poids maximum"
|
|||
#: ipam/tables/asn.py:66 netbox/navigation/menu.py:16
|
||||
#: netbox/navigation/menu.py:18
|
||||
msgid "Sites"
|
||||
msgstr "Des sites"
|
||||
msgstr "Sites"
|
||||
|
||||
#: dcim/tests/test_api.py:49
|
||||
msgid "Test case must set peer_termination_type"
|
||||
|
@ -13355,7 +13356,7 @@ msgstr ""
|
|||
|
||||
#: utilities/forms/fields/fields.py:48
|
||||
msgid "URL-friendly unique shorthand"
|
||||
msgstr "Raccourci unique et convivial pour les URL"
|
||||
msgstr "Identifiant unique utilisable dans les URL"
|
||||
|
||||
#: utilities/forms/fields/fields.py:101
|
||||
msgid "Enter context data in <a href=\"https://json.org/\">JSON</a> format."
|
||||
|
|
Binary file not shown.
|
@ -5,8 +5,8 @@
|
|||
#
|
||||
# Translators:
|
||||
# Tatsuya Ueda <ml@tatsuya.info>, 2024
|
||||
# teapot, 2024
|
||||
# Jeremy Stretch, 2024
|
||||
# teapot, 2024
|
||||
#
|
||||
#, fuzzy
|
||||
msgid ""
|
||||
|
@ -15,7 +15,7 @@ msgstr ""
|
|||
"Report-Msgid-Bugs-To: \n"
|
||||
"POT-Creation-Date: 2024-04-04 19:11+0000\n"
|
||||
"PO-Revision-Date: 2023-10-30 17:48+0000\n"
|
||||
"Last-Translator: Jeremy Stretch, 2024\n"
|
||||
"Last-Translator: teapot, 2024\n"
|
||||
"Language-Team: Japanese (https://app.transifex.com/netbox-community/teams/178115/ja/)\n"
|
||||
"MIME-Version: 1.0\n"
|
||||
"Content-Type: text/plain; charset=UTF-8\n"
|
||||
|
@ -7681,7 +7681,7 @@ msgstr "プレフィックス内およびプレフィックスを含む"
|
|||
|
||||
#: ipam/filtersets.py:259
|
||||
msgid "Prefixes which contain this prefix or IP"
|
||||
msgstr "このプレフィックスまたは IP を含むプレフィックス"
|
||||
msgstr "このプレフィックス / IP を含むプレフィックス"
|
||||
|
||||
#: ipam/filtersets.py:270 ipam/filtersets.py:538 ipam/forms/bulk_edit.py:326
|
||||
#: ipam/forms/filtersets.py:191 ipam/forms/filtersets.py:317
|
||||
|
@ -7700,11 +7700,11 @@ msgstr "VLAN 番号 (1-4094)"
|
|||
#: ipam/forms/model_forms.py:430 templates/tenancy/contact.html:54
|
||||
#: tenancy/forms/bulk_edit.py:112
|
||||
msgid "Address"
|
||||
msgstr "住所"
|
||||
msgstr "アドレス"
|
||||
|
||||
#: ipam/filtersets.py:445
|
||||
msgid "Ranges which contain this prefix or IP"
|
||||
msgstr "このプレフィックスまたは IP を含む範囲"
|
||||
msgstr "このプレフィックス / IP を含む範囲"
|
||||
|
||||
#: ipam/filtersets.py:473 ipam/filtersets.py:529
|
||||
msgid "Parent prefix"
|
||||
|
@ -7743,11 +7743,11 @@ msgstr "FHRP グループ (ID)"
|
|||
|
||||
#: ipam/filtersets.py:618
|
||||
msgid "Is assigned to an interface"
|
||||
msgstr "インタフェースに割り当てられている"
|
||||
msgstr "インタフェースに割り当てられているか"
|
||||
|
||||
#: ipam/filtersets.py:622
|
||||
msgid "Is assigned"
|
||||
msgstr "割り当てられている"
|
||||
msgstr "割当済みか"
|
||||
|
||||
#: ipam/filtersets.py:1047
|
||||
msgid "IP address (ID)"
|
||||
|
@ -7881,7 +7881,7 @@ msgstr "子 VLAN VID の最小値"
|
|||
|
||||
#: ipam/forms/bulk_edit.py:420
|
||||
msgid "Maximum child VLAN VID"
|
||||
msgstr "子 VLAN VID の最大数"
|
||||
msgstr "子 VLAN VID の最大値"
|
||||
|
||||
#: ipam/forms/bulk_edit.py:428 ipam/forms/model_forms.py:531
|
||||
msgid "Scope type"
|
||||
|
@ -7905,11 +7905,11 @@ msgstr "ポート"
|
|||
|
||||
#: ipam/forms/bulk_import.py:47
|
||||
msgid "Import route targets"
|
||||
msgstr "ルートターゲットをインポート"
|
||||
msgstr "インポートルートターゲット"
|
||||
|
||||
#: ipam/forms/bulk_import.py:53
|
||||
msgid "Export route targets"
|
||||
msgstr "ルートターゲットをエクスポートする"
|
||||
msgstr "エクスポートルートターゲット"
|
||||
|
||||
#: ipam/forms/bulk_import.py:91 ipam/forms/bulk_import.py:111
|
||||
#: ipam/forms/bulk_import.py:131
|
||||
|
|
|
@ -70,6 +70,12 @@ class CSVModelForm(forms.ModelForm):
|
|||
"""
|
||||
ModelForm used for the import of objects in CSV format.
|
||||
"""
|
||||
id = forms.IntegerField(
|
||||
label=_('ID'),
|
||||
required=False,
|
||||
help_text=_('Numeric ID of an existing object to update (if not creating a new object)')
|
||||
)
|
||||
|
||||
def __init__(self, *args, headers=None, **kwargs):
|
||||
self.headers = headers or {}
|
||||
super().__init__(*args, **kwargs)
|
||||
|
|
|
@ -4,7 +4,7 @@
|
|||
<i class="mdi mdi-download"></i> {% trans "Export" %}
|
||||
</button>
|
||||
<ul class="dropdown-menu dropdown-menu-end">
|
||||
<li><a class="dropdown-item" href="?{% if url_params %}{{ url_params }}&{% endif %}export=table">{% trans "Current View" %}</a></li>
|
||||
<li><a id="current_view" class="dropdown-item" href="?{% if url_params %}{{ url_params }}&{% endif %}export=table">{% trans "Current View" %}</a></li>
|
||||
<li><a class="dropdown-item" href="?{% if url_params %}{{ url_params }}&{% endif %}export">{% trans "All Data" %} ({{ data_format }})</a></li>
|
||||
{% if export_templates %}
|
||||
<li>
|
||||
|
|
|
@ -42,7 +42,7 @@ class WirelessLANImportForm(NetBoxModelImportForm):
|
|||
status = CSVChoiceField(
|
||||
label=_('Status'),
|
||||
choices=WirelessLANStatusChoices,
|
||||
help_text='Operational status'
|
||||
help_text=_('Operational status')
|
||||
)
|
||||
vlan = CSVModelChoiceField(
|
||||
label=_('VLAN'),
|
||||
|
|
|
@ -18,11 +18,11 @@ drf-spectacular==0.27.2
|
|||
drf-spectacular-sidecar==2024.4.1
|
||||
feedparser==6.0.11
|
||||
graphene-django==3.0.0
|
||||
gunicorn==21.2.0
|
||||
gunicorn==22.0.0
|
||||
Jinja2==3.1.3
|
||||
Markdown==3.6
|
||||
mkdocs-material==9.5.17
|
||||
mkdocstrings[python-legacy]==0.24.2
|
||||
mkdocs-material==9.5.18
|
||||
mkdocstrings[python-legacy]==0.24.3
|
||||
netaddr==1.2.1
|
||||
Pillow==10.3.0
|
||||
psycopg[binary,pool]==3.1.18
|
||||
|
|
Loading…
Reference in New Issue