コード例 #1
0
ファイル: listing.py プロジェクト: collective/atreal.layouts
 def display(self, items, filter=False, level=0, icons=False):
     if level == 2:
         template = ViewPageTemplateFile("listing_table.pt")
     else:
         template = ViewPageTemplateFile("listing_macro.pt")
     if filter:
         folders = []
         for item in items:
             if item['item'].is_folderish or item[
                     'portal_type'] == 'PoiTracker':
                 folders.append(item)
         return template(self, items=folders, level=level, icons=icons)
     return template(self, items=items, level=level, icons=icons)
コード例 #2
0
ファイル: widgets.py プロジェクト: mohalfaki/bungeni-portal
class DateFilterWidget(form.PageForm):

    macro_template = NamedTemplate("alchemist.form")
    template = ViewPageTemplateFile("templates/date-input-search.pt")

    def __init__(self, context, request, table_id, field_id):
        self.prefix = "form_%s_%s" % (table_id, field_id)
        super(DateFilterWidget, self).__init__(context, request)

    class IDateRangeSchema(interface.Interface):
        range_start_date = schema.Date(
            title=_(u"From"),
            description=_(u"Leave blank or set lower limit"),
            required=False)

        range_end_date = schema.Date(
            title=_(u"To"),
            description=_(u"Leave blank or set upper limit"),
            required=False)

    macro_template = NamedTemplate("alchemist.form")
    template = ViewPageTemplateFile("templates/date-input-search.pt")
    form_fields = form.Fields(IDateRangeSchema, render_context=True)
    form_fields["range_start_date"].custom_widget = DateWidget
    form_fields["range_end_date"].custom_widget = DateWidget

    def setUpWidgets(self, ignore_request=False, cookie=None):
        class context:
            range_start_date = None
            range_end_date = None

        self.adapters = {
            self.IDateRangeSchema: context,
        }
        self.widgets = form.setUpWidgets(self.form_fields,
                                         self.prefix,
                                         self.context,
                                         self.request,
                                         form=self,
                                         adapters=self.adapters,
                                         ignore_request=True)

    @form.action(_(u"Ok"), name="ok")
    def handle_ok(self, action, data):
        #Handled by Javascript
        pass

    @form.action(_(u"Clear"), name="clear")
    def handle_clear(self, action, data):
        #Handled by Javascript
        pass
コード例 #3
0
class MetaView(BrowserView):
    """ Show meta data on comment."""

    template = ViewPageTemplateFile('meta.pt')

    def __call__(self):
        return self.template()
コード例 #4
0
class TextDateWidget(SelectDateWidget):
    """Simple date widget input in a text field.
    """
    __call__ = ViewPageTemplateFile("templates/text-date-widget.pt")

    def hasInput(self):
        """Widgets need to determine whether the request contains an input
        value for them """
        return (self.date_name in self.request.form)

    def _getFormInput(self):
        """extract the input value from the submitted form """
        return (self._getFieldInput(self.date_name))

    def _getFieldInput(self, name):
        return self.request.form.get(name, self._missing)

    def _toFieldValue(self, date):
        """convert the input value to an value suitable for the field."""
        if (date == self.context.missing_value) and self.required:
            return self.context.missing_value
        else:
            try:
                return  datetime.datetime.strptime(date, "%Y-%m-%d").date()
            except ValueError, e:
                if date == "":
                    return
                raise ConversionError(_(u"Incorrect string data for date"), e)
