You are viewing a plain text version of this content. The canonical link for it is here.
Posted to dev@cocoon.apache.org by bu...@apache.org on 2004/03/24 15:25:40 UTC
DO NOT REPLY [Bug 27904] New: -
HTMLEventLinkTransformer transforms href links which access a document fragment
DO NOT REPLY TO THIS EMAIL, BUT PLEASE POST YOUR BUG
RELATED COMMENTS THROUGH THE WEB INTERFACE AVAILABLE AT
<http://issues.apache.org/bugzilla/show_bug.cgi?id=27904>.
ANY REPLY MADE TO THIS MESSAGE WILL NOT BE COLLECTED AND
INSERTED IN THE BUG DATABASE.
http://issues.apache.org/bugzilla/show_bug.cgi?id=27904
HTMLEventLinkTransformer transforms href links which access a document fragment
Summary: HTMLEventLinkTransformer transforms href links which
access a document fragment
Product: Cocoon 2
Version: Current CVS 2.1
Platform: Other
OS/Version: Other
Status: NEW
Severity: Normal
Priority: Other
Component: blocks
AssignedTo: dev@cocoon.apache.org
ReportedBy: christian.mayrhuber@gmx.net
HTMLEventLinkTransformer transforms links like <a href="#myref"> which makes
the javascript features of cocoon forms such as the calendar non working.
patch to fix:
= SNIP & SNAP ==================================================
---
cocoon-2.1/src/blocks/portal/java/org/apache/cocoon/portal/transformation/HTMLEventLinkTransformer.java
2004-03-16 14:23:46.000000000 +0100
+++ src/org/apache/cocoon/portal/transformation/HTMLEventLinkTransformer.java
2004-03-24 15:08:02.000000000 +0100
@@ -17,6 +17,7 @@
import java.io.IOException;
import java.util.Map;
+import java.util.Stack;
import org.apache.avalon.framework.parameters.Parameters;
import org.apache.cocoon.ProcessingException;
@@ -45,6 +46,9 @@
/** The jxpath for the attribute */
protected String jxPath;
+ /** Remembers if the current element is a remote anchor */
+ protected Stack areRemoteAnchors;
+
/* (non-Javadoc)
* @see
org.apache.cocoon.sitemap.SitemapModelComponent#setup(org.apache.cocoon.environment.SourceResolver,
java.util.Map, java.lang.String, org.apache.avalon.framework.parameters.Parameters)
*/
@@ -56,6 +60,7 @@
super.setup(resolver, objectModel, src, par);
this.attributeName = par.getParameter("attribute-name", "application-uri");
this.jxPath = "temporaryAttributes/" + this.attributeName;
+ this.areRemoteAnchors = new Stack();
}
/* (non-Javadoc)
@@ -63,7 +68,10 @@
*/
public void startElement(String uri, String name, String raw, Attributes attr)
throws SAXException {
- if ("a".equals(name) ) {
+
+ areRemoteAnchors.push(Boolean.valueOf(isRemoteAnchor(name, attr)));
+
+ if ( ((Boolean)areRemoteAnchors.peek()).booleanValue() ) {
this.createAnchorEvent(uri, name, raw, attr);
} else if ("form".equals(name) ) {
this.createFormEvent(uri, name, raw, attr);
@@ -77,7 +85,7 @@
*/
public void endElement(String uri, String name, String raw)
throws SAXException {
- if ( "a".equals(name) || "form".equals(name) ) {
+ if ( ((Boolean)areRemoteAnchors.pop()).booleanValue() ||
"form".equals(name) ) {
this.xmlConsumer.endElement(CopletTransformer.NAMESPACE_URI,
CopletTransformer.LINK_ELEM,
"coplet:" + CopletTransformer.LINK_ELEM);
@@ -131,4 +139,29 @@
final String v = SourceUtil.absolutize(base, link);
return v;
}
+
+ /**
+ * Determine if the element is an url and if the url points to some
+ * remote source.
+ *
+ * @param name the name of the element
+ * @param attributes the attributes of the element
+ * @return true if the href url is an anchor pointing to a remote source
+ */
+ protected boolean isRemoteAnchor(String name, Attributes attributes)
+ {
+ if ("a".equals(name))
+ {
+ String link = attributes.getValue("href");
+
+ // no empty link to current document
+ if (link != null && link.trim().length() > 0)
+ {
+ // check reference to document fragment
+ if (!link.trim().startsWith("#")) return true;
+ }
+ }
+
+ return false;
+ }
}
= SNIP & SNAP ==================================================
PS: if this snippet does not survive bugzilla, I can mail it to you.