{ "info": { "author": "Raptus AG", "author_email": "dev@raptus.com", "bugtrack_url": null, "classifiers": [ "Programming Language :: Python", "Topic :: Software Development :: Libraries :: Python Modules" ], "description": "Introduction\n============\n\nThis package provides a configurable article content type, which replaces the\ndefault Page content type.\n\nThe following features for raptus.article are provided by this package:\n\nContent\n-------\n * Article - Page Type - folderish\n\nComponents\n----------\n * Related Items - Component - Component showing related Items.\n\nOther\n-----\n * zcml namespace (article) - used to initialize new components.\n\nInstallation\n============\n\nStandard range raptus.article\n-----------------------------\n**Important:**\n\n- Note that it is recommended to use the raptus.article.default\n package which depends on the base components of raptus.article\n for more details have a look at the install documentation of\n `raptus.article.default\n `_.\n This installation only installs the core package.\n\n- Note as well that it does not make sense to only install\n raptus.article.core if you don't develop your own add-ons or install other\n packages of raptus.article as it provides more or less the same functionality\n as the default Page content type.\n\nInstall raptus.article.core\n---------------------------\n\nTo install raptus.article.core into your Plone instance, locate the file\nbuildout.cfg in the root of your Plone instance directory on the file system,\nand open it in a text editor.\n\nAdd the actual raptus.article.core add-on to the \"eggs\" section of\nbuildout.cfg. Look for the section that looks like this::\n\n eggs =\n Plone\n\nThis section might have additional lines if you have other add-ons already\ninstalled. Just add the raptus.article.core on a separate line, like this::\n\n eggs =\n Plone\n raptus.article.core\n\nNext step is to add the zcml files to the \"zcml\" section of\nbuildout.cfg. Look for the section that looks like this::\n\n zcml =\n\nThis section might have additional lines if you have other zcml's already\nregistered. Just add the raptus.article.core* on separate lines like this::\n\n zcml =\n raptus.article.core-meta\n raptus.article.core\n raptus.article.core-overrides\n\nOnce you have added these lines to your configuration file, it's time to run\nbuildout, so the system can add and set up raptus.article.core for you. Go to the\ncommand line and from the root of your Plone instance (same directory as\nbuildout.cfg is located in) run buildout like this::\n\n $ bin/buildout\n\nIf everything went according to plan you now have raptus.article.core installed\nin your Zope instance.\n\nNext, start up Zope using::\n\n $ bin/instance fg\n\nNext go to the \"Add-ons\" control panel in Plone as an administrator and\ninstall the \"raptus.article.core\" product. You should then be able to add\na new content type called Article.\n\nUsage\n=====\n\nAdd article\n-----------\nIf you add a new article you will get the standard plone form to add content.\n\nComponents\n----------\nBy navigating to the \"Components\" tab you may select the components you would like\nto have displayed by this article.\n\nNote if you only installed the raptus.article.core package there is just\nthe component \"Related Items\" available. To add other components like image,\nfiles or links visit the\n`pypi-site `_\nor install the package\n`raptus.article.default `_.\n\nAdditional components\n=====================\nIf you install the default package like the core package, you will get automatically the usual types\nlike link, image, etc.. Besides if you install the article with default, you will not have to register\nall packages in buildout.cfg. The default package find automatically all component packages of raptus.article.\nFor details read the doc of `default package `_.\n\n- `raptus.article.default `_\n (Installs all raptus article components present in your buildout.cfg).\n\nIf you decide to group your components by yourself, here is a list of all currently available components.\nInstall the selected packages like ratpus.article.core. Just be careful not all packages have an overrides.zcml\nand meta.zcml:\n\n- `raptus.article.additionalwysiwyg `_\n (Provides an additional WYSIWYG text field for the articles)\n\n- `raptus.article.contentfader `_\n (Provides a component which continually fades in and out the contained articles)\n\n- `raptus.article.contentflow `_\n (Provides a content flow component like the one used in iTunes)\n\n- `raptus.article.fader `_\n (Provides a component which continually fades in and out the contained images)\n\n- `raptus.article.files `_\n (Provides support for adding attachments to articles)\n\n- `raptus.article.flash `_\n (Provides support for flash movies)\n\n- `raptus.article.form `_\n (Provides support for PloneFormGen)\n\n- `raptus.article.gallery `_\n (Provides basic gallery components)\n\n- `raptus.article.header `_\n (Provides header image support by integrating raptus.header in article)\n\n- `raptus.article.hidecolumns `_\n (Provides functionality to hide the left or right portlet column per article)\n\n- `raptus.article.images `_\n (Provides support for adding images to articles)\n\n- `raptus.article.lightbox `_\n (Provides an inline lightbox component showing the images contained in the article)\n\n- `raptus.article.lightboxgallery `_\n (Provides an inline lightbox component with a horizontal gallery showing the images contained in the article)\n\n- `raptus.article.links `_\n (Provides support for adding links to articles)\n\n- `raptus.article.listings `_\n (Provides basic listing components which display articles contained in the article)\n\n- `raptus.article.maps `_\n (Provides a maps content type to be added to articles)\n\n- `raptus.article.media `_\n (Provides audio and video support for articles)\n\n- `raptus.article.multilanguagefields `_\n (Provides support for raptus.multilanguagefields in article)\n\n- `raptus.article.nesting `_\n (Provides nesting support for articles)\n\n- `raptus.article.randomcontent `_\n (Provides a component which displays a random article)\n\n- `raptus.article.randomimage `_\n (Provides components which display a random image contained in the article)\n\n- `raptus.article.reference `_\n (Provides support for internal or external references on nested articles)\n\n- `raptus.article.table `_\n (Provides a table component for articles)\n\n- `raptus.article.teaser `_\n (Provides support for a teaser image)\n\n- `raptus.article.upload `_\n (Provides multiupload functionality for articles using collective.uploadify)\n\n- `raptus.article.supersized `_\n (Provides an autoadjustung background-image slider component for articles)\n\nCopyright and credits\n=====================\n\nraptus.article is copyrighted by `Raptus AG `_ and licensed under the GPL.\nSee LICENSE.txt for details.\n\nDeveloper Manual\n================\n\nThis manual will give you an overview of the code of and teach you how to build\ncomponents for raptus.article.\n\nThis manual will cover:\n\n- Introduction\n - Target\n - Architecture\n - Features / key benefits\n- Code overview\n - The component adapter\n - ZCML\n - Content\n - Interfaces\n - Indices\n - Overrides\n- Package dependencies\n- Adding a new component\n - Introduction\n - Provider for MyContent objects\n - Component selection\n - Components and viewlets\n - Update profile\n- FAQ\n\n\nIntroduction\n============\n\nTarget\n------\nThe main target of raptus.article is to provide the content editor with a\npre configured set of layout parts (called components) which he may use to\nbuild his page layout. The Article content type provided by raptus.article.core\nis a drop in replacement for the default Page content type.\n\nNote that the components (layout parts) used by raptus.article are not linked\ndirectly to the zope 3 component architecture although they are built on it.\nWe will use the word component for the components of raptus.article in the\nfollowing document and will explicitly note if it is about a component of\nthe zope 3 architecture.\n\n\nArchitecture\n------------\nThe architecture of raptus.article makes heavy use of the zope 3 viewlet architecture.\nA component is basically a viewlet with some metadata like a title, a descriptive text\nand an image. The viewlets used by the components are bound to the marker interface of\nthe view of the article content type which ensures that they are only rendered when viewing\nan article. The viewlets are also bound to a unique marker interface which makes it\npossible to show and hide them in context by providing this interface or not.\n\n\nFeatures / key benefits\n-----------------------\n- raptus.article uses the existing zope 3 architecture, there is no new architecture you\n have to learn\n\n- Heavily based on the viewlets architecture and using its features to:\n - Order our components globally (viewlets.xml / @@manage-viewlets)\n - Activate/deactivate our components globally (viewlets.xml / @@manage-viewlets)\n - Show/Hide our components in context (marker interface)\n\n\nComponents View\n---------------\nThe components view of is available for the article content type and is accessed through the\ncontent views tabs. The view is basically a enhanced and filtered version of the interfaces\ntab in the ZMI. It lists all registered and activated components by their title, description\nand image and allows to show or hide them. By saving the view simply sets or unsets the\nmarker interfaces mapped to the components which will show or hide them in the view of the\narticle. This basic functionality is provided by the `raptus.article.core `_\npackage.\n\n\nCode overview\n=============\n\nThe component adapter\n---------------------\nA component is an adapter implementing IComponent and adapting IArticle which links the\nrequired parts for selecting and rendering. The following parts are part of a component:\n\nViewlet\n```````\n\nAs mentioned earlier each component needs a viewlet which is responsible for rendering\nthe component in the article view.\n\nUnique marker interface\n```````````````````````\n\nEach viewlet also requires a unique marker interfaces responsible for hiding and\nshowing it in context of an article.\n\nTitle\n`````\n\nThe title is used in the components view of the article.\n\nDescription\n```````````\n\nA short descriptive text for the component used in the components view of the article.\n\nImage\n``````\n\nA small presentation image showing how the component will displayed in the article\nused in the components view of the article.\n\n\nZCML\n----\nNew components are registered through zcml by using the component directive\nof the newly provided article namespace.::\n\n \n\nThe definition for the zcml directive is located in the file meta.zcml\nin the IComponentDirective interface.\n\nThe schema of the component directive consists of the following parameters:\n\n+---------------+-------------------------------------------------+\n| Attribute | Description |\n+===============+=================================================+\n| **name** | Component name |\n+---------------+-------------------------------------------------+\n| **component** | Component class |\n+---------------+-------------------------------------------------+\n| **viewlet** | Viewlet class |\n+---------------+-------------------------------------------------+\n| **manager** | Viewlet manager |\n+---------------+-------------------------------------------------+\n| selection | For which object this component may be selected |\n| | used if renders child objects like images |\n+---------------+-------------------------------------------------+\n| image | Defaults to the one specified in the component |\n+---------------+-------------------------------------------------+\n| permission | Permission needed to view the viewlet defaults |\n| | to \"zope.Public\" |\n+---------------+-------------------------------------------------+\n\nThe directive will then register the component adapter, the viewlet for the\nspecified manager using the specified permission, the image if present\nand the component selection adapter if specified.\n\n\nContent\n-------\n- article - Base content for the raptus.article\n\nInterfaces\n----------\nThe following interfaces are defined by raptus.article.core.\n\n- **IArticle** (Marker interface for the article content type)\n\n- **IArticleView** (Marker interface for the article view)\n\n- **IComponents** (Provides information about available and active components)\n - getComponents - method (Returns a list of available components)\n - activeComponents - method (Returns a list of the active components)\n\n- **IComponent** (A component definition)\n - title - attribute (User friendly title of the component)\n - description - attribute (User friendly description of the component)\n - image - attribute (Presentation image for the component)\n - interface - attribute (The unique marker interface the viewlet is bound to)\n - viewlet - attribute (The name of the viewlet rendering the component)\n\n- **IComponentFilter** (Filters and sorts components based on the registration of their viewlets)\n - filter - method (Returns a filtered list of components)\n\n- **IComponentSelection** (A component selection registering a component for selection on a content type)\n\n- **IDefaultComponents** (Provider to define default components for newly created articles)\n - getComponents - method (Returns a list of components which should be activated)\n\n- **INamedDefaultComponent** (Provider to define a default component using a named adapter)\n\n- **IManageable** (Catalog results converter used for the manage macro for objects which are manageable)\n - getList - method (Returns a list of dicts holding the specific links for viewing, editing, sorting\n and deleting the object based on a list of catalog brains)\n\n\nIndices\n-------\nraptus.article.core adds a new index named \"component\" used for the component selection on content types\ncontained in articles.\n\n\nOverrides\n---------\nIn the zcml file /browser/overrides.zcml we override the following\nbrowser components:\n\n- plone_contentmenu_factory (/browser/menu.py)\n- folder_factories (/browser/folderfactories.py)\n\nWhich allows adding new content to default pages set on a folder.\n\nPackage dependencies\n====================\nList of dependencies between the different raptus.article packages\n\n* raptus.article.additionalwysiwyg\n * archetypes.schemaextender\n * raptus.article.core\n* raptus.article.contentfader\n * raptus.article.nesting\n * raptus.article.core\n * raptus.article.teaser\n * archetypes.schemaextender\n * raptus.article.core\n * raptus.inlinelightbox\n* raptus.article.contentflow\n * raptus.article.nesting\n * archetypes.schemaextender\n * raptus.article.core\n * raptus.article.teaser\n * archetypes.schemaextender\n * plone.app.imaging\n * Products.jsImagePopups\n * raptus.article.core\n * raptus.contentflow\n* raptus.article.default\n * raptus.article.files\n * raptus.article.core\n * raptus.article.gallery\n * raptus.article.images\n * archetypes.schemaextender\n * plone.app.imaging\n * raptus.article.core\n * raptus.article.links\n * raptus.article.core\n * raptus.article.listings\n * raptus.article.nesting\n * archetypes.schemaextender\n * raptus.article.core\n * raptus.article.reference\n * raptus.article.nesting\n * archetypes.schemaextender\n * raptus.article.core\n * raptus.article.teaser\n * raptus.article.core\n* raptus.article.fader\n * raptus.article.images\n * raptus.article.core\n * raptus.inlinelightbox\n* raptus.article.flash\n * hexagonit.swfheader\n * Products.ContentTypeValidator\n * raptus.article.core\n* raptus.article.form\n * Products.PloneFormGen\n * raptus.article.core\n* raptus.article.header\n * raptus.article.core\n * raptus.header\n* raptus.article.hidecolumns\n * archetypes.schemaextender\n * raptus.article.core\n* raptus.article.lightbox\n * raptus.article.images\n * raptus.article.core\n * raptus.inlinelightbox\n* raptus.article.lightboxgallery\n * raptus.article.images\n * archetypes.schemaextender\n * plone.app.imaging\n * raptus.article.core\n * raptus.carousel\n * raptus.inlinelightbox\n* raptus.article.maps\n * raptus.article.core\n * raptus.googlemaps\n* raptus.article.media\n * collective.flowplayer\n * plone.app.imaging\n * Products.ContentTypeValidator\n * raptus.article.core\n* raptus.article.multilanguagefields\n * raptus.article.core\n * raptus.multilanguageplone\n * archetypes.schemaextender\n * raptus.multilanguagefields\n* raptus.article.randomcontent\n * raptus.article.nesting\n * archetypes.schemaextender\n * raptus.article.core\n* raptus.article.randomimage\n * raptus.article.images\n * archetypes.schemaextender\n * plone.app.imaging\n * raptus.article.core\n* raptus.article.table\n * archetypes.schemaextender\n * raptus.article.core\n* raptus.article.upload\n * collective.uploadify\n * raptus.article.files\n * raptus.article.core\n * raptus.article.images\n * archetypes.schemaextender\n * plone.app.imaging\n * raptus.article.core\n* raptus.article.supersized\n * raptus.article.core\n * raptus.supersized\n\n\nAdd new component\n=================\n\nIntroduction\n------------\nThis is a short manual on how to create a new content type used in the article. If you already have\na content type and you would like to integrate with raptus.article this manual is of use too.\n\nIn this example we will be adding a new content type called MyContent which will be addable in\narticles and two component which will render a list of the contained MyContent objects one above\nand one below the content body.\n\nProvider for MyContent objects\n------------------------------\nFirst we write a new adapter which will return all MyContent objects contained in an article.\nTo do so we need an interface defining the functionality of the adapter which we place\nin interfaces.py::\n\n from zope.interface import Interface\n\n class IMyContents(Interface):\n \"\"\" Provider for mycontent objects contained in an article\n \"\"\"\n\n def getMyContents(**kwargs):\n \"\"\" Returns a list of mycontents (catalog brains)\n \"\"\"\n\nNow we write an adapter implementing this interface and adapting IArticle and place it in\nadapters.py::\n\n from zope import interface, component\n\n from Products.CMFCore.utils import getToolByName\n\n from raptus.article.core.interfaces import IArticle\n from my.content.interfaces import IMyContents\n\n class MyContents(object):\n \"\"\" Provider for mycontent objects contained in an article\n \"\"\"\n interface.implements(IMyContents)\n component.adapts(IArticle)\n\n def __init__(self, context):\n self.context = context\n\n def getMyContents(self, **kwargs):\n \"\"\" Returns a list of MyContent (catalog brains)\n \"\"\"\n catalog = getToolByName(self.context, 'portal_catalog')\n return catalog(portal_type='MyContent', path={'query': '/'.join(self.context.getPhysicalPath()),\n 'depth': 1}, sort_on='getObjPositionInParent', **kwargs)\n\nLast but not least we have to register the adapter using zcml::\n\n \n\n\nComponent selection\n-------------------\nTo allow the selection of the components a MyContent object shall be displayed in\na new field called **components** is required. We therefor have to alter the schema\nof the MyContent class and add one new field::\n\n ...\n\n from raptus.article.core.componentselection import ComponentSelectionWidget\n\n ...\n\n atapi.LinesField('components',\n enforceVocabulary = True,\n vocabulary_factory = 'componentselectionvocabulary',\n storage = atapi.AnnotationStorage(),\n schemata = 'settings',\n widget = ComponentSelectionWidget(\n description = _(u'description_component_selection_table', default=u'Select the components in which this content should be displayed.'),\n label= _(u'label_component_selection', default=u'Component selection'),\n )\n ),\n\n ...\n\nTo allow the component to search for the MyContent objects who have him selected\nwe use the index created by raptus.article.core named \"component\". To do so we need\nto register a new indexer for this field which we place in index.py::\n\n from zope import interface, component\n from plone.indexer.interfaces import IIndexer\n from Products.ZCatalog.interfaces import IZCatalog\n from my.content.interfaces import IMyComponent\n\n class Index(object):\n interface.implements(IIndexer)\n component.adapts(IMyContent, IZCatalog)\n def __init__(self, obj, catalog):\n self.obj = obj\n def __call__(self):\n return self.obj.Schema()['components'].get(self.obj)\n\nWe also have to register this index using zcml::\n\n \n\nAnd if we would like to have all available components selected in the components field\nwe have to register a default provider for archetypes which is already implemented in\nraptus.article.core and only has to be registered in zcml::\n\n \n\nThis manual will not cover the basic steps to create a new content type documentation to\ndo so is available on `plone.org `_\n\nThe next step is to create the components itself.\n\nComponents and viewlets\n-----------------------\nAs earlier described a component consists of the following parts:\n\n- title: Title of your component\n- description: Description of your component\n- image: If you want, design an own image, but you can also choose one of the existing images.\n Have a look on the existing extensions.\n- interface: Unique marker interface for the viewlet\n- viewlet: Name of your viewlet\n\nMarker interface\n````````````````\nSo we first create our marker interface and place it in browser/mycontents.py::\n\n from zope import interface\n\n ...\n\n class IMyContentAbove(interface.Interface):\n \"\"\" Marker interface for the mycontent viewlet displayed above the content body\n \"\"\"\n\nComponent\n`````````\nThe next step is to create the component adapter responsible for providing meta data used in\nthe components view and linking it with the viewlet. We place also it in browser/mycontents.py::\n\n from zope import interface, component\n\n from raptus.article.core import RaptusArticleMessageFactory as _\n from raptus.article.core import interfaces\n\n ...\n\n class ComponentAbove(object):\n \"\"\" Component which lists mycontent objects above the content body\n \"\"\"\n interface.implements(interfaces.IComponent, interfaces.IComponentSelection)\n component.adapts(interfaces.IArticle)\n\n title = _(u'MyContent above body')\n description = _(u'List of mycontents contained in the article above the content body.')\n image = '++resource++mycontent_above.gif'\n interface = IMyContentAbove\n viewlet = 'my.content.mycontent.above'\n\n def __init__(self, context):\n self.context = context\n\nViewlet\n```````\nNow we will write the corresponding viewlet class based on ViewletBase.\n\nNote that if we define our template with using the index attribute we will be able to overwrite\nit using zcml in a theme project.\n\n::\n\n from Products.Five.browser.pagetemplatefile import ViewPageTemplateFile\n from plone.app.layout.viewlets.common import ViewletBase\n from raptus.article.core.interfaces import IManageable\n from my.content.interfaces import IMyContents\n\n ...\n\n class ViewletAbove(ViewletBase):\n \"\"\" Viewlet listing the mycontents above the content body\n \"\"\"\n index = ViewPageTemplateFile('mycontents.pt')\n component = 'mycontent.above'\n\n def mycontents(self):\n provider = IMyContents(self.context)\n manageable = interfaces.IManageable(self.context)\n items = manageable.getList(provider.getMyContents(component=self.component), self.component)\n for item in items:\n item.update({'title': item['brain'].Title,\n 'description': item['brain'].Description})\n return items\n\nNext we will write the page template and place it in mycontents.pt::\n\n
    \n \n
  • \n \n

    \n Title\n

    \n

    \n Description\n

    \n
  • \n
    \n
\n\nSecond component\n````````````````\nThe same we do for our second component and also place it in the file browser/mycontents.py::\n\n class IMyContentBelow(interface.Interface):\n \"\"\" Marker interface for the mycontent viewlet displayed below the content body\n \"\"\"\n\n class ComponentBelow(object):\n \"\"\" Component which lists mycontent objects below the content body\n \"\"\"\n interface.implements(interfaces.IComponent, interfaces.IComponentSelection)\n component.adapts(interfaces.IArticle)\n\n title = _(u'MyContent above body')\n description = _(u'List of mycontents contained in the article below the content body.')\n image = '++resource++mycontent_below.gif'\n interface = IMyContentBelow\n viewlet = 'my.content.mycontent.below'\n\n def __init__(self, context):\n self.context = context\n\n class ViewletBelow(ViewletAbove):\n \"\"\" Viewlet listing the mycontents below the content body\n \"\"\"\n component = 'mycontent.below'\n\nZCML\n````\nNow we have to register our newly created components using zcml::\n\n \n\n \n\n \n\n \n\n\nUpdate profile\n--------------\nLast but not least we edit our generic setup profile. First we have to add MyContent to the\naddable types of the Article to make it possible to add MyContent objects in articles. To do\nso we have to add the Article to the types.xml file and create a Article.xml in profiles/default/types.\n\ntypes.xml::\n\n \n \n\n ...\n\n \n\n ...\n\n \n\nArticle.xml::\n\n \n \n \n \n \n \n\nNext we add our newly created viewlets into viewlets.xml to define their default position::\n\n \n \n\n ...\n\n \n \n \n \n \n \n\n ...\n\n \n\nFAQ\n===\n\n:Q: If I start my instance, I'll get this Error: ConfigurationError: ('Unknown directive', u'http://namespaces.zope.org/article', u'component')\n\n:A: You have to include the raptus.article.core package in your configure.zcml. Otherwise the article zcml namespace is not defined\n\n:Q: I would like to add my new content type in my article. If I'll save and create the content, I'll get the this Error: KeyError: 'components'\n\n:A: The problem is you have to extend the schema of your content type with the ComponentSelectionDefault field. Have a look to \"add new component\"\n\nChangelog\n=========\n\n2.2 (2016-12-19)\n----------------\n\n- Move translations to ``locales/`` to be able to add/modify\n translations in none-Zope2 packages too [fRiSi]\n\n\n2.1 (2014-10-23)\n----------------\n\n- Support different image fieldnames within the same component (fixed js scope\n bug) and use .component as selector for an item (cropping is compatible with\n raptus.article.listing and gallery this way)\n\n2.0 (2014-07-28)\n----------------\n\n- Introduce a new marker interface (INamedDefaultComponent) and ready\n to use adapter implementation to allow simple registrations of default\n components by using named adapters (this fixes #5) [skaeser]\n\n- Make textfield a primary field (as it's the case for default document type)\n to prevent certain versions of plone's TinyMCE integration to raise\n AttributeErrors when searching for anchors (this fixes #3) [fRISi]\n\n\n2.0b19 (2014-07-22)\n-------------------\n\n- Refactored the related items component of raptus articles (fixed issue #7).\n\n The previous implementation was based on the deprecated python\n script named ``computeRelatedItems``, no more available\n on Plone 4.3.2. [davidemoro]\n\n\n2.0b18 (2014-06-16)\n-------------------\n\n- Show Link to plone.app.imagecropping croppingeditor if the component\n adds a ``crop`` property to the manageable list items pointing to the\n editor (eg path/to/image/@@croppingeditor?scalename=thumb)\n\n The croppingeditor is opened in an overlay and the cropped image\n gets updated when the editor is closed. [fRiSi]\n\n- rename resource ``component.js`` to ``raptus.article.component.js`` to prevent\n name conflicts. [fRiSi]\n\n2.0b17 (2013-12-17)\n-------------------\n\n* The article view now implements IViewView to support plone.app.discussion when\n manually activated see:\n http://stackoverflow.com/questions/10402918/can-not-activate-discussions-on-plone-dexterity-types-folderish\n* Replaced deprecated getIcon() with getIconExprObject()\n\n\n2.0b16 (2013-07-22)\n-------------------\n\n* CSS adjustments (added z-index for article-toggle and article-manage)\n* Plone 4.3 compatibility [tmassman]\n\n\n2.0b15 (2013-07-02)\n-------------------\n\n* Made some minor CSS adjustments\n* Implemented drag'n'drop for raptus.article.table\n\n\n2.0b14 (2013-07-02)\n-------------------\n\n* Removed event dispatch function to prevent double event notifications\n\n\n2.0b13 (2013-07-01)\n-------------------\n\n* Component management reimplementation\n* Added drag'n'drop support\n* Added component activated and deactivated events\n* PEP 8\n\n\n2.0b12 (2013-05-03)\n-------------------\n\n* Improved component filter to no longer update every viewlet when filtering\n and sorting\n\n2.0b11 (2013-03-11)\n-------------------\n\n* Italian translations [vito80ba]\n\n2.0b10 (2012-03-21)\n-------------------\n\n* Changed permission for view of articles from zope.Public to zope2.View\n to prevent odd behaviour if accessing private article with title and\n description hidden where a completely unstyled login form was presented\n\n2.0b9 (2012-01-23)\n------------------\n\n* plone 4.1 compatibility by importing cmfcore permissions\n\n2.0b8 (2011-03-21)\n------------------\n\n* Added links to the manageable adapter to show and hide items in a component\n\n2.0b7 (2011-01-20)\n------------------\n\n* Fixed AttributeError raised if a Viewlet has been customized ttw, which resulted\n in a TTWViewletRenderer object which has no __name__ attribute\n (Thanks to Ron Zayac for reporting it)\n\n2.0b6 (2010-11-25)\n------------------\n\n* Fix Namespace on related items\n\n2.0b5 (2010-11-10)\n------------------\n\n* Added French translations\n\n2.0b4 (2010-10-21)\n------------------\n\n* Updated readme and manual\n\n2.0b3 (2010-10-20)\n------------------\n\n* First public release", "description_content_type": null, "docs_url": null, "download_url": "UNKNOWN", "downloads": { "last_day": -1, "last_month": -1, "last_week": -1 }, "home_page": "https://github.com/Raptus/raptus.article.core", "keywords": "", "license": "GPL", "maintainer": null, "maintainer_email": null, "name": "raptus.article.core", "package_url": "https://pypi.org/project/raptus.article.core/", "platform": "UNKNOWN", "project_url": "https://pypi.org/project/raptus.article.core/", "project_urls": { "Download": "UNKNOWN", "Homepage": "https://github.com/Raptus/raptus.article.core" }, "release_url": "https://pypi.org/project/raptus.article.core/2.2/", "requires_dist": null, "requires_python": null, "summary": "Provides a configurable article content type (replaces the default Page content type).", "version": "2.2" }, "last_serial": 2528222, "releases": { "2.0": [ { "comment_text": "", "digests": { "md5": "9bde2b27792a294977abeddb2e5b646b", "sha256": "ced81b157f089a504d6f267c3eb3cd47ab248572a170671d0591d3253c4f57e2" }, "downloads": -1, "filename": "raptus.article.core-2.0.zip", "has_sig": false, "md5_digest": "9bde2b27792a294977abeddb2e5b646b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 105610, "upload_time": "2014-07-28T06:03:35", "url": "https://files.pythonhosted.org/packages/af/02/320b2e0f3620d136add96c4071b546abd0b984c91a5d4b1f2aff6bc84e3f/raptus.article.core-2.0.zip" } ], "2.0b10": [ { "comment_text": "", "digests": { "md5": "ab34428315466905461af1b877cedc22", "sha256": "0fede20a390ff9d0c46c40d24091ca9e4a3416560a17a2f477d37e1ce2d663dc" }, "downloads": -1, "filename": "raptus.article.core-2.0b10.tar.gz", "has_sig": false, "md5_digest": "ab34428315466905461af1b877cedc22", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55757, "upload_time": "2012-03-21T11:59:26", "url": "https://files.pythonhosted.org/packages/5a/7f/593f9679f300d911fbf1179233eff6685f014bd44ab97623ca95d18f71e2/raptus.article.core-2.0b10.tar.gz" } ], "2.0b11": [ { "comment_text": "", "digests": { "md5": "25075b5b3bc7413ec8dbe41778437e54", "sha256": "c26b7ccff5fdfd930d5353f65591506434defb1115a1fe3dff619df60fea564f" }, "downloads": -1, "filename": "raptus.article.core-2.0b11.zip", "has_sig": false, "md5_digest": "25075b5b3bc7413ec8dbe41778437e54", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88517, "upload_time": "2013-03-21T09:24:25", "url": "https://files.pythonhosted.org/packages/1e/52/1d265025a8c5e37275c9901f36854bf44a97020dd88fbc4a9cb0ae1685d3/raptus.article.core-2.0b11.zip" } ], "2.0b12": [ { "comment_text": "", "digests": { "md5": "bb2c0ba1c50004b184388430c2cc9c3a", "sha256": "ad8efdce740da477055f5e1fafd16cf60a38f8c548f02761fc17aec70e63843c" }, "downloads": -1, "filename": "raptus.article.core-2.0b12.zip", "has_sig": false, "md5_digest": "bb2c0ba1c50004b184388430c2cc9c3a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 88677, "upload_time": "2013-05-03T06:50:26", "url": "https://files.pythonhosted.org/packages/99/61/d659366dc3a8a16f65e96326775b9e308eb11ab8b6c371e9442b58a9983a/raptus.article.core-2.0b12.zip" } ], "2.0b13": [ { "comment_text": "", "digests": { "md5": "51dd56de53a13110c3046ba7e37513aa", "sha256": "584794cd9e65916b2f669a5049faaa6e3884ff324e387f7ac386408ce882f80b" }, "downloads": -1, "filename": "raptus.article.core-2.0b13.zip", "has_sig": false, "md5_digest": "51dd56de53a13110c3046ba7e37513aa", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 101014, "upload_time": "2013-07-01T15:46:53", "url": "https://files.pythonhosted.org/packages/76/a6/6e6e30d0a138b9ec3264b7f0026eb6c5243ab4862f281fa118311bf8dbe5/raptus.article.core-2.0b13.zip" } ], "2.0b14": [ { "comment_text": "", "digests": { "md5": "0613ed201025d628613d9c0b7b836f76", "sha256": "316f3e864bc97f64997f82150b2d5af953fde2c97d6261a12a9b7deda989857b" }, "downloads": -1, "filename": "raptus.article.core-2.0b14.zip", "has_sig": false, "md5_digest": "0613ed201025d628613d9c0b7b836f76", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 101105, "upload_time": "2013-07-02T09:25:43", "url": "https://files.pythonhosted.org/packages/6b/4d/45b3d55938ff0f41dd85806d910ce72abfcda9061c30dbfb95cbf2494847/raptus.article.core-2.0b14.zip" } ], "2.0b15": [ { "comment_text": "", "digests": { "md5": "17b64874ee284a23135ab6c6579e2a89", "sha256": "6ffa81a84a3f2475570f2cae6f309d14e9b5700d9f8b4b14a617a9e27ccc757b" }, "downloads": -1, "filename": "raptus.article.core-2.0b15.zip", "has_sig": false, "md5_digest": "17b64874ee284a23135ab6c6579e2a89", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 101357, "upload_time": "2013-07-02T12:18:59", "url": "https://files.pythonhosted.org/packages/bc/cf/b3d227296307a926ee2df30bbd9613cd464757907f128348a234e40ffd5a/raptus.article.core-2.0b15.zip" } ], "2.0b16": [ { "comment_text": "", "digests": { "md5": "c493c1d5b4aaf87aafe85ca0096f9b12", "sha256": "6822b365b7042d6926d124836a7e7860c80366e550e9e99b4697341c3ad1c8be" }, "downloads": -1, "filename": "raptus.article.core-2.0b16.zip", "has_sig": false, "md5_digest": "c493c1d5b4aaf87aafe85ca0096f9b12", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 101479, "upload_time": "2013-07-22T08:35:10", "url": "https://files.pythonhosted.org/packages/ae/e0/e708b296954cec4e1f83f56c30befe496fa8cddbfe0bbaaf5b7c96f033b6/raptus.article.core-2.0b16.zip" } ], "2.0b17": [ { "comment_text": "", "digests": { "md5": "2e6f67665c3f120cfa5b0da03e55a5f3", "sha256": "2de13d280384a97ebaef51ba8d5cafc4f85c862e1c9370db1e77d64979050cb9" }, "downloads": -1, "filename": "raptus.article.core-2.0b17.zip", "has_sig": false, "md5_digest": "2e6f67665c3f120cfa5b0da03e55a5f3", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 101992, "upload_time": "2013-12-17T08:12:09", "url": "https://files.pythonhosted.org/packages/e0/46/35396ecb3ac4b594816629a7cbf9275e1ba01da44b33c95737f8af129ab7/raptus.article.core-2.0b17.zip" } ], "2.0b18": [ { "comment_text": "", "digests": { "md5": "e39f022bd9473b5235fa5a06582aeb2a", "sha256": "1fd11e9c73fd37eb8a615b9097be1a88a142e968fad100b4b3b81af9eaa59b0b" }, "downloads": -1, "filename": "raptus.article.core-2.0b18.zip", "has_sig": false, "md5_digest": "e39f022bd9473b5235fa5a06582aeb2a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 105009, "upload_time": "2014-06-16T06:03:56", "url": "https://files.pythonhosted.org/packages/a3/a7/daae7524def15f50d2b24a1ec4a46e3a2c2f7254c0be93f0fb30ff2fe11c/raptus.article.core-2.0b18.zip" } ], "2.0b19": [ { "comment_text": "", "digests": { "md5": "56a662bef19750b2ffc78c38d2b96e14", "sha256": "6d6caba453a6490ff2fdc50b1449f3f8e3e66c9a67657855c3c25e64f3d8f17d" }, "downloads": -1, "filename": "raptus.article.core-2.0b19.zip", "has_sig": false, "md5_digest": "56a662bef19750b2ffc78c38d2b96e14", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 105405, "upload_time": "2014-07-22T04:45:17", "url": "https://files.pythonhosted.org/packages/aa/c0/c649d3c35179de1d70cbeee385825b402013f1c22562196939d4a38838f8/raptus.article.core-2.0b19.zip" } ], "2.0b3": [ { "comment_text": "", "digests": { "md5": "26513f38d74cd8812052b422a70ab232", "sha256": "b017a94c0eb0c1f33eff62b40b877eb11d24baabd0c4d298b7a65b80cbc4d7fa" }, "downloads": -1, "filename": "raptus.article.core-2.0b3.tar.gz", "has_sig": false, "md5_digest": "26513f38d74cd8812052b422a70ab232", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50040, "upload_time": "2010-10-20T16:08:34", "url": "https://files.pythonhosted.org/packages/f7/0e/bd7982cdfc8024893ade0d4a74884103dea4d7e6eaaefcdd84b11ccb0419/raptus.article.core-2.0b3.tar.gz" } ], "2.0b4": [ { "comment_text": "", "digests": { "md5": "444ad5f3b92cdaf6a01736a45fd8937b", "sha256": "f6c6037ca6ad714c232f31e05bb8ac6f4971eef3cf15ddb512ac77d43277ae0d" }, "downloads": -1, "filename": "raptus.article.core-2.0b4.tar.gz", "has_sig": false, "md5_digest": "444ad5f3b92cdaf6a01736a45fd8937b", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49387, "upload_time": "2010-10-21T16:13:20", "url": "https://files.pythonhosted.org/packages/ff/4c/4ab3046d6a8dfe8064085ef09e29e092d0aeed97d3970b6cf77ae138c82c/raptus.article.core-2.0b4.tar.gz" } ], "2.0b5": [ { "comment_text": "", "digests": { "md5": "b24e517795696558de30a9d8285b1352", "sha256": "8b08acf825ffed06a0c15b1f362095f1cff3b8f335bb75264252a0bf4efa2351" }, "downloads": -1, "filename": "raptus.article.core-2.0b5.tar.gz", "has_sig": false, "md5_digest": "b24e517795696558de30a9d8285b1352", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50064, "upload_time": "2010-11-10T11:42:57", "url": "https://files.pythonhosted.org/packages/58/77/9ed0780ea2b279d5550378181add90e75642d8cce4c93325b13264437127/raptus.article.core-2.0b5.tar.gz" } ], "2.0b6": [ { "comment_text": "", "digests": { "md5": "838f122e7ce081bdf4eeee21ce55b10a", "sha256": "2201edf833786109a239d3d1b7ac5a04f8ebe0a171b7c5b35d94dc75c84ff625" }, "downloads": -1, "filename": "raptus.article.core-2.0b6.tar.gz", "has_sig": false, "md5_digest": "838f122e7ce081bdf4eeee21ce55b10a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 49459, "upload_time": "2010-12-07T11:17:25", "url": "https://files.pythonhosted.org/packages/55/a9/67ba06213e3273f98cff6bc64e24080331fcac9717d538eb007dcd38b41b/raptus.article.core-2.0b6.tar.gz" } ], "2.0b7": [ { "comment_text": "", "digests": { "md5": "5b6eb9ed6fb373fe654866419b58af2a", "sha256": "f66dd94984b7681a7ca2c9c31dc43087f1ee95dbec956ba9606a3cf6f520383f" }, "downloads": -1, "filename": "raptus.article.core-2.0b7.tar.gz", "has_sig": false, "md5_digest": "5b6eb9ed6fb373fe654866419b58af2a", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 50715, "upload_time": "2011-03-21T16:55:20", "url": "https://files.pythonhosted.org/packages/c7/43/0a7b5d02bf0dd4df29afeb889e2994aa57293ec345e0722c3f7964fcddad/raptus.article.core-2.0b7.tar.gz" } ], "2.0b8": [ { "comment_text": "", "digests": { "md5": "4d5edae505cacc7e47bf4670635f0490", "sha256": "b9d0a1e6f6dfd8976f25490410b904faab5b477166c8e56debad0b4465f98586" }, "downloads": -1, "filename": "raptus.article.core-2.0b8.tar.gz", "has_sig": false, "md5_digest": "4d5edae505cacc7e47bf4670635f0490", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 54042, "upload_time": "2011-03-21T16:56:45", "url": "https://files.pythonhosted.org/packages/9f/67/60a5288654b67ed59b89834ab75d30c4a892fb32a29c2eabd18bdf326b1c/raptus.article.core-2.0b8.tar.gz" } ], "2.0b9": [ { "comment_text": "", "digests": { "md5": "79028308475a36241078c686f504f563", "sha256": "c4933906711866d948cb337b5ebb897052bd277e034ec531b2085158238fb29a" }, "downloads": -1, "filename": "raptus.article.core-2.0b9.tar.gz", "has_sig": false, "md5_digest": "79028308475a36241078c686f504f563", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 55419, "upload_time": "2012-01-23T10:05:27", "url": "https://files.pythonhosted.org/packages/0b/8f/4e9e4f44baaa37d21838ad9750585b68ba9dc1f4c5fdb720046663c5b2b5/raptus.article.core-2.0b9.tar.gz" } ], "2.1": [ { "comment_text": "", "digests": { "md5": "e4c8c88686997d7bf00ceb0545cac0a2", "sha256": "ac36392d8cb840e0d438e360131aa73ba5160ea0f53d93b406d148b28e7a41c0" }, "downloads": -1, "filename": "raptus.article.core-2.1.zip", "has_sig": false, "md5_digest": "e4c8c88686997d7bf00ceb0545cac0a2", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 105953, "upload_time": "2014-10-23T07:29:39", "url": "https://files.pythonhosted.org/packages/b1/99/b512892e3c77997155b889abb4ddc33e133fabf1a20193840d3659aef0dc/raptus.article.core-2.1.zip" } ], "2.2": [ { "comment_text": "", "digests": { "md5": "4fdfb3350795a4bb0c4d95da2c92cc4f", "sha256": "790be7869c07185aa413ca68da78701f541b8b4288d755b41bd1832f5eb3abbe" }, "downloads": -1, "filename": "raptus.article.core-2.2.zip", "has_sig": false, "md5_digest": "4fdfb3350795a4bb0c4d95da2c92cc4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106335, "upload_time": "2016-12-19T14:15:14", "url": "https://files.pythonhosted.org/packages/5d/29/7c5b8b075d38fcc1e04e71693d35ec5d8285aa94359e7df94a7126c19ea1/raptus.article.core-2.2.zip" } ] }, "urls": [ { "comment_text": "", "digests": { "md5": "4fdfb3350795a4bb0c4d95da2c92cc4f", "sha256": "790be7869c07185aa413ca68da78701f541b8b4288d755b41bd1832f5eb3abbe" }, "downloads": -1, "filename": "raptus.article.core-2.2.zip", "has_sig": false, "md5_digest": "4fdfb3350795a4bb0c4d95da2c92cc4f", "packagetype": "sdist", "python_version": "source", "requires_python": null, "size": 106335, "upload_time": "2016-12-19T14:15:14", "url": "https://files.pythonhosted.org/packages/5d/29/7c5b8b075d38fcc1e04e71693d35ec5d8285aa94359e7df94a7126c19ea1/raptus.article.core-2.2.zip" } ] }