Remove docs/html directory. There is no need to keep the HTML documentation inside the package itself, since it is available on packages.python.org/plone.app.discussion.

svn path=/plone.app.discussion/trunk/; revision=36875
This commit is contained in:
Timo Stollenwerk 2010-06-01 15:11:33 +00:00
parent 125a1beb7e
commit 518b89b043
14 changed files with 621 additions and 162 deletions

View File

@ -0,0 +1,25 @@
API/Interfaces
--------------
The conversation and replies adapters.
The conversation is responsible for storing all comments. It provides a
dict-like API for accessing comments, where keys are integers and values
are IComment objects. It also provides features for finding comments quickly.
The IReplies adapter provides an API for finding and manipulating the comments
directly in reply to a particular comment (implemented by the CommentReplies
adpater) or at the top level of the conversation (implemented by the
ConversationReplies adapter).
.. autointerface:: plone.app.discussion.interfaces.IConversation
:members:
.. autointerface:: plone.app.discussion.interfaces.IReplies
:members:
.. autointerface:: plone.app.discussion.interfaces.IComment
:members:

View File

@ -10,7 +10,7 @@ plone.app.discussion.
CMF and Plone UI constructs. CMF and Plone UI constructs.
**Discussion items are cataloged** **Discussion items are cataloged**
It is be possible to search for discussion items like any other type of It is possible to search for discussion items like any other type of
content. content.
**Discussion items are subject to workflow and permission** **Discussion items are subject to workflow and permission**
@ -19,26 +19,26 @@ plone.app.discussion.
permissions. permissions.
**Discussion items are light weight objects** **Discussion items are light weight objects**
Discussion item objects are as light weight as possible. Discussion item objects are as light weight as possible. Ideally, a
Ideally, a discussion item should be as lightweight as a catalog brain. discussion item should be as lightweight as a catalog brain. This may mean
This may mean that we forego convenience base classes and re-implement that we forego convenience base classes and re-implement certain interfaces.
certain interfaces. Comments should not provide the full set of dublin Comments should not provide the full set of dublin core metadata, though
core metadata, though custom indexers can be used to provide values for custom indexers can be used to provide values for standard catalog indexes.
standard catalog indexes.
**Optimise for retrival speed** **Optimise for retrival speed**
HTML filtering and other processing should happen on save, not on render, HTML filtering and other processing should happen on save, not on render,
to make rendering quick. to make rendering quick.
**Settings are stored using plone.registry** **Settings are stored using plone.registry**
Any global setting should be stored in plone.registry records Any global setting should be stored in plone.registry records.
**Forms are constructed using extensible z3c.form forms** **Forms are constructed using extensible z3c.form forms**
This allows plugins (such as spam protection algorithms) to provide This allows plugins (such as spam protection algorithms) to provide
additional validation additional validation. It also allows integrators to write add-ons that add
new fields to the comment form.
**Discussion items are stored in a BTree container** **Discussion items are stored in a BTree container**
This allows faster lookup and manipulation This allows faster lookup and manipulation.
**Discussion items are accessed using a dict-like interface** **Discussion items are accessed using a dict-like interface**
This makes iteration and manipulation more natural. Even if comments are This makes iteration and manipulation more natural. Even if comments are

View File

@ -0,0 +1,30 @@
===========================
Captcha Plugin Architecture
===========================
This document contains design notes for the plone.app.discussion Captcha plugin
architecture. It also explains how to write your own Captcha plugin (???).
Currently there are two plugins that work with plone.app.discussion:
1) plone.formwidget.captcha
2) plone.formwidget.recaptcha
1) Captcha plugin must provide the feature "plone.app.discussion-captcha":
Add this to your configure.zcml::
<configure ...
xmlns:meta="http://namespaces.zope.org/meta">
<!-- Declare that plone.formwidget.captcha provides a Captcha field that
can be used by plone.app.discussion to add a Captcha field to comment
forms. -->
<meta:provides feature="plone.app.discussion-captcha" />
...
</configure>
For examples have a look at plone.formwidget.captcha
https://svn.plone.org/svn/plone/plone.formwidget.captcha/trunk/plone/formwidget/captcha/configure.zcml

View File

@ -150,20 +150,18 @@ an auto-moderation 'white-list', e.g. by email address or username.
Forms and UI Forms and UI
------------ ------------
The basic commenting display/reply form should be placed in a viewlet. The basic commenting display/reply form is placed in a viewlet.
Ideally, the reply form should be inline, perhaps revealed with JavaScript The reply form is dynamically created right under the comment when the user hits
if enabled. This allows full contextualisation of replies. The current the reply button. To do so, we copy the standard comment form with a jQuery
solution, with a separate form that shows some context, is brittle and function. This function sets the form's hidden in_reply_to field to the id of
over-complicated. the comment the user wants to reply to. This also makes is possible to use
z3c.form validation for the reply forms, because we can uniquely identify the
a reply form request and return the reply form with validation errors.
If we support quoting of comments in replies, we can load the text to quote Since we rely on JavaScript for the reply form creation, the reply button is
using JavaScript as well. removed for nonJavaScript enabled browsers.
As a fall-back for non-JavaScript enabled browsers, it is probably OK not to The comment form uses z3c.form and plone.z3cform's ExtensibleForm support. This
support quoting and/or viewing of context, e.g. the user is taken to a standalone makes it possible to plug in additional fields declaratively, e.g. to include
'comment reply' form. SPAM protection.
All actual forms should be handled using z3c.form and plone.z3cform's
ExtensibleForm support. This makes it possible to plug in additional fields
declaratively, e.g. to include spam protection.

View File

@ -16,18 +16,9 @@ Contents:
architecture.txt architecture.txt
design.txt design.txt
api.txt
API
---
.. automodule:: plone.app.discussion
.. autoclass:: plone.app.discussion.conversation.Conversation
.. automethod:: plone.app.discussion.conversation.Conversation.enabled
.. include:: ../../CHANGES.txt .. include:: ../../CHANGES.txt
Indices and tables Indices and tables
================== ==================

306
docs/html/api.html Normal file
View File

