""" Created on Oct 12, 2013 @author: Daniel Gaspar """ import logging from flask.globals import _request_ctx_stack from ._compat import as_unicode log = logging.getLogger(__name__) class RenderTemplateWidget(object): """ Base template for every widget Enables the possibility of rendering a template inside a template with run time options """ template = "appbuilder/general/widgets/render.html" template_args = None def __init__(self, **kwargs): self.template_args = kwargs def __call__(self, **kwargs): ctx = _request_ctx_stack.top jinja_env = ctx.app.jinja_env template = jinja_env.get_template(self.template) args = self.template_args.copy() args.update(kwargs) return template.render(args) class FormWidget(RenderTemplateWidget): """ FormWidget form = None include_cols = [] exclude_cols = [] fieldsets = [] """ template = "appbuilder/general/widgets/form.html" class FormVerticalWidget(RenderTemplateWidget): """ FormWidget form = None include_cols = [] exclude_cols = [] fieldsets = [] """ template = "appbuilder/general/widgets/form_vertical.html" class FormHorizontalWidget(RenderTemplateWidget): """ FormWidget form = None include_cols = [] exclude_cols = [] fieldsets = [] """ template = "appbuilder/general/widgets/form_horizontal.html" class FormInlineWidget(RenderTemplateWidget): """ FormWidget form = None include_cols = [] exclude_cols = [] fieldsets = [] """ template = "appbuilder/general/widgets/form_inline.html" class GroupFormListWidget(RenderTemplateWidget): template = "appbuilder/general/widgets/group_form_list.html" class SearchWidget(FormWidget): template = "appbuilder/general/widgets/search.html" filters = None def __init__(self, **kwargs): self.filters = kwargs.get("filters") return super(SearchWidget, self).__init__(**kwargs) def __call__(self, **kwargs): """create dict labels based on form""" """ create dict of form widgets """ """ create dict of possible filters """ """ create list of active filters """ label_columns = {} form_fields = {} search_filters = {} dict_filters = self.filters.get_search_filters() for col in self.template_args["include_cols"]: label_columns[col] = as_unicode(self.template_args["form"][col].label.text) form_fields[col] = self.template_args["form"][col]() search_filters[col] = [as_unicode(flt.name) for flt in dict_filters[col]] kwargs["label_columns"] = label_columns kwargs["form_fields"] = form_fields kwargs["search_filters"] = search_filters kwargs["active_filters"] = self.filters.get_filters_values_tojson() return super(SearchWidget, self).__call__(**kwargs) class ShowWidget(RenderTemplateWidget): """ ShowWidget implements a template as an widget it takes the following arguments pk = None label_columns = [] include_columns = [] value_columns = [] actions = None fieldsets = [] modelview_name = '' """ template = "appbuilder/general/widgets/show.html" class ShowBlockWidget(RenderTemplateWidget): template = "appbuilder/general/widgets/show_block.html" class ShowVerticalWidget(RenderTemplateWidget): template = "appbuilder/general/widgets/show_vertical.html" class ListWidget(RenderTemplateWidget): """ List Widget implements a Template as an widget. It takes the following arguments label_columns = [] include_columns = [] value_columns = [] order_columns = [] page = None page_size = None count = 0 pks = [] actions = None filters = {} modelview_name = '' """ template = "appbuilder/general/widgets/list.html" class ListMasterWidget(ListWidget): template = "appbuilder/general/widgets/list_master.html" class ListAddWidget(ListWidget): template = "appbuilder/general/widgets/list_add.html" def __init__(self, **kwargs): super(ListAddWidget, self).__init__(**kwargs) def __call__(self, **kwargs): return super(ListAddWidget, self).__call__(**kwargs) class ListThumbnail(ListWidget): template = "appbuilder/general/widgets/list_thumbnail.html" class ListLinkWidget(ListWidget): template = "appbuilder/general/widgets/list_link.html" class ListCarousel(ListWidget): template = "appbuilder/general/widgets/list_carousel.html" class ListItem(ListWidget): template = "appbuilder/general/widgets/list_item.html" class ListBlock(ListWidget): template = "appbuilder/general/widgets/list_block.html"