Skip to main content

Plone Integration with YAFOWIL

Project description

This is the Plone Integration for YAFOWIL

Functionality

Resources Integration with GenericSetup

Addon widgets may provide custom javascripts, CSS, images and so on.

This package registers the directories containing these assets as resource directories. Thus they can be accessed from the webbrowser. The registration schema is ++resource++MODULENAME/....

The “YAFOWIL Form Library” GS profile registers all resources related to so called “resource groups” in the CSS and javascript registries.

This resource groups must be enabled explicitly(!). The resource groups configuration happens via the portal registry.

You need to provide a Generic setup profile containing a registry.xml with the resource groups configuration, e.g.:

<!-- yafowil.widget.array -->
<record name="yafowil.widget.array.common">
  <field type="plone.registry.field.Bool">
    <title>Array widget common resources</title>
  </field>
  <value>True</value>
</record>

The record name maps to the resource group name.

Take a look into registry.xml of the yafowil.plone:profiles/demoresources profile for more examples or consider the referring resource providing code inside the addon widgets, usually contained in the packages __init__.py file to get available resource groups.

Integration with Translation

The package adds an translation method for Zope2 i18n messages. It’s added using by defining a global preprocessor

Request wrapper

This package registers a global preprocessor for YAFOWIL. It wraps the Zope2 request by an own request instance providing the behavior expected by YAFOWIL. Spezial behaviors:

File Uploads provided by Zope2 as ZPublisher.HTTPRequest.Fileupload objects are turned into Dicts with the keys:

file

file-like object to read data from

filename

submitted name of the upload

mimetype

type of the upload

headers

all headers

original

keeps the original ZPublisher.HTTPRequest.Fileupload object

Base Forms

This package ships with base forms to be extended.

The following form base classes are available:

yafowil.plone.form.BaseForm

does not define a `__call__` method: define a template in ZCML or a `__call__` method. It provides a method named `render_form` which processes and renders the form.

yafowil.plone.form.Form

renders the naked form on __call__.

yafowil.plone.form.YAMLBaseForm

similar to BaseForm above. Expects properties form_template pointing to a YAML file and message_factory providing the message factory used for YAML message strings.

yafowil.plone.form.YAMLForm

similar to YAMLBaseForm renders the naked YAML form on __call__.

Concrete implementation may look like:

>>> from yafowil.base import factory
>>> from yafowil.plone.form import Form

>>> class MyForm(Form):
...     action_resource = '@@view_name_callable_by_browser'
...
...     def prepare(self):
...         form = factory(
...             'form',
...             name='myform',
...             props={
...                 'action': self.form_action,
...             })
...
...         # form widgets creation here...
...
...         self.form = form

Convenience for creating YAML forms:

>>> from zope.i18nmessageid import MessageFactory
>>> from yafowil.plone.form import YAMLBaseForm

>>> class MyYAMLForm(YAMLBaseForm):
...     action_resource = '@@view_name_callable_by_browser'
...     form_template = 'package.name:forms/myform.yaml'
...     message_factory = MessageFactory('package.name')

Form classes inherit from Products.Five.BrowserPage, thus they must be registered via ZCML browser:page directive:

<browser:page
  for="*"
  name="form_registration_name"
  class=".forms.MyYAMLForm"
  template="myyamlform.pt"
  permission="cmf.ModifyPortalContent"
/>

Forms build with this base form classes need a template in order to insert such a form in a layout. It must be called inside a wrapper template `myform.yaml`:

<html xmlns="http://www.w3.org/1999/xhtml" xml:lang="en"
      xmlns:tal="http://xml.zope.org/namespaces/tal"
      xmlns:metal="http://xml.zope.org/namespaces/metal"
      xmlns:i18n="http://xml.zope.org/namespaces/i18n"
      lang="en"
      metal:use-macro="context/main_template/macros/master"
      i18n:domain="package.name">
  <body>
    <metal:content-core fill-slot="content-core">
      <metal:block define-macro="content-core">
        <tal:form replace="structure view/render_form" />
      </metal:block>
    </metal:content-core>
  </body>
</html>

In Plone 5.x, when not using one of the BaseForms, the CSS/JS resources for YAFOWIL are not loaded automatically.

Add the following lines in order to load it:

from Products.CMFPlone.resources import add_bundle_on_request

...

class MyViewWithYafowil(BrowserView):

def __init__(self, context, request):
    super(MyViewWithYafowil, self).__init__(context, request)
    add_bundle_on_request(request, 'yafowil')

Detailed Documentation

If you’re interested to dig deeper: The detailed YAFOWIL documentation is available. Read it and learn how to create your example application with YAFOWIL.

Source Code

The sources are in a GIT DVCS with its main branches at github.

Contributors

  • Jens W. Klein <jens [at] bluedynamics [dot] com>

  • Peter Holzer <hpeter [at] agitator [dot] com>

  • Benjamin Stefaner <bs [at] kleinundpartner [dot] at>

  • Robert Niederreiter <rnix [at] squarewave [dot] at>

History

