diff options
Diffstat (limited to 'ishtar_common')
-rw-r--r-- | ishtar_common/forms_common.py | 2 | ||||
-rw-r--r-- | ishtar_common/models.py | 4 | ||||
-rw-r--r-- | ishtar_common/widgets.py | 23 |
3 files changed, 23 insertions, 6 deletions
diff --git a/ishtar_common/forms_common.py b/ishtar_common/forms_common.py index 22cd81e7b..061ae49b0 100644 --- a/ishtar_common/forms_common.py +++ b/ishtar_common/forms_common.py @@ -1101,7 +1101,7 @@ class BaseImageForm(ManageOldType): name = forms.CharField(label=_(u"Name"), max_length=250, required=False) authors = widgets.Select2MultipleField( model=models.Author, remote=True, label=_(u"Authors"), - required=False, long_widget=True + required=False, long_widget=True, new=True ) description = forms.CharField(label=_(u"Description"), required=False, widget=forms.Textarea) diff --git a/ishtar_common/models.py b/ishtar_common/models.py index 53f4e1c11..ab70faaa0 100644 --- a/ishtar_common/models.py +++ b/ishtar_common/models.py @@ -2904,10 +2904,12 @@ post_delete.connect(post_save_cache, sender=AuthorType) class Author(FullSearch): + PARENT_SEARCH_VECTORS = ['person'] + SLUG = "author" + person = models.ForeignKey(Person, verbose_name=_(u"Person"), related_name='author') author_type = models.ForeignKey(AuthorType, verbose_name=_(u"Author type")) - PARENT_SEARCH_VECTORS = ['person'] class Meta: verbose_name = _(u"Author") diff --git a/ishtar_common/widgets.py b/ishtar_common/widgets.py index e33669e19..442f12b9a 100644 --- a/ishtar_common/widgets.py +++ b/ishtar_common/widgets.py @@ -103,11 +103,12 @@ class SelectReadonlyField(forms.ChoiceField): class Select2Multiple(forms.SelectMultiple): def __init__(self, attrs=None, choices=(), remote=None, model=None, - available=None): + new=None, available=None): super(Select2Multiple, self).__init__(attrs, choices) self.remote = remote self.available = available self.model = model + self.new = new @property def media(self): @@ -152,7 +153,7 @@ class Select2Multiple(forms.SelectMultiple): attrs['class'] = klass if 'style' not in attrs: if attrs.get('full-width', None): - attrs['style'] = "width: 100%" + attrs['style'] = "width: calc(100% - 60px)" else: attrs['style'] = "width: 370px" @@ -195,7 +196,18 @@ class Select2Multiple(forms.SelectMultiple): options = "{" options += " containerCssClass: 'full-width'}" self.choices = choices - html = super(Select2Multiple, self).render(name, value, attrs) + + new, html = "", "" + if self.new: + html = u"<div class='input-group'>" + url_new = 'new-' + self.model.SLUG + url_new = reverse(url_new) + new = u'<span class="input-group-append">' \ + u'<a href="#" class="add-button input-group-text" ' \ + u'onclick="open_window(\'%s\');">+</a></span></div>' % url_new + + html += super(Select2Multiple, self).render(name, value, attrs) + html += new html += """<script type="text/javascript"> $(document).ready(function() {{ $("#id_{}").select2({}); @@ -220,6 +232,9 @@ class CheckboxSelectMultiple(CheckboxSelectMultipleBase): class Select2MultipleField(forms.MultipleChoiceField): def __init__(self, *args, **kwargs): + new = None + if 'new' in kwargs: + new = kwargs.pop('new') remote = None if 'remote' in kwargs: remote = kwargs.pop('remote') @@ -241,7 +256,7 @@ class Select2MultipleField(forms.MultipleChoiceField): attrs['full-width'] = True kwargs['widget'] = Select2Multiple( model=self.model, available=self.available, remote=self.remote, - attrs=attrs + new=new, attrs=attrs ) super(Select2MultipleField, self).__init__(*args, **kwargs) |