class CreateForm(BaseForm): """Default create form where content format is chosen""" content_type = fields.SelectField(_('Type'), [validators.required()], choices=[('article', _('Article')), ('page', _('Page'))]) content_format = fields.SmartSelect2Field( _('Format'), [validators.required()], choices=get_content_format_choices)
def on_model_change(self, form, model, is_created): # check if exists existent = db.index.find_one({ 'title': model['title'], 'category': model['category'] }) duplicate_error_message = u'{0} "{1}/{2}" {3}'.format( _('duplicate error:'), model['category'], model['title'], _('already exists.')) if (is_created and existent) or (existent and existent['_id'] != model['_id']): raise ValidationError(duplicate_error_message) if is_created: model['date'] = dt.datetime.now() model['slug'] = slugify(model['title']) else: model['modified'] = dt.datetime.now() get_format(model).before_save(form, model, is_created)
class BaseForm(Form): title = fields.StringField(_('Title'), [validators.required()]) # todo: validade existing category/title summary = fields.TextAreaField(_('Summary')) category = fields.Select2TagsField( _('Category'), [validators.CallableValidator(validate_category)], save_as_list=False, render_kw={'data-tags': '["hello", "world"]'}, # todo: ^ settings.default_categories + db_query default='general' # todo: default should come from settings ) authors = fields.Select2TagsField( _('Authors'), [validators.required()], save_as_list=True, render_kw={'data-tags': '["Bruno Rocha", "Karla Magueta"]'}, # todo: settings.default_authors + current + db_query default=['Bruno Rocha'] # todo: default should be current user if auth else O.S user else ? )
def action_clone_item(self, ids): if len(ids) > 1: flash( _("You can select only one item for this action"), 'error' ) return instance = self.get_instance(ids[0]) new = instance.from_json(instance.to_json()) new.id = None new.published = False new.last_updated_by = None # User.objects.get(id=current_user.id) new.updated_at = datetime.datetime.now() new.slug = "{0}-{1}".format(new.slug, random.getrandbits(32)) new.save() return redirect(url_for('.edit_view', id=new.id))
def validate_category(form, field): if field.data is not None: items = field.data.split(',') if len(items) > 1: return _(u'You can select only one category')
class MarkdownEditForm(BaseEditForm): content = fields.TextAreaField(_('Markdown Content'))
class HTMLEditForm(BaseEditForm): content = fields.TextAreaField(_('HTML Content'))
class PlainEditForm(BaseEditForm): content = fields.TextAreaField(_('Plain Content'))
class BaseEditForm(BaseForm): """Edit form with all missing fields except `content`""" content_type = fields.PassiveStringField(_('Type'), render_kw=READ_ONLY) content_format = fields.PassiveStringField(_('Format'), render_kw=READ_ONLY) tags = fields.Select2TagsField(_('Tags'), save_as_list=True) # todo: ^ provide settings.default_tags + db_query date = fields.DateTimeField(_('Date'), [validators.required()], default=dt.datetime.now) # todo: ^default should be now modified = fields.HiddenField(_('Modified')) # todo: ^populate on save slug = fields.StringField(_('Slug')) # todo: create based on category / title language = fields.SmartSelect2Field( _('Language'), choices=lambda: [(lng, lng) for lng in current_app.config.get( 'BABEL_LANGUAGES', ['en'])]) translations = fields.HiddenField(_('Translations')) # todo: ^ create action 'add translation' published = fields.BooleanField(_('Status'), render_kw={ 'data-toggle': "toggle", 'data-on': _("Published"), 'data-off': _("Draft"), "data-onstyle": 'success' })
def configure(app, db, admin): admin.register(db.index, ContentView, name=_('Content'), endpoint='contentview') return 'content'