Hi,
On May 15, 2009, at 4:56 PM, lpereira (SVN) wrote:
Author: lpereira
Date: 2009-05-15 16:56:51 +0200 (Fri, 15 May 2009)
New Revision: 20004
Modified:
sandbox/xwiki-plugin-annotation/src/main/java/com/xpn/xwiki/plugin/
annotation/AnnotationPlugin.java
Log:
Quick fix concerning annotation on generated content.
Modified: sandbox/xwiki-plugin-annotation/src/main/java/com/xpn/
xwiki/plugin/annotation/AnnotationPlugin.java
===================================================================
--- sandbox/xwiki-plugin-annotation/src/main/java/com/xpn/xwiki/
plugin/annotation/AnnotationPlugin.java 2009-05-15 14:38:30 UTC (rev
20003)
+++ sandbox/xwiki-plugin-annotation/src/main/java/com/xpn/xwiki/
plugin/annotation/AnnotationPlugin.java 2009-05-15 14:56:51 UTC (rev
20004)
@@ -26,6 +26,14 @@
// TODO support for non logged / programming right users (plugin ?=>
component)
// TODO JavaDoc
+// TODO FIX
+/*
+ * java.lang.StringIndexOutOfBoundsException: String index out of
range: -15
+ at java.lang.String.substring(String.java:1938)
+ at
com
.xpn
.xwiki
.plugin
.annotation.AnnotationPlugin.getAnnotatedHTML(AnnotationPlugin.java:
180)
+ at
com
.xpn
.xwiki
.plugin
.annotation
.api.AnnotationPluginApi.getAnnotatedHTML(AnnotationPluginApi.java:78)
+ at
com
.xpn
.xwiki
.rest.annotation.AnnotationService.doGet(AnnotationService.java:76)
+ */
public class AnnotationPlugin extends XWikiDefaultPlugin
{
public static final String NAME = "annotation";
@@ -175,12 +183,25 @@
{
continue;
}
+
+ /*
+ * #if($hasEdit) You can use the [Sandbox
space>Sandbox.WebHome] to try out your wiki's features. #end
+ *
+ * an annotation of this cause a crash at this point.
+ *
+ * TODO FIX
+ */
fromIndex =
htmlContent.indexOf(getAnnotationBeginTag(it.getNumber()));
toIndex =
htmlContent.indexOf(getAnnotationEndTag(it.getNumber()));
+ // QUICK FIX
+ if(fromIndex < 0 || toIndex < 0)
+ {
+ continue;
+ }
oldSelection = htmlContent.substring(fromIndex+
(getAnnotationBeginTag(it.getNumber()).length()), toIndex);
- newSelection = oldSelection.replaceAll("<(/)?([^>]+?)>",
"</span><$1$2><span id=\"ano"+it.getNumber()+"\"
style=\"background-
color: green;\">");
- htmlContent =
htmlContent.replace(htmlContent.subSequence(fromIndex, toIndex
+getAnnotationEndTag(it.getNumber()).length()), "<span id=
\"ano"+it.getNumber()+"\" style=\"background-color: green;
\">"+newSelection+"</span>");
+ newSelection = oldSelection.replaceAll("<(/)?([^>]+?)>",
"</span><$1$2><span id=\"ano"+it.getNumber()+"\"
style=\"background-
color: green;\"
title=\""+it.get("annotation")+"\">");
+ htmlContent =
htmlContent.replace(htmlContent.subSequence(fromIndex, toIndex
+getAnnotationEndTag(it.getNumber()).length()), "<span id=
\"ano"+it.getNumber()+"\" style=\"background-color:
green;\" title=
\""+it.get("annotation")+"\">"+newSelection+"</span>");
Regex and HTML mixed... this is scary! Could you explain quickly the
architecture/design for this annotation feature?
On
http://dev.xwiki.org/xwiki/bin/view/Design/AnnotationFeature it
lists several options. Has one bee chosen? How does it work? What's
the relationship with the Rendering?
Thanks
-Vincent