3.0.0 (2019-02-19)

  • Add resources explicit in pages using YAFOWIL. Do not deliver the CSS/JS chunk on every request. Code using yafoil w/o the yafowil.plone.form.* as base class need a minimal modification. See README. [jensens]

  • Use self.context instead of context in CSRFProtectionBehavior when looking up fallback root key manager. [rnix]

  • Deliver resources as plone.stableResource to cache JS/CSS in browser. [jensens]

  • Python 3 support: [reinhardt]

    • Replaced UserDict

    • Replaced old-style relative import

    • Fixed StringIO import

    • Fixed text handling

  • Deliver jqueryui on request and remove dependency on collective.js.jqueryui [agitator]

2.4.1 (2017-03-10)

  • Reduce logging verbosity on load from info to debug. [jensens]

2.4.0 (2017-03-10)

  • Introduce yafowil.plone.form.CSRFProtectionBehavior. [rnix]

2.3.1 (2016-09-14)

  • Fix yafowil dependency minimal version [jensens]

2.3 (2016-09-09)

  • Use yafowil.utils.entry_point decorator. [rnix]

  • Plone 5 support. [rnix]

2.2 (2015-10-10)

  • Use pkg_resources.get_distribution instead of catching ImportError to check whether TinyMCE is installed. [rnix]

  • Make dependency on Products.TinyMCE a soft dependency. [thet]

2.1 (2013-06-03)

  • Set applyPrefix for CSS resources to True, so that referenced images can still be found. [thet, 2014-05-06]

  • Integrate translations. [rnix, 2014-05-01]

2.0.2

  • fix resource group names [thet]

  • correct getSite import, cleanup [thet]

2.0.1

  • Provdide default title attribute value for richtext blueprint of yafowil.widget.richtext addon widget in order to provide TinyMCE configuration as expected by plone integration. [rnix]

2.0

  • YAFOWIL resource including configuration via generic setup. [rnix, 2012-10-03]

1.3.1

  • Simplify base forms for plone. [jensens, 2012-05-21]

  • Not ZIP safe! [jensens, 2012-04-15]

1.3

  • GS profile marker - fix wrong filename. [rnix, 2012-04-11]

  • Add yafowil.plone.form module containing base classes. [rnix, 2012-04-11]

1.2

  • Rename to yafowil.plone - seems a 2 at the end of a package name confuses easy_install. wtf!? [jensens, 2012-03-20]

1.1

  • Depend on yafowil 1.3 in setup.py and bump version. [jensens, 2012-03-20]

1.0

  • Resources are registered using the new plugin infrastructure. Theres now an import step for generic setup registering all javascripts and stylesheets provided by the plugins. They are registred without any thirdparty dependencies. If a resource is already registered its registration is skipped. Such its possible to register or overide the defaults using xml files. [jensens, 2012-02-01]

  • Automatic browserresources for plugins. [jensens, 2012-02-16]

  • Depends on yafowil 1.3 plugin infrastucture. [jensens, 2012-02-15]

  • Example form and senseful default-classes and plans for plone. [hpeter, bennyboy, 2012-02-15]

1.0-beta

  • Made it work. [jensens, rnix, et al, 2010-12-27]

License

Copyright (c) 2010-2016, BlueDynamics Alliance, Austria All rights reserved.

Redistribution and use in source and binary forms, with or without modification, are permitted provided that the following conditions are met:

  • Redistributions of source code must retain the above copyright notice, this list of conditions and the following disclaimer.

  • Redistributions in binary form must reproduce the above copyright notice, this list of conditions and the following disclaimer in the documentation and/or other materials provided with the distribution.

  • Neither the name of the BlueDynamics Alliance nor the names of its contributors may be used to endorse or promote products derived from this software without specific prior written permission.

THIS SOFTWARE IS PROVIDED BY BlueDynamics Alliance AS IS AND ANY EXPRESS OR IMPLIED WARRANTIES, INCLUDING, BUT NOT LIMITED TO, THE IMPLIED WARRANTIES OF MERCHANTABILITY AND FITNESS FOR A PARTICULAR PURPOSE ARE DISCLAIMED. IN NO EVENT SHALL BlueDynamics Alliance BE LIABLE FOR ANY DIRECT, INDIRECT, INCIDENTAL, SPECIAL, EXEMPLARY, OR CONSEQUENTIAL DAMAGES (INCLUDING, BUT NOT LIMITED TO, PROCUREMENT OF SUBSTITUTE GOODS OR SERVICES; LOSS OF USE, DATA, OR PROFITS; OR BUSINESS INTERRUPTION) HOWEVER CAUSED AND ON ANY THEORY OF LIABILITY, WHETHER IN CONTRACT, STRICT LIABILITY, OR TORT (INCLUDING NEGLIGENCE OR OTHERWISE) ARISING IN ANY WAY OUT OF THE USE OF THIS SOFTWARE, EVEN IF ADVISED OF THE POSSIBILITY OF SUCH DAMAGE.

Project details


Download files

Download the file for your platform. If you're not sure which to choose, learn more about installing packages.

Source Distribution

yafowil.plone-3.0.0.tar.gz (127.2 kB view hashes)

Uploaded Source

Supported by

AWS AWS Cloud computing and Security Sponsor Datadog Datadog Monitoring Fastly Fastly CDN Google Google Download Analytics Microsoft Microsoft PSF Sponsor Pingdom Pingdom Monitoring Sentry Sentry Error logging StatusPage StatusPage Status page