@ -0,0 +1,306 @@
<!DOCTYPE html PUBLIC "-//W3C//DTD XHTML 1.0 Transitional//EN"
"http://www.w3.org/TR/xhtml1/DTD/xhtml1-transitional.dtd">
<html xmlns="http://www.w3.org/1999/xhtml">
<head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>API/Interfaces &mdash; plone.app.discussion v1.0b4 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript">
var DOCUMENTATION_OPTIONS = {
URL_ROOT: '#',
VERSION: '1.0b4',
COLLAPSE_MODINDEX: false,
FILE_SUFFIX: '.html',
HAS_SOURCE: true
};
</script>
<script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="plone.app.discussion v1.0b4 documentation" href="index.html" />
<link rel="prev" title="Design Notes" href="design.html" />
</head>
<body>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
accesskey="I">index</a></li>
<li class="right" >
<a href="design.html" title="Design Notes"
accesskey="P">previous</a> |</li>
<li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li>
</ul>
</div>
<div class="document">
<div class="documentwrapper">
<div class="bodywrapper">
<div class="body">
<div class="section" id="api-interfaces">
<h1>API/Interfaces<a class="headerlink" href="#api-interfaces" title="Permalink to this headline"></a></h1>
<p>The conversation and replies adapters.</p>
<p>The conversation is responsible for storing all comments. It provides a
dict-like API for accessing comments, where keys are integers and values
are IComment objects. It also provides features for finding comments quickly.</p>
<p>The IReplies adapter provides an API for finding and manipulating the comments
directly in reply to a particular comment (implemented by the CommentReplies
adpater) or at the top level of the conversation (implemented by the
ConversationReplies adapter).</p>
<dl class="interface">
<dt id="plone.app.discussion.interfaces.IConversation">
<em class="property">interface </em><tt class="descclassname">plone.app.discussion.interfaces.</tt><tt class="descname">IConversation</tt><a class="headerlink" href="#plone.app.discussion.interfaces.IConversation" title="Permalink to this definition"></a></dt>
<dd><p>Extends: <tt class="xref docutils literal"><span class="pre">zope.interface.common.mapping.IIterableMapping</span></tt></p>
<p>A conversation about a content object.</p>
<p>This is a persistent object in its own right and manages all comments.</p>
<p>The dict interface allows access to all comments. They are stored by
long integer key, in the order they were added.</p>
<p>Note that __setitem__() is not supported - use addComment() instead.
However, comments can be deleted using __delitem__().</p>
<p>To get replies at the top level, adapt the conversation to IReplies.</p>
<p>The conversation can be traversed to via the ++comments++ namespace.
For example, path/to/object/++comments++/123 retrieves comment 123.</p>
<p>The __parent__ of the conversation (and the acquisition parent during
traversal) is the content object. The conversation is the __parent__
(and acquisition parent) for all comments, regardless of threading.</p>
<dl class="method">
<dt id="IConversation.__delitem__">
<tt class="descname">__delitem__</tt><big>(</big><em>key</em><big>)</big><a class="headerlink" href="#IConversation.__delitem__" title="Permalink to this definition"></a></dt>
<dd>Delete the comment with the given key. The key is a long id.</dd></dl>
<dl class="attribute">
<dt id="IConversation.last_comment_date">
<tt class="descname">last_comment_date</tt><a class="headerlink" href="#IConversation.last_comment_date" title="Permalink to this definition"></a></dt>
<dd>Date of the most recent comment</dd></dl>
<dl class="attribute">
<dt id="IConversation.total_comments">
<tt class="descname">total_comments</tt><a class="headerlink" href="#IConversation.total_comments" title="Permalink to this definition"></a></dt>
<dd>Total number of comments on this item</dd></dl>
<dl class="method">
<dt id="IConversation.getComments">
<tt class="descname">getComments</tt><big>(</big><em>start=0</em>, <em>size=None</em><big>)</big><a class="headerlink" href="#IConversation.getComments" title="Permalink to this definition"></a></dt>
<dd><p>Return an iterator of comment objects for rendering.</p>
<p>The &#8216;start&#8217; parameter is the id of the comment from which to start the
batch. If no such comment exists, the next higher id will be used.
This means that you can use max key from a previous batch + 1 safely.</p>
<p>The &#8216;size&#8217; parameter is the number of comments to return in the
batch.</p>
<p>The comments are returned in creation date order, in the exact batch
size specified.</p>
</dd></dl>
<dl class="method">
<dt id="IConversation.enabled">
<tt class="descname">enabled</tt><big>(</big><big>)</big><a class="headerlink" href="#IConversation.enabled" title="Permalink to this definition"></a></dt>
<dd><p>Returns True if discussion is enabled for this conversation.</p>
<p>This method checks five different settings in order to figure out if
discussion is enable on a specific content object:</p>
<ol class="arabic simple">
<li>Check if discussion is enabled globally in the plone.app.discussion
registry/control panel.</li>
<li>If the current content object is a folder, always return False, since
we don&#8217;t allow comments on a folder. This setting is used to allow/
disallow comments for all content objects inside a folder, not for
the folder itself.</li>
<li>Check if the allow_discussion boolean flag on the content object is
set. If it is set to True or False, return the value. If it set to
None, try further.</li>
<li>Traverse to a folder with allow_discussion set to either True or
False. If allow_discussion is not set (None), traverse further until
we reach the PloneSiteRoot.</li>
<li>Check if discussion is allowed for the content type.</li>
</ol>
</dd></dl>
<dl class="method">
<dt id="IConversation.getThreads">
<tt class="descname">getThreads</tt><big>(</big><em>start=0</em>, <em>size=None</em>, <em>root=0</em>, <em>depth=None</em><big>)</big><a class="headerlink" href="#IConversation.getThreads" title="Permalink to this definition"></a></dt>
<dd><p>Return a batch of comment objects for rendering.</p>
<p>The &#8216;start&#8217; parameter is the id of the comment from which to start
the batch. If no such comment exists, the next higher id will be used.
This means that you can use max key from a previous batch + 1 safely.
This should be a root level comment.</p>
<p>The &#8216;size&#8217; parameter is the number of threads to return in the
batch. Full threads are always returned (although you can stop
consuming the iterator if you want to abort).</p>
<p>&#8216;root&#8217;, if given, is the id of the comment to which reply
threads will be found. &#8216;root&#8217; itself is not included. If not given,
all threads are returned.</p>
<p>If &#8216;depth&#8217; is given, it can be used to limit the depth of threads
returned. For example, depth=1 will return only direct replies.</p>
<p>Comments are returned as an iterator of dicts with keys &#8216;comment&#8217;,
the comment, &#8216;id&#8217;, the comment id, and &#8216;depth&#8217;, which is 0 for
top-level comments, 1 for their replies, and so on. The list is
returned in depth-first order.</p>
</dd></dl>
<dl class="method">
<dt id="IConversation.addComment">
<tt class="descname">addComment</tt><big>(</big><em>comment</em><big>)</big><a class="headerlink" href="#IConversation.addComment" title="Permalink to this definition"></a></dt>
<dd>Adds a new comment to the list of comments, and returns the
comment id that was assigned. The comment_id property on the comment
will be set accordingly.</dd></dl>
<dl class="attribute">
<dt id="IConversation.commentators">
<tt class="descname">commentators</tt><a class="headerlink" href="#IConversation.commentators" title="Permalink to this definition"></a></dt>
<dd>The set of unique commentators (usernames)</dd></dl>
</dd></dl>
<dl class="interface">
<dt id="plone.app.discussion.interfaces.IReplies">
<em class="property">interface </em><tt class="descclassname">plone.app.discussion.interfaces.</tt><tt class="descname">IReplies</tt><a class="headerlink" href="#plone.app.discussion.interfaces.IReplies" title="Permalink to this definition"></a></dt>
<dd><p>Extends: <tt class="xref docutils literal"><span class="pre">zope.interface.common.mapping.IIterableMapping</span></tt></p>
<p>A set of related comments in reply to a given content object or
another comment.</p>
<p>Adapt a conversation or another comment to this interface to obtain the
direct replies.</p>
<dl class="method">
<dt id="IReplies.__delitem__">
<tt class="descname">__delitem__</tt><big>(</big><em>key</em><big>)</big><a class="headerlink" href="#IReplies.__delitem__" title="Permalink to this definition"></a></dt>
<dd>Delete the comment with the given key. The key is a long id.</dd></dl>
<dl class="method">
<dt id="IReplies.addComment">
<tt class="descname">addComment</tt><big>(</big><em>comment</em><big>)</big><a class="headerlink" href="#IReplies.addComment" title="Permalink to this definition"></a></dt>
<dd>Adds a new comment as a child of this comment, and returns the
comment id that was assigned. The comment_id property on the comment
will be set accordingly.</dd></dl>
</dd></dl>
<dl class="interface">
<dt id="plone.app.discussion.interfaces.IComment">
<em class="property">interface </em><tt class="descclassname">plone.app.discussion.interfaces.</tt><tt class="descname">IComment</tt><a class="headerlink" href="#plone.app.discussion.interfaces.IComment" title="Permalink to this definition"></a></dt>
<dd><p>A comment.</p>
<p>Comments are indexed in the catalog and subject to workflow and security.</p>
<dl class="attribute">
<dt id="IComment.author_username">
<tt class="descname">author_username</tt><a class="headerlink" href="#IComment.author_username" title="Permalink to this definition"></a></dt>
<dd>Name</dd></dl>
<dl class="attribute">
<dt id="IComment.modification_date">
<tt class="descname">modification_date</tt><a class="headerlink" href="#IComment.modification_date" title="Permalink to this definition"></a></dt>
<dd>Modification date</dd></dl>
<dl class="attribute">
<dt id="IComment.title">
<tt class="descname">title</tt><a class="headerlink" href="#IComment.title" title="Permalink to this definition"></a></dt>
<dd>Subject</dd></dl>
<dl class="attribute">
<dt id="IComment.author_email">
<tt class="descname">author_email</tt><a class="headerlink" href="#IComment.author_email" title="Permalink to this definition"></a></dt>
<dd>Email</dd></dl>
<dl class="attribute">
<dt id="IComment.text">
<tt class="descname">text</tt><a class="headerlink" href="#IComment.text" title="Permalink to this definition"></a></dt>
<dd>Comment</dd></dl>
<dl class="attribute">
<dt id="IComment.portal_type">
<tt class="descname">portal_type</tt><a class="headerlink" href="#IComment.portal_type" title="Permalink to this definition"></a></dt>
<dd>Portal type</dd></dl>
<dl class="attribute">
<dt id="IComment.comment_id">
<tt class="descname">comment_id</tt><a class="headerlink" href="#IComment.comment_id" title="Permalink to this definition"></a></dt>
<dd>A comment id unique to this conversation</dd></dl>
<dl class="attribute">
<dt id="IComment.author_name">
<tt class="descname">author_name</tt><a class="headerlink" href="#IComment.author_name" title="Permalink to this definition"></a></dt>
<dd>Name</dd></dl>
<dl class="attribute">
<dt id="IComment.creation_date">
<tt class="descname">creation_date</tt><a class="headerlink" href="#IComment.creation_date" title="Permalink to this definition"></a></dt>
<dd>Creation date</dd></dl>
<dl class="attribute">
<dt id="IComment.mime_type">
<tt class="descname">mime_type</tt><a class="headerlink" href="#IComment.mime_type" title="Permalink to this definition"></a></dt>
<dd>MIME type</dd></dl>
<dl class="attribute">
<dt id="IComment.__name__">
<tt class="descname">__name__</tt><a class="headerlink" href="#IComment.__name__" title="Permalink to this definition"></a></dt>
<dd>Name</dd></dl>
<dl class="attribute">
<dt id="IComment.in_reply_to">
<tt class="descname">in_reply_to</tt><a class="headerlink" href="#IComment.in_reply_to" title="Permalink to this definition"></a></dt>
<dd>Id of comment this comment is in reply to</dd></dl>
<dl class="attribute">
<dt id="IComment.creator">
<tt class="descname">creator</tt><a class="headerlink" href="#IComment.creator" title="Permalink to this definition"></a></dt>
<dd>Author name (for display)</dd></dl>
<dl class="attribute">
<dt id="IComment.__parent__">
<tt class="descname">__parent__</tt><a class="headerlink" href="#IComment.__parent__" title="Permalink to this definition"></a></dt>
<dd>Conversation</dd></dl>
</dd></dl>
</div>
</div>
</div>
</div>
<div class="sphinxsidebar">
<div class="sphinxsidebarwrapper">
<h4>Previous topic</h4>
<p class="topless"><a href="design.html"
title="previous chapter">Design Notes</a></p>
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/api.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none">
<h3>Quick search</h3>
<form class="search" action="search.html" method="get">
<input type="text" name="q" size="18" />
<input type="submit" value="Go" />
<input type="hidden" name="check_keywords" value="yes" />
<input type="hidden" name="area" value="default" />
</form>
<p class="searchtip" style="font-size: 90%">
Enter search terms or a module, class or function name.
</p>
</div>
<script type="text/javascript">$('#searchbox').show(0);</script>
</div>
</div>
<div class="clearer"></div>
</div>
<div class="related">
<h3>Navigation</h3>
<ul>
<li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index"
>index</a></li>
<li class="right" >
<a href="design.html" title="Design Notes"
>previous</a> |</li>
<li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li>
</ul>
</div>
<div class="footer">
&copy; Copyright 2010, Timo Stollenwerk.
Created using <a href="http://sphinx.pocoo.org/">Sphinx</a> 0.6.4.
</div>
</body>
</html>

