From 518b89b0439a76dae0d2857c378c25827e4b6cf2 Mon Sep 17 00:00:00 2001
From: Timo Stollenwerk
Date: Tue, 1 Jun 2010 15:11:33 +0000
Subject: [PATCH] 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
---
docs/html/_sources/api.txt | 25 ++
docs/html/_sources/architecture.txt | 20 +-
docs/html/_sources/captcha.txt | 30 +++
docs/html/_sources/design.txt | 26 +-
docs/html/_sources/index.txt | 13 +-
docs/html/api.html | 306 ++++++++++++++++++++++
docs/html/architecture.html | 26 +-
docs/html/{modindex.html => captcha.html} | 61 +++--
docs/html/design.html | 37 +--
docs/html/genindex.html | 84 +++++-
docs/html/index.html | 117 +++++----
docs/html/objects.inv | 30 ++-
docs/html/search.html | 6 -
docs/html/searchindex.js | 2 +-
14 files changed, 621 insertions(+), 162 deletions(-)
create mode 100644 docs/html/_sources/api.txt
create mode 100644 docs/html/_sources/captcha.txt
create mode 100644 docs/html/api.html
rename docs/html/{modindex.html => captcha.html} (60%)
diff --git a/docs/html/_sources/api.txt b/docs/html/_sources/api.txt
new file mode 100644
index 0000000..31819ab
--- /dev/null
+++ b/docs/html/_sources/api.txt
@@ -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:
+
+
+
\ No newline at end of file
diff --git a/docs/html/_sources/architecture.txt b/docs/html/_sources/architecture.txt
index 1e2de51..c99a265 100644
--- a/docs/html/_sources/architecture.txt
+++ b/docs/html/_sources/architecture.txt
@@ -10,7 +10,7 @@ plone.app.discussion.
CMF and Plone UI constructs.
**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.
**Discussion items are subject to workflow and permission**
@@ -19,26 +19,26 @@ plone.app.discussion.
permissions.
**Discussion items are light weight objects**
- Discussion item objects are as light weight as possible.
- Ideally, a discussion item should be as lightweight as a catalog brain.
- This may mean that we forego convenience base classes and re-implement
- certain interfaces. Comments should not provide the full set of dublin
- core metadata, though custom indexers can be used to provide values for
- standard catalog indexes.
+ Discussion item objects are as light weight as possible. Ideally, a
+ discussion item should be as lightweight as a catalog brain. This may mean
+ that we forego convenience base classes and re-implement certain interfaces.
+ Comments should not provide the full set of dublin core metadata, though
+ custom indexers can be used to provide values for standard catalog indexes.
**Optimise for retrival speed**
HTML filtering and other processing should happen on save, not on render,
to make rendering quick.
**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**
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**
- This allows faster lookup and manipulation
+ This allows faster lookup and manipulation.
**Discussion items are accessed using a dict-like interface**
This makes iteration and manipulation more natural. Even if comments are
diff --git a/docs/html/_sources/captcha.txt b/docs/html/_sources/captcha.txt
new file mode 100644
index 0000000..c4426cf
--- /dev/null
+++ b/docs/html/_sources/captcha.txt
@@ -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::
+
+
+
+
+
+ ...
+
+
+For examples have a look at plone.formwidget.captcha
+
+https://svn.plone.org/svn/plone/plone.formwidget.captcha/trunk/plone/formwidget/captcha/configure.zcml
+
diff --git a/docs/html/_sources/design.txt b/docs/html/_sources/design.txt
index 20079a9..b2a6577 100644
--- a/docs/html/_sources/design.txt
+++ b/docs/html/_sources/design.txt
@@ -150,20 +150,18 @@ an auto-moderation 'white-list', e.g. by email address or username.
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
-if enabled. This allows full contextualisation of replies. The current
-solution, with a separate form that shows some context, is brittle and
-over-complicated.
+The reply form is dynamically created right under the comment when the user hits
+the reply button. To do so, we copy the standard comment form with a jQuery
+function. This function sets the form's hidden in_reply_to field to the id of
+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
-using JavaScript as well.
+Since we rely on JavaScript for the reply form creation, the reply button is
+removed for nonJavaScript enabled browsers.
-As a fall-back for non-JavaScript enabled browsers, it is probably OK not to
-support quoting and/or viewing of context, e.g. the user is taken to a standalone
-'comment reply' form.
-
-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.
+The comment form uses z3c.form and plone.z3cform's ExtensibleForm support. This
+makes it possible to plug in additional fields declaratively, e.g. to include
+SPAM protection.
diff --git a/docs/html/_sources/index.txt b/docs/html/_sources/index.txt
index 0e152d2..d107d98 100644
--- a/docs/html/_sources/index.txt
+++ b/docs/html/_sources/index.txt
@@ -16,18 +16,9 @@ Contents:
architecture.txt
design.txt
-
-API
----
-
-.. automodule:: plone.app.discussion
-
- .. autoclass:: plone.app.discussion.conversation.Conversation
-
- .. automethod:: plone.app.discussion.conversation.Conversation.enabled
-
+ api.txt
.. include:: ../../CHANGES.txt
-
+
Indices and tables
==================
diff --git a/docs/html/api.html b/docs/html/api.html
new file mode 100644
index 0000000..45fbde2
--- /dev/null
+++ b/docs/html/api.html
@@ -0,0 +1,306 @@
+
+
+
+
+
+
+ API/Interfaces — plone.app.discussion v1.0b4 documentation
+
+
+
+
+
+
+
+
+
+
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).
This is a persistent object in its own right and manages all comments.
+
The dict interface allows access to all comments. They are stored by
+long integer key, in the order they were added.
+
Note that __setitem__() is not supported - use addComment() instead.
+However, comments can be deleted using __delitem__().
+
To get replies at the top level, adapt the conversation to IReplies.
+
The conversation can be traversed to via the ++comments++ namespace.
+For example, path/to/object/++comments++/123 retrieves comment 123.
+
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.
Return an iterator of comment objects for rendering.
+
The ‘start’ 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.
+
The ‘size’ parameter is the number of comments to return in the
+batch.
+
The comments are returned in creation date order, in the exact batch
+size specified.
Returns True if discussion is enabled for this conversation.
+
This method checks five different settings in order to figure out if
+discussion is enable on a specific content object:
+
+
Check if discussion is enabled globally in the plone.app.discussion
+registry/control panel.
+
If the current content object is a folder, always return False, since
+we don’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.
+
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.
+
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.
+
Check if discussion is allowed for the content type.
The ‘start’ 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.
+
The ‘size’ 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).
+
‘root’, if given, is the id of the comment to which reply
+threads will be found. ‘root’ itself is not included. If not given,
+all threads are returned.
+
If ‘depth’ is given, it can be used to limit the depth of threads
+returned. For example, depth=1 will return only direct replies.
+
Comments are returned as an iterator of dicts with keys ‘comment’,
+the comment, ‘id’, the comment id, and ‘depth’, which is 0 for
+top-level comments, 1 for their replies, and so on. The list is
+returned in depth-first order.
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.
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.
+
+
+
\ No newline at end of file
diff --git a/docs/html/architecture.html b/docs/html/architecture.html
index 7809648..d7a9b9e 100644
--- a/docs/html/architecture.html
+++ b/docs/html/architecture.html
@@ -30,9 +30,6 @@
This makes it easier to search for them and manage them using existing
CMF and Plone UI constructs.
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.
Discussion items are subject to workflow and permission
Moderation, anonymous commenting, and auto approve/reject should be
handled using workflow states, automatic and manual transitions, and
permissions.
Discussion items are light weight objects
-
Discussion item objects are as light weight as possible.
-Ideally, a discussion item should be as lightweight as a catalog brain.
-This may mean that we forego convenience base classes and re-implement
-certain interfaces. Comments should not provide the full set of dublin
-core metadata, though custom indexers can be used to provide values for
-standard catalog indexes.
+
Discussion item objects are as light weight as possible. Ideally, a
+discussion item should be as lightweight as a catalog brain. This may mean
+that we forego convenience base classes and re-implement certain interfaces.
+Comments should not provide the full set of dublin core metadata, though
+custom indexers can be used to provide values for standard catalog indexes.
Optimise for retrival speed
HTML filtering and other processing should happen on save, not on render,
to make rendering quick.
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
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
-
This allows faster lookup and manipulation
+
This allows faster lookup and manipulation.
Discussion items are accessed using a dict-like interface
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.
@@ -139,9 +136,6 @@ discussion items are added, removed, or modified.
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:
+
+
+
plone.formwidget.captcha
+
plone.formwidget.recaptcha
+
+
+
+
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" />
-
The basic commenting display/reply form should be placed in a viewlet.
-
Ideally, the reply form should be inline, perhaps revealed with JavaScript
-if enabled. This allows full contextualisation of replies. The current
-solution, with a separate form that shows some context, is brittle and
-over-complicated.
-
If we support quoting of comments in replies, we can load the text to quote
-using JavaScript as well.
-
As a fall-back for non-JavaScript enabled browsers, it is probably OK not to
-support quoting and/or viewing of context, e.g. the user is taken to a standalone
-‘comment reply’ form.
-
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.
+
The basic commenting display/reply form is placed in a viewlet.
+
The reply form is dynamically created right under the comment when the user hits
+the reply button. To do so, we copy the standard comment form with a jQuery
+function. This function sets the form’s hidden in_reply_to field to the id of
+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.
+
Since we rely on JavaScript for the reply form creation, the reply button is
+removed for nonJavaScript enabled browsers.
+
The comment form uses z3c.form and plone.z3cform’s ExtensibleForm support. This
+makes it possible to plug in additional fields declaratively, e.g. to include
+SPAM protection.
@@ -258,6 +258,9 @@ declaratively, e.g. to include spam protection.
Fix #662654: As an administrator, I can configure a Collection to show recent comments.
-Comment.Type() now correctly returns the FTI title (‘Comment’)
+
Fix encoding error in migration procedure, otherwise migration procedure
+breaks on joining output list in case we have there any non-ascii characters.
+[piv]
+
plone.z3cform 0.6.0 compatibility (fix maximum recursion depth error which
+appears with plone.z3cform higher than 0.5.10).
+[piv]
+
Removed moderation.js from js registry and include it only in moderation.pt as
+that is the only place where it is used.
+[ggozad]
Rename “Single State Workflow” to “Comment Single State Workflow”.
+[timo]
+
Rename ‘publish comment’ to ‘approve comment’. This fixes #1608470.
+[timo]
+
Show a warning in the moderation view if the moderation workflow is disabled.
+[timo]
+
Move ‘Moderate comments’ link from site actions to user actions.
+[timo]
+
Fix #662654: As an administrator, I can configure a Collection to show recent
+comments. Comment.Type() now correctly returns the FTI title (‘Comment’)
[chaoflow]
German translation updated.
[juh]
@@ -97,15 +107,15 @@ translated button titles can differ in size from the English titles.
Fix unicode error when non-ASCII characters are typed into the name field of a
comment by anonymous users.
[regebro]
-
New feature: As a moderator, I am notified when new comments require my
-attention.
-[timo]
Make p.a.d. work with the recent version of plone.z3cform (0.5.10)
[timo]
Make p.a.d. styles less generic. This fixes #10253.
[timo]
Added greek translation.
[ggozad]
+
A bug in the moderator panel meant you couldn’t delete items in a virtual
+host, if your portal was named “plone”.
+[regebro]
@@ -158,42 +168,58 @@ have this workflow installed.
diff --git a/docs/html/searchindex.js b/docs/html/searchindex.js
index 1aa49a4..18c0e54 100644
--- a/docs/html/searchindex.js
+++ b/docs/html/searchindex.js
@@ -1 +1 @@
-Search.setIndex({desctypes:{"0":"class","1":"method"},terms:{represent:1,all:[0,1],chain:1,queri:0,global:[1,2],pluggabl:0,modul:0,children:1,profil:0,readabl:2,send:2,string:1,util:1,fall:1,portalcont:1,administr:0,level:1,cmf:2,itravers:1,list:1,iter:2,factori:[0,1],item:[1,2],quick:2,outlin:2,natur:2,sync:0,design:[0,1,2],further:1,btree:2,even:[1,2],index:[0,1,2],appear:0,repli:[1,2],abl:1,"while":0,access:2,delet:[0,1],version:0,"new":0,method:0,metadata:[1,2],widget:0,full:[0,1,2],gener:[0,1],updateact:0,address:1,modifi:[1,2],implicit:1,valu:[0,1,2],dry:0,search:[0,2],convers:[0,1],dublin:2,action:0,implement:[1,2],via:1,appli:0,app:[0,1,2],api:[0,1],icontentish:1,instal:0,plone:[0,1,2],"__parent__":1,from:[0,1],would:1,regist:0,handler:1,call:[1,2],taken:1,type:[0,1,2],more:[0,2],henc:1,relat:1,site:0,visual:0,actual:1,iobjectaddedev:1,must:1,retriev:[0,1,2],viewlet:[0,1],work:[0,1],annot:1,remain:1,can:[0,1,2],fetch:1,control:[0,1],complic:1,want:1,process:2,share:0,indic:0,captcha:0,abort:0,tab:1,commenttitl:0,alwai:[1,2],mai:[1,2],quot:1,iobjectcreatedev:1,how:0,reject:[1,2],instead:0,css:0,updat:0,resourc:1,await:0,befor:1,catalog:[0,2],attent:0,date:[1,2],data:[0,1],light:2,explicit:[1,2],element:1,inform:1,allow:[0,1,2],anoth:1,order:[1,2],over:1,approv:2,brain:2,style:0,ifactori:1,fix:0,bypass:1,persist:1,easier:2,them:2,good:1,"return":[0,1,2],thei:[0,2],handl:[1,2],auto:[1,2],untransl:0,initi:1,now:0,discuss:[0,1,2],name:0,changelog:0,revers:2,separ:1,zcml:0,each:1,unicod:0,button:0,mean:2,domain:0,weight:2,replac:[0,1],brittl:1,our:0,happen:2,imutabledublincor:1,event:[0,1,2],out:0,shown:[0,1],goe:0,publish:[0,1],content:[0,1,2],adapt:1,fti:[0,1],extensibleform:1,correct:0,after:0,workflow:[0,1,2],migrat:0,manipul:[1,2],standard:[1,2],standalon:1,base:[0,1,2],copysourc:1,thread:[0,1,2],could:1,wrong:0,keep:1,filter:[0,2],perhap:1,place:1,principl:[0,2],assign:1,size:0,notifi:0,render:2,number:1,acquisit:1,construct:2,regebro:0,differ:0,script:0,top:1,messag:0,white:1,conveni:2,"final":1,friend:1,option:0,namespac:1,copi:0,consult:1,ipropertymanag:1,undosupport:1,provid:[0,2],remov:[0,2],tree:1,structur:0,charact:0,ggozad:0,store:[0,1,2],posit:1,browser:1,ani:[1,2],simpleitem:1,have:[0,1,2],tabl:0,need:[1,2],optimis:2,greek:0,note:[0,1],also:1,ideal:[1,2],z3c:[1,2],simplifi:0,though:2,usernam:1,object:[0,1,2],most:[1,2],plai:0,propertymanag:1,icom:1,"class":[0,1,2],renam:[],request:1,declar:[0,1],neg:1,link:0,usual:[1,2],review:1,show:[0,1],german:0,text:[0,1],verbos:0,permiss:[0,1,2],redirect:0,current:1,just:1,transact:0,configur:0,solut:1,should:[0,1,2],dict:[1,2],factor:0,z3cform:[0,1],local:1,hit:0,variou:1,get:1,express:1,requir:[0,1],reveal:1,enabl:[0,1],"0b2":0,across:0,"default":0,hannosch:0,contain:[0,1,2],where:1,view:[0,1],manger:1,forego:2,set:[0,1,2],chaoflow:0,creator:1,subject:2,statu:0,wire:1,kei:2,correctli:0,someth:0,state:[0,1,2],email:1,rolemanag:1,parent:1,javascript:1,extens:2,distinguish:0,addit:[1,2],protect:[1,2],plugin:2,howev:1,linguaplon:0,etc:1,instanc:1,context:1,load:[0,1],respect:0,"0a1":0,"0a2":0,rebuild:0,empti:0,mark:1,basic:[0,1],box:0,fire:[1,2],bulk:0,i18n:0,those:1,properti:1,batch:0,calcul:0,error:0,anonym:[0,1,2],iundosupport:1,increment:1,helper:1,canon:0,non:[0,1],lightweight:2,discussionitem:1,ascii:0,disappear:0,subscrib:0,welcom:0,perform:1,make:[0,1,2],html:2,zope:[0,2],document:[0,1,2],iown:1,ipermissionmappingsupport:1,effect:1,retriv:2,portal:1,user:[0,1],ownership:1,icopysourc:1,recent:[0,2],travers:[0,1],moder:[0,1,2],choos:0,thu:1,well:[0,1],inherit:1,without:0,thi:[0,1,2],english:0,unchang:1,comment:[0,1,2],portal_typ:[0,2],less:0,obtain:1,speed:2,mix:1,other:[0,2],iobjectremovedev:1,lookup:[0,1,2],save:2,transit:[1,2],match:0,real:0,transpar:1,recaptcha:0,world:0,like:[1,2],manual:2,integ:1,collect:0,page:0,italian:0,visibl:1,some:1,back:1,inavigationroot:0,intern:0,genericsetup:0,guarante:1,keul:0,avoid:0,irolemanag:1,per:1,track:1,iobjectmodifiedev:1,notabl:1,core:2,who:0,run:0,allow_com:0,post:1,cmfcatalogawar:1,panel:[0,1],plug:1,about:0,obj:1,column:0,absolute_url:1,iconvers:1,lifecycleev:2,act:[1,2],contextualis:1,own:[0,1],effici:0,automat:[0,1,2],storag:[0,1],manag:[0,1,2],log:0,spam:[1,2],aren:0,support:[0,1,2],custom:[1,2],width:0,interfac:[0,1,2],includ:1,"function":0,creation:2,form:[0,1,2],juh:0,idublincor:1,idynamictyp:1,translat:0,inlin:1,"true":[1,2],faster:2,"0b4":0,"0b1":0,"0b3":0,possibl:[1,2],whether:1,bugfix:0,displai:1,record:2,below:1,allow_discuss:1,similar:1,isimpleitem:1,featur:0,creat:1,certain:2,dure:0,object_provid:0,unreleas:0,exist:[1,2],file:0,check:0,probabl:1,titl:0,when:[0,1,2],field:[0,1],valid:2,role:1,architectur:[0,2],registri:[1,2],icatalogabledublincor:1,algorithm:2,defaultdublincoreimpl:1,directori:0,rule:0,dynamictyp:1,conversationcanonicaladapterfactori:0,time:1,timo:0},titles:["Welcome to plone.app.discussion’s documentation!","Design Notes","Architectural Principles"],modules:{"plone.app.discussion":0},descrefs:{"plone.app.discussion.conversation":{Conversation:[0,0]},"plone.app.discussion.conversation.Conversation":{enabled:[0,1]}},filenames:["index","design","architecture"]})
\ No newline at end of file
+Search.setIndex({desctypes:{"0":"method","1":"attribute","2":"interface"},terms:{represent:2,all:[4,1,2],chain:2,queri:4,consum:1,pluggabl:4,children:2,content:[4,1,2,3],readabl:3,send:3,under:2,global:[1,2,3],string:2,fals:1,mime_typ:1,util:2,join:4,exact:1,portalcont:2,administr:4,level:[1,2],cmf:3,itravers:2,list:[4,1,2],iter:[1,3],factori:[4,2],"try":1,item:[4,1,2,3],quick:3,work:[0,2,4],getthread:1,natur:3,idublincor:2,direct:1,annot:2,design:[0,2,3,4],further:[1,2],adpat:1,compat:4,last_comment_d:1,appear:4,repli:[1,2,3],abl:2,calcul:4,access:[1,3],delet:[4,1,2],version:4,"new":[4,1,3],method:[4,1],metadata:[2,3],widget:4,full:[4,1,3],gener:[4,2],modif:1,trunk:0,path:1,modifi:[2,3],implicit:2,valu:[4,1,2,3],dry:4,search:[4,3],convers:[4,1,2],dublin:3,action:4,implement:[1,2,3],explain:0,via:[1,2],regardless:1,appli:4,app:[0,1,2,3,4],"boolean":1,visibl:2,instal:4,total:1,plone:[0,1,2,3,4],"__parent__":[1,2],from:[4,1,2],would:2,regist:4,two:0,next:1,handler:2,call:[2,3],type:[4,1,2,3],until:1,more:[4,3],henc:2,relat:[1,2],warn:4,flag:1,addcom:1,particular:1,obj:2,iobjectaddedev:2,must:[0,2],none:1,retriev:[4,1,2,3],viewlet:[4,2],outlin:3,uniqu:[1,2],remain:2,can:[0,1,2,3,4],root:1,fetch:2,control:[4,1,2],tab:2,process:3,share:4,indic:4,captcha:[0,4],abort:[4,1],want:[1,2],commenttitl:4,alwai:[1,2,3],mai:[2,3],secur:1,iobjectcreatedev:2,write:[0,3],how:[0,4],iiterablemap:1,reject:[2,3],instead:[4,1],css:4,updat:4,map:1,resourc:2,max:1,after:4,befor:2,wrong:4,attent:4,date:[1,2,3],data:2,modification_d:1,object:[4,1,2,3],nonjavascript:2,explicit:[2,3],element:2,greek:4,allow:[4,1,2,3],anoth:[1,2],order:[1,2,3],move:4,approv:[4,3],becaus:2,brain:3,idynamictyp:2,dynam:2,paramet:1,style:4,ifactori:2,fix:4,bypass:2,persist:[1,2],hidden:2,easier:3,them:3,good:2,"return":[4,1,2,3],thei:[4,1,3],handl:3,auto:[2,3],safe:1,initi:2,"break":4,now:4,discuss:[0,1,2,3,4],"__delitem__":1,name:[4,1],changelog:4,revers:3,zcml:[0,4],each:2,found:1,unicod:4,button:[4,2],mean:[1,3],domain:4,weight:3,replac:[4,2],procedur:4,meta:0,our:4,happen:3,imutabledublincor:2,event:[4,2,3],out:[4,1],shown:[4,2],goe:4,author_nam:1,publish:[4,2],profil:4,adapt:[1,2],fti:[4,2],extensibleform:2,correct:4,integr:3,await:4,insid:1,workflow:[4,1,2,3],migrat:4,manipul:[1,2,3],given:1,standard:[2,3],"__setitem__":1,base:[4,2,3],mime:1,org:[0,4],copysourc:2,couldn:4,thread:[1,2,3],could:2,catalog:[4,1,3],keep:2,filter:[4,3],place:[4,2],formwidget:0,principl:[4,3],assign:[1,2],first:1,notifi:4,render:[1,3],number:[1,2],acquisit:[1,2],messag:4,size:[4,1],commentrepli:1,differ:[4,1],script:4,top:[1,2],construct:3,white:2,conveni:3,"final":2,store:[4,1,2,3],xmln:0,option:4,namespac:[0,1,2],comment_id:1,specifi:1,sync:4,regebro:4,consult:2,moder:[4,2,3],than:4,undosupport:2,provid:[0,1,3,4],remov:[4,2,3],tree:2,charact:4,jqueri:2,ggozad:4,friend:2,were:1,posit:2,browser:2,ani:[4,2,3],simpleitem:2,increment:2,tabl:4,need:[2,3],optimis:3,btree:3,inform:2,note:[0,1,2,4],mix:2,ideal:3,exampl:[0,1],which:[4,1],z3c:[2,3],singl:4,even:[2,3],copi:[4,2],though:3,track:2,previou:1,reach:1,most:[1,2,3],plai:4,propertymanag:2,icom:[1,2],"class":[4,2,3],don:1,request:2,declar:[0,2,4],neg:2,irepli:1,usual:[2,3],review:2,show:4,german:4,text:[4,1],verbos:4,getcom:1,directli:1,permiss:[4,2,3],find:1,redirect:4,current:[0,1],onli:[4,1],portal_typ:[4,1,3],transact:4,configur:[0,4],state:[4,2,3],should:[4,1,2,3],dict:[1,2,3],factor:4,z3cform:[4,2],folder:1,local:2,meant:4,"0b5":4,hit:[4,2],variou:2,get:[1,2],express:2,stop:1,requir:[4,2],enabl:[1,2],possibl:[2,3],email:[1,2],"default":4,hannosch:4,common:1,contain:[0,2,3],where:[4,1,2],view:[4,2],manger:2,forego:3,set:[4,1,2,3],chaoflow:4,creator:[1,2],displai:[1,2],see:4,respons:1,subject:[1,3],statu:4,wire:2,parent:[1,2],correctli:4,someth:4,figur:1,across:4,rolemanag:2,kei:[1,3],javascript:2,disallow:1,extens:3,allow_discuss:[1,2],distinguish:4,addit:[2,3],protect:[2,3],plugin:[0,3],howev:[1,2],linguaplon:4,etc:2,instanc:2,updateact:4,comment:[0,1,2,3,4],address:2,non:[4,2],respect:4,"0a1":4,"0a2":4,light:3,rebuild:4,author_usernam:1,empti:4,sinc:[1,2],basic:[4,2],quickli:1,box:4,fire:[2,3],bulk:4,child:1,i18n:4,those:2,"case":4,look:0,packag:4,properti:[1,2],batch:[4,1],"while":4,error:[4,2],anonym:[4,2,3],iundosupport:2,have:[0,2,3,4],helper:2,canon:4,site:4,itself:1,lightweight:3,discussionitem:2,ascii:4,disappear:4,develop:4,welcom:4,author:1,perform:2,make:[4,2,3],python:4,html:3,zope:[0,1,3,4],transit:[2,3],document:[0,2,3,4],start:1,higher:[4,1],untransl:4,http:[0,4],ipermissionmappingsupport:2,effect:2,retriv:3,portal:[4,1,2],user:[4,2],ownership:2,icopysourc:2,recent:[4,1,3],travers:[4,1,2],ipropertymanag:2,choos:4,thu:2,page:4,well:[4,2],inherit:2,without:4,thi:[0,1,2,3,4],english:4,unchang:2,load:4,identifi:2,just:2,less:4,when:[4,2,3],obtain:[1,2],speed:3,also:[0,1,2,3],add:[0,1,3],valid:[2,3],iobjectremovedev:2,lookup:[2,3],save:3,modul:4,match:4,real:4,transpar:2,recaptcha:[0,4],five:1,recurs:4,like:[1,2,3],specif:1,manual:3,integ:[1,2],collect:4,api:[4,1,2],index:[4,1,2,3],either:1,output:4,manag:[1,2,3],italian:4,right:[1,2],simplifi:4,icontentish:2,some:2,inavigationroot:4,genericsetup:4,guarante:2,keul:4,avoid:4,irolemanag:2,per:2,usernam:[1,2],plonesiteroot:1,iobjectmodifiedev:2,notabl:2,core:3,who:4,run:4,allow_com:4,host:4,although:1,"__name__":1,post:2,cmfcatalogawar:2,panel:[4,1,2],plug:2,about:[4,1],actual:2,column:4,absolute_url:2,iconvers:[1,2],lifecycleev:3,act:[2,3],disabl:4,own:[0,1,2,4],encod:4,automat:[4,2,3],mark:2,storag:[4,2],your:[0,4],accordingli:1,log:4,spam:[2,3],aren:4,support:[4,1,2,3],"long":1,custom:[2,3],width:4,reli:2,interfac:[4,1,2,3],includ:[4,1,2],"function":[4,2],creation:[1,2,3],form:[0,2,3,4],juh:4,subscrib:4,link:4,translat:4,renam:4,in_reply_to:[1,2],"true":[1,2,3],bug:4,faster:3,extend:1,"0b4":4,"0b1":4,total_com:1,"0b3":4,"0b2":4,whether:2,bugfix:4,conversationrepli:1,maximum:4,record:3,below:2,limit:1,otherwis:4,similar:2,isimpleitem:2,featur:[0,1,4],creat:2,certain:3,dure:[4,1],object_provid:4,unreleas:4,exist:[1,2,3],file:4,check:[4,1],piv:4,probabl:2,author_email:1,titl:[4,1],creation_d:1,virtual:4,field:[0,2,3,4],other:[4,3],role:2,you:[4,1],architectur:[0,3,4],registri:[4,1,2,3],svn:0,iown:2,sphinx:4,icatalogabledublincor:2,algorithm:3,defaultdublincoreimpl:2,directori:4,visual:4,rule:4,dynamictyp:2,depth:[4,1],conversationcanonicaladapterfactori:4,time:2,timo:4},titles:["Captcha Plugin Architecture","API/Interfaces","Design Notes","Architectural Principles","Welcome to plone.app.discussion’s documentation!"],modules:{},descrefs:{IConversation:{getComments:[1,0],last_comment_date:[1,1],total_comments:[1,1],"__delitem__":[1,0],enabled:[1,0],addComment:[1,0],commentators:[1,1],getThreads:[1,0]},"plone.app.discussion.interfaces":{IConversation:[1,2],IReplies:[1,2],IComment:[1,2]},IComment:{author_username:[1,1],modification_date:[1,1],creator:[1,1],author_email:[1,1],text:[1,1],portal_type:[1,1],comment_id:[1,1],author_name:[1,1],creation_date:[1,1],mime_type:[1,1],"__name__":[1,1],title:[1,1],in_reply_to:[1,1],"__parent__":[1,1]},IReplies:{"__delitem__":[1,0],addComment:[1,0]}},filenames:["captcha","api","design","architecture","index"]})
\ No newline at end of file