コード例 #5
0
ファイル: widgets.py プロジェクト: mohalfaki/bungeni-portal
class TextDateTimeWidget(TextDateWidget):

    __call__ = ViewPageTemplateFile("templates/text-datetime-widget.pt")

    @property
    def time_name(self):
        return self.name.replace(".", "__") + "__time"

    def hasInput(self):
        return ((self.date_name in self.request.form
                 and self.time_name in self.request.form)
                or (self.name in self.request.form))

    def _hasPartialInput(self):
        return (self.date_name in self.request.form
                or self.time_name in self.request.form)

    def _getFormInput(self):
        """extract the input value from the submitted form """
        if not self.time_name in self.request.form:
            return self._getFieldInput(self.name).split(" ")
        return (self._getFieldInput(self.date_name),
                self._getFieldInput(self.time_name))

    def _toFormValue(self, value):
        """Convert a field value to a string that can be inserted into the form.
        """
        if (value == self.context.missing_value) and self.required:
            value = datetime.datetime.now()
        try:
            return (datetime.datetime.strftime(value, "%Y-%m-%d"),
                    datetime.datetime.strftime(value, "%H:%M"))
        except:
            #log.error("TextDateTimeWidget._toFormValue(%s) FAILED" % (value))
            #debug.log_exc(sys.exc_info(), log_handler=log.error)
            return ("", "12:00")

    def _toFieldValue(self, (date, time)):
        if (date == self._missing or time == self._missing):
            if self.required:
                return self.context.missing_value
            else:
                if date + time == self._missing:
                    return None
                else:
                    return self.context.missing_value
        else:
            try:
                d = datetime.datetime.strptime(date, "%Y-%m-%d")
                t = datetime.datetime.strptime(time, "%H:%M")
                return datetime.datetime(
                    year=d.year,
                    month=d.month,
                    day=d.day,
                    hour=t.hour,
                    minute=t.minute,
                )
            except ValueError, e:
                raise ConversionError(
                    _("Incorrect string data for date and time"), e)
コード例 #6
0
class LookupRecipientSource(object):
    implements(IRecipientSource)

    name = 'group_recipient_lookup'
    form_label = 'Send to'

    def __init__(self, context, request):
        self.context = context
        self.request = request
        self.settings = get_recipient_settings(context, self.name)

    def available_groups(self):
        groups = []
        for id, data in self.settings:
            for g in data['settingsdata']:
                groups.append({'value': g, 'label': g})
        return groups

    def lookup(self):
        group = self.request.get('megaphone-group-select')
        json_data = getUtility(IGroupSource, self.name)
        if group:
            return json_data[group]
        return []

    snippet = ViewPageTemplateFile('user_select_snippet.pt')

    def render_form(self):
        if self.available_groups():
            return self.snippet()
        else:
            return ''
コード例 #7
0
class SlidesWidget(SimpleInputWidget):
    """
    this widget pretty much is the same as the Slides view
    In itself, it does not provide any data manipulatation, but
    it does provide the correct urls to perform the editing action
    for each slide
    """

    template = ViewPageTemplateFile('browser/slides.pt')

    def __init__(self, field, request):
        SimpleInputWidget.__init__(self, field, request)

        # field/settings/context
        self.slider_url = self.context.context.context.absolute_url()
        # field/settings
        self.settings = self.context.context
        # since this uses the same .pt file
        self.css = slider_settings_css(self.settings)

    def __call__(self):
        return self.template(self)

    def hasInput(self):
        """
        data should never change here....
        """
        return False
コード例 #8
0
class EditorialStatusFlag(ViewletBase):
    """A flag informing about the editorial status.

    It only shows up if unlocked, i.e. editorial work has to be
    done."""

    template = ViewPageTemplateFile('statusflag.pt')

    def locked(self):
        return IEditorialHistory(self.context).locked

    def status(self):
        curr = IEditorialHistory(self.context).getCurrentEditorialStatus()
        vocReg = getVocabularyRegistry()
        voc = vocReg.get(self.context, 'quotationtool.editorial.Status')
        if curr:
            status = curr.status
        else:
            status = 'needs_revision'
        return _('editorial-statusflag-title', 
                 u"Editorial Status: $STATUS",
                 mapping={'STATUS': translate(voc.getTermByToken(status).title, context=self.request)})

    def render(self):
        return self.template()
コード例 #9
0
class LookupRecipientSource(object):
    implements(IRecipientSource)

    name = 'group_recipient_lookup'
    form_label = 'Your letter will be sent to:'

    def __init__(self, context, request):
        self.context = context
        self.request = request
        self.settings = get_recipient_settings(context, self.name)

    def lookup(self):
        json_data = getUtility(IGroupSource, self.name)

        info = []
        for id_, entry in self.settings:
            if entry['recipient_type'] == self.name:
                info += json_data[entry['label']]
        return info

    snippet = ViewPageTemplateFile('form_snippet.pt')

    def render_form(self):
        recipients = [r for r in  self.lookup()]
        if len(recipients):
            return self.snippet(recipients=recipients)
        return ''