View File

@ -30,9 +30,6 @@
<li class="right" style="margin-right: 10px"> <li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index" <a href="genindex.html" title="General Index"
accesskey="I">index</a></li> accesskey="I">index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
accesskey="M">modules</a> |</li>
<li class="right" > <li class="right" >
<a href="design.html" title="Design Notes" <a href="design.html" title="Design Notes"
accesskey="N">next</a> |</li> accesskey="N">next</a> |</li>
@ -58,29 +55,29 @@ plone.app.discussion.</p>
<dd>This makes it easier to search for them and manage them using existing <dd>This makes it easier to search for them and manage them using existing
CMF and Plone UI constructs.</dd> CMF and Plone UI constructs.</dd>
<dt><strong>Discussion items are cataloged</strong></dt> <dt><strong>Discussion items are cataloged</strong></dt>
<dd>It is be possible to search for discussion items like any other type of <dd>It is possible to search for discussion items like any other type of
content.</dd> content.</dd>
<dt><strong>Discussion items are subject to workflow and permission</strong></dt> <dt><strong>Discussion items are subject to workflow and permission</strong></dt>
<dd>Moderation, anonymous commenting, and auto approve/reject should be <dd>Moderation, anonymous commenting, and auto approve/reject should be
handled using workflow states, automatic and manual transitions, and handled using workflow states, automatic and manual transitions, and
permissions.</dd> permissions.</dd>
<dt><strong>Discussion items are light weight objects</strong></dt> <dt><strong>Discussion items are light weight objects</strong></dt>
<dd>Discussion item objects are as light weight as possible. <dd>Discussion item objects are as light weight as possible. Ideally, a
Ideally, a discussion item should be as lightweight as a catalog brain. discussion item should be as lightweight as a catalog brain. This may mean
This may mean that we forego convenience base classes and re-implement that we forego convenience base classes and re-implement certain interfaces.
certain interfaces. Comments should not provide the full set of dublin Comments should not provide the full set of dublin core metadata, though
core metadata, though custom indexers can be used to provide values for custom indexers can be used to provide values for standard catalog indexes.</dd>
standard catalog indexes.</dd>
<dt><strong>Optimise for retrival speed</strong></dt> <dt><strong>Optimise for retrival speed</strong></dt>
<dd>HTML filtering and other processing should happen on save, not on render, <dd>HTML filtering and other processing should happen on save, not on render,
to make rendering quick.</dd> to make rendering quick.</dd>
<dt><strong>Settings are stored using plone.registry</strong></dt> <dt><strong>Settings are stored using plone.registry</strong></dt>
<dd>Any global setting should be stored in plone.registry records</dd> <dd>Any global setting should be stored in plone.registry records.</dd>
<dt><strong>Forms are constructed using extensible z3c.form forms</strong></dt> <dt><strong>Forms are constructed using extensible z3c.form forms</strong></dt>
<dd>This allows plugins (such as spam protection algorithms) to provide <dd>This allows plugins (such as spam protection algorithms) to provide
additional validation</dd> additional validation. It also allows integrators to write add-ons that add
new fields to the comment form.</dd>
<dt><strong>Discussion items are stored in a BTree container</strong></dt> <dt><strong>Discussion items are stored in a BTree container</strong></dt>
<dd>This allows faster lookup and manipulation</dd> <dd>This allows faster lookup and manipulation.</dd>
<dt><strong>Discussion items are accessed using a dict-like interface</strong></dt> <dt><strong>Discussion items are accessed using a dict-like interface</strong></dt>
<dd>This makes iteration and manipulation more natural. Even if comments are <dd>This makes iteration and manipulation more natural. Even if comments are
not stored threaded, the dict interface should act as if they are, i.e. not stored threaded, the dict interface should act as if they are, i.e.
@ -139,9 +136,6 @@ discussion items are added, removed, or modified.</dd>
<li class="right" style="margin-right: 10px"> <li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index" <a href="genindex.html" title="General Index"
>index</a></li> >index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
>modules</a> |</li>
<li class="right" > <li class="right" >
<a href="design.html" title="Design Notes" <a href="design.html" title="Design Notes"
>next</a> |</li> >next</a> |</li>

