nautobot 3.0.0a2__py3-none-any.whl → 3.0.0rc1__py3-none-any.whl
This diff represents the content of publicly available package versions that have been released to one of the supported registries. The information contained in this diff is provided for informational purposes only and reflects changes between package versions as they appear in their respective public registries.
- nautobot/apps/choices.py +4 -2
- nautobot/apps/filters.py +7 -9
- nautobot/apps/models.py +2 -2
- nautobot/apps/ui.py +13 -1
- nautobot/apps/utils.py +8 -0
- nautobot/circuits/filters.py +3 -2
- nautobot/circuits/navigation.py +3 -2
- nautobot/circuits/templates/circuits/circuit_create.html +3 -3
- nautobot/circuits/templates/circuits/circuittermination_create.html +9 -24
- nautobot/circuits/templates/circuits/inc/circuit_termination_cable_fragment.html +6 -6
- nautobot/circuits/templates/circuits/inc/speed_widget.html +12 -12
- nautobot/circuits/tests/integration/test_circuit.py +10 -13
- nautobot/circuits/tests/integration/test_circuits_bulk_operations.py +0 -3
- nautobot/circuits/views.py +6 -2
- nautobot/cloud/filters.py +1 -1
- nautobot/cloud/navigation.py +3 -2
- nautobot/core/api/schema.py +1 -1
- nautobot/core/api/serializers.py +6 -1
- nautobot/core/api/urls.py +2 -0
- nautobot/core/api/views.py +12 -0
- nautobot/core/apps/__init__.py +11 -10
- nautobot/core/celery/__init__.py +3 -5
- nautobot/core/checks.py +46 -0
- nautobot/core/choices.py +1 -1
- nautobot/core/cli/bootstrap_v3_to_v5.py +105 -13
- nautobot/core/cli/migrate_deprecated_templates.py +227 -0
- nautobot/core/constants.py +3 -0
- nautobot/core/context_processors.py +9 -1
- nautobot/core/filters.py +4 -0
- nautobot/core/forms/__init__.py +2 -0
- nautobot/core/forms/forms.py +1 -1
- nautobot/core/forms/widgets.py +21 -2
- nautobot/core/jobs/__init__.py +62 -3
- nautobot/core/jobs/groups.py +31 -1
- nautobot/core/management/commands/generate_test_data.py +28 -9
- nautobot/core/models/__init__.py +11 -0
- nautobot/core/models/generics.py +9 -1
- nautobot/core/models/tree_queries.py +10 -5
- nautobot/core/models/utils.py +1 -1
- nautobot/core/settings.py +35 -19
- nautobot/core/settings.yaml +17 -33
- nautobot/core/signals.py +12 -1
- nautobot/core/tables.py +13 -6
- nautobot/core/templates/40x.html +1 -1
- nautobot/core/templates/500.html +2 -2
- nautobot/core/templates/admin/base.html +1 -2
- nautobot/core/templates/admin/change_list.html +9 -12
- nautobot/core/templates/admin/config/config.html +12 -12
- nautobot/core/templates/admin/index.html +3 -3
- nautobot/core/templates/base_django.html +1 -2
- nautobot/core/templates/buttons/export.html +1 -1
- nautobot/core/templates/components/button/dropdown.html +5 -3
- nautobot/core/templates/components/panel/body_wrapper_generic_table.html +1 -1
- nautobot/core/templates/components/panel/header_extra_content_table.html +1 -1
- nautobot/core/templates/components/panel/panel.html +3 -3
- nautobot/core/templates/components/tab/content_wrapper.html +6 -7
- nautobot/core/templates/components/tab/label_wrapper_distinct_view.html +1 -1
- nautobot/core/templates/echarts/echarts.html +22 -9
- nautobot/core/templates/generic/object_bulk_add_component.html +2 -1
- nautobot/core/templates/generic/object_bulk_create.html +6 -5
- nautobot/core/templates/generic/object_bulk_delete.html +1 -1
- nautobot/core/templates/generic/object_bulk_destroy.html +3 -3
- nautobot/core/templates/generic/object_bulk_edit.html +1 -1
- nautobot/core/templates/generic/object_bulk_import.html +1 -1
- nautobot/core/templates/generic/object_bulk_remove.html +2 -2
- nautobot/core/templates/generic/object_bulk_update.html +5 -4
- nautobot/core/templates/generic/object_create.html +5 -4
- nautobot/core/templates/generic/object_delete.html +1 -1
- nautobot/core/templates/generic/object_detail.html +1 -1
- nautobot/core/templates/generic/object_edit.html +1 -1
- nautobot/core/templates/generic/object_import.html +2 -1
- nautobot/core/templates/generic/object_list.html +12 -4
- nautobot/core/templates/generic/object_notes.html +5 -3
- nautobot/core/templates/generic/object_retrieve.html +4 -5
- nautobot/core/templates/graphene/graphiql.html +7 -8
- nautobot/core/templates/home.html +1 -1
- nautobot/core/templates/import_success.html +2 -1
- nautobot/core/templates/inc/computed_fields/panel_data.html +1 -1
- nautobot/core/templates/inc/created_updated.html +7 -3
- nautobot/core/templates/inc/custom_fields/panel_data.html +1 -1
- nautobot/core/templates/inc/footer.html +3 -1
- nautobot/core/templates/inc/form_static_field.html +6 -0
- nautobot/core/templates/inc/header.html +11 -1
- nautobot/core/templates/inc/image_attachments.html +2 -1
- nautobot/core/templates/inc/media.html +14 -0
- nautobot/core/templates/inc/nav_menu.html +3 -9
- nautobot/core/templates/inc/object_details_advanced_panel.html +2 -2
- nautobot/core/templates/inc/search_panel.html +4 -4
- nautobot/core/templates/login.html +4 -2
- nautobot/core/templates/nautobot_config.py.j2 +6 -11
- nautobot/core/templates/redoc_ui.html +7 -0
- nautobot/core/templates/rest_framework/api.html +103 -2
- nautobot/core/templates/search.html +1 -1
- nautobot/core/templates/swagger_ui.html +17 -3
- nautobot/core/templates/system_jobs/import_objects.html +1 -2
- nautobot/core/templates/utilities/confirmation_form.html +2 -2
- nautobot/core/templates/utilities/obj_table.html +10 -2
- nautobot/core/templates/utilities/render_field.html +7 -7
- nautobot/core/templates/utilities/render_jinja2.html +2 -2
- nautobot/core/templates/utilities/templatetags/filter_form_drawer.html +37 -4
- nautobot/core/templates/utilities/theme_preview.html +19 -3
- nautobot/core/templates/widgets/number_input_with_choices.html +44 -0
- nautobot/core/templates/widgets/selectwithdisabled_option.html +3 -1
- nautobot/core/templatetags/helpers.py +76 -18
- nautobot/core/testing/api.py +68 -9
- nautobot/core/testing/filters.py +0 -23
- nautobot/core/testing/integration.py +41 -17
- nautobot/core/testing/mixins.py +2 -0
- nautobot/core/testing/utils.py +18 -4
- nautobot/core/testing/views.py +104 -13
- nautobot/core/tests/integration/test_app_home.py +34 -30
- nautobot/core/tests/integration/test_app_navbar.py +3 -0
- nautobot/core/tests/integration/test_filters.py +48 -11
- nautobot/core/tests/integration/test_theme.py +22 -21
- nautobot/core/tests/nautobot_config.py +3 -0
- nautobot/core/tests/nautobot_config_without_example_apps.py +4 -0
- nautobot/core/tests/runner.py +8 -1
- nautobot/core/tests/test_api.py +5 -3
- nautobot/core/tests/test_breadcrumbs.py +27 -28
- nautobot/core/tests/test_checks.py +28 -0
- nautobot/core/tests/test_cli.py +40 -0
- nautobot/core/tests/test_config.py +2 -1
- nautobot/core/tests/test_forms.py +55 -13
- nautobot/core/tests/test_jobs.py +144 -3
- nautobot/core/tests/test_nautobot_server.py +2 -0
- nautobot/core/tests/test_navigations.py +76 -1
- nautobot/core/tests/test_patch_social_django.py +42 -0
- nautobot/core/tests/test_renderers.py +59 -0
- nautobot/core/tests/test_settings_schema.py +1 -0
- nautobot/core/tests/test_tables.py +3 -1
- nautobot/core/tests/test_templatetags_helpers.py +62 -13
- nautobot/core/tests/test_templatetags_ui_framework.py +4 -4
- nautobot/core/tests/test_titles.py +0 -16
- nautobot/core/tests/test_tree_queries.py +14 -1
- nautobot/core/tests/test_ui.py +123 -4
- nautobot/core/tests/test_utils.py +72 -5
- nautobot/core/tests/test_views.py +159 -31
- nautobot/core/ui/breadcrumbs.py +70 -29
- nautobot/core/ui/bulk_buttons.py +1 -1
- nautobot/core/ui/choices.py +143 -27
- nautobot/core/ui/constants.py +76 -12
- nautobot/core/ui/echarts.py +15 -20
- nautobot/core/ui/object_detail.py +143 -55
- nautobot/core/ui/titles.py +3 -6
- nautobot/core/urls.py +20 -9
- nautobot/core/utils/cache.py +2 -1
- nautobot/core/utils/filtering.py +28 -18
- nautobot/core/utils/lookup.py +49 -8
- nautobot/core/utils/module_loading.py +21 -0
- nautobot/core/utils/patch_social_django.py +128 -0
- nautobot/core/views/__init__.py +38 -1
- nautobot/core/views/generic.py +3 -3
- nautobot/core/views/mixins.py +45 -22
- nautobot/core/views/renderers.py +4 -3
- nautobot/core/views/viewsets.py +2 -1
- nautobot/data_validation/apps.py +1 -5
- nautobot/data_validation/custom_validators.py +4 -4
- nautobot/data_validation/filters.py +1 -1
- nautobot/data_validation/forms.py +40 -0
- nautobot/data_validation/migrations/0001_initial.py +0 -7
- nautobot/data_validation/migrations/0002_data_migration_from_app.py +3 -14
- nautobot/data_validation/models.py +16 -7
- nautobot/data_validation/navigation.py +8 -1
- nautobot/data_validation/tables.py +12 -5
- nautobot/data_validation/templates/data_validation/datacompliance_tab.html +1 -0
- nautobot/data_validation/templates/data_validation/device_constraints.html +61 -0
- nautobot/data_validation/tests/__init__.py +2 -2
- nautobot/data_validation/tests/migrations/test_migrations.py +83 -3
- nautobot/data_validation/tests/test_data_compliance_rules.py +12 -7
- nautobot/data_validation/tests/test_filters.py +8 -6
- nautobot/data_validation/tests/test_models.py +15 -0
- nautobot/data_validation/tests/test_views.py +190 -32
- nautobot/data_validation/urls.py +2 -5
- nautobot/data_validation/views.py +73 -40
- nautobot/dcim/api/serializers.py +3 -13
- nautobot/dcim/apps.py +4 -0
- nautobot/dcim/choices.py +65 -0
- nautobot/dcim/constants.py +7 -0
- nautobot/dcim/custom_validators.py +84 -0
- nautobot/dcim/factory.py +1 -1
- nautobot/dcim/filter_mixins.py +353 -4
- nautobot/dcim/{filters/__init__.py → filters.py} +15 -36
- nautobot/dcim/forms.py +90 -4
- nautobot/dcim/migrations/0075_interface_duplex_interface_speed_and_more.py +32 -0
- nautobot/dcim/migrations/{0075_add_deviceclusterassignment.py → 0076_add_deviceclusterassignment.py} +1 -1
- nautobot/dcim/migrations/{0076_device_cluster_to_clusters_data_migration.py → 0077_device_cluster_to_clusters_data_migration.py} +1 -1
- nautobot/dcim/migrations/{0077_remove_device_cluster.py → 0078_remove_device_cluster.py} +1 -1
- nautobot/dcim/migrations/0079_remove_device_location_tenant_name_uniqueness.py +16 -0
- nautobot/dcim/migrations/0080_device_name_data_migration.py +59 -0
- nautobot/dcim/migrations/0081_alter_device_device_redundancy_group_priority_and_more.py +25 -0
- nautobot/dcim/models/device_component_templates.py +33 -1
- nautobot/dcim/models/device_components.py +98 -64
- nautobot/dcim/models/devices.py +30 -20
- nautobot/dcim/navigation.py +7 -6
- nautobot/dcim/tables/devices.py +18 -0
- nautobot/dcim/tables/devicetypes.py +8 -1
- nautobot/dcim/tables/racks.py +0 -2
- nautobot/dcim/tables/template_code.py +15 -15
- nautobot/dcim/templates/dcim/cable_connect.html +28 -112
- nautobot/dcim/templates/dcim/cable_trace.html +0 -4
- nautobot/dcim/templates/dcim/{cable_edit.html → cable_update.html} +1 -1
- nautobot/dcim/templates/dcim/consoleport.html +7 -6
- nautobot/dcim/templates/dcim/consoleserverport.html +7 -6
- nautobot/dcim/templates/dcim/device/config.html +2 -2
- nautobot/dcim/templates/dcim/device/lldp_neighbors.html +1 -1
- nautobot/dcim/templates/dcim/device/status.html +8 -8
- nautobot/dcim/templates/dcim/device.html +1 -1
- nautobot/dcim/templates/dcim/device_component_add.html +2 -2
- nautobot/dcim/templates/dcim/device_create.html +5 -3
- nautobot/dcim/templates/dcim/device_interface_delete.html +1 -1
- nautobot/dcim/templates/dcim/device_list.html +73 -10
- nautobot/dcim/templates/dcim/devicebay.html +1 -1
- nautobot/dcim/templates/dcim/devicebay_populate.html +2 -2
- nautobot/dcim/templates/dcim/devicetype_component_add.html +2 -2
- nautobot/dcim/templates/dcim/footer_convert_to_contact_or_team_record.html +14 -0
- nautobot/dcim/templates/dcim/frontport.html +10 -9
- nautobot/dcim/templates/dcim/inc/devicetype_component_table.html +1 -1
- nautobot/dcim/templates/dcim/inc/edit_form_softwareversion_js.html +2 -2
- nautobot/dcim/templates/dcim/inc/moduletype_component_table.html +1 -1
- nautobot/dcim/templates/dcim/inc/rack_elevation.html +1 -1
- nautobot/dcim/templates/dcim/interface.html +35 -7
- nautobot/dcim/templates/dcim/interface_bulk_delete.html +1 -1
- nautobot/dcim/templates/dcim/interface_edit.html +2 -0
- nautobot/dcim/templates/dcim/inventoryitem.html +1 -1
- nautobot/dcim/templates/dcim/inventoryitem_add.html +3 -1
- nautobot/dcim/templates/dcim/inventoryitem_bulk_delete.html +1 -1
- nautobot/dcim/templates/dcim/inventoryitem_edit.html +3 -1
- nautobot/dcim/templates/dcim/module/base.html +49 -9
- nautobot/dcim/templates/dcim/module_consoleports.html +1 -1
- nautobot/dcim/templates/dcim/module_consoleserverports.html +1 -1
- nautobot/dcim/templates/dcim/module_frontports.html +1 -1
- nautobot/dcim/templates/dcim/module_interfaces.html +1 -1
- nautobot/dcim/templates/dcim/module_list.html +57 -8
- nautobot/dcim/templates/dcim/module_modulebays.html +1 -1
- nautobot/dcim/templates/dcim/module_poweroutlets.html +1 -1
- nautobot/dcim/templates/dcim/module_powerports.html +1 -1
- nautobot/dcim/templates/dcim/module_rearports.html +1 -1
- nautobot/dcim/templates/dcim/modulefamily_retrieve.html +1 -1
- nautobot/dcim/templates/dcim/moduletype_list.html +2 -2
- nautobot/dcim/templates/dcim/moduletype_retrieve.html +49 -9
- nautobot/dcim/templates/dcim/platform_create.html +1 -1
- nautobot/dcim/templates/dcim/poweroutlet.html +1 -1
- nautobot/dcim/templates/dcim/powerport.html +6 -5
- nautobot/dcim/templates/dcim/rack_elevation_list.html +17 -5
- nautobot/dcim/templates/dcim/rack_retrieve.html +22 -15
- nautobot/dcim/templates/dcim/rearport.html +8 -7
- nautobot/dcim/templates/dcim/trace/cable.html +1 -1
- nautobot/dcim/templates/dcim/virtualchassis_add_member.html +16 -14
- nautobot/dcim/templates/dcim/virtualchassis_update.html +15 -7
- nautobot/dcim/tests/integration/test_controller.py +4 -6
- nautobot/dcim/tests/integration/test_controller_managed_device_group.py +1 -5
- nautobot/dcim/tests/integration/test_create_device.py +0 -2
- nautobot/dcim/tests/integration/test_device_bulk_operations.py +1 -3
- nautobot/dcim/tests/integration/test_fileinputpicker.py +6 -10
- nautobot/dcim/tests/integration/test_location_bulk_operations.py +0 -2
- nautobot/dcim/tests/integration/test_module_bay_position.py +3 -4
- nautobot/dcim/tests/test_api.py +194 -6
- nautobot/dcim/tests/test_custom_validators.py +229 -0
- nautobot/dcim/tests/test_filters.py +55 -7
- nautobot/dcim/tests/test_forms.py +110 -8
- nautobot/dcim/tests/test_graphql.py +44 -1
- nautobot/dcim/tests/test_models.py +328 -4
- nautobot/dcim/tests/test_tables.py +160 -0
- nautobot/dcim/tests/test_views.py +132 -29
- nautobot/dcim/urls.py +64 -21
- nautobot/dcim/utils.py +3 -3
- nautobot/dcim/views.py +777 -397
- nautobot/extras/api/views.py +60 -45
- nautobot/extras/choices.py +2 -13
- nautobot/extras/datasources/git.py +3 -1
- nautobot/extras/{filters/mixins.py → filter_mixins.py} +1 -1
- nautobot/extras/{filters/customfields.py → filter_mixins_customfields.py} +42 -6
- nautobot/extras/{filters/__init__.py → filters.py} +33 -48
- nautobot/extras/forms/forms.py +14 -15
- nautobot/extras/forms/mixins.py +0 -41
- nautobot/extras/jobs.py +2 -0
- nautobot/extras/jobs_ui.py +4 -3
- nautobot/extras/management/__init__.py +11 -0
- nautobot/extras/management/commands/refresh_dynamic_group_member_caches.py +4 -1
- nautobot/extras/migrations/0127_approval_workflow_models.py +6 -6
- nautobot/extras/migrations/0129_jobresult_debug_log_count_jobresult_error_log_count_and_more.py +37 -0
- nautobot/extras/migrations/0130_jobresult_generate_log_entry_counts.py +42 -0
- nautobot/extras/migrations/0131_configcontext_device_families.py +18 -0
- nautobot/extras/models/__init__.py +1 -2
- nautobot/extras/models/approvals.py +33 -14
- nautobot/extras/models/change_logging.py +4 -0
- nautobot/extras/models/contacts.py +2 -0
- nautobot/extras/models/groups.py +44 -5
- nautobot/extras/models/jobs.py +60 -4
- nautobot/extras/models/mixins.py +28 -0
- nautobot/extras/models/models.py +23 -2
- nautobot/extras/models/secrets.py +1 -0
- nautobot/extras/models/statuses.py +0 -15
- nautobot/extras/navigation.py +13 -9
- nautobot/extras/plugins/__init__.py +33 -55
- nautobot/extras/plugins/marketplace_manifest.yml +49 -1
- nautobot/extras/plugins/tables.py +3 -3
- nautobot/extras/plugins/urls.py +2 -21
- nautobot/extras/plugins/utils.py +1 -33
- nautobot/extras/plugins/views.py +0 -9
- nautobot/extras/querysets.py +8 -0
- nautobot/extras/signals.py +20 -19
- nautobot/extras/tables.py +64 -68
- nautobot/extras/templates/django_ajax_tables/ajax_wrapper.html +2 -0
- nautobot/extras/templates/extras/approval_dashboard.html +7 -5
- nautobot/extras/templates/extras/approvalworkflowdefinition_update.html +4 -2
- nautobot/extras/templates/extras/approvalworkflowstage_retrieve.html +20 -12
- nautobot/extras/templates/extras/configcontext_update.html +1 -0
- nautobot/extras/templates/extras/configcontextschema_validation.html +2 -2
- nautobot/extras/templates/extras/dynamicgroup_retrieve.html +11 -5
- nautobot/extras/templates/extras/dynamicgroup_update.html +1 -1
- nautobot/extras/templates/extras/gitrepository_result.html +0 -2
- nautobot/extras/templates/extras/inc/approval_buttons_column.html +20 -6
- nautobot/extras/templates/extras/inc/bulk_edit_overridable_field.html +8 -7
- nautobot/extras/templates/extras/inc/configcontext_format.html +10 -3
- nautobot/extras/templates/extras/inc/graphqlquery_execute.html +71 -0
- nautobot/extras/templates/extras/inc/job_tiles.html +15 -3
- nautobot/extras/templates/extras/inc/json_format.html +10 -3
- nautobot/extras/templates/extras/inc/overridable_field.html +13 -12
- nautobot/extras/templates/extras/job.html +29 -12
- nautobot/extras/templates/extras/job_bulk_edit.html +18 -0
- nautobot/extras/templates/extras/job_edit.html +52 -46
- nautobot/extras/templates/extras/job_list.html +29 -25
- nautobot/extras/templates/extras/marketplace.html +5 -9
- nautobot/extras/templates/extras/object_configcontext.html +1 -1
- nautobot/extras/templates/extras/object_dynamicgroups.html +2 -2
- nautobot/extras/templates/extras/objectchange_retrieve.html +19 -39
- nautobot/extras/templates/extras/plugin_detail.html +29 -24
- nautobot/extras/templates/extras/plugins_list.html +16 -26
- nautobot/extras/templates/extras/role_retrieve.html +64 -0
- nautobot/extras/templates/extras/scheduledjob.html +4 -2
- nautobot/extras/templates/extras/secret_create.html +1 -1
- nautobot/extras/templatetags/custom_links.py +12 -12
- nautobot/extras/templatetags/job_buttons.py +14 -12
- nautobot/extras/test_jobs/invalid_import.py +9 -0
- nautobot/extras/test_jobs/log_counts_by_level.py +23 -0
- nautobot/extras/test_jobs/missing_import.py +11 -0
- nautobot/extras/tests/integration/test_computedfields.py +8 -9
- nautobot/extras/tests/integration/test_configcontextschema.py +27 -26
- nautobot/extras/tests/integration/test_customfields.py +9 -10
- nautobot/extras/tests/integration/test_dynamicgroups.py +12 -9
- nautobot/extras/tests/integration/test_plugin_banner.py +3 -0
- nautobot/extras/tests/integration/test_plugins.py +18 -6
- nautobot/extras/tests/integration/test_relationships.py +0 -2
- nautobot/extras/tests/test_api.py +90 -18
- nautobot/extras/tests/test_approvals.py +38 -38
- nautobot/extras/tests/test_changelog.py +59 -5
- nautobot/extras/tests/test_customfields.py +22 -13
- nautobot/extras/tests/test_customfields_filters.py +479 -0
- nautobot/extras/tests/test_dynamicgroups.py +39 -1
- nautobot/extras/tests/test_filters.py +57 -22
- nautobot/extras/tests/test_forms.py +18 -21
- nautobot/extras/tests/test_jobs.py +25 -4
- nautobot/extras/tests/test_migrations.py +1 -0
- nautobot/extras/tests/test_models.py +51 -33
- nautobot/extras/tests/test_plugins.py +36 -10
- nautobot/extras/tests/test_utils.py +3 -4
- nautobot/extras/tests/test_views.py +52 -112
- nautobot/extras/urls.py +0 -14
- nautobot/extras/views.py +164 -71
- nautobot/ipam/factory.py +7 -0
- nautobot/ipam/filter_mixins.py +38 -0
- nautobot/ipam/filters.py +53 -38
- nautobot/ipam/formfields.py +1 -1
- nautobot/ipam/forms.py +6 -3
- nautobot/ipam/migrations/0030_ipam__namespaces.py +13 -0
- nautobot/ipam/migrations/0031_ipam___data_migrations.py +4 -1
- nautobot/ipam/migrations/0054_namespace_tenant.py +25 -0
- nautobot/ipam/models.py +29 -2
- nautobot/ipam/navigation.py +3 -2
- nautobot/ipam/signals.py +71 -0
- nautobot/ipam/tables.py +19 -6
- nautobot/ipam/templates/ipam/inc/toggle_available.html +10 -10
- nautobot/ipam/templates/ipam/inc/vlangroup_header.html +1 -0
- nautobot/ipam/templates/ipam/ipaddress.html +14 -0
- nautobot/ipam/templates/ipam/ipaddress_merge.html +3 -3
- nautobot/ipam/templates/ipam/ipaddresstointerface_retrieve.html +1 -0
- nautobot/ipam/templates/ipam/namespace_ip_addresses.html +1 -1
- nautobot/ipam/templates/ipam/namespace_prefixes.html +1 -1
- nautobot/ipam/templates/ipam/namespace_update.html +15 -0
- nautobot/ipam/templates/ipam/namespace_vrfs.html +1 -1
- nautobot/ipam/templates/ipam/prefix_delete.html +1 -1
- nautobot/ipam/templates/ipam/prefix_list.html +14 -13
- nautobot/ipam/templates/ipam/vlan_interfaces.html +1 -1
- nautobot/ipam/templates/ipam/vlan_vminterfaces.html +1 -1
- nautobot/ipam/tests/migration/test_migrations.py +89 -0
- nautobot/ipam/tests/test_api.py +13 -6
- nautobot/ipam/tests/test_filters.py +36 -1
- nautobot/ipam/tests/test_forms.py +1 -1
- nautobot/ipam/tests/test_models.py +44 -2
- nautobot/ipam/tests/test_tables.py +1 -2
- nautobot/ipam/tests/test_utils.py +1 -1
- nautobot/ipam/tests/test_views.py +13 -14
- nautobot/ipam/ui.py +0 -17
- nautobot/ipam/utils/migrations.py +16 -2
- nautobot/ipam/utils/testing.py +9 -3
- nautobot/ipam/views.py +53 -11
- nautobot/load_balancers/__init__.py +0 -0
- nautobot/load_balancers/api/__init__.py +1 -0
- nautobot/load_balancers/api/serializers.py +75 -0
- nautobot/load_balancers/api/urls.py +23 -0
- nautobot/load_balancers/api/views.py +61 -0
- nautobot/load_balancers/apps.py +17 -0
- nautobot/load_balancers/choices.py +167 -0
- nautobot/load_balancers/filters.py +225 -0
- nautobot/load_balancers/forms.py +532 -0
- nautobot/load_balancers/management/commands/__init__.py +0 -0
- nautobot/load_balancers/management/commands/generate_load_balancer_models_test_data.py +38 -0
- nautobot/load_balancers/migrations/0001_initial.py +465 -0
- nautobot/load_balancers/migrations/0002_create_default_statuses_pool_members.py +31 -0
- nautobot/load_balancers/migrations/__init__.py +0 -0
- nautobot/load_balancers/models.py +423 -0
- nautobot/load_balancers/navigation.py +80 -0
- nautobot/load_balancers/tables.py +255 -0
- nautobot/load_balancers/tests/__init__.py +474 -0
- nautobot/load_balancers/tests/test_api.py +353 -0
- nautobot/load_balancers/tests/test_filters.py +134 -0
- nautobot/load_balancers/tests/test_forms.py +266 -0
- nautobot/load_balancers/tests/test_models.py +195 -0
- nautobot/load_balancers/tests/test_views.py +229 -0
- nautobot/load_balancers/urls.py +17 -0
- nautobot/load_balancers/views.py +248 -0
- nautobot/project-static/dist/css/github-dark.min.css +10 -0
- nautobot/project-static/dist/css/github.min.css +10 -0
- nautobot/project-static/dist/css/nautobot.css +1 -11
- nautobot/project-static/dist/css/nautobot.css.map +1 -1
- nautobot/project-static/dist/js/libraries.js +1 -1
- nautobot/project-static/dist/js/libraries.js.map +1 -1
- nautobot/project-static/dist/js/nautobot.js +1 -1
- nautobot/project-static/dist/js/nautobot.js.map +1 -1
- nautobot/project-static/js/cabletrace.js +1 -1
- nautobot/project-static/js/forms.js +13 -0
- nautobot/project-static/js/interface_filtering.js +20 -16
- nautobot/project-static/nautobot-icons/battery-3.svg +3 -0
- nautobot/project-static/nautobot-icons/bus-globe.svg +3 -0
- nautobot/project-static/nautobot-icons/bus-shield-check.svg +3 -0
- nautobot/project-static/nautobot-icons/bus-shield.svg +3 -0
- nautobot/project-static/nautobot-icons/cloud.svg +1 -1
- nautobot/project-static/nautobot-icons/control-panel.svg +1 -1
- nautobot/project-static/nautobot-icons/device-lifecycle.svg +1 -1
- nautobot/project-static/nautobot-icons/elements.svg +1 -1
- nautobot/project-static/nautobot-icons/extensibility.svg +3 -0
- nautobot/project-static/nautobot-icons/hammer.svg +1 -1
- nautobot/project-static/nautobot-icons/organization.svg +3 -0
- nautobot/project-static/nautobot-icons/secrets.svg +1 -1
- nautobot/project-static/nautobot-icons/security.svg +3 -0
- nautobot/project-static/nautobot-icons/server.svg +1 -1
- nautobot/project-static/nautobot-icons/star-filled.svg +1 -1
- nautobot/project-static/nautobot-icons/star.svg +1 -1
- nautobot/tenancy/api/serializers.py +1 -0
- nautobot/tenancy/api/views.py +2 -1
- nautobot/tenancy/{filters/__init__.py → filters.py} +2 -10
- nautobot/tenancy/navigation.py +3 -1
- nautobot/tenancy/tests/test_filters.py +0 -2
- nautobot/tenancy/views.py +2 -1
- nautobot/ui/package-lock.json +87 -4
- nautobot/ui/package.json +2 -1
- nautobot/ui/src/js/collapse.js +3 -3
- nautobot/ui/src/js/nautobot.js +16 -1
- nautobot/ui/src/js/select2.js +53 -2
- nautobot/ui/src/scss/colors.scss +1 -1
- nautobot/ui/src/scss/nautobot.scss +112 -30
- nautobot/ui/webpack.config.js +13 -0
- nautobot/users/templates/users/preferences.html +11 -2
- nautobot/users/templates/users/profile.html +45 -12
- nautobot/users/templates/users/sessionkey_delete.html +1 -1
- nautobot/users/tests/test_api.py +4 -0
- nautobot/users/views.py +4 -2
- nautobot/virtualization/filters.py +6 -1
- nautobot/virtualization/models.py +1 -68
- nautobot/virtualization/navigation.py +3 -2
- nautobot/virtualization/templates/virtualization/virtual_machine_vminterface_delete.html +1 -1
- nautobot/virtualization/templates/virtualization/virtualmachine_list.html +2 -2
- nautobot/virtualization/templates/virtualization/virtualmachine_update.html +3 -1
- nautobot/virtualization/tests/test_api.py +3 -0
- nautobot/virtualization/tests/test_filters.py +10 -1
- nautobot/virtualization/tests/test_models.py +45 -4
- nautobot/virtualization/views.py +4 -1
- nautobot/vpn/__init__.py +0 -0
- nautobot/vpn/api/serializers.py +113 -0
- nautobot/vpn/api/urls.py +19 -0
- nautobot/vpn/api/views.py +70 -0
- nautobot/vpn/apps.py +8 -0
- nautobot/vpn/choices.py +171 -0
- nautobot/vpn/factory.py +219 -0
- nautobot/vpn/filters.py +234 -0
- nautobot/vpn/forms.py +487 -0
- nautobot/vpn/homepage.py +19 -0
- nautobot/vpn/migrations/0001_initial.py +541 -0
- nautobot/vpn/migrations/0002_populate_defaults.py +199 -0
- nautobot/vpn/migrations/__init__.py +0 -0
- nautobot/vpn/models.py +535 -0
- nautobot/vpn/navigation.py +98 -0
- nautobot/vpn/tables.py +383 -0
- nautobot/vpn/templates/vpn/vpnprofile_create.html +150 -0
- nautobot/vpn/tests/__init__.py +0 -0
- nautobot/vpn/tests/test_api.py +336 -0
- nautobot/vpn/tests/test_filters.py +139 -0
- nautobot/vpn/tests/test_forms.py +293 -0
- nautobot/vpn/tests/test_models.py +147 -0
- nautobot/vpn/tests/test_views.py +300 -0
- nautobot/vpn/urls.py +16 -0
- nautobot/vpn/views.py +495 -0
- nautobot/wireless/navigation.py +3 -2
- nautobot/wireless/tests/integration/test_radio_profile.py +1 -5
- nautobot/wireless/tests/test_api.py +1 -1
- {nautobot-3.0.0a2.dist-info → nautobot-3.0.0rc1.dist-info}/METADATA +15 -15
- {nautobot-3.0.0a2.dist-info → nautobot-3.0.0rc1.dist-info}/RECORD +514 -572
- {nautobot-3.0.0a2.dist-info → nautobot-3.0.0rc1.dist-info}/entry_points.txt +1 -0
- nautobot/circuits/templates/circuits/circuit.html +0 -2
- nautobot/circuits/templates/circuits/circuit_edit.html +0 -2
- nautobot/circuits/templates/circuits/circuit_retrieve.html +0 -2
- nautobot/circuits/templates/circuits/circuit_update.html +0 -1
- nautobot/circuits/templates/circuits/circuittermination.html +0 -2
- nautobot/circuits/templates/circuits/circuittermination_edit.html +0 -2
- nautobot/circuits/templates/circuits/circuittermination_retrieve.html +0 -2
- nautobot/circuits/templates/circuits/circuittermination_update.html +0 -1
- nautobot/circuits/templates/circuits/circuittype.html +0 -2
- nautobot/circuits/templates/circuits/circuittype_retrieve.html +0 -2
- nautobot/circuits/templates/circuits/inc/circuit_termination.html +0 -85
- nautobot/circuits/templates/circuits/provider.html +0 -2
- nautobot/circuits/templates/circuits/provider_edit.html +0 -2
- nautobot/circuits/templates/circuits/provider_retrieve.html +0 -1
- nautobot/circuits/templates/circuits/provider_update.html +0 -1
- nautobot/circuits/templates/circuits/providernetwork.html +0 -2
- nautobot/circuits/templates/circuits/providernetwork_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudaccount_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudnetwork_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudresourcetype_retrieve.html +0 -2
- nautobot/cloud/templates/cloud/cloudservice_retrieve.html +0 -2
- nautobot/core/templates/buttons/import.html +0 -9
- nautobot/data_validation/template_content.py +0 -42
- nautobot/data_validation/templates/data_validation/datacompliance_retrieve.html +0 -1
- nautobot/dcim/filters/mixins.py +0 -354
- nautobot/dcim/templates/dcim/controller/base.html +0 -2
- nautobot/dcim/templates/dcim/controller_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/controller_wirelessnetworks.html +0 -2
- nautobot/dcim/templates/dcim/controllermanageddevicegroup_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/device/base.html +0 -2
- nautobot/dcim/templates/dcim/device/consoleports.html +0 -2
- nautobot/dcim/templates/dcim/device/consoleserverports.html +0 -2
- nautobot/dcim/templates/dcim/device/devicebays.html +0 -2
- nautobot/dcim/templates/dcim/device/frontports.html +0 -2
- nautobot/dcim/templates/dcim/device/interfaces.html +0 -2
- nautobot/dcim/templates/dcim/device/inventory.html +0 -2
- nautobot/dcim/templates/dcim/device/modulebays.html +0 -2
- nautobot/dcim/templates/dcim/device/poweroutlets.html +0 -2
- nautobot/dcim/templates/dcim/device/powerports.html +0 -2
- nautobot/dcim/templates/dcim/device/rearports.html +0 -2
- nautobot/dcim/templates/dcim/device/wireless.html +0 -2
- nautobot/dcim/templates/dcim/device_component.html +0 -2
- nautobot/dcim/templates/dcim/device_edit.html +0 -2
- nautobot/dcim/templates/dcim/devicefamily_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/deviceredundancygroup_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/devicetype.html +0 -2
- nautobot/dcim/templates/dcim/devicetype_edit.html +0 -2
- nautobot/dcim/templates/dcim/devicetype_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/inc/device_napalm_tabs.html +0 -1
- nautobot/dcim/templates/dcim/interfaceredundancygroup_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/location.html +0 -2
- nautobot/dcim/templates/dcim/location_edit.html +0 -2
- nautobot/dcim/templates/dcim/location_retrieve.html +0 -243
- nautobot/dcim/templates/dcim/locationtype.html +0 -2
- nautobot/dcim/templates/dcim/locationtype_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/manufacturer.html +0 -2
- nautobot/dcim/templates/dcim/modulebay_retrieve.html +0 -1
- nautobot/dcim/templates/dcim/platform.html +0 -2
- nautobot/dcim/templates/dcim/powerfeed.html +0 -2
- nautobot/dcim/templates/dcim/powerfeed_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/powerpanel.html +0 -2
- nautobot/dcim/templates/dcim/powerpanel_edit.html +0 -2
- nautobot/dcim/templates/dcim/powerpanel_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/rack.html +0 -2
- nautobot/dcim/templates/dcim/rack_edit.html +0 -2
- nautobot/dcim/templates/dcim/rackgroup.html +0 -2
- nautobot/dcim/templates/dcim/rackreservation.html +0 -2
- nautobot/dcim/templates/dcim/softwareimagefile_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/softwareversion_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis_add.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis_edit.html +0 -2
- nautobot/dcim/templates/dcim/virtualchassis_retrieve.html +0 -2
- nautobot/dcim/templates/dcim/virtualdevicecontext_retrieve.html +0 -2
- nautobot/dcim/ui.py +0 -29
- nautobot/extras/templates/extras/computedfield.html +0 -2
- nautobot/extras/templates/extras/computedfield_retrieve.html +0 -2
- nautobot/extras/templates/extras/configcontext.html +0 -2
- nautobot/extras/templates/extras/configcontext_edit.html +0 -2
- nautobot/extras/templates/extras/configcontext_retrieve.html +0 -2
- nautobot/extras/templates/extras/configcontextschema.html +0 -2
- nautobot/extras/templates/extras/configcontextschema_edit.html +0 -2
- nautobot/extras/templates/extras/contact_retrieve.html +0 -2
- nautobot/extras/templates/extras/customfield.html +0 -2
- nautobot/extras/templates/extras/customfield_edit.html +0 -2
- nautobot/extras/templates/extras/customfield_retrieve.html +0 -2
- nautobot/extras/templates/extras/customlink.html +0 -2
- nautobot/extras/templates/extras/dynamicgroup.html +0 -2
- nautobot/extras/templates/extras/dynamicgroup_edit.html +0 -2
- nautobot/extras/templates/extras/exporttemplate.html +0 -2
- nautobot/extras/templates/extras/gitrepository.html +0 -2
- nautobot/extras/templates/extras/gitrepository_object_edit.html +0 -2
- nautobot/extras/templates/extras/graphqlquery.html +0 -2
- nautobot/extras/templates/extras/graphqlquery_list.html +0 -1
- nautobot/extras/templates/extras/graphqlquery_retrieve.html +0 -97
- nautobot/extras/templates/extras/job_detail.html +0 -2
- nautobot/extras/templates/extras/jobbutton_retrieve.html +0 -2
- nautobot/extras/templates/extras/jobhook.html +0 -2
- nautobot/extras/templates/extras/jobqueue_retrieve.html +0 -2
- nautobot/extras/templates/extras/jobresult.html +0 -2
- nautobot/extras/templates/extras/metadatatype_retrieve.html +0 -2
- nautobot/extras/templates/extras/note.html +0 -2
- nautobot/extras/templates/extras/note_retrieve.html +0 -1
- nautobot/extras/templates/extras/object_changelog.html +0 -2
- nautobot/extras/templates/extras/object_notes.html +0 -2
- nautobot/extras/templates/extras/objectchange.html +0 -2
- nautobot/extras/templates/extras/objectchange_list.html +0 -3
- nautobot/extras/templates/extras/relationship.html +0 -1
- nautobot/extras/templates/extras/secret.html +0 -1
- nautobot/extras/templates/extras/secret_edit.html +0 -1
- nautobot/extras/templates/extras/secretsgroup.html +0 -2
- nautobot/extras/templates/extras/secretsgroup_edit.html +0 -2
- nautobot/extras/templates/extras/secretsgroup_retrieve.html +0 -2
- nautobot/extras/templates/extras/status.html +0 -2
- nautobot/extras/templates/extras/tag.html +0 -2
- nautobot/extras/templates/extras/tag_edit.html +0 -2
- nautobot/extras/templates/extras/tag_retrieve.html +0 -2
- nautobot/extras/templates/extras/team_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/inc/prefix_header_extra_content_table.html +0 -4
- nautobot/ipam/templates/ipam/namespace_retrieve.html +0 -1
- nautobot/ipam/templates/ipam/prefix.html +0 -2
- nautobot/ipam/templates/ipam/prefix_edit.html +0 -1
- nautobot/ipam/templates/ipam/prefix_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/rir.html +0 -2
- nautobot/ipam/templates/ipam/routetarget.html +0 -1
- nautobot/ipam/templates/ipam/service.html +0 -2
- nautobot/ipam/templates/ipam/service_edit.html +0 -2
- nautobot/ipam/templates/ipam/service_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/vlan.html +0 -2
- nautobot/ipam/templates/ipam/vlan_edit.html +0 -2
- nautobot/ipam/templates/ipam/vlan_retrieve.html +0 -2
- nautobot/ipam/templates/ipam/vlangroup.html +0 -2
- nautobot/ipam/templates/ipam/vrf.html +0 -1
- nautobot/tenancy/templates/tenancy/tenant.html +0 -2
- nautobot/tenancy/templates/tenancy/tenant_edit.html +0 -2
- nautobot/tenancy/templates/tenancy/tenantgroup.html +0 -2
- nautobot/tenancy/templates/tenancy/tenantgroup_retrieve.html +0 -1
- nautobot/virtualization/templates/virtualization/clustergroup.html +0 -2
- nautobot/virtualization/templates/virtualization/clustertype.html +0 -2
- nautobot/virtualization/templates/virtualization/virtualmachine.html +0 -2
- nautobot/virtualization/templates/virtualization/virtualmachine_edit.html +0 -2
- nautobot/virtualization/templates/virtualization/virtualmachine_retrieve.html +0 -2
- nautobot/wireless/templates/wireless/radioprofile_retrieve.html +0 -2
- nautobot/wireless/templates/wireless/supporteddatarate_retrieve.html +0 -2
- nautobot/wireless/templates/wireless/wirelessnetwork_retrieve.html +0 -2
- /nautobot/dcim/templates/dcim/{cable.html → cable_retrieve.html} +0 -0
- /nautobot/tenancy/{filters/mixins.py → filter_mixins.py} +0 -0
- {nautobot-3.0.0a2.dist-info → nautobot-3.0.0rc1.dist-info}/LICENSE.txt +0 -0
- {nautobot-3.0.0a2.dist-info → nautobot-3.0.0rc1.dist-info}/NOTICE +0 -0
- {nautobot-3.0.0a2.dist-info → nautobot-3.0.0rc1.dist-info}/WHEEL +0 -0
nautobot/core/templates/500.html
CHANGED
|
@@ -5,7 +5,7 @@
|
|
|
5
5
|
|
|
6
6
|
{% block content %}
|
|
7
7
|
<div class="row justify-content-center" style="margin-top: 9.375rem;">
|
|
8
|
-
<div class="col-
|
|
8
|
+
<div class="col-sm-12 col-md-9 col-lg-7 nb-lg-max-width">
|
|
9
9
|
<div class="card">
|
|
10
10
|
<div class="card-header">
|
|
11
11
|
<strong class="hstack gap-4"><span class="mdi mdi-alert"></span>Server Error</strong>
|
|
@@ -16,7 +16,7 @@
|
|
|
16
16
|
There was a problem with your request. Please contact an administrator.
|
|
17
17
|
</p>
|
|
18
18
|
{% endblock %}
|
|
19
|
-
<hr />
|
|
19
|
+
<hr class="border-top" />
|
|
20
20
|
<p>
|
|
21
21
|
The complete exception is provided below:
|
|
22
22
|
</p>
|
|
@@ -92,7 +92,7 @@
|
|
|
92
92
|
</header>
|
|
93
93
|
|
|
94
94
|
<main class="container-fluid wrapper{% if is_popup %} pb-0{% endif %}" id="main-content" tabindex="-1">
|
|
95
|
-
<div class="align-items-center d-flex gap-8 justify-content-end mb-16 d-print-none">
|
|
95
|
+
<div class="align-items-center d-flex gap-8 justify-content-end mb-16 d-print-none flex-wrap">
|
|
96
96
|
{% block object-tools %}{% endblock %}
|
|
97
97
|
</div>
|
|
98
98
|
<!-- Content -->
|
|
@@ -107,7 +107,6 @@
|
|
|
107
107
|
{% endif %}
|
|
108
108
|
{% include 'inc/footer.html' %}
|
|
109
109
|
{% endif %}
|
|
110
|
-
{% include 'modals/modal_theme.html' with name='theme'%}
|
|
111
110
|
|
|
112
111
|
{% block javascript %}
|
|
113
112
|
{% include 'inc/javascript.html' %}
|
|
@@ -1,5 +1,5 @@
|
|
|
1
1
|
{% extends "admin/base_site.html" %}
|
|
2
|
-
{% load i18n admin_urls static admin_list bootstrapped_goodies_tags %}
|
|
2
|
+
{% load i18n admin_urls static admin_list bootstrapped_goodies_tags helpers %}
|
|
3
3
|
|
|
4
4
|
{% block extrastyle %}
|
|
5
5
|
{{ block.super }}
|
|
@@ -41,17 +41,14 @@
|
|
|
41
41
|
|
|
42
42
|
{% block object-tools %}
|
|
43
43
|
{% block search %}{% search_form cl %}{% endblock %}
|
|
44
|
-
|
|
45
|
-
{%
|
|
46
|
-
{%
|
|
47
|
-
|
|
48
|
-
<
|
|
49
|
-
|
|
50
|
-
|
|
51
|
-
|
|
52
|
-
{% endif %}
|
|
53
|
-
{% endblock %}
|
|
54
|
-
</div>
|
|
44
|
+
{% block object-tools-items %}
|
|
45
|
+
{% if has_add_permission %}
|
|
46
|
+
{% url cl.opts|admin_urlname:'add' as add_url %}
|
|
47
|
+
<a role="button" href="{% add_preserved_filters add_url is_popup %}" class="btn btn-primary">
|
|
48
|
+
<span class="mdi mdi-plus-thick" aria-hidden="true"></span> {% blocktrans with cl.opts.verbose_name|bettertitle as name %}Add {{ name }}{% endblocktrans %}
|
|
49
|
+
</a>
|
|
50
|
+
{% endif %}
|
|
51
|
+
{% endblock %}
|
|
55
52
|
{% endblock %}
|
|
56
53
|
|
|
57
54
|
{% block content %}
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
{% block content %}
|
|
14
14
|
<form action="" method="post" enctype="multipart/form-data" id="changelist-form" class="form form-horizontal">
|
|
15
15
|
{% csrf_token %}
|
|
16
|
-
<div class="row">
|
|
17
|
-
<div class="col-lg-
|
|
16
|
+
<div class="row justify-content-center">
|
|
17
|
+
<div class="col-lg-8">
|
|
18
18
|
{% if form.non_field_errors %}
|
|
19
19
|
<div class="card border-danger">
|
|
20
20
|
<div class="card-header bg-danger-subtle border-danger text-body"><strong>Errors</strong></div>
|
|
@@ -59,14 +59,14 @@
|
|
|
59
59
|
</div>
|
|
60
60
|
{{ item.form_field.as_hidden }}
|
|
61
61
|
{% else %}
|
|
62
|
-
<div class="mb-10 d-flex justify-content-
|
|
63
|
-
<label class="col-
|
|
62
|
+
<div class="mb-10 d-md-flex align-content-start justify-content-between{% if item.form_field.errors %} has-error{% endif %}">
|
|
63
|
+
<label class="col-12 col-md-3 col-form-label" for="{{ item.form_field.id_for_label }}">
|
|
64
64
|
{{ name | split:"_" | join:" " }}
|
|
65
|
-
<span class="form-text">
|
|
65
|
+
<span class="form-text ps-2">
|
|
66
66
|
(default: <code>{{ item.default }}</code>)
|
|
67
67
|
</span>
|
|
68
68
|
</label>
|
|
69
|
-
<div class="col-
|
|
69
|
+
<div class="col-12 col-md-9">
|
|
70
70
|
{{ item.form_field.errors }}
|
|
71
71
|
{% if item.is_file %}{% trans "Current file" %}: <a href="{% get_media_prefix as MEDIA_URL %}{{ MEDIA_URL }}{{ item.value }}" target="_blank">{{ item.value }}</a>{% endif %}
|
|
72
72
|
{{ item.form_field }}
|
|
@@ -89,14 +89,14 @@
|
|
|
89
89
|
</div>
|
|
90
90
|
{{ item.form_field.as_hidden }}
|
|
91
91
|
{% else %}
|
|
92
|
-
<div class="mb-10 d-flex justify-content-
|
|
93
|
-
<label class="col-
|
|
92
|
+
<div class="mb-10 d-md-flex align-content-start justify-content-between{% if item.form_field.errors %} has-error{% endif %}">
|
|
93
|
+
<label class="col-12 col-md-3 d-flex d-md-block col-form-label" for="{{ item.form_field.id_for_label }}">
|
|
94
94
|
{{ item.name | split:"_" | join:" " }}
|
|
95
|
-
<span class="form-text">
|
|
95
|
+
<span class="form-text ps-2">
|
|
96
96
|
(default: <code>{{ item.default }}</code>)
|
|
97
97
|
</span>
|
|
98
98
|
</label>
|
|
99
|
-
<div class="col-
|
|
99
|
+
<div class="col-12 col-md-9">
|
|
100
100
|
{{ item.form_field.errors }}
|
|
101
101
|
{% if item.is_file %}{% trans "Current file" %}: <a href="{% get_media_prefix as MEDIA_URL %}{{ MEDIA_URL }}{{ item.value }}" target="_blank">{{ item.value }}</a>{% endif %}
|
|
102
102
|
{{ item.form_field }}
|
|
@@ -112,8 +112,8 @@
|
|
|
112
112
|
</div>
|
|
113
113
|
</div>
|
|
114
114
|
</div>
|
|
115
|
-
<div class="row">
|
|
116
|
-
<div class="col-lg-
|
|
115
|
+
<div class="row justify-content-center">
|
|
116
|
+
<div class="col-lg-8 text-end">
|
|
117
117
|
<input type="submit" name="_save" class="btn btn-primary" value="{% trans 'Save' %}"/>
|
|
118
118
|
</div>
|
|
119
119
|
</div>
|
|
@@ -14,19 +14,19 @@
|
|
|
14
14
|
<ul class="dropdown-menu" role="menu">
|
|
15
15
|
{% for app in app_list %}
|
|
16
16
|
<li>
|
|
17
|
-
<a href="#"><strong>{% render_app_name app %}</strong></a>
|
|
17
|
+
<a class="dropdown-item" href="#"><strong>{% render_app_name app %}</strong></a>
|
|
18
18
|
</li>
|
|
19
19
|
{% for model in app.models %}
|
|
20
20
|
<li>
|
|
21
21
|
{% if model.admin_url %}
|
|
22
|
-
<a href="{{ model.admin_url }}">{{ model.name }}</a>
|
|
22
|
+
<a class="dropdown-item" href="{{ model.admin_url }}">{{ model.name }}</a>
|
|
23
23
|
{% else %}
|
|
24
24
|
{{ model.name }}
|
|
25
25
|
{% endif %}
|
|
26
26
|
</li>
|
|
27
27
|
{% endfor %}
|
|
28
28
|
{% if not forloop.last %}
|
|
29
|
-
<li
|
|
29
|
+
<li><hr class="dropdown-divider"></li>
|
|
30
30
|
{% endif %}
|
|
31
31
|
{% endfor %}
|
|
32
32
|
</ul>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
</div>
|
|
27
27
|
<div class="container-fluid mb-12 mt-16">
|
|
28
28
|
<div class="row">
|
|
29
|
-
<div class="col-4">
|
|
29
|
+
<div id="page-title" class="col-4">
|
|
30
30
|
{% with copy_title=False %}
|
|
31
31
|
{% block page_title %}{% include "inc/page_title.html" with title=title_block_content copy_title=copy_title %}{% endblock %}
|
|
32
32
|
{% endwith %}
|
|
@@ -51,7 +51,6 @@
|
|
|
51
51
|
</div>
|
|
52
52
|
{% endif %}
|
|
53
53
|
{% endif %}
|
|
54
|
-
{% include 'modals/modal_theme.html' with name='theme'%}
|
|
55
54
|
{% include 'inc/footer.html' %}
|
|
56
55
|
{% include 'inc/javascript.html' %}
|
|
57
56
|
{% block javascript %}{% endblock %}
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<div class="
|
|
1
|
+
<div class="dropdown d-inline-flex">
|
|
2
2
|
<button type="button" class="btn btn-{{ color }} dropdown-toggle" data-bs-toggle="dropdown"
|
|
3
3
|
aria-haspopup="true" aria-expanded="false"
|
|
4
4
|
{% for key, value in attributes.items %}{{ key }}="{{ value }}" {% endfor %}
|
|
@@ -9,12 +9,14 @@
|
|
|
9
9
|
</button>
|
|
10
10
|
<ul class="dropdown-menu">
|
|
11
11
|
{% for child in children %}
|
|
12
|
-
<li
|
|
12
|
+
<li>
|
|
13
|
+
<a href="{{ child.link }}" class="dropdown-item text-{{ child.color }}"
|
|
13
14
|
{% for key, value in child.attributes.items %}{{ key }}="{{ value }}" {% endfor %}
|
|
14
15
|
>
|
|
15
16
|
{% if child.icon %}<span class="mdi {{ child.icon }}" aria-hidden="true"></span>{% endif %}
|
|
16
17
|
{{ child.label }}
|
|
17
|
-
</a
|
|
18
|
+
</a>
|
|
19
|
+
</li>
|
|
18
20
|
{% endfor %}
|
|
19
21
|
</ul>
|
|
20
22
|
</div>
|
|
@@ -4,7 +4,7 @@
|
|
|
4
4
|
{% if body_content_table_list_url %}
|
|
5
5
|
<a href="{{ body_content_table_list_url }}" class="badge bg-primary">{% if badge_count_override %}{{ badge_count_override }}{% else %}{{ body_content_table.rows|length }}{% endif %}</a>
|
|
6
6
|
{% elif body_content_table or badge_count_override %}
|
|
7
|
-
<span class="badge bg-
|
|
7
|
+
<span class="badge bg-secondary">
|
|
8
8
|
{% if badge_count_override %}
|
|
9
9
|
{{ badge_count_override }}
|
|
10
10
|
{% else %}
|
|
@@ -1,6 +1,6 @@
|
|
|
1
|
-
<div class="card">
|
|
1
|
+
<div class="card{% if css_class %} border-{{ css_class }}{% endif %}">
|
|
2
2
|
{% if label.strip or header_extra_content.strip %}
|
|
3
|
-
<div class="card-header">
|
|
3
|
+
<div class="card-header{% if css_class %} bg-{{ css_class }}-subtle border-{{ css_class }}{% endif %}">
|
|
4
4
|
{% if label %}
|
|
5
5
|
<strong>{{ label }}</strong>
|
|
6
6
|
{% endif %}
|
|
@@ -12,7 +12,7 @@
|
|
|
12
12
|
{% endif %}
|
|
13
13
|
{{ body }}
|
|
14
14
|
{% if footer_content.strip %}
|
|
15
|
-
<div class="card-footer">
|
|
15
|
+
<div class="card-footer{% if css_class %} bg-{{ css_class }}-subtle border-{{ css_class }}{% endif %}">
|
|
16
16
|
{{ footer_content }}
|
|
17
17
|
</div>
|
|
18
18
|
{% endif %}
|
|
@@ -6,24 +6,23 @@
|
|
|
6
6
|
|
|
7
7
|
<div id="{{ tab_id }}" role="tabpanel" class="tab-pane fade{% if active_tab == tab_id or request.GET.tab == tab_id %} show active{% endif %}">
|
|
8
8
|
{% if include_timestamps_and_buttons %}
|
|
9
|
-
<div class="align-items-center d-flex flex-wrap mb-16">
|
|
9
|
+
<div class="align-items-center d-flex flex-wrap mb-16 gap-8">
|
|
10
10
|
{% include 'inc/created_updated.html' %}
|
|
11
|
-
<div class="flex-
|
|
11
|
+
<div class="d-flex align-items-center gap-8 flex-grow-0 flex-wrap d-print-none ms-auto">
|
|
12
|
+
{% custom_links object %}
|
|
13
|
+
{% job_buttons object %}
|
|
12
14
|
{% block buttons %}
|
|
13
15
|
{% plugin_buttons object %}
|
|
14
16
|
{% render_detail_view_extra_buttons %}
|
|
15
17
|
{% block extra_buttons %}{% endblock extra_buttons %}
|
|
16
18
|
{% consolidate_detail_view_action_buttons %}
|
|
17
19
|
{% endblock buttons %}
|
|
18
|
-
{% custom_links object %}
|
|
19
|
-
{% job_buttons object %}
|
|
20
|
-
{% block panel_buttons %}{% endblock panel_buttons %}
|
|
21
20
|
</div>
|
|
22
21
|
</div>
|
|
23
22
|
{% else %}
|
|
24
|
-
<div class="align-items-center d-flex flex-wrap mb-16">
|
|
23
|
+
<div class="align-items-center d-flex flex-wrap mb-16 gap-8">
|
|
25
24
|
<div class="flex-grow-1 m-0"></div>
|
|
26
|
-
<div class="flex-
|
|
25
|
+
<div class="d-flex align-items-center gap-8 flex-grow-0 flex-wrap d-print-none ms-auto">
|
|
27
26
|
{% render_detail_view_extra_buttons %}
|
|
28
27
|
</div>
|
|
29
28
|
</div>
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{% comment %}disabled_message is not part of the default render context but a tab can define it if needed.{% endcomment %}
|
|
2
2
|
{% if disabled_message %}
|
|
3
3
|
<li class="nav-item" role="presentation" title="{{ disabled_message }}">
|
|
4
|
-
<a class="nav-link disabled"
|
|
4
|
+
<a aria-disabled="true" class="nav-link disabled">{{ label }}</a>
|
|
5
5
|
</li>
|
|
6
6
|
{% else %}
|
|
7
7
|
<li class="nav-item" role="presentation">
|
|
@@ -1,4 +1,4 @@
|
|
|
1
|
-
<div id="{{ chart_container_id }}" style="width: {{ chart_width }}; height: {{ chart_height }};"></div>
|
|
1
|
+
<div class="collapse show" id="{{ chart_container_id }}" style="width: {{ chart_width }}; height: {{ chart_height }};"></div>
|
|
2
2
|
<!-- Safe JSON export from Django -->
|
|
3
3
|
{% with "echarts-config-"|add:chart_container_id as chart_config_id %}
|
|
4
4
|
{{ chart_config|json_script:chart_config_id }}
|
|
@@ -6,15 +6,28 @@
|
|
|
6
6
|
|
|
7
7
|
<script type="text/javascript">
|
|
8
8
|
document.addEventListener('DOMContentLoaded', () => {
|
|
9
|
-
|
|
10
|
-
|
|
9
|
+
setTimeout(() => {
|
|
10
|
+
// Initialize the echarts instance based on the prepared dom
|
|
11
|
+
var myChart = window.echarts.init(document.getElementById("{{ chart_container_id }}"), null, { renderer: "{{ chart.renderer }}" });
|
|
11
12
|
|
|
12
|
-
|
|
13
|
-
|
|
14
|
-
|
|
15
|
-
|
|
13
|
+
// Get config from JSON script
|
|
14
|
+
var options = JSON.parse(
|
|
15
|
+
document.getElementById("echarts-config-{{ chart_container_id }}").textContent
|
|
16
|
+
);
|
|
16
17
|
|
|
17
|
-
|
|
18
|
-
|
|
18
|
+
// Get current theme
|
|
19
|
+
var currentTheme = document.documentElement.dataset.bsTheme || 'light';
|
|
20
|
+
|
|
21
|
+
// Display the chart using the configuration items and data just specified.
|
|
22
|
+
myChart.setOption({
|
|
23
|
+
...options,
|
|
24
|
+
// Enable dark mode if the current theme is dark
|
|
25
|
+
darkMode: currentTheme === 'dark',
|
|
26
|
+
// Update colors based on theme
|
|
27
|
+
color: Array.isArray(options.color)
|
|
28
|
+
? options.color.map((colorObj) => colorObj?.[currentTheme] || colorObj?.light || colorObj)
|
|
29
|
+
: options.color,
|
|
30
|
+
});
|
|
31
|
+
});
|
|
19
32
|
});
|
|
20
33
|
</script>
|
|
@@ -1,6 +1,8 @@
|
|
|
1
1
|
{% extends 'base.html' %}
|
|
2
2
|
{% load form_helpers %}
|
|
3
3
|
|
|
4
|
+
{% block title %}Add {{ model_name|title }}{% endblock %}
|
|
5
|
+
|
|
4
6
|
{% block content %}
|
|
5
7
|
<form action="." method="post" class="h-100 vstack">
|
|
6
8
|
{% csrf_token %}
|
|
@@ -11,7 +13,6 @@
|
|
|
11
13
|
{{ field }}
|
|
12
14
|
{% endfor %}
|
|
13
15
|
<div class="row align-content-start flex-fill">
|
|
14
|
-
<h1 class="mb-16">{% block title %}Add {{ model_name|title }}{% endblock %}</h1>
|
|
15
16
|
<p class="mb-16">{{ table.rows|length }} {{ parent_model_name }} selected</p>
|
|
16
17
|
<div class="col-lg-7">
|
|
17
18
|
<div class="card">
|
|
@@ -1,7 +1,7 @@
|
|
|
1
1
|
{% extends 'base.html' %}
|
|
2
2
|
{% comment %}
|
|
3
|
-
|
|
4
|
-
|
|
3
|
+
4.0 TODO: This file should be replaced by the 'system_jobs/import_objects.html' template eventually,
|
|
4
|
+
but for now many CSV import views still exist which use this template.
|
|
5
5
|
{% endcomment %}
|
|
6
6
|
{% load helpers %}
|
|
7
7
|
{% load form_helpers %}
|
|
@@ -25,11 +25,12 @@ Leaving it here for now in case apps are making use of it.
|
|
|
25
25
|
</style>
|
|
26
26
|
{% endblock %}
|
|
27
27
|
|
|
28
|
+
{% block title %}{{ obj_type|bettertitle }} Bulk Import{% endblock %}
|
|
29
|
+
|
|
28
30
|
{% block content %}
|
|
29
31
|
{% block tabs %}{% endblock %}
|
|
30
|
-
<div class="row">
|
|
31
|
-
<div class="col-
|
|
32
|
-
<h1 class="mb-16">{% block title %}{{ obj_type|bettertitle }} Bulk Import{% endblock %}</h1>
|
|
32
|
+
<div class="row justify-content-center">
|
|
33
|
+
<div class="col-lg-8 col-md-10">
|
|
33
34
|
{% if form.non_field_errors %}
|
|
34
35
|
<div class="card border-danger">
|
|
35
36
|
<div class="card-header bg-danger-subtle border-danger text-body">
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
{% extends 'generic/object_bulk_destroy.html' %}
|
|
2
|
-
{% comment %}
|
|
2
|
+
{% comment %}4.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -13,8 +13,8 @@
|
|
|
13
13
|
{% for field in form.hidden_fields %}
|
|
14
14
|
{{ field }}
|
|
15
15
|
{% endfor %}
|
|
16
|
-
<div class="row align-content-start flex-fill">
|
|
17
|
-
<div class="col-
|
|
16
|
+
<div class="row align-content-start justify-content-center flex-fill">
|
|
17
|
+
<div class="col-lg-8 col-md-10 d-flex justify-content-center">
|
|
18
18
|
<div class="card border-danger" id="confirm-bulk-deletion">
|
|
19
19
|
<div class="card-header bg-danger-subtle border-danger text-body">
|
|
20
20
|
<strong>Confirm Bulk Deletion</strong>
|
|
@@ -26,7 +26,7 @@
|
|
|
26
26
|
</div>
|
|
27
27
|
</div>
|
|
28
28
|
{% if table %}
|
|
29
|
-
<div class="col-
|
|
29
|
+
<div class="col-lg-8 col-md-10">
|
|
30
30
|
<div class="card">
|
|
31
31
|
<div class="table-responsive">
|
|
32
32
|
{% render_table table 'inc/table.html' %}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
{% extends 'generic/object_bulk_update.html' %}
|
|
2
|
-
{% comment %}
|
|
2
|
+
{% comment %}4.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
{% extends 'generic/object_bulk_create.html' %}
|
|
2
|
-
{% comment %}
|
|
2
|
+
{% comment %}4.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -9,8 +9,8 @@
|
|
|
9
9
|
{% for field in form.hidden_fields %}
|
|
10
10
|
{{ field }}
|
|
11
11
|
{% endfor %}
|
|
12
|
-
<div class="row align-content-start flex-fill">
|
|
13
|
-
<div class="col-
|
|
12
|
+
<div class="row align-content-start justify-content-center flex-fill">
|
|
13
|
+
<div class="col-lg-8 col-md-10 d-flex justify-content-center">
|
|
14
14
|
<div class="card border-danger">
|
|
15
15
|
<div class="card-header bg-danger-subtle border-danger text-body">
|
|
16
16
|
<strong>Confirm Bulk Removal</strong>
|
|
@@ -3,6 +3,8 @@
|
|
|
3
3
|
{% load form_helpers %}
|
|
4
4
|
{% load render_table from django_tables2 %}
|
|
5
5
|
|
|
6
|
+
{% block title %}Editing {{ objs_count }} {{ obj_type_plural|bettertitle }}{% endblock %}
|
|
7
|
+
|
|
6
8
|
{% block content %}
|
|
7
9
|
<form action="" method="post" class="h-100 vstack">
|
|
8
10
|
{% csrf_token %}
|
|
@@ -12,8 +14,7 @@
|
|
|
12
14
|
{% for field in form.hidden_fields %}
|
|
13
15
|
{{ field }}
|
|
14
16
|
{% endfor %}
|
|
15
|
-
<div class="row align-content-start flex-fill">
|
|
16
|
-
<h1 class="mb-16">{% block title %}Editing {{ objs_count }} {{ obj_type_plural|bettertitle }}{% endblock %}</h1>
|
|
17
|
+
<div class="row justify-content-center align-content-start flex-fill">
|
|
17
18
|
{% if form.errors %}
|
|
18
19
|
<div class="card border-danger">
|
|
19
20
|
<div class="card-header bg-danger-subtle border-danger text-body">
|
|
@@ -30,7 +31,7 @@
|
|
|
30
31
|
</div>
|
|
31
32
|
{% endif %}
|
|
32
33
|
{% if table %}
|
|
33
|
-
<div class="col-
|
|
34
|
+
<div class="col-lg-8">
|
|
34
35
|
<div class="card">
|
|
35
36
|
<div class="table-responsive">
|
|
36
37
|
{% render_table table 'inc/table.html' %}
|
|
@@ -38,7 +39,7 @@
|
|
|
38
39
|
</div>
|
|
39
40
|
</div>
|
|
40
41
|
{% endif %}
|
|
41
|
-
<div class="{% if table %}col-
|
|
42
|
+
<div class="{% if table %}col-lg-4{% else %}col-lg-8 col-md-12{% endif %}">
|
|
42
43
|
<div class="card">
|
|
43
44
|
<div class="card-header"><strong>{% block form_title %}Attributes{% endblock %}</strong></div>
|
|
44
45
|
<div class="card-body">
|
|
@@ -2,14 +2,16 @@
|
|
|
2
2
|
{% load form_helpers %}
|
|
3
3
|
{% load helpers %}
|
|
4
4
|
|
|
5
|
+
{% block title %}{% if editing %}Editing {{ obj_type }} {{ obj }}{% else %}Add a new {{ obj_type }}{% endif %}{% endblock %}
|
|
6
|
+
|
|
5
7
|
{% block content %}
|
|
6
8
|
<form action="" method="post" enctype="multipart/form-data" class="h-100 vstack">
|
|
7
9
|
{% csrf_token %}
|
|
8
10
|
{% for field in form.hidden_fields %}
|
|
9
11
|
{{ field }}
|
|
10
12
|
{% endfor %}
|
|
11
|
-
<div class="row align-content-start flex-fill">
|
|
12
|
-
<div class="col-lg-8
|
|
13
|
+
<div class="row justify-content-center align-content-start flex-fill">
|
|
14
|
+
<div class="col-lg-8 col-md-10 mb-10">
|
|
13
15
|
<h3>
|
|
14
16
|
{% if obj %}
|
|
15
17
|
{% with obj|get_docs_url as docs_url %}
|
|
@@ -20,10 +22,9 @@
|
|
|
20
22
|
{% endif %}
|
|
21
23
|
{% endwith %}
|
|
22
24
|
{% endif %}
|
|
23
|
-
{% block title %}{% if editing %}Editing {{ obj_type }} {{ obj }}{% else %}Add a new {{ obj_type }}{% endif %}{% endblock %}
|
|
24
25
|
</h3>
|
|
25
26
|
</div>
|
|
26
|
-
<div class="col-lg-8
|
|
27
|
+
<div class="col-lg-8 col-md-10">
|
|
27
28
|
{% block tabs %}{% endblock %}
|
|
28
29
|
{% block form_errors %}
|
|
29
30
|
{% if form.non_field_errors or model_form.non_field_errors %}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
{% extends 'generic/object_destroy.html' %}
|
|
2
|
-
{% comment %}
|
|
2
|
+
{% comment %}4.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
{% extends 'generic/object_retrieve.html' %}
|
|
2
|
-
{% comment %}
|
|
2
|
+
{% comment %}4.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -1,2 +1,2 @@
|
|
|
1
1
|
{% extends 'generic/object_create.html' %}
|
|
2
|
-
{% comment %}
|
|
2
|
+
{% comment %}4.0 TODO: remove this template, which only exists for backward compatibility with 2.4 and earlier{% endcomment %}
|
|
@@ -2,13 +2,14 @@
|
|
|
2
2
|
{% load helpers %}
|
|
3
3
|
{% load form_helpers %}
|
|
4
4
|
|
|
5
|
+
{% block title %}{{ obj_type|bettertitle }} Import{% endblock %}
|
|
6
|
+
|
|
5
7
|
{% block content %}
|
|
6
8
|
{% block tabs %}{% endblock %}
|
|
7
9
|
<form action="" method="post" class="object-import-form h-100 vstack">
|
|
8
10
|
{% csrf_token %}
|
|
9
11
|
<div class="row align-content-start flex-fill">
|
|
10
12
|
<div class="col-md-8 offset-md-2">
|
|
11
|
-
<h1>{% block title %}{{ obj_type|bettertitle }} Import{% endblock %}</h1>
|
|
12
13
|
{% if form.non_field_errors %}
|
|
13
14
|
<div class="card border-danger">
|
|
14
15
|
<div class="card-header bg-danger-subtle border-danger text-body">
|
|
@@ -156,17 +156,25 @@
|
|
|
156
156
|
data-bs-target="#dynamic_group_assignment_modal"
|
|
157
157
|
data-objects="all"
|
|
158
158
|
class="btn btn-primary btn-sm"
|
|
159
|
-
disabled
|
|
159
|
+
disabled>
|
|
160
160
|
<span class="mdi mdi-group me-4" aria-hidden="true"></span>Update Group Assignment for All
|
|
161
161
|
</button>
|
|
162
162
|
{% endif %}
|
|
163
163
|
{% if bulk_edit_url and permissions.change %}
|
|
164
|
-
<button type="submit"
|
|
164
|
+
<button type="submit"
|
|
165
|
+
name="_edit"
|
|
166
|
+
formaction="{% url bulk_edit_url %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}"
|
|
167
|
+
class="btn btn-warning btn-sm"
|
|
168
|
+
disabled>
|
|
165
169
|
<span class="mdi mdi-pencil me-4" aria-hidden="true"></span>Edit All
|
|
166
170
|
</button>
|
|
167
171
|
{% endif %}
|
|
168
172
|
{% if bulk_delete_url and permissions.delete %}
|
|
169
|
-
<button type="submit"
|
|
173
|
+
<button type="submit"
|
|
174
|
+
name="_delete"
|
|
175
|
+
formaction="{% url bulk_delete_url %}{% if request.GET %}?{{ request.GET.urlencode }}{% endif %}"
|
|
176
|
+
class="btn btn-danger btn-sm"
|
|
177
|
+
disabled>
|
|
170
178
|
<span class="mdi mdi-trash-can-outline me-4" aria-hidden="true"></span>Delete All
|
|
171
179
|
</button>
|
|
172
180
|
{% endif %}
|
|
@@ -297,7 +305,7 @@
|
|
|
297
305
|
</a>
|
|
298
306
|
{% if current_saved_view %}
|
|
299
307
|
{% if current_saved_view.owner == user %}
|
|
300
|
-
<a class="btn btn-danger" href="{% url 'extras:savedview_delete' pk=current_saved_view.pk %}">
|
|
308
|
+
<a class="btn btn-danger" href="{% url 'extras:savedview_delete' pk=current_saved_view.pk %}?return_url={{ request.path }}">
|
|
301
309
|
<span class="mdi mdi-trash-can-outline me-4" aria-hidden="true"></span>Delete Current
|
|
302
310
|
</a>
|
|
303
311
|
{% else %}
|
|
@@ -5,8 +5,8 @@
|
|
|
5
5
|
{% block content %}
|
|
6
6
|
{% if perms.extras.add_note %}
|
|
7
7
|
<form action="{% url 'extras:note_add' %}?return_url={{ request.path }}?tab=notes" method="post" enctype="multipart/form-data">
|
|
8
|
-
<div class="row">
|
|
9
|
-
<div class="col-md-
|
|
8
|
+
<div class="row justify-content-center">
|
|
9
|
+
<div class="col-md-10 col-lg-8">
|
|
10
10
|
<h3 class="mb-16">Add a new note</h3>
|
|
11
11
|
<div class="card">
|
|
12
12
|
<div class="card-header">
|
|
@@ -18,7 +18,9 @@
|
|
|
18
18
|
</div>
|
|
19
19
|
</div>
|
|
20
20
|
</div>
|
|
21
|
-
|
|
21
|
+
</div>
|
|
22
|
+
<div class="row justify-content-center">
|
|
23
|
+
<div class="col-md-10 col-lg-8 gap-8 hstack justify-content-end mb-16">
|
|
22
24
|
<button id="createNote" type="submit" class="btn btn-primary">
|
|
23
25
|
<span aria-hidden="true" class="mdi mdi-check me-4"></span><!--
|
|
24
26
|
-->Create
|
|
@@ -129,18 +129,17 @@
|
|
|
129
129
|
{% render_components object_detail_content.tabs %}
|
|
130
130
|
{% else %}
|
|
131
131
|
<div id="main" role="tabpanel" class="tab-pane {% if active_tab == "main" or request.GET.tab == "main" %}active{% else %}fade{% endif %}">
|
|
132
|
-
<div class="align-items-center d-flex flex-wrap mb-16">
|
|
132
|
+
<div class="align-items-center d-flex flex-wrap mb-16 gap-8">
|
|
133
133
|
{% include 'inc/created_updated.html' %}
|
|
134
|
-
<div class="flex-
|
|
134
|
+
<div class="d-flex align-items-center gap-8 flex-grow-0 flex-wrap d-print-none ms-auto">
|
|
135
|
+
{% custom_links object %}
|
|
136
|
+
{% job_buttons object %}
|
|
135
137
|
{% block buttons %}
|
|
136
138
|
{% plugin_buttons object %}
|
|
137
139
|
{% render_detail_view_extra_buttons %}
|
|
138
140
|
{% block extra_buttons %}{% endblock extra_buttons %}
|
|
139
141
|
{% consolidate_detail_view_action_buttons %}
|
|
140
142
|
{% endblock buttons %}
|
|
141
|
-
{% custom_links object %}
|
|
142
|
-
{% job_buttons object %}
|
|
143
|
-
{% block panel_buttons %}{% endblock panel_buttons %}
|
|
144
143
|
</div>
|
|
145
144
|
</div>
|
|
146
145
|
<div class="row">
|