コード例 #10
0
class ImageInputWidget(FileWidget):
    """
    render a inputwidget that displays the current
    image and lets you choose to delete, replace or just
    leave the current image as is.
    """
    _missing = u""


    __call__ = ViewPageTemplateFile("templates/image-widget.pt")

    @property
    def update_action_name(self):
        return self.name + ".up_action"

    @property
    def upload_name(self):
        return self.name.replace(".", "_") + "_file"

    @property
    def imageURL(self):
        return "./file-image/%s" % self.context.__name__

    def empty_field(self):
        return self._data is None

    def _getFieldInput(self, name):
        return self.request.form.get(name, self._missing)

    def _getFormInput(self):
        """extract the input value from the submitted form """
        return (self._getFieldInput(self.update_action_name),
                self._getFieldInput(self.upload_name))


    def _toFieldValue(self, (update_action, upload)):
        """convert the input value to an value suitable for the field.
        Check the update_action if we should leave the data alone,
        delete or replace it.
        """
        if update_action == u"update":
            if upload is None or upload == "":
                if self._data is None:
                    return self.context.missing_value
                else:
                    raise ConversionError(
                        _("Form upload is not a file object"))
            try:
                seek = upload.seek
                read = upload.read
            except AttributeError, e:
                raise ConversionError(
                    _("Form upload is not a file object"), e)
            else:
                seek(0)
                data = read()
                if data or getattr(upload, "filename", ""):
                    return data
                else:
                    return self.context.missing_value
コード例 #11
0
class WorkItemLabel(BrowserView):
    """ General label for work items"""

    template = ViewPageTemplateFile('workitem_label.pt')

    def __call__(self):
        return self.template()
コード例 #12
0
class PigeonholeSchemaListing(crud.CrudForm):
    """ The combined pigeonhole edit + add forms.
    """
    @lazy_property
    def description(self):
        if self.get_items():
            return _(
                u'The following custom metadata schemas are available for '
                u'your site.')
        else:
            return _(u'Click the "Add Schema" button to begin creating '
                     u' a new metadata schema.')

    template = ViewPageTemplateFile('schema_listing.pt')
    view_schema = field.Fields(IPigeonholeSchemaSettings).select(
        'title', 'types', 'condition')
    addform_factory = crud.NullForm
    editform_factory = PigeonholeSchemaEditForm

    def _schema_collection(self):
        registry = getUtility(IRegistry)
        return registry.collectionOfInterface(IPigeonholeSchemaSettings,
                                              prefix=REGISTRY_BASE_PREFIX)

    def get_items(self):
        """ Look up all existing schemas in the registry.
        """
        return self._schema_collection().items()

    def remove(self, (name, item)):
        """ Remove a schema.
        """
        del self._schema_collection()[name]
コード例 #13
0
class DetailsView(BibliographyView, BrowserView):
    """Details of the item."""

    template = ViewPageTemplateFile('details.pt')

    def getFieldTuples(self):
        iface = IBiblatexEntry
        value_adapter = interfaces.IEntryBibtexRepresentation(self.context)
        _type = getEntryTypeSafely(getattr(self.context, 'entry_type'))
        tuples = [('entry_type', 
                   iface['entry_type'].title, 
                   getattr(self.context, 'entry_type'))
                  ]
        flds = getRequiredTuple(_type.required)
        flds += getTuple(_type.optional)
        for fld in flds:
            tuples.append((fld, 
                           iface[fld].title,
                           value_adapter.getField(fld))
                          )
        tuples.append(('Id',
                       iface['__name__'].title,
                       self.context.__name__
                       ))
        return tuples
コード例 #14
0
class NotationBaseView(BrowserView):

    cssClass = u'notation'

    template = ViewPageTemplateFile('notation.pt')

    def __call__(self):
        return self.template()
コード例 #15
0
class OneTimeEditWidget(TextAreaWidget):
    """
    a text area that is meant to be used once in between edit.
    when you open an edit form it displays the last entry that
    was made and an empty texarea input that will get stored.

    """
    __call__ = ViewPageTemplateFile("templates/one-time-textinput-widget.pt")
コード例 #16
0
class OGViewlet(ViewletBase):
    template = ViewPageTemplateFile('ogviewlet.pt')

    def render(self):
        return self.template()

    def metatags(self):
        return IOpengraphMetatags(self.context).metatags.items()