View File

@ -5,7 +5,7 @@
<head> <head>
<meta http-equiv="Content-Type" content="text/html; charset=utf-8" /> <meta http-equiv="Content-Type" content="text/html; charset=utf-8" />
<title>Global Module Index &mdash; plone.app.discussion v1.0b4 documentation</title> <title>Captcha Plugin Architecture &mdash; plone.app.discussion v1.0b4 documentation</title>
<link rel="stylesheet" href="_static/default.css" type="text/css" /> <link rel="stylesheet" href="_static/default.css" type="text/css" />
<link rel="stylesheet" href="_static/pygments.css" type="text/css" /> <link rel="stylesheet" href="_static/pygments.css" type="text/css" />
<script type="text/javascript"> <script type="text/javascript">
@ -19,10 +19,7 @@
</script> </script>
<script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script> <script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="plone.app.discussion v1.0b4 documentation" href="index.html" /> <link rel="top" title="plone.app.discussion v1.0b4 documentation" href="index.html" />
</head> </head>
<body> <body>
<div class="related"> <div class="related">
@ -31,9 +28,6 @@
<li class="right" style="margin-right: 10px"> <li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index" <a href="genindex.html" title="General Index"
accesskey="I">index</a></li> accesskey="I">index</a></li>
<li class="right" >
<a href="#" title="Global Module Index"
accesskey="M">modules</a> |</li>
<li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li> <li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li>
</ul> </ul>
</div> </div>
@ -43,23 +37,34 @@
<div class="bodywrapper"> <div class="bodywrapper">
<div class="body"> <div class="body">
<div class="section" id="captcha-plugin-architecture">
<h1>Captcha Plugin Architecture<a class="headerlink" href="#captcha-plugin-architecture" title="Permalink to this headline"></a></h1>
<p>This document contains design notes for the plone.app.discussion Captcha plugin
architecture. It also explains how to write your own Captcha plugin (???).</p>
<p>Currently there are two plugins that work with plone.app.discussion:</p>
<blockquote>
<ol class="arabic simple">
<li>plone.formwidget.captcha</li>
<li>plone.formwidget.recaptcha</li>
</ol>
</blockquote>
<ol class="arabic simple">
<li>Captcha plugin must provide the feature &#8220;plone.app.discussion-captcha&#8221;:</li>
</ol>
<p>Add this to your configure.zcml:</p>
<div class="highlight-python"><pre>&lt;configure ...
xmlns:meta="http://namespaces.zope.org/meta"&gt;
&lt;!-- Declare that plone.formwidget.captcha provides a Captcha field that
can be used by plone.app.discussion to add a Captcha field to comment
forms. --&gt;
&lt;meta:provides feature="plone.app.discussion-captcha" /&gt;
<h1 id="global-module-index">Global Module Index</h1> ...
<a href="#cap-P"><strong>P</strong></a> &lt;/configure&gt;</pre>
<hr/> </div>
<p>For examples have a look at plone.formwidget.captcha</p>
<table width="100%" class="indextable" cellspacing="0" cellpadding="2"><tr class="pcap"><td></td><td>&nbsp;</td><td></td></tr> <p><a class="reference external" href="https://svn.plone.org/svn/plone/plone.formwidget.captcha/trunk/plone/formwidget/captcha/configure.zcml">https://svn.plone.org/svn/plone/plone.formwidget.captcha/trunk/plone/formwidget/captcha/configure.zcml</a></p>
<tr class="cap"><td></td><td><a name="cap-P"><strong>P</strong></a></td><td></td></tr><tr> </div>
<td><img src="_static/minus.png" id="toggle-1"
class="toggler" style="display: none" alt="-" /></td>
<td>
<tt class="xref">plone</tt></td><td>
<em></em></td></tr><tr class="cg-1">
<td></td>
<td>&nbsp;&nbsp;&nbsp;
<a href="index.html#module-plone.app.discussion"><tt class="xref">plone.app.discussion</tt></a></td><td>
<em></em></td></tr>
</table>
</div> </div>
@ -67,6 +72,11 @@
</div> </div>
<div class="sphinxsidebar"> <div class="sphinxsidebar">
<div class="sphinxsidebarwrapper"> <div class="sphinxsidebarwrapper">
<h3>This Page</h3>
<ul class="this-page-menu">
<li><a href="_sources/captcha.txt"
rel="nofollow">Show Source</a></li>
</ul>
<div id="searchbox" style="display: none"> <div id="searchbox" style="display: none">
<h3>Quick search</h3> <h3>Quick search</h3>
<form class="search" action="search.html" method="get"> <form class="search" action="search.html" method="get">
@ -90,9 +100,6 @@
<li class="right" style="margin-right: 10px"> <li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index" <a href="genindex.html" title="General Index"
>index</a></li> >index</a></li>
<li class="right" >
<a href="#" title="Global Module Index"
>modules</a> |</li>
<li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li> <li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li>
</ul> </ul>
</div> </div>

