|
1 | | -import json |
2 | | -from types import SimpleNamespace |
3 | | - |
4 | | -from cms.utils.urlutils import admin_reverse |
5 | 1 | from django import apps, forms |
6 | 2 | from django.conf import settings as django_settings |
7 | | -from django.contrib.admin.widgets import SELECT2_TRANSLATIONS, AutocompleteMixin |
8 | 3 | from django.contrib.sites.models import Site |
9 | | -from django.utils.translation import get_language |
10 | 4 | from django.utils.translation import gettext as _ |
11 | 5 | from djangocms_link.fields import LinkFormField |
12 | 6 |
|
@@ -45,69 +39,6 @@ def __init__(self, *args, **kwargs): |
45 | 39 | super().__init__(*args, **kwargs) |
46 | 40 |
|
47 | 41 |
|
48 | | -HOSTNAME = getattr(settings, "DJANGOCMS_LINK_INTRANET_HOSTNAME_PATTERN", None) |
49 | | -LINK_MODELS = getattr(django_settings, "DJANGOCMS_FRONTEND_LINK_MODELS", []) |
50 | | -MINIMUM_INPUT_LENGTH = getattr(django_settings, "DJANGOCMS_FRONTEND_MINIMUM_INPUT_LENGTH", 0) |
51 | | - |
52 | | - |
53 | | -class Select2jqWidget(AutocompleteMixin, forms.Select): |
54 | | - empty_label = _("Select a destination") |
55 | | - |
56 | | - def __init__(self, *args, **kwargs): |
57 | | - if MINIMUM_INPUT_LENGTH: # no-cover |
58 | | - if "attrs" in kwargs: |
59 | | - kwargs["attrs"].setdefault("data-minimum-input-length", MINIMUM_INPUT_LENGTH) |
60 | | - else: |
61 | | - kwargs["attrs"] = {"data-minimum-input-length": MINIMUM_INPUT_LENGTH} |
62 | | - kwargs.setdefault("admin_site", None) |
63 | | - kwargs.setdefault( |
64 | | - "field", |
65 | | - SimpleNamespace( |
66 | | - name="", model=SimpleNamespace(_meta=SimpleNamespace(app="djangocms_frontend", label="link")) |
67 | | - ), |
68 | | - ) # Fake field properties for autocomplete field (unused by link) |
69 | | - super().__init__(*args, **kwargs) |
70 | | - |
71 | | - def get_url(self): |
72 | | - return admin_reverse("link_link_autocomplete") |
73 | | - |
74 | | - def build_attrs(self, base_attrs, extra_attrs=None): |
75 | | - """ |
76 | | - Set select2's AJAX attributes. |
77 | | -
|
78 | | - Attributes can be set using the html5 data attribute. |
79 | | - Nested attributes require a double dash as per |
80 | | - https://select2.org/configuration/data-attributes#nested-subkey-options |
81 | | - """ |
82 | | - attrs = super(forms.Select, self).build_attrs(base_attrs, extra_attrs=extra_attrs) |
83 | | - attrs.setdefault("class", "") |
84 | | - i18n_name = getattr(self, "i18n_name", SELECT2_TRANSLATIONS.get(get_language())) # Django 3.2 compat |
85 | | - attrs.update( |
86 | | - { |
87 | | - "data-ajax--cache": "true", |
88 | | - "data-ajax--delay": 250, |
89 | | - "data-ajax--type": "GET", |
90 | | - "data-ajax--url": self.get_url(), |
91 | | - "data-theme": "admin-autocomplete", |
92 | | - "data-app-label": "app", |
93 | | - "data-model-name": "model", |
94 | | - "data-field-name": "field", |
95 | | - "data-allow-clear": json.dumps(not self.is_required), |
96 | | - "data-placeholder": "", # Allows clearing of the input. |
97 | | - "lang": i18n_name, |
98 | | - "class": attrs["class"] + (" " if attrs["class"] else "") + "admin-autocomplete", |
99 | | - } |
100 | | - ) |
101 | | - return attrs |
102 | | - |
103 | | - def optgroups(self, name, value, attr=None): |
104 | | - groups = super(forms.Select, self).optgroups(name, value) |
105 | | - if not self.is_required and groups: |
106 | | - # Add an empty entry to allow for an empty value to be preselected |
107 | | - groups[0][1].insert(0, self.create_option(name, "", "", False, 0)) |
108 | | - return groups |
109 | | - |
110 | | - |
111 | 42 | if apps.apps.is_installed("djangocms_url_manager"): |
112 | 43 | from djangocms_url_manager.forms import ( |
113 | 44 | HtmlLinkSiteSelectWidget, |
|
0 commit comments