コード例 #17
0
class DetailsView(BrowserView, RenderQuotation):
    """The @@details view which can be called from within a zpt.
    """

    template = ViewPageTemplateFile('details.pt')

    def __call__(self):
        return self.template()
コード例 #18
0
ファイル: requirement.py プロジェクト: mleist/ict-ok.org
class RequirementView(schooltool.skin.containers.ContainerView):
    """A Requirement view."""

    __used_for__ = schooltool.requirement.interfaces.IRequirement

    index_title = _("Requirement index")

    def __init__(self, context, request, depth=None):
        schooltool.skin.containers.ContainerView.__init__(
            self, context, request)
        self.depth = depth
        if self.depth is None:
            self.depth = int(request.get('DEPTH', 3))

    def _search(self, searchstr, context):
        results = []
        for item in context.values():
            if searchstr.lower() in item.title.lower():
                results.append(item)
            results += self._search(searchstr, item)
        return results

    def update(self):
        if 'SEARCH' in self.request and 'CLEAR_SEARCH' not in self.request:
            searchstr = self.request['SEARCH'].lower()
            if self.request.get('RECURSIVE'):
                results = self._search(searchstr, self.context)
            else:
                results = [
                    item for item in self.context.values()
                    if searchstr in item.title.lower()
                ]
            extra_url = "&SEARCH=%s" % urllib.quote(self.request['SEARCH'])
        else:
            self.request.form['SEARCH'] = ''
            results = self.context.values()
            extra_url = ""

        self.batch = IterableBatch(results,
                                   self.request,
                                   sort_by='title',
                                   extra_url=extra_url)

    def listContentInfo(self):
        children = []
        if self.depth < 1:
            return []
        for child in self.batch:
            if schooltool.requirement.interfaces.IRequirement.providedBy(
                    child):
                info = {}
                info['child'] = child
                thread = RequirementView(child, self.request, self.depth - 1)
                info['thread'] = thread.subthread()
                children.append(info)
        return children

    subthread = ViewPageTemplateFile('subthread.pt')
コード例 #19
0
class DbxrefPatternWidgetView:
    template = ViewPageTemplateFile('dbxrefpattern.pt')

    def __init__(self, context, request):
        self.context = context
        self.request = request

    def __call__(self):
        return self.template()
コード例 #20
0
ファイル: source.py プロジェクト: gocept/alphaflow
class OrderedMultiSelectWidget(OrderedMultiSelectWidget):
    """A multi-selection widget with ordering support."""

    _missing = []
    template = ViewPageTemplateFile("orderedSelectionList.pt")

    def _toFieldValue(self, input):
        value = super(OrderedMultiSelectWidget, self)._toFieldValue(input)
        return tuple(value)
コード例 #21
0
class TextDateTimeWidget(TextDateWidget):

    __call__ = ViewPageTemplateFile('templates/textdatetimewidget.pt')

    @property
    def time_name(self):
        return self.name.replace(".", "__") + '__time'

    def hasInput(self):
        return (self.date_name in self.request.form
                and self.time_name in self.request.form)

    def _hasPartialInput(self):
        return (self.date_name in self.request.form
                or self.time_name in self.request.form)

    def _getFormInput(self):
        """extract the input value from the submitted form """
        return (self._getFieldInput(self.date_name),
                self._getFieldInput(self.time_name))

    def _toFormValue(self, value):
        """convert a field value to a string that can be inserted into the form"""
        if (value == self.context.missing_value) and self.required:
            d = datetime.datetime.now()
            return (datetime.datetime.strftime(d, "%Y-%m-%d"),
                    datetime.datetime.strftime(d, "%H:%M"))
        else:
            try:
                return (datetime.datetime.strftime(value, "%Y-%m-%d"),
                        datetime.datetime.strftime(value, "%H:%M"))
            except:
                return ('', '')

    def _toFieldValue(self, (date, time)):
        if (date == self._missing or time == self._missing):
            if self.required:
                return self.context.missing_value
            else:
                if date + time == self._missing:
                    return None
                else:
                    return self.context.missing_value
        else:
            try:
                d = datetime.datetime.strptime(date, "%Y-%m-%d")
                t = datetime.datetime.strptime(time, "%H:%M")
                return datetime.datetime(
                    year=d.year,
                    month=d.month,
                    day=d.day,
                    hour=t.hour,
                    minute=t.minute,
                )
            except ValueError, e:
                raise ConversionError(
                    _(u"Incorrect string data for date and time"), e)