View File

@ -20,6 +20,7 @@
<script type="text/javascript" src="_static/jquery.js"></script> <script type="text/javascript" src="_static/jquery.js"></script>
<script type="text/javascript" src="_static/doctools.js"></script> <script type="text/javascript" src="_static/doctools.js"></script>
<link rel="top" title="plone.app.discussion v1.0b4 documentation" href="index.html" /> <link rel="top" title="plone.app.discussion v1.0b4 documentation" href="index.html" />
<link rel="next" title="API/Interfaces" href="api.html" />
<link rel="prev" title="Architectural Principles" href="architecture.html" /> <link rel="prev" title="Architectural Principles" href="architecture.html" />
</head> </head>
<body> <body>
@ -30,8 +31,8 @@
<a href="genindex.html" title="General Index" <a href="genindex.html" title="General Index"
accesskey="I">index</a></li> accesskey="I">index</a></li>
<li class="right" > <li class="right" >
<a href="modindex.html" title="Global Module Index" <a href="api.html" title="API/Interfaces"
accesskey="M">modules</a> |</li> accesskey="N">next</a> |</li>
<li class="right" > <li class="right" >
<a href="architecture.html" title="Architectural Principles" <a href="architecture.html" title="Architectural Principles"
accesskey="P">previous</a> |</li> accesskey="P">previous</a> |</li>
@ -219,19 +220,18 @@ an auto-moderation &#8216;white-list&#8217;, e.g. by email address or username.<
</div> </div>
<div class="section" id="forms-and-ui"> <div class="section" id="forms-and-ui">
<h2>Forms and UI<a class="headerlink" href="#forms-and-ui" title="Permalink to this headline"></a></h2> <h2>Forms and UI<a class="headerlink" href="#forms-and-ui" title="Permalink to this headline"></a></h2>
<p>The basic commenting display/reply form should be placed in a viewlet.</p> <p>The basic commenting display/reply form is placed in a viewlet.</p>
<p>Ideally, the reply form should be inline, perhaps revealed with JavaScript <p>The reply form is dynamically created right under the comment when the user hits
if enabled. This allows full contextualisation of replies. The current the reply button. To do so, we copy the standard comment form with a jQuery
solution, with a separate form that shows some context, is brittle and function. This function sets the form&#8217;s hidden in_reply_to field to the id of
over-complicated.</p> the comment the user wants to reply to. This also makes is possible to use
<p>If we support quoting of comments in replies, we can load the text to quote z3c.form validation for the reply forms, because we can uniquely identify the
using JavaScript as well.</p> a reply form request and return the reply form with validation errors.</p>
<p>As a fall-back for non-JavaScript enabled browsers, it is probably OK not to <p>Since we rely on JavaScript for the reply form creation, the reply button is
support quoting and/or viewing of context, e.g. the user is taken to a standalone removed for nonJavaScript enabled browsers.</p>
&#8216;comment reply&#8217; form.</p> <p>The comment form uses z3c.form and plone.z3cform&#8217;s ExtensibleForm support. This
<p>All actual forms should be handled using z3c.form and plone.z3cform&#8217;s makes it possible to plug in additional fields declaratively, e.g. to include
ExtensibleForm support. This makes it possible to plug in additional fields SPAM protection.</p>
declaratively, e.g. to include spam protection.</p>
</div> </div>
</div> </div>
@ -258,6 +258,9 @@ declaratively, e.g. to include spam protection.</p>
<h4>Previous topic</h4> <h4>Previous topic</h4>
<p class="topless"><a href="architecture.html" <p class="topless"><a href="architecture.html"
title="previous chapter">Architectural Principles</a></p> title="previous chapter">Architectural Principles</a></p>
<h4>Next topic</h4>
<p class="topless"><a href="api.html"
title="next chapter">API/Interfaces</a></p>
<h3>This Page</h3> <h3>This Page</h3>
<ul class="this-page-menu"> <ul class="this-page-menu">
<li><a href="_sources/design.txt" <li><a href="_sources/design.txt"
@ -287,8 +290,8 @@ declaratively, e.g. to include spam protection.</p>
<a href="genindex.html" title="General Index" <a href="genindex.html" title="General Index"
>index</a></li> >index</a></li>
<li class="right" > <li class="right" >
<a href="modindex.html" title="Global Module Index" <a href="api.html" title="API/Interfaces"
>modules</a> |</li> >next</a> |</li>
<li class="right" > <li class="right" >
<a href="architecture.html" title="Architectural Principles" <a href="architecture.html" title="Architectural Principles"
>previous</a> |</li> >previous</a> |</li>

View File

