class ProjectUpdateForm(forms.ModelForm): """Form for updating a project instance""" tags = TaggitField(widget=TaggitWidget( 'TagAutocomplete', attrs={'placeholder': 'Search tags'}), help_text='Separate tags with commas.', required=False) class Meta: model = Project fields = [ 'title', 'summary', 'image', 'tags', 'description', 'contributors', 'requests', 'articles', ] widgets = { 'description': forms.Textarea(attrs={'class': 'prose-editor'}), 'contributors': autocomplete_light.MultipleChoiceWidget('UserAutocomplete'), 'requests': autocomplete_light.MultipleChoiceWidget('FOIARequestAutocomplete'), 'articles': autocomplete_light.MultipleChoiceWidget('ArticleAutocomplete'), } help_texts = { 'title': 'Changing the title will change the URL of your project.', }
class NetworkTagForm(forms.Form): tags = TaggitField(widget=TaggitWidget("TagAutocomplete")) def __init__(self, *args, **kwargs): super(NetworkTagForm, self).__init__(*args, **kwargs) self.helper = FormHelper() self.helper.form_tag = False
class ResourceBaseAdminForm(autocomplete_light.ModelForm): # We need to specify autocomplete='TagAutocomplete' or admin views like # /admin/maps/map/2/ raise exceptions during form rendering. # But if we specify it up front, TaggitField.__init__ throws an exception # which prevents app startup. Therefore, we defer setting the widget until # after that's done. keywords = TaggitField(required=False) keywords.widget = TaggitWidget(autocomplete='HierarchicalKeywordAutocomplete')
class Meta(object): """Meta options.""" model = Resource widgets = { 'tags': TaggitWidget('TagAutocomplete', attrs={'placeholder': "type tags here"}) } attachment = forms.FileField(widget=forms.FileInput) fields = ['attachment', 'name', 'groups', 'tags']
class Meta: model = Contribution fields = [x[0] for x in Contribution.field_order if x[1]] widgets = { 'dc_subject': TaggitWidget('TagAutocomplete'), 'skos_preflabel_vcc': CheckboxSelectMultiple } autocomplete_names = { 'skos_preflabel_technique': 'TADIRAHTechniqueAutocomplete', 'skos_preflabel_activity': 'TADIRAHActivityAutocomplete', 'skos_preflabel_object': 'TADIRAHObjectAutocomplete', 'skos_preflabel_discipline': 'DisciplineAutocomplete', 'dc_contributor': 'DcContributorAutocomplete', 'dc_creator': 'DcCreatorAutocomplete' }
class ProjectCreateForm(forms.ModelForm): """Form for the basic fields of a project.""" tags = TaggitField(widget=TaggitWidget( 'TagAutocomplete', attrs={ 'placeholder': 'Search tags', 'data-autocomplete-minimum-characters': 1 }), help_text='Separate tags with commas.', required=False) class Meta: model = Project fields = ['title', 'summary', 'image', 'tags'] help_texts = { 'summary': 'A short description of the project and its goals.', 'image': 'Image should be large and high-resolution.' }
class TrainingForm(ModelForm): """ Form to add/update a training """ _date_widget_options = { "icon_attrs": {"class": "fa fa-calendar"}, "attrs": {"class": "form-control input-sm"}, "format": "%Y-%m-%d %H:%M", # Options for the datetimepickers are not set here on purpose. # They are set in the metadata_form_js.html template because # bootstrap-datetimepicker uses jquery for its initialization # and we need to ensure it is available before trying to # instantiate a new datetimepicker. This could probably be improved. "options": False, } publication_date = forms.DateTimeField( localize=True, widget=DateTimePicker(**_date_widget_options) ) keywords = TaggitField( required=False, help_text=_("A space or comma-separated list of keywords"), widget=TaggitWidget('TagAutocomplete')) def __init__(self, *args, **kwargs): super(TrainingForm, self).__init__(*args, **kwargs) for field in self.fields: help_text = self.fields[field].help_text self.fields[field].help_text = None if help_text != '': self.fields[field].widget.attrs.update( { 'class': 'has-popover', 'data-content': help_text, 'data-placement': 'right', 'data-container': 'body', 'data-html': 'true'}) class Meta: model = Training
class ResourceBaseForm(TranslationModelForm): """Base form for metadata, should be inherited by childres classes of ResourceBase""" owner = forms.ModelChoiceField( empty_label="Owner", label="Owner", required=False, queryset=Profile.objects.exclude(username='******'), widget=autocomplete_light.ChoiceWidget('ProfileAutocomplete')) _date_widget_options = { "icon_attrs": { "class": "fa fa-calendar" }, "attrs": { "class": "form-control input-sm" }, "format": "%Y-%m-%d %I:%M %p", # Options for the datetimepickers are not set here on purpose. # They are set in the metadata_form_js.html template because # bootstrap-datetimepicker uses jquery for its initialization # and we need to ensure it is available before trying to # instantiate a new datetimepicker. This could probably be improved. "options": False, } date = forms.DateTimeField(localize=True, input_formats=['%Y-%m-%d %I:%M %p'], widget=DateTimePicker(**_date_widget_options)) temporal_extent_start = forms.DateTimeField( required=False, localize=True, input_formats=['%Y-%m-%d %I:%M %p'], widget=DateTimePicker(**_date_widget_options)) temporal_extent_end = forms.DateTimeField( required=False, localize=True, input_formats=['%Y-%m-%d %I:%M %p'], widget=DateTimePicker(**_date_widget_options)) poc = forms.ModelChoiceField( empty_label="Person outside GeoNode (fill form)", label="Point Of Contact", required=False, queryset=Profile.objects.exclude(username='******'), widget=autocomplete_light.ChoiceWidget('ProfileAutocomplete')) metadata_author = forms.ModelChoiceField( empty_label="Person outside GeoNode (fill form)", label="Metadata Author", required=False, queryset=Profile.objects.exclude(username='******'), widget=autocomplete_light.ChoiceWidget('ProfileAutocomplete')) keywords = TaggitField( required=False, help_text=_("A space or comma-separated list of keywords"), widget=TaggitWidget('TagAutocomplete')) regions = TreeNodeMultipleChoiceField(required=False, queryset=Region.objects.all(), level_indicator=u'___') regions.widget.attrs = {"size": 20} def __init__(self, *args, **kwargs): super(ResourceBaseForm, self).__init__(*args, **kwargs) for field in self.fields: help_text = self.fields[field].help_text self.fields[field].help_text = None if help_text != '': self.fields[field].widget.attrs.update({ 'class': 'has-popover', 'data-content': help_text, 'data-placement': 'right', 'data-container': 'body', 'data-html': 'true' }) class Meta: exclude = ('contacts', 'name', 'uuid', 'bbox_x0', 'bbox_x1', 'bbox_y0', 'bbox_y1', 'srid', 'category', 'csw_typename', 'csw_schema', 'csw_mdsource', 'csw_type', 'csw_wkt_geometry', 'metadata_uploaded', 'metadata_xml', 'csw_anytext', 'popular_count', 'share_count', 'thumbnail', 'charset', 'rating', 'detail_url')
class ResourceBaseAdminForm(autocomplete_light.ModelForm): keywords = TaggitField(widget=TaggitWidget('TagAutocomplete'), required=False)
class GroupForm(SanitizeHTMLMixin, ModelForm): """Form for groups.models.Group.""" category = forms.ModelChoiceField(label='Category', queryset=Category.objects.all()) tags = TaggitField(widget=TaggitWidget( 'TagAutocomplete', attrs={'placeholder': "type tags here"}), required=False) display_location = forms.CharField( label="Display Location", help_text=("Optionally enter the location you'd like displayed on the " "group description page."), required=False, widget=forms.TextInput( attrs={'placeholder': "i.e. West Loop, Chicago, IL"})) whitelist_users = forms.ModelMultipleChoiceField( widget=MultipleChoiceWidget('UserAutocomplete'), help_text=u'These users will always be allowed to send to this group.', required=False, queryset=get_user_model().objects.all()) class Meta(object): """Meta options.""" model = Group fields = [ 'category', 'description', 'tags', 'state', 'owners', 'whitelist_users', 'featured', 'private', 'published', 'moderated', 'member_list_published', 'display_location', 'latitude', 'longitude', 'radius' ] widgets = { 'latitude': forms.HiddenInput(), 'longitude': forms.HiddenInput(), 'radius': forms.HiddenInput(), 'owners': MultipleChoiceWidget('UserAutocomplete'), } def clean_description(self): """Cleans the description field""" return self.sanitize_html(self.cleaned_data['description']) def clean_tags(self): """Clean the tags added into the form""" tags = self.cleaned_data['tags'] invalid_tags = [] valid_tags = Tag.objects.values_list('name', flat=True) for tag in tags: if tag not in valid_tags: invalid_tags.append(tag) if invalid_tags: self._errors['tags'] = self.error_class( ['These tags are invalid: %s.' % ', '.join(invalid_tags)]) return tags def save(self, *args, **kwargs): """Save the form""" self.instance.tos_accepted_at = now() result = super(GroupForm, self).save(*args, **kwargs) # For each group owner, added them to the group if self.instance.pk: for owner in self.cleaned_data['owners']: add_user_to_group.delay(owner.pk, self.instance.pk) return result
class WFPDocumentForm(TranslationModelForm): """ For to upload Static Maps. """ permissions = forms.CharField(widget=HiddenInput(attrs={ 'name': 'permissions', 'id': 'permissions' }), required=True) _date_widget_options = { "icon_attrs": { "class": "fa fa-calendar" }, "attrs": { "class": "form-control input-sm" }, "format": "%Y-%m-%d %H:%M", # Options for the datetimepickers are not set here on purpose. # They are set in the metadata_form_js.html template because # bootstrap-datetimepicker uses jquery for its initialization # and we need to ensure it is available before trying to # instantiate a new datetimepicker. This could probably be improved. "options": False, } date = forms.DateTimeField(localize=True, widget=DateTimePicker(**_date_widget_options)) keywords = TaggitField( required=False, help_text=_("A space or comma-separated list of keywords"), widget=TaggitWidget('TagAutocomplete')) def __init__(self, *args, **kwargs): super(WFPDocumentForm, self).__init__(*args, **kwargs) # we need to override help_text for title (comes from ResourceBase) title_help_text = _( 'Please use the following convention: Country Name, Theme, Date - ' 'ex: Afghanistan, Snow Forecast, 17 - 23 February 2015') title_field = self.fields['title'] title_field.help_text = title_help_text for field in self.fields: help_text = self.fields[field].help_text self.fields[field].help_text = None if help_text != '': self.fields[field].widget.attrs.update({ 'class': 'has-popover', 'data-content': help_text, 'data-placement': 'right', 'data-container': 'body', 'data-html': 'true' }) class Meta: model = WFPDocument fields = ( 'title', 'doc_file', 'source', 'orientation', 'page_format', 'categories', 'keywords', 'regions', 'last_version', 'layers', 'date', ) def clean_doc_file(self): """ Ensures the doc_file is valid. """ doc_file = self.cleaned_data.get('doc_file') if doc_file and not os.path.splitext(doc_file.name)[1].lower()[1:] in ( 'gif', 'jpg', 'jpeg', 'pdf', 'png'): raise forms.ValidationError(_("This file type is not allowed")) return doc_file def clean_permissions(self): """ Ensures the JSON field is JSON. """ permissions = self.cleaned_data['permissions'] try: return json.loads(permissions) except ValueError: raise forms.ValidationError(_("Permissions must be valid JSON."))
admin.site.register(TopicCategory, TopicCategoryAdmin) admin.site.register(Region, RegionAdmin) admin.site.register(SpatialRepresentationType, SpatialRepresentationTypeAdmin) admin.site.register(RestrictionCodeType, RestrictionCodeTypeAdmin) admin.site.register(ContactRole, ContactRoleAdmin) admin.site.register(Link, LinkAdmin) admin.site.register(Backup, BackupAdmin) admin.site.register(License, LicenseAdmin) admin.site.register(HierarchicalKeyword, HierarchicalKeywordAdmin) class ResourceBaseAdminForm(ModelForm): # We need to specify autocomplete='TagAutocomplete' or admin views like # /admin/maps/map/2/ raise exceptions during form rendering. # But if we specify it up front, TaggitField.__init__ throws an exception # which prevents app startup. Therefore, we defer setting the widget until # after that's done. keywords = TaggitField(required=False) <<<<<<< HEAD <<<<<<< HEAD keywords.widget = TaggitWidget(autocomplete='HierarchicalKeywordAutocomplete') ======= keywords.widget = TaggitWidget(autocomplete='TagAutocomplete') >>>>>>> 2c522ce5efd5757f4d94e63a543e24e9ac97805b ======= keywords.widget = TaggitWidget( autocomplete='HierarchicalKeywordAutocomplete') >>>>>>> e7605f5980062789a1dfe0321b74882a9af32ed6