コード例 #22
0
ファイル: widgets.py プロジェクト: skaeser/megrok.form
class TinyDisplayWidget(DisplayWidget):
    template = ViewPageTemplateFile('tinydisplaywidget.pt')

    def __call__(self):
        if self._renderedValueSet():
            value = self._data
        else:
            value = ""
        return self.template(name=self.context.__name__, value=value)
コード例 #23
0
class VocabulariesIndex(browser.BungeniBrowserView):

    render = ViewPageTemplateFile("templates/vocabularies.pt")

    def __init__(self, context, request):
        return super(VocabulariesIndex, self).__init__(context, request)

    def __call__(self):
        return self.render()
コード例 #24
0
class ListView(BrowserView, RenderQuotation):
    """The @@list view which can be called from within a zpt."""

    limit = 200

    template = ViewPageTemplateFile('list.pt')

    def __call__(self):
        return self.template()
コード例 #25
0
class OnlineHelpTopicView(BrowserView):
    """View for one particular help topic."""
    def topicContent(self):
        """ render the source of the help topic """
        source = createObject(self.context.type, self.context.source)
        view = getMultiAdapter((source, self.request))
        html = view.render()
        return html

    renderTopic = ViewPageTemplateFile('helptopic.pt')
コード例 #26
0
class SiteRSSViewlet(ViewletBase):
    implements(ISiteRSSViewlet)

    _links = None

    @property
    def prefs(self):
        portal = getUtility(IPloneSiteRoot)
        return ISiteRSSSchema(portal)

    def _update_links(self):
        # get urls
        items = self.prefs.rss_items
        additional_items = self.prefs.additional_rss_items
        if not (items or additional_items):
            self.allowed = False
        else:
            self.allowed = True
            portal = getUtility(IPloneSiteRoot)
            request = self.request
            # using portal_catalog to be able to get the Title
            catalog = getToolByName(self, 'portal_catalog')
            self._links = []
            portal_id = portal.getId()

            for item in items:
                if item.strip().startswith('/'):
                    # add portal ID before item
                    item = "/" + portal_id + item
                    topics = catalog(path={'query': item, 'depth': 0})
                    if len(topics) == 1:
                        self._links.append({
                            'url':
                            topics[0].getURL() + '/RSS',
                            'title':
                            safe_unicode(topics[0].Title)
                        })

            for item in additional_items:
                if item:
                    try:
                        url, title = item.split(' ', 1)
                    except ValueError:
                        continue
                    self._links.append({'url': url, 'title': title})

    def links(self):
        return self._links

    def update(self):
        super(SiteRSSViewlet, self).update()
        if self._links is None:
            self._update_links()

    render = ViewPageTemplateFile('rsslinks.pt')
コード例 #27
0
class SignUpViewlet(ViewletBase):
    """ A viewlet for the provider used on the login form. """

    template = ViewPageTemplateFile('signup_viewlet.pt')

    def render(self):
        return self.template()

    def quotationtoolURL(self):
        # use hooks because component lookup error if error is context
        return absoluteURL(hooks.getSite(), self.request)
コード例 #28
0
ファイル: widgets.py プロジェクト: mohalfaki/bungeni-portal
class ImageInputWidget(DefaultFileInputWidget):
    '''
    render a inputwidget that displays the current
    image and lets you choose to delete, replace or just
    leave the current image as is.
    '''
    __call__ = ViewPageTemplateFile("templates/image-widget.pt")

    @property
    def imageURL(self):
        return "./file-image/%s" % self.context.__name__
コード例 #29
0
ファイル: admin.py プロジェクト: mohalfaki/bungeni-portal
class XapianSettings(browser.BungeniBrowserView):

    render = ViewPageTemplateFile("templates/xapian-settings.pt")

    def __init__(self, context, request):
        return super(XapianSettings, self).__init__(context, request)

    def __call__(self):
        if self.request.method == "POST":
            IndexReset().start()
        return self.render()
コード例 #30
0
class FeedViewlet(ResourceViewletBase, ViewletBase):
    """Base class for feed links eg. RSS, Atom"""
    _feed_type = None
    _href = None
    index = ViewPageTemplateFile("templates/feed-resource.pt")
    
    def getURL(self):
        return self._href
    
    def getType(self):
        return self._feed_type