@ -28,9 +28,6 @@
<li class="right" style="margin-right: 10px"> <li class="right" style="margin-right: 10px">
<a href="#" title="General Index" <a href="#" title="General Index"
accesskey="I">index</a></li> accesskey="I">index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
accesskey="M">modules</a> |</li>
<li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li> <li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li>
</ul> </ul>
</div> </div>
@ -43,30 +40,100 @@
<h1 id="index">Index</h1> <h1 id="index">Index</h1>
<a href="#C"><strong>C</strong></a> | <a href="#E"><strong>E</strong></a> | <a href="#P"><strong>P</strong></a> <a href="#_"><strong>_</strong></a> | <a href="#A"><strong>A</strong></a> | <a href="#C"><strong>C</strong></a> | <a href="#E"><strong>E</strong></a> | <a href="#G"><strong>G</strong></a> | <a href="#I"><strong>I</strong></a> | <a href="#L"><strong>L</strong></a> | <a href="#M"><strong>M</strong></a> | <a href="#P"><strong>P</strong></a> | <a href="#T"><strong>T</strong></a>
<hr /> <hr />
<h2 id="_">_</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="api.html#IConversation.__delitem__">__delitem__() (IConversation method)</a></dt>
<dd><dl>
<dt><a href="api.html#IReplies.__delitem__">(IReplies method)</a></dt>
</dl></dd>
<dt><a href="api.html#IComment.__name__">__name__ (IComment attribute)</a></dt></dl></td><td width="33%" valign="top"><dl>
<dt><a href="api.html#IComment.__parent__">__parent__ (IComment attribute)</a></dt>
</dl></td></tr></table>
<h2 id="A">A</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="api.html#IConversation.addComment">addComment() (IConversation method)</a></dt>
<dd><dl>
<dt><a href="api.html#IReplies.addComment">(IReplies method)</a></dt>
</dl></dd>
<dt><a href="api.html#IComment.author_email">author_email (IComment attribute)</a></dt></dl></td><td width="33%" valign="top"><dl>
<dt><a href="api.html#IComment.author_name">author_name (IComment attribute)</a></dt>
<dt><a href="api.html#IComment.author_username">author_username (IComment attribute)</a></dt>
</dl></td></tr></table>
<h2 id="C">C</h2> <h2 id="C">C</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top"> <table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl> <dl>
<dt><a href="index.html#plone.app.discussion.conversation.Conversation">Conversation (class in plone.app.discussion.conversation)</a></dt></dl></td><td width="33%" valign="top"><dl> <dt><a href="api.html#IComment.comment_id">comment_id (IComment attribute)</a></dt>
<dt><a href="api.html#IConversation.commentators">commentators (IConversation attribute)</a></dt>
<dt><a href="api.html#IComment.creation_date">creation_date (IComment attribute)</a></dt></dl></td><td width="33%" valign="top"><dl>
<dt><a href="api.html#IComment.creator">creator (IComment attribute)</a></dt>
</dl></td></tr></table> </dl></td></tr></table>
<h2 id="E">E</h2> <h2 id="E">E</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top"> <table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl> <dl>
<dt><a href="index.html#plone.app.discussion.conversation.Conversation.enabled">enabled() (plone.app.discussion.conversation.Conversation method)</a></dt></dl></td><td width="33%" valign="top"><dl> <dt><a href="api.html#IConversation.enabled">enabled() (IConversation method)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<h2 id="G">G</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="api.html#IConversation.getComments">getComments() (IConversation method)</a></dt>
<dt><a href="api.html#IConversation.getThreads">getThreads() (IConversation method)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<h2 id="I">I</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="api.html#plone.app.discussion.interfaces.IComment">IComment (interface in plone.app.discussion.interfaces)</a></dt>
<dt><a href="api.html#plone.app.discussion.interfaces.IConversation">IConversation (interface in plone.app.discussion.interfaces)</a></dt>
<dt><a href="api.html#IComment.in_reply_to">in_reply_to (IComment attribute)</a></dt></dl></td><td width="33%" valign="top"><dl>
<dt><a href="api.html#plone.app.discussion.interfaces.IReplies">IReplies (interface in plone.app.discussion.interfaces)</a></dt>
</dl></td></tr></table>
<h2 id="L">L</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="api.html#IConversation.last_comment_date">last_comment_date (IConversation attribute)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<h2 id="M">M</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="api.html#IComment.mime_type">mime_type (IComment attribute)</a></dt>
<dt><a href="api.html#IComment.modification_date">modification_date (IComment attribute)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table> </dl></td></tr></table>
<h2 id="P">P</h2> <h2 id="P">P</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top"> <table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl> <dl>
<dt><a href="index.html#module-plone.app.discussion">plone.app.discussion (module)</a></dt></dl></td><td width="33%" valign="top"><dl> <dt><a href="api.html#IComment.portal_type">portal_type (IComment attribute)</a></dt></dl></td><td width="33%" valign="top"><dl>
</dl></td></tr></table>
<h2 id="T">T</h2>
<table width="100%" class="indextable"><tr><td width="33%" valign="top">
<dl>
<dt><a href="api.html#IComment.text">text (IComment attribute)</a></dt>
<dt><a href="api.html#IComment.title">title (IComment attribute)</a></dt></dl></td><td width="33%" valign="top"><dl>
<dt><a href="api.html#IConversation.total_comments">total_comments (IConversation attribute)</a></dt>
</dl></td></tr></table> </dl></td></tr></table>
@ -102,9 +169,6 @@
<li class="right" style="margin-right: 10px"> <li class="right" style="margin-right: 10px">
<a href="#" title="General Index" <a href="#" title="General Index"
>index</a></li> >index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
>modules</a> |</li>
<li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li> <li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li>
</ul> </ul>
</div> </div>

View File

