Skip to content

Commit

Permalink
1.0.10引出的bug
Browse files Browse the repository at this point in the history
  • Loading branch information
gojuukaze committed Jan 27, 2022
1 parent 9c9c41b commit e445254
Show file tree
Hide file tree
Showing 8 changed files with 46 additions and 28 deletions.
15 changes: 8 additions & 7 deletions README.md
Original file line number Diff line number Diff line change
Expand Up @@ -152,14 +152,15 @@ class People(models.Model):

# Field Arguments

Name | Type | Default | Info
------------------- | ---------- | ----------- | --------------------------------------------------------------------------
place_holder | string | "" | placeholder
delimiters | string | "," | split tags by any of these delimiters. Example: Space or Coma - ", "
Name | Type | Default | Info
------------------- |---------------| ----------- | --------------------------------------------------------------------------
place_holder | string | "" | placeholder
delimiters | string | "," | split tags by any of these delimiters. Example: Space or Coma - ", "
data_list | list/function | [] | an array of tags which they are allowed
black_list | list | [] | an array of tags which aren't allowed
max_tags | int | None | max number of tags
suggestions_chars | int | 1 | minimum characters to input which shows the sugegstions list
black_list | list | [] | an array of tags which aren't allowed
max_tags | int | None | max number of tags
suggestions_chars | int | 1 | minimum characters to input which shows the sugegstions list
pattern | string | "" | Validate input by RegEx pattern. Ex: "[1-9]"

# Example

Expand Down
17 changes: 11 additions & 6 deletions tagify/fields.py
Original file line number Diff line number Diff line change
@@ -1,3 +1,5 @@
import json

from django import forms
from django.core import validators

Expand All @@ -9,8 +11,8 @@ class TagField(forms.CharField):
widget = TagInput

def __init__(self, *, place_holder='', delimiters=' ', data_list=None,
suggestions_chars=1, black_list=None, max_tags=None,
max_length=None, min_length=None, strip=True, var_name=None, empty_value='', **kwargs):
suggestions_chars=1, black_list=None, max_tags=None, pattern='', var_name='',
max_length=None, min_length=None, strip=True, empty_value='', **kwargs):

self.max_length = max_length
self.min_length = min_length
Expand All @@ -32,17 +34,20 @@ def __init__(self, *, place_holder='', delimiters=' ', data_list=None,
tag_args['suggestionsMinChars'] = suggestions_chars
tag_args['blacklist'] = black_list if black_list else []
tag_args['maxTags'] = max_tags
setattr(self.widget, 'var_name', var_name)
tag_args['pattern'] = pattern
tag_args['var_name'] = var_name

setattr(self.widget, 'tag_args', tag_args)

def to_python(self, value):
value = super().to_python(value)
return value.split(self.delimiters)
return [v['value'] for v in json.loads(value)]
# return value.split(self.delimiters)

def set_var_name(self, value):

self.widget.var_name = value

def set_tag_args(self, key, value):
key=NameDict.get(key,key)
key = NameDict.get(key, key)
self.widget.tag_args[key] = value
7 changes: 5 additions & 2 deletions tagify/models.py
Original file line number Diff line number Diff line change
Expand Up @@ -3,7 +3,7 @@

class TagField(models.Field):

def __init__(self, place_holder='', delimiters=' ', data_list=None,
def __init__(self, place_holder='', delimiters=' ', data_list=None, pattern='', var_name='',
suggestions_chars=1, black_list=None, max_tags=None, *args, **kwargs):
super().__init__(*args, **kwargs)

Expand All @@ -15,12 +15,15 @@ def __init__(self, place_holder='', delimiters=' ', data_list=None,
self.tag_args['suggestions_chars'] = suggestions_chars
self.tag_args['black_list'] = black_list
self.tag_args['max_tags'] = max_tags
self.tag_args['pattern'] = pattern
self.tag_args['var_name'] = var_name

def get_internal_type(self):
return "TextField"

def get_db_prep_value(self, value, connection, prepared=False):
return self.delimiters.join(value)
value = self.delimiters.join(value)
return super(TagField, self).get_db_prep_value(value, connection, prepared)

def formfield(self, **kwargs):
from tagify.fields import TagField as FormTagField
Expand Down
2 changes: 1 addition & 1 deletion tagify/static/tagify/css/tagify.css

Large diffs are not rendered by default.

4 changes: 2 additions & 2 deletions tagify/static/tagify/js/tagify.min.js

Large diffs are not rendered by default.

7 changes: 7 additions & 0 deletions tagify/static/tagify/js/tagify.polyfills.min.js

Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.

13 changes: 9 additions & 4 deletions tagify/templates/tagify/tagify_input.html
Original file line number Diff line number Diff line change
@@ -1,12 +1,17 @@
<input placeholder="{{ widget.tag_args.placeholder }}" autocomplete="off" type="{{ widget.type }}" name="{{ widget.name }}"{% if widget.value != None %}
<input placeholder="{{ widget.tag_args.placeholder }}" autocomplete="off" type="{{ widget.type }}"
name="{{ widget.name }}"{% if widget.value != None %}
value="{{ widget.value|stringformat:'s' }}"{% endif %}{% include "django/forms/widgets/attrs.html" %} />
<script>
{% if widget.var_name %} var {{widget.var_name}} = {% endif %} new Tagify(document.querySelector('input[name={{widget.name}}]'), {
let args = {
delimiters: "{{widget.tag_args.delimiters}}",
pattern: {{widget.tag_args.pattern}},
whitelist: {{widget.tag_args.whitelist|safe}},
suggestionsMinChars:{{widget.tag_args.suggestionsMinChars}},
blacklist:{{widget.tag_args.blacklist|safe}},
{% if widget.tag_args.maxTags != None %}maxTags:{{widget.tag_args.maxTags}}{%endif%}
})

}
{% if widget.tag_args.pattern %}args.pattern=/{{widget.tag_args.pattern}}/{%endif%}

{% if widget.tag_args.var_name %}
var {{widget.tag_args.var_name}} = {% endif %} new Tagify(document.querySelector('input[name={{widget.name}}]'), args)
</script>
9 changes: 3 additions & 6 deletions tagify/widgets.py
Original file line number Diff line number Diff line change
@@ -1,6 +1,4 @@
from django import forms
from django.conf import settings
from django.core.exceptions import ImproperlyConfigured
from django.templatetags.static import static


Expand All @@ -12,19 +10,18 @@ class Media:
template_name = "tagify/tagify_input.html"
tag_args = {}
var_name = None


def get_context(self, name, value, attrs):
context = super().get_context(name, value, attrs)
context["widget"]["type"] = self.input_type
context["widget"]["var_name"] = getattr(self, "var_name", None)
context["widget"]["tag_args"] = getattr(self, "tag_args", None) or {
"placeholder": "write some tags",
"delimiters": ",",
"pattern": "/^.*$/",
"delimiters": " ",
"pattern": "",
"whitelist": [],
"suggestionsMinChars": 1,
"blacklist": [],
"maxTags": None,
'var_name': '',
}
return context

0 comments on commit e445254

Please sign in to comment.