Class AbstractPageLink
- java.lang.Object
-
- com.atlassian.renderer.links.Link
-
- com.atlassian.renderer.links.BaseLink
-
- com.atlassian.confluence.links.linktypes.AbstractContentEntityLink
-
- com.atlassian.confluence.links.linktypes.AbstractPageLink
-
- Direct Known Subclasses:
BlogPostLink
,PageCreateLink
,PageLink
public abstract class AbstractPageLink extends AbstractContentEntityLink
-
-
Field Summary
Fields Modifier and Type Field Description protected String
anchor
protected @Nullable AbstractPage
destinationPage
protected String
spaceKey
-
Fields inherited from class com.atlassian.confluence.links.linktypes.AbstractContentEntityLink
entityName
-
-
Constructor Summary
Constructors Constructor Description AbstractPageLink(com.atlassian.renderer.links.GenericLinkParser parser, PageContext context)
-
Method Summary
All Methods Static Methods Instance Methods Abstract Methods Concrete Methods Modifier and Type Method Description static String
generateAnchor(PageContext context, String anchor)
This method generates a HTML encoded anchorstatic String
generateUnencodedAnchor(PageContext context, String anchor)
Generates a valid HTML5 anchor with a prefix added to the anchor name.static String
generateUniqueAnchor(PageContext context, String anchor)
Similar in most respects togenerateAnchor(com.atlassian.confluence.renderer.PageContext, String)
.String
getAnchor(PageContext pageContext)
@Nullable ContentEntityObject
getDestinationContent()
String
getLinkBody()
String
getPageTitle()
String
getSpaceKey()
protected abstract boolean
isOnSamePage(PageContext pageContext)
protected void
setUrlAndTitle(PageContext pageContext)
OutgoingLink
toOutgoingLink(ContentEntityObject sourceContent)
-
Methods inherited from class com.atlassian.confluence.links.linktypes.AbstractContentEntityLink
hasDestination, isNoLinkBodyProvided
-
Methods inherited from class com.atlassian.renderer.links.BaseLink
equals, getOriginalParser, hashCode, setI18nTitle, setTitle
-
-
-
-
Field Detail
-
spaceKey
protected String spaceKey
-
destinationPage
protected @Nullable AbstractPage destinationPage
-
anchor
protected String anchor
-
-
Constructor Detail
-
AbstractPageLink
public AbstractPageLink(com.atlassian.renderer.links.GenericLinkParser parser, PageContext context) throws ParseException
- Throws:
ParseException
-
-
Method Detail
-
setUrlAndTitle
protected void setUrlAndTitle(PageContext pageContext)
-
isOnSamePage
protected abstract boolean isOnSamePage(PageContext pageContext)
-
getAnchor
public String getAnchor(PageContext pageContext)
-
getSpaceKey
public String getSpaceKey()
-
getPageTitle
public String getPageTitle()
-
getDestinationContent
public @Nullable ContentEntityObject getDestinationContent()
- Specified by:
getDestinationContent
in classAbstractContentEntityLink
-
toOutgoingLink
public OutgoingLink toOutgoingLink(ContentEntityObject sourceContent)
-
getLinkBody
public String getLinkBody()
- Overrides:
getLinkBody
in classAbstractContentEntityLink
-
generateUnencodedAnchor
public static String generateUnencodedAnchor(PageContext context, String anchor)
Generates a valid HTML5 anchor with a prefix added to the anchor name. No encoding (HTML or URL) is performed.The prefix is the title of the page currently being viewed or, if the page title is not available, the space key of the space in which the anchor resides.
Used predominantly to generate an anchor in the format: #<title>-<anchor>
For ease of documentation, I will use "page" to refer to content that can contain an anchor or anchor link.
The title component of the anchor is normally the title of the page.
However, when we render an anchor or an anchor link for a page that is included by another (via the include page macro) the title component is the title of the including page. This allows anchors links that have been declared on the including page to point to anchors declared on the included page.
For example, say page "A" contains an include page macro that includes page "B". And say if the body of page B has an anchor declared on it <a name="foo">. Page A can link to this anchor using [#foo].
If we are rendering an anchor that is several levels deep (that is, on a page, that is being included by page, that is being included by a page), the title component is assigned the title of the outer-most content's title. This is largely because
PageContext.getOriginalContext()
returns a reference to the top most context (PageContext does not maintain a stack of contexts).- Parameters:
context
- the page object which the prefix (title) is derived fromanchor
- the string which the context-unique ID will be derived from- Returns:
- the anchor (does not include the leading '#' symbol)
-
generateAnchor
public static String generateAnchor(PageContext context, String anchor)
This method generates a HTML encoded anchor- Parameters:
context
-anchor
-- Returns:
-
generateUniqueAnchor
public static String generateUniqueAnchor(PageContext context, String anchor)
Similar in most respects togenerateAnchor(com.atlassian.confluence.renderer.PageContext, String)
. The difference here is that generateUniqueAnchor ensures that the output of the identifier is unique within the page.
-
-