@ -29,9 +29,6 @@
<li class="right" style="margin-right: 10px"> <li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index" <a href="genindex.html" title="General Index"
accesskey="I">index</a></li> accesskey="I">index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
accesskey="M">modules</a> |</li>
<li class="right" > <li class="right" >
<a href="architecture.html" title="Architectural Principles" <a href="architecture.html" title="Architectural Principles"
accesskey="N">next</a> |</li> accesskey="N">next</a> |</li>
@ -59,31 +56,44 @@
<li class="toctree-l2"><a class="reference external" href="design.html#forms-and-ui">Forms and UI</a></li> <li class="toctree-l2"><a class="reference external" href="design.html#forms-and-ui">Forms and UI</a></li>
</ul> </ul>
</li> </li>
<li class="toctree-l1"><a class="reference external" href="api.html">API/Interfaces</a></li>
</ul> </ul>
<div class="section" id="module-plone.app.discussion">
<h2>API<a class="headerlink" href="#module-plone.app.discussion" title="Permalink to this headline"></a></h2>
<dl class="class">
<dt id="plone.app.discussion.conversation.Conversation">
<em class="property">class </em><tt class="descclassname">plone.app.discussion.conversation.</tt><tt class="descname">Conversation</tt><big>(</big><em>id='++conversation++default'</em><big>)</big><a class="headerlink" href="#plone.app.discussion.conversation.Conversation" title="Permalink to this definition"></a></dt>
<dd><p>A conversation is a container for all comments on a content object.</p>
<p>It manages internal data structures for comment threading and efficient
comment lookup.</p>
<dl class="method">
<dt id="plone.app.discussion.conversation.Conversation.enabled">
<tt class="descname">enabled</tt><big>(</big><big>)</big><a class="headerlink" href="#plone.app.discussion.conversation.Conversation.enabled" title="Permalink to this definition"></a></dt>
<dd>hi world</dd></dl>
</dd></dl>
</div>
</div> </div>
<div class="section" id="changelog"> <div class="section" id="changelog">
<h1>Changelog<a class="headerlink" href="#changelog" title="Permalink to this headline"></a></h1> <h1>Changelog<a class="headerlink" href="#changelog" title="Permalink to this headline"></a></h1>
<div class="section" id="b4-unreleased"> <div class="section" id="b5-unreleased">
<h2>1.0b4 (unreleased)<a class="headerlink" href="#b4-unreleased" title="Permalink to this headline"></a></h2> <h2>1.0b5 (unreleased)<a class="headerlink" href="#b5-unreleased" title="Permalink to this headline"></a></h2>
<ul class="simple"> <ul class="simple">
<li>Fix #662654: As an administrator, I can configure a Collection to show recent comments. <li>Fix encoding error in migration procedure, otherwise migration procedure
Comment.Type() now correctly returns the FTI title (&#8216;Comment&#8217;) breaks on joining output list in case we have there any non-ascii characters.
[piv]</li>
<li>plone.z3cform 0.6.0 compatibility (fix maximum recursion depth error which
appears with plone.z3cform higher than 0.5.10).
[piv]</li>
<li>Removed moderation.js from js registry and include it only in moderation.pt as
that is the only place where it is used.
[ggozad]</li>
</ul>
</div>
<div class="section" id="b4-2010-04-04">
<h2>1.0b4 (2010-04-04)<a class="headerlink" href="#b4-2010-04-04" title="Permalink to this headline"></a></h2>
<ul class="simple">
<li>New feature: As a moderator, I am notified when new comments require my
attention.
[timo]</li>
<li>Sphinx-based developer documentation added. See
<a class="reference external" href="http://packages.python.org/plone.app.discussion">http://packages.python.org/plone.app.discussion</a>.
[timo]</li>
<li>Rename &#8220;Single State Workflow&#8221; to &#8220;Comment Single State Workflow&#8221;.
[timo]</li>
<li>Rename &#8216;publish comment&#8217; to &#8216;approve comment&#8217;. This fixes #1608470.
[timo]</li>
<li>Show a warning in the moderation view if the moderation workflow is disabled.
[timo]</li>
<li>Move &#8216;Moderate comments&#8217; link from site actions to user actions.
[timo]</li>
<li>Fix #662654: As an administrator, I can configure a Collection to show recent
comments. Comment.Type() now correctly returns the FTI title (&#8216;Comment&#8217;)
[chaoflow]</li> [chaoflow]</li>
<li>German translation updated. <li>German translation updated.
[juh]</li> [juh]</li>
@ -97,15 +107,15 @@ translated button titles can differ in size from the English titles.
<li>Fix unicode error when non-ASCII characters are typed into the name field of a <li>Fix unicode error when non-ASCII characters are typed into the name field of a
comment by anonymous users. comment by anonymous users.
[regebro]</li> [regebro]</li>
<li>New feature: As a moderator, I am notified when new comments require my
attention.
[timo]</li>
<li>Make p.a.d. work with the recent version of plone.z3cform (0.5.10) <li>Make p.a.d. work with the recent version of plone.z3cform (0.5.10)
[timo]</li> [timo]</li>
<li>Make p.a.d. styles less generic. This fixes #10253. <li>Make p.a.d. styles less generic. This fixes #10253.
[timo]</li> [timo]</li>
<li>Added greek translation. <li>Added greek translation.
[ggozad]</li> [ggozad]</li>
<li>A bug in the moderator panel meant you couldn&#8217;t delete items in a virtual
host, if your portal was named &#8220;plone&#8221;.
[regebro]</li>
</ul> </ul>
</div> </div>
<div class="section" id="b3-2010-01-28"> <div class="section" id="b3-2010-01-28">
@ -158,42 +168,58 @@ have this workflow installed.
<h2>1.0b2 (2010-01-22)<a class="headerlink" href="#b2-2010-01-22" title="Permalink to this headline"></a></h2> <h2>1.0b2 (2010-01-22)<a class="headerlink" href="#b2-2010-01-22" title="Permalink to this headline"></a></h2>
<ul class="simple"> <ul class="simple">
<li>Bugfix for #2010181: The name of a commenter who commented while not logged in <li>Bugfix for #2010181: The name of a commenter who commented while not logged in
should not appear as a link.</li> should not appear as a link.
[timo]</li>
<li>Bugfix for #2010078: Comments that await moderation are visually distinguished <li>Bugfix for #2010078: Comments that await moderation are visually distinguished
from published comments.</li> from published comments.
[timo]</li>
<li>Bugfix for #2010085: Use object_provides instead of portal_type to query the <li>Bugfix for #2010085: Use object_provides instead of portal_type to query the
catalog for comment.</li> catalog for comment.
[timo]</li>
<li>Bugfix for #2010071: p.a.d. works with plone.z3cform 0.5.7 and <li>Bugfix for #2010071: p.a.d. works with plone.z3cform 0.5.7 and
plone.app.z3cform 0.4.9 now.</li> plone.app.z3cform 0.4.9 now.
[timo]</li>
<li>Bugfix for #1513398: Show &#8220;anonymous&#8221; when name field is empty in comment <li>Bugfix for #1513398: Show &#8220;anonymous&#8221; when name field is empty in comment
form.</li> form.
[timo]</li>
<li>Migration view: Dry run option added, abort transaction when something goes <li>Migration view: Dry run option added, abort transaction when something goes
wrong during migration, be more verbose about errors.</li> wrong during migration, be more verbose about errors.
[timo]</li>
</ul> </ul>
</div> </div>
<div class="section" id="b1-2009-12-08"> <div class="section" id="b1-2009-12-08">
<h2>1.0b1 (2009-12-08)<a class="headerlink" href="#b1-2009-12-08" title="Permalink to this headline"></a></h2> <h2>1.0b1 (2009-12-08)<a class="headerlink" href="#b1-2009-12-08" title="Permalink to this headline"></a></h2>
<ul class="simple"> <ul class="simple">
<li>Fix redirect after a adding a comment</li> <li>Fix redirect after a adding a comment
<li>Replace yes/no widgets with check boxes in the discussion control panel</li> [timo]</li>
<li>Make comments viewlet show up in Plone 4</li> <li>Replace yes/no widgets with check boxes in the discussion control panel
<li>Apply Plone 4 styles to comment form</li> [timo]</li>
<li>Simplify moderation view by removing the filters</li> <li>Make comments viewlet show up in Plone 4
[timo]</li>
<li>Apply Plone 4 styles to comment form
[timo]</li>
<li>Simplify moderation view by removing the filters
[timo]</li>
</ul> </ul>
</div> </div>
<div class="section" id="a2-2009-10-18"> <div class="section" id="a2-2009-10-18">
<h2>1.0a2 (2009-10-18)<a class="headerlink" href="#a2-2009-10-18" title="Permalink to this headline"></a></h2> <h2>1.0a2 (2009-10-18)<a class="headerlink" href="#a2-2009-10-18" title="Permalink to this headline"></a></h2>
<ul class="simple"> <ul class="simple">
<li>Plone 4 / Zope 2.12 support</li> <li>Plone 4 / Zope 2.12 support
<li>Comment migration script added</li> [timo]</li>
<li>Pluggable plone.z3cform comment forms</li> <li>Comment migration script added
<li>Captcha and ReCaptcha support added</li> [timo]</li>
<li>Pluggable plone.z3cform comment forms
[timo]</li>
<li>Captcha and ReCaptcha support added
[timo]</li>
</ul> </ul>
</div> </div>
<div class="section" id="a1-2009-06-07"> <div class="section" id="a1-2009-06-07">
<h2>1.0a1 (2009-06-07)<a class="headerlink" href="#a1-2009-06-07" title="Permalink to this headline"></a></h2> <h2>1.0a1 (2009-06-07)<a class="headerlink" href="#a1-2009-06-07" title="Permalink to this headline"></a></h2>
<ul class="simple"> <ul class="simple">
<li>Basic commenting functionality and batch moderation.</li> <li>Basic commenting functionality and batch moderation.
[timo]</li>
</ul> </ul>
</div> </div>
</div> </div>
@ -215,11 +241,11 @@ wrong during migration, be more verbose about errors.</li>
<h3><a href="#">Table Of Contents</a></h3> <h3><a href="#">Table Of Contents</a></h3>
<ul> <ul>
<li><a class="reference external" href="#">Welcome to plone.app.discussion&#8217;s documentation!</a><ul> <li><a class="reference external" href="#">Welcome to plone.app.discussion&#8217;s documentation!</a><ul>
<li><a class="reference external" href="#module-plone.app.discussion">API</a></li>
</ul> </ul>
</li> </li>
<li><a class="reference external" href="#changelog">Changelog</a><ul> <li><a class="reference external" href="#changelog">Changelog</a><ul>
<li><a class="reference external" href="#b4-unreleased">1.0b4 (unreleased)</a></li> <li><a class="reference external" href="#b5-unreleased">1.0b5 (unreleased)</a></li>
<li><a class="reference external" href="#b4-2010-04-04">1.0b4 (2010-04-04)</a></li>
<li><a class="reference external" href="#b3-2010-01-28">1.0b3 (2010-01-28)</a></li> <li><a class="reference external" href="#b3-2010-01-28">1.0b3 (2010-01-28)</a></li>
<li><a class="reference external" href="#b2-2010-01-22">1.0b2 (2010-01-22)</a></li> <li><a class="reference external" href="#b2-2010-01-22">1.0b2 (2010-01-22)</a></li>
<li><a class="reference external" href="#b1-2009-12-08">1.0b1 (2009-12-08)</a></li> <li><a class="reference external" href="#b1-2009-12-08">1.0b1 (2009-12-08)</a></li>
@ -261,9 +287,6 @@ wrong during migration, be more verbose about errors.</li>
<li class="right" style="margin-right: 10px"> <li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index" <a href="genindex.html" title="General Index"
>index</a></li> >index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
>modules</a> |</li>
<li class="right" > <li class="right" >
<a href="architecture.html" title="Architectural Principles" <a href="architecture.html" title="Architectural Principles"
>next</a> |</li> >next</a> |</li>

View File

@ -1,6 +1,30 @@
# Sphinx inventory version 1 # Sphinx inventory version 1
# Project: plone.app.discussion # Project: plone.app.discussion
# Version: 1.0b4 # Version: 1.0b4
plone.app.discussion mod index.html IConversation.getComments method api.html
plone.app.discussion.conversation.Conversation class index.html IComment.title attribute api.html
plone.app.discussion.conversation.Conversation.enabled method index.html IComment.modification_date attribute api.html
IConversation.getThreads method api.html
IComment.comment_id attribute api.html
plone.app.discussion.interfaces.IReplies interface api.html
IConversation.enabled method api.html
plone.app.discussion.interfaces.IComment interface api.html
IComment.creator attribute api.html
IComment.author_email attribute api.html
IComment.author_name attribute api.html
IConversation.__delitem__ method api.html
IComment.creation_date attribute api.html
IConversation.total_comments attribute api.html
IComment.__parent__ attribute api.html
IComment.in_reply_to attribute api.html
IComment.__name__ attribute api.html
IComment.text attribute api.html
plone.app.discussion.interfaces.IConversation interface api.html
IComment.author_username attribute api.html
IConversation.last_comment_date attribute api.html
IComment.portal_type attribute api.html
IComment.mime_type attribute api.html
IReplies.addComment method api.html
IConversation.commentators attribute api.html
IConversation.addComment method api.html
IReplies.__delitem__ method api.html

View File

@ -29,9 +29,6 @@
<li class="right" style="margin-right: 10px"> <li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index" <a href="genindex.html" title="General Index"
accesskey="I">index</a></li> accesskey="I">index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
accesskey="M">modules</a> |</li>
<li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li> <li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li>
</ul> </ul>
</div> </div>
@ -80,9 +77,6 @@
<li class="right" style="margin-right: 10px"> <li class="right" style="margin-right: 10px">
<a href="genindex.html" title="General Index" <a href="genindex.html" title="General Index"
>index</a></li> >index</a></li>
<li class="right" >
<a href="modindex.html" title="Global Module Index"
>modules</a> |</li>
<li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li> <li><a href="index.html">plone.app.discussion v1.0b4 documentation</a> &raquo;</li>
</ul> </ul>
</div> </div>

File diff suppressed because one or more lines are too long