class Widget(CountableWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'radio'
    widget_label = _('Radio')
    view_js = '++resource++eea.facetednavigation.widgets.radio.view.js'
    edit_js = '++resource++eea.facetednavigation.widgets.radio.edit.js'
    view_css = '++resource++eea.facetednavigation.widgets.radio.view.css'
    css_class = 'faceted-radio-widget'

    index = ViewPageTemplateFile('widget.pt')
    edit_schema = CountableWidget.edit_schema.copy() + EditSchema

    def query(self, form):
        """ Get value from form and return a catalog dict query
        """
        query = {}
        index = self.data.get('index', '')
        index = index.encode('utf-8', 'replace')
        if not index:
            return query

        if self.hidden:
            value = self.default
        else:
            value = form.get(self.data.getId(), '')
        if not value:
            return query

        value = atdx_normalize(value)

        query[index] = value
        return query
示例#2
0
class ItemsSortWidget(Widget):
    """ Sort items with custom (multiple) sort orders
    """

    widget_type = "items_sort"
    widget_label = _("Items sort order")
    groups = (DefaultSchemata,)

    index = ViewPageTemplateFile("sort.pt")

    def query(self, form):
        """ Sort items by meeting date (desc) and by item number (asc)
        """
        # XXX avoid double sort_on when we selected a meeting
        # this is not necessary and it some case, produce weird results
        if "seance" in form:
            query = {
                "sort_on": ["sortable_number"],
                "sort_order": ["ascending"],
            }
        else:
            query = {
                "sort_on": ["linkedMeetingDate", "sortable_number"],
                "sort_order": ["descending", "ascending"],
            }
        return query
示例#3
0
class Widget(CountableWidget):
    """ Widget
    """
    implements(IAlphabeticWidget)

    # Widget properties
    widget_type = 'alphabetic'
    widget_label = _('Alphabetic')
    view_js = '++resource++eea.facetednavigation.widgets.alphabets.view.js'
    edit_js = '++resource++eea.facetednavigation.widgets.alphabets.edit.js'
    view_css = '++resource++eea.facetednavigation.widgets.alphabets.view.css'
    edit_css = '++resource++eea.facetednavigation.widgets.alphabets.edit.css'

    index = ViewPageTemplateFile('widget.pt')
    edit_schema = CountableWidget.edit_schema.copy() + EditSchema

    # Widget custom API
    def getAlphabet(self, lang):
        """ Get language alphabet
        """
        try:
            lang = lang.split('-')[0].lower()
        except Exception, err:
            logger.exception(err)
            lang = 'en'
        return unicode_character_map.get(lang, unicode_character_map.get('en'))
示例#4
0
class Widget(AbstractWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'range'
    widget_label = _('Range')
    view_js = '++resource++eea.facetednavigation.widgets.range.view.js'
    edit_js = '++resource++eea.facetednavigation.widgets.range.edit.js'
    view_css = '++resource++eea.facetednavigation.widgets.range.view.css'
    edit_css = '++resource++eea.facetednavigation.widgets.range.edit.css'
    css_class = 'faceted-range-widget'

    index = ViewPageTemplateFile('widget.pt')
    edit_schema = AbstractWidget.edit_schema.copy() + EditSchema

    @property
    def default(self):
        """ Return default
        """
        default = self.data.get('default', '')
        if not default:
            return ('', '')

        default = default.split('=>')
        if len(default) != 2:
            return ('', '')

        start, end = default
        return (start, end)

    def query(self, form):
        """ Get value from form and return a catalog dict query
        """
        query = {}
        index = self.data.get('index', '')
        index = index.encode('utf-8', 'replace')
        if not index:
            return query

        if self.hidden:
            start, end = self.default
        else:
            value = form.get(self.data.getId(), ())
            if not value or len(value)!=2:
                return query
            start, end = value

        if not (start and end):
            return query

        # let the field be integer if integer:
        catalog = getToolByName(self.context, 'portal_catalog')
        evalues = catalog.uniqueValuesFor(index)
        if True in [isinstance(v, int) for v in evalues]:
            start, end = int(start), int(end)
        query[index] = {
            'query': (start, end),
            'range': 'min:max'
        }
        return query
示例#5
0
class Widget(AbstractWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'layout'
    widget_label = _('Layout selection')

    groups = (
        DefaultSchemata,
        LayoutSchemata,
    )

    index = ViewPageTemplateFile('layout.pt')

    def __init__(self, *args, **kwargs):
        super(Widget, self).__init__(*args, **kwargs)
        self.data.widget_context = self.context

    def vocabulary(self, **kwargs):
        voc_factory = getUtility(
            IVocabularyFactory,
            name='collective.eeafaceted.layoutwidget.Layouts',
        )
        return [(t.value, t.title) for t in voc_factory(self.context)
                if t.value in self.data.values]
示例#6
0
class Widget(AbstractWidget, L10nDatepicker):
    """
    Simple date Widget specific to events
    """
    widget_type = 'simpledate'
    widget_label = _('Simple date for events')
    view_js = '++resource++cpskin.agenda.widgets.simpledate.view.js'
    edit_js = '++resource++cpskin.agenda.widgets.simpledate.edit.js'
    view_css = '++resource++cpskin.agenda.widgets.simpledate.view.css'
    edit_css = '++resource++cpskin.agenda.widgets.simpledate.edit.css'

    index = ViewPageTemplateFile('widget.pt')
    edit_schema = AbstractWidget.edit_schema.copy()

    @property
    def default(self):
        """Return default value"""
        default = self.data.get('default', '')
        if not default:
            return ''
        default = default.strip()
        try:
            default = DateTime(
                datetime.strptime(default, self.python_date_format))
            default = default.strftime(self.python_date_format)
        except Exception, err:
            logger.exception('%s => Date: %s', err, default)
            default = ''
        return default
示例#7
0
class Widget(CountableWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'resultsrange'
    widget_label = _('Results range')
    view_js = '++resource++collective.bibliocustomviews.resultsrange.view.js'
    edit_js = '++resource++collective.bibliocustomviews.resultsrange.edit.js'
    view_css = '++resource++collective.bibliocustomviews.resultsrange.view.css'

    index = ViewPageTemplateFile('widget.pt')
    edit_schema = CountableWidget.edit_schema.copy() + EditSchema
    edit_schema['title'].default = 'Results range'
    del edit_schema['sortcountable']

    @property
    def default(self):
        """ Get default values
        """
        value = self.data.get('default', 0) or 0
        if value == ALL_VALUE:
            return ALL_VALUE

        try:
            return int(value)
        except (TypeError, ValueError), err:
            logger.exception(err)
            return ALL_VALUE
示例#8
0
class Widget(CountableWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'select'
    widget_label = _('Select')
    view_js = '++resource++eea.facetednavigation.widgets.select.view.js'
    edit_js = '++resource++eea.facetednavigation.widgets.select.edit.js'
    view_css = '++resource++eea.facetednavigation.widgets.select.view.css'

    index = ViewPageTemplateFile('widget.pt')
    edit_schema = CountableWidget.edit_schema.copy() + EditSchema

    def query(self, form):
        """ Get value from form and return a catalog dict query
        """
        query = {}
        index = self.data.get('index', '')
        index = index.encode('utf-8', 'replace')
        if not index:
            return query

        if self.hidden:
            value = self.default
        else:
            value = form.get(self.data.getId(), '')

        if not value:
            return query

        if not isinstance(value, unicode):
            value = value.decode('utf-8')

        query[index] = value.encode('utf-8')
        return query
示例#9
0
class Widget(AbstractWidget):
    """ Widget
    """
    widget_type = 'resultsperpage'
    widget_label = _('Results per page')

    groups = (DefaultSchemata, LayoutSchemata, DisplaySchemata)
    index = ViewPageTemplateFile('widget.pt')

    @property
    def default(self):
        """ Get default values
        """
        value = self.data.get('default', 0) or 0
        try:
            return int(value)
        except (TypeError, ValueError) as err:
            logger.exception(err)
            return 0

    def results_per_page(self, form, default=20):
        """ Get results per page
        """
        if self.hidden:
            value = self.default
        else:
            value = form.get(self.data.getId(), default)

        if not value:
            return default

        try:
            value = int(value)
        except (TypeError, ValueError) as err:
            logger.exception(err)
            return default

        return value

    def vocabulary(self, **kwargs):
        """ Vocabulary
        """
        try:
            start = int(self.data.get('start', 0) or 0)
        except (TypeError, ValueError) as err:
            logger.exception(err)
            start = 0
        try:
            end = int(self.data.get('end', 21)) + 1
        except (TypeError, ValueError) as err:
            logger.exception(err)
            end = 21
        try:
            step = int(self.data.get('step', 1))
        except (TypeError, ValueError) as err:
            logger.exception(err)
            step = 1

        return [(x, x) for x in range(start, end, step)]
示例#10
0
class Widget(AbstractWidget):
    """ Widget
    """
    widget_type = 'criteria'
    widget_label = _('Filters')

    groups = (DefaultSchemata, LayoutSchemata)
    index = ViewPageTemplateFile('widget.pt')
示例#11
0
class Widget(AbstractWidget):
    """ Widget
    """
    widget_type = 'etag'
    widget_label = 'ETag'

    groups = (DefaultSchemata, LayoutSchemata)
    index = ViewPageTemplateFile('widget.pt')
示例#12
0
class Widget(AbstractWidget):
    """ Widget
    """
    widget_type = 'debug'
    widget_label = _('Debugger')

    groups = (DefaultSchemata, LayoutSchemata)
    index = ViewPageTemplateFile('widget.pt')
示例#13
0
class Widget(AbstractWidget):
    """ Widget
    """
    widget_type = 'range'
    widget_label = _('Range')

    groups = (DefaultSchemata, LayoutSchemata)
    index = ViewPageTemplateFile('widget.pt')

    @property
    def default(self):
        """ Return default
        """
        default = self.data.get('default', '')
        if not default:
            return ('', '')

        default = default.split('=>')
        if len(default) != 2:
            return ('', '')

        start, end = default
        return (start, end)

    def query(self, form):
        """ Get value from form and return a catalog dict query
        """
        query = {}
        index = self.data.get('index', '')
        index = index.encode('utf-8', 'replace')
        if not index:
            return query

        if self.hidden:
            start, end = self.default
        else:
            value = form.get(self.data.getId(), ())
            if not value or len(value) != 2:
                return query
            start, end = value

        if not (start and end):
            return query

        # let the field be integer if integer:
        catalog = getToolByName(self.context, 'portal_catalog')
        evalues = catalog.uniqueValuesFor(index)
        if True in [isinstance(v, int) for v in evalues]:
            start, end = int(start), int(end)
        query[index] = {
            'query': (start, end),
            'range': 'min:max'
        }
        return query
示例#14
0
class Widget(CountableWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'boolean'
    widget_label = _('Boolean')
    groups = (DefaultSchemata, LayoutSchemata, CountableSchemata)

    index = ViewPageTemplateFile('widget.pt')

    @property
    def css_class(self):
        """ Widget specific css class
        """
        css_type = self.widget_type
        css_title = normalizer.normalize(self.data.title)
        return ('faceted-checkboxes-widget '
                'faceted-{0}-widget section-{1}{2}').format(
                    css_type, css_title, self.custom_css)

    def selected(self):
        """ Return True if True by default
        """
        return self.default or False

    def vocabulary(self, **kwargs):
        """ Vocabulary
        """
        return [(1, 1)]

    def index_id(self):
        """ Index
        """
        return self.data.get('index', '').lower()

    def query(self, form):
        """ Get value from form and return a catalog dict query
        """
        index = self.data.get('index', '')
        if six.PY2:
            index = index.encode('utf-8', 'replace')

        if not index:
            return {}

        if self.hidden:
            value = self.default
        else:
            value = form.get(self.data.getId(), '')

        if value:
            return {index: True}
        return {}
示例#15
0
class Widget(CountableWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'boolean'
    widget_label = _('Boolean')
    view_js = '++resource++eea.facetednavigation.widgets.checkbox.view.js'
    edit_js = '++resource++eea.facetednavigation.widgets.checkbox.edit.js'
    view_css = '++resource++eea.facetednavigation.widgets.checkbox.view.css'
    edit_css = '++resource++eea.facetednavigation.widgets.checkbox.edit.css'
    edit_schema = BooleanEditSchema
    index = ViewPageTemplateFile('widget.pt')
    css_class = "faceted-boolean-widget"

    @property
    def default(self):
        """ Get default values
        """
        return bool(self.data.get('default', None))

    def selected(self):
        """ Return True if True by default
        """
        return self.default or False

    def vocabulary(self):
        """ Vocabulary
        """
        return [(1, 1)]

    def index_id(self):
        """ Index
        """
        return self.data.get('index', '').lower()

    def query(self, form):
        """ Get value from form and return a catalog dict query
        """
        index = self.data.get('index', '')
        index = index.encode('utf-8', 'replace')

        if not index:
            return {}

        if self.hidden:
            value = self.default
        else:
            value = form.get(self.data.getId(), '')

        if value:
            return {index: True}
        else:
            return {}
示例#16
0
class Widget(_Widget):

    widget_type = 'criteria_degree_explorer'
    #widget_type_css = 'criteria'
    index = ViewPageTemplateFile('widget.pt')

    @property
    def css_class(self):
        """ Widget specific css class
        """
        css_type = self.widget_type  #_css
        css_title = normalizer.normalize(self.data.title)
        return 'faceted-{0}-widget section-{1}'.format(css_type, css_title)
示例#17
0
class Widget(AbstractWidget):
    """ Widget
    """
    widget_type = 'etag'
    widget_label = 'ETag'
    edit_js = '++resource++eea.facetednavigation.widgets.etag.edit.js'
    edit_css = '++resource++eea.facetednavigation.widgets.etag.edit.css'

    index = ViewPageTemplateFile('widget.pt')
    edit_schema = AbstractWidget.edit_schema.copy() + EditSchema
    edit_schema['title'].default = 'ETag'
    edit_schema['hidden'].default = True
    edit_schema['hidden'].schemata = 'hidden'
示例#18
0
class Widgettaxonomy(Widget):
    """ Widget
    """

    widget_type = "select"
    widget_label = _("taxonomy_widget")
    index = ViewPageTemplateFile("widget.pt")

    def taxonomy(self):
        taxonomy = Taxonomy(default_value=self.default or "")
        for term in self.vocabulary():
            taxonomy.add_term(term[0], self.translate(term[1]))
        return taxonomy
示例#19
0
class Widget(AbstractWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'criteria'
    widget_label = _('Filters')
    view_js = '++resource++eea.facetednavigation.widgets.criteria.view.js'
    view_css = '++resource++eea.facetednavigation.widgets.criteria.view.css'
    edit_css = '++resource++eea.facetednavigation.widgets.criteria.edit.css'

    index = ViewPageTemplateFile('widget.pt')
    edit_schema = AbstractWidget.edit_schema.copy() + EditSchema
    edit_schema['title'].default = 'Current search'
    edit_schema['hidecriteriaenabled'].default = True
示例#20
0
class Widget(CountableWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'radio'
    widget_label = _('Radio')

    groups = (DefaultSchemata, LayoutSchemata, CountableSchemata,
              DisplaySchemata)

    index = ViewPageTemplateFile('widget.pt')

    @property
    def default(self):
        """ Get default values
        """
        default = super(Widget, self).default or u''
        if six.PY2:
            if isinstance(default, six.text_type):
                default = default.encode('utf-8')
        return default

    def query(self, form):
        """ Get value from form and return a catalog dict query
        """
        query = {}
        index = self.data.get('index', '')
        if six.PY2:
            index = index.encode('utf-8', 'replace')
        if not index:
            return query

        if self.hidden:
            value = self.default
        else:
            value = form.get(self.data.getId(), '')
        if not value:
            return query

        catalog = getToolByName(self.context, 'portal_catalog')
        if index in catalog.Indexes:
            if catalog.Indexes[index].meta_type == 'BooleanIndex':
                if value == 'False':
                    value = False
                elif value == 'True':
                    value = True

        query[index] = value
        return query
示例#21
0
class Widget(CountableWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'boolean'
    widget_label = _('Boolean')
    groups = (DefaultSchemata, LayoutSchemata, CountableSchemata)

    index = ViewPageTemplateFile('widget.pt')

    @property
    def default(self):
        """ Get default values
        """
        return bool(self.data.get('default', None))

    def selected(self):
        """ Return True if True by default
        """
        return self.default or False

    def vocabulary(self):
        """ Vocabulary
        """
        return [(1, 1)]

    def index_id(self):
        """ Index
        """
        return self.data.get('index', '').lower()

    def query(self, form):
        """ Get value from form and return a catalog dict query
        """
        index = self.data.get('index', '')
        index = index.encode('utf-8', 'replace')

        if not index:
            return {}

        if self.hidden:
            value = self.default
        else:
            value = form.get(self.data.getId(), '')

        if value:
            return {index: True}
        else:
            return {}
示例#22
0
class Widget(CountableWidget):
    """ Widget
    """
    widget_type = 'alphabetic'
    widget_label = _('Alphabetic')

    groups = (DefaultSchemata, LayoutSchemata)
    index = ViewPageTemplateFile('widget.pt')

    # Widget custom API
    def getAlphabet(self, lang):
        """ Get language alphabet
        """
        try:
            lang = lang.split('-')[0].lower()
        except Exception as err:
            logger.exception(err)
            lang = 'en'
        return unicode_character_map.get(lang,
                    unicode_character_map.get('en'))

    def count(self, brains, sequence=None):
        """ Intersect results
        """
        res = {}
        lang = self.request.get('LANGUAGE', 'en')
        sequence = [item[0] for item in self.getAlphabet(lang)]
        if not sequence:
            return res

        index_id = self.data.get('index')
        if not index_id:
            return res

        index = 0
        for index, brain in enumerate(brains):
            xval = getattr(brain, index_id, None)
            if not xval:
                continue
            if not isinstance(xval, (six.binary_type, six.text_type)):
                continue
            if isinstance(xval, six.binary_type):
                xval = xval.decode('utf-8', 'replace')
            letter = xval[0].upper()
            count = res.get(letter, 0)
            res[letter] = count + 1
        res['all'] = index + 1
        return res
示例#23
0
class Widget(AbstractWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'bounds'
    widget_label = _('Bounds selection')

    groups = (
        DefaultSchemata,
        LayoutSchemata,
    )

    index = ViewPageTemplateFile('bounds.pt')

    def __init__(self, context, request, data=None):
        super(Widget, self).__init__(context, request, data)
示例#24
0
class NavigationRootPathWidget(Widget):
    """ Filter on objects from current navigation root
    """

    widget_type = "navigation_root_path"
    widget_label = _("Navigation root path")
    groups = (DefaultSchemata,)

    index = ViewPageTemplateFile("root_path.pt")

    def query(self, form):
        """ Returns only objects from current navigation root
        """
        nav_root = api.portal.get_navigation_root(self.context)
        path = "/".join(nav_root.getPhysicalPath())
        query = {"path": {"query": path}}
        return query
示例#25
0
class Widget(AbstractWidget, L10nDatepicker):
    """ Widget
    """
    # Widget properties
    widget_type = 'daterange'
    widget_label = _('Date range')
    view_js = '++resource++eea.facetednavigation.widgets.daterange.view.js'
    edit_js = '++resource++eea.facetednavigation.widgets.daterange.edit.js'
    view_css = '++resource++eea.facetednavigation.widgets.daterange.view.css'
    edit_css = '++resource++eea.facetednavigation.widgets.daterange.edit.css'

    index = ViewPageTemplateFile('widget.pt')
    edit_schema = AbstractWidget.edit_schema.copy() + EditSchema

    @property
    def default(self):
        """ Return default
        """
        default = self.data.get('default', '')
        if not default:
            return '', ''

        default = default.split('=>')
        if len(default) != 2:
            return '', ''

        start, end = default
        start = start.strip()
        end = end.strip()
        if not self.use_plone_date_format:
            start = start.replace('/', '-')
            end = end.replace('/', '-')
        try:
            start = DateTime(datetime.strptime(start, self.python_date_format))
            start = start.strftime(self.python_date_format)
        except Exception, err:
            logger.exception('%s => Start date: %s', err, start)
            start = ''

        try:
            end = DateTime(datetime.strptime(end, self.python_date_format))
            end = end.strftime(self.python_date_format)
        except Exception, err:
            logger.exception('%s => End date: %s', err, end)
            end = ''
示例#26
0
class Widget(AbstractWidget):
    widget_type = 'datepicker'
    widget_label = _(u'Date Picker')
    view_js = '++resource++dssweb.theme.unicorn.datepicker.view.js'
    edit_js = '++resource++dssweb.theme.unicorn.datepicker.edit.js'
    view_css = '++resource++dssweb.theme.unicorn.datepicker.view.css'

    index = ViewPageTemplateFile('widget.pt')
    edit_schema = AbstractWidget.edit_schema.copy() + EditSchema

    def query(self, form):
        """ Get value from form and return a catalog dict query
        """
        query = {}
        index = self.data.get('index', '')
        index = index.encode('utf-8', 'replace')
        if not index:
            return query

        if self.hidden:
            value = self.default
        else:
            value = form.get(self.data.getId(), None)
            if value is None:
                return query

        start = ensure_date_format(value)
        if not start:
            return query

        try:
            start = formated_time(start)
        except Exception as err:
            logger.exception(err)
            return query

        start = start - 1
        start = start.latestTime()

        query[index] = {
            'query': start,
            'range': 'min'
        }
        return query
示例#27
0
class Widget(CountableWidget):
    """ Widget
    """
    # Widget properties
    widget_type = 'radio'
    widget_label = _('Radio')

    groups = (
        DefaultSchemata,
        LayoutSchemata,
        CountableSchemata,
        DisplaySchemata
    )

    index = ViewPageTemplateFile('widget.pt')

    @property
    def default(self):
        """ Get default values
        """
        default = super(Widget, self).default or u''
        return default.encode('utf-8')

    def query(self, form):
        """ Get value from form and return a catalog dict query
        """
        query = {}
        index = self.data.get('index', '')
        index = index.encode('utf-8', 'replace')
        if not index:
            return query

        if self.hidden:
            value = self.default
        else:
            value = form.get(self.data.getId(), '')
        if not value:
            return query



        query[index] = value
        return query
示例#28
0
class Widget(AbstractWidget):
    """ Widget
    """
    widget_type = 'resultsperpage'
    widget_label = _('Results per page')

    groups = (DefaultSchemata, LayoutSchemata, DisplaySchemata)
    index = ViewPageTemplateFile('widget.pt')

    @property
    def default(self):
        """ Get default values
        """
        value = self.data.get('default', 0) or 0
        try:
            return int(value)
        except (TypeError, ValueError), err:
            logger.exception(err)
            return 0
示例#29
0
class Widget(CountableWidget):
    """ Widget
    """
    widget_type = 'alphabetic'
    widget_label = _('Alphabetic')

    groups = (DefaultSchemata, LayoutSchemata)
    index = ViewPageTemplateFile('widget.pt')

    # Widget custom API
    def getAlphabet(self, lang):
        """ Get language alphabet
        """
        try:
            lang = lang.split('-')[0].lower()
        except Exception, err:
            logger.exception(err)
            lang = 'en'
        return unicode_character_map.get(lang, unicode_character_map.get('en'))
示例#30
0
class SearchPageCheckbox(BaseCheckboxWidget):
    widget_type = 'searchpagecheckbox'
    index = ViewPageTemplateFile('searchpagecheckbox.pt')

    edit_schema = BaseCheckboxWidget.edit_schema.copy() + EditSchema

    # def __init__(self, context, request, data=None):
    #     self.context = context
    #     self.request = request
    #     self.request.debug = False
    #     self.data = data

    @property
    def disable_label(self):
        return self.data.get('disable_criterion_label', 'disable')

    @property
    def enable_label(self):
        return self.data.get('enable_criterion_label', 'enable')