diff --git a/doc/advanced.rst b/doc/advanced.rst index 2f3dcba10c..56b361b8cd 100644 --- a/doc/advanced.rst +++ b/doc/advanced.rst @@ -37,6 +37,10 @@ of how to configure Flask-Admin to inject CSP nonce values:: app, content_security_policy={ "default-src": "'self'", + "script-src": "'self'", + "style-src": "'self' 'unsafe-inline' fonts.googleapis.com ", + "font-src": "'self' fonts.gstatic.com data: ", + "img-src": "'self' data: ", }, content_security_policy_nonce_in=["script-src", "style-src"] ) diff --git a/flask_admin/form/widgets.py b/flask_admin/form/widgets.py index eb4e858b39..d2af836bb4 100644 --- a/flask_admin/form/widgets.py +++ b/flask_admin/form/widgets.py @@ -107,12 +107,20 @@ def __init__(self, template: str) -> None: self.template = template def __call__(self, field: Field, **kwargs: t.Any) -> str: + admin = h.g._admin_view.admin + admin_csp_nonce_attribute = ( + Markup(f'nonce="{admin.csp_nonce_generator()}"') + if admin.csp_nonce_generator + else "" + ) + kwargs.update( { "field": field, "_gettext": gettext, "_ngettext": ngettext, "h": h, + "admin_csp_nonce_attribute": admin_csp_nonce_attribute, } ) diff --git a/flask_admin/static/admin/js/helpers.js b/flask_admin/static/admin/js/helpers.js index bf8d2601ee..fd51499a60 100644 --- a/flask_admin/static/admin/js/helpers.js +++ b/flask_admin/static/admin/js/helpers.js @@ -9,4 +9,10 @@ } } }; + + $('.a-unlink').on('click', function(e) { + console.log('click a-unlink'); + e.preventDefault(); + }); + })(); diff --git a/flask_admin/templates/bootstrap4/admin/actions.html b/flask_admin/templates/bootstrap4/admin/actions.html index 89899089b8..f94bf6236a 100644 --- a/flask_admin/templates/bootstrap4/admin/actions.html +++ b/flask_admin/templates/bootstrap4/admin/actions.html @@ -1,16 +1,29 @@ {% import 'admin/static.html' as admin_static with context %} {% macro dropdown(actions, btn_class='nav-link dropdown-toggle') -%} - + + {% endmacro %} + {% macro form(actions, url) %} {% if actions %}
diff --git a/flask_admin/templates/bootstrap4/admin/file/list.html b/flask_admin/templates/bootstrap4/admin/file/list.html index dc9be0191f..341e2d9198 100644 --- a/flask_admin/templates/bootstrap4/admin/file/list.html +++ b/flask_admin/templates/bootstrap4/admin/file/list.html @@ -89,7 +89,8 @@ {% if delete_form.csrf_token is defined and delete_form.csrf_token %} {{ delete_form.csrf_token }} {% endif %} -
@@ -100,7 +101,8 @@ {% if delete_form.csrf_token is defined and delete_form.csrf_token %} {{ delete_form.csrf_token }} {% endif %} - @@ -192,4 +194,15 @@ actions, actions_confirmation) }} + + + {% endblock %} diff --git a/flask_admin/templates/bootstrap4/admin/layout.html b/flask_admin/templates/bootstrap4/admin/layout.html index a1cdc69850..f5a89e55f4 100644 --- a/flask_admin/templates/bootstrap4/admin/layout.html +++ b/flask_admin/templates/bootstrap4/admin/layout.html @@ -30,7 +30,7 @@
  • - + {% if item.class_name %} {% endif %} {{ menu_icon(item) }}{{ item.name }} diff --git a/flask_admin/templates/bootstrap4/admin/lib.html b/flask_admin/templates/bootstrap4/admin/lib.html index a99a78ca7e..608c85c8a1 100644 --- a/flask_admin/templates/bootstrap4/admin/lib.html +++ b/flask_admin/templates/bootstrap4/admin/lib.html @@ -27,7 +27,7 @@
  • {% else %}
  • - « + «
  • {% endif %} {% if page > 0 %} @@ -36,14 +36,14 @@ {% else %}
  • - < + <
  • {% endif %} {% for p in range(min, max) %} {% if page == p %}
  • - {{ p + 1 }} + {{ p + 1 }}
  • {% else %}
  • @@ -58,7 +58,7 @@
  • {% else %}
  • - > + >
  • {% endif %} {% if max < pages %} @@ -67,7 +67,7 @@ {% else %}
  • - » + »
  • {% endif %} diff --git a/flask_admin/templates/bootstrap4/admin/model/create.html b/flask_admin/templates/bootstrap4/admin/model/create.html index 1620f24bcf..af5532c590 100644 --- a/flask_admin/templates/bootstrap4/admin/model/create.html +++ b/flask_admin/templates/bootstrap4/admin/model/create.html @@ -14,7 +14,7 @@ {{ _gettext('List') }} {% endblock %} diff --git a/flask_admin/templates/bootstrap4/admin/model/details.html b/flask_admin/templates/bootstrap4/admin/model/details.html index 4e6408b27c..d80bf96976 100644 --- a/flask_admin/templates/bootstrap4/admin/model/details.html +++ b/flask_admin/templates/bootstrap4/admin/model/details.html @@ -18,7 +18,7 @@ {%- endif -%} {% endblock %} diff --git a/flask_admin/templates/bootstrap4/admin/model/edit.html b/flask_admin/templates/bootstrap4/admin/model/edit.html index c5631a8bb8..da65609ea4 100644 --- a/flask_admin/templates/bootstrap4/admin/model/edit.html +++ b/flask_admin/templates/bootstrap4/admin/model/edit.html @@ -19,7 +19,7 @@ {%- endif -%} {%- if admin_view.can_view_details -%}