| #** |
| Licensed to the Apache Software Foundation (ASF) under one or more |
| contributor license agreements. The ASF licenses this file to You |
| under the Apache License, Version 2.0 (the "License"); you may not |
| use this file except in compliance with the License. |
| You may obtain a copy of the License at |
| |
| http://www.apache.org/licenses/LICENSE-2.0 |
| |
| Unless required by applicable law or agreed to in writing, software |
| distributed under the License is distributed on an "AS IS" BASIS, |
| WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. |
| See the License for the specific language governing permissions and |
| limitations under the License. For additional information regarding |
| copyright in this work, please see the NOTICE file in the top level |
| directory of this distribution. |
| *# |
| |
| #** |
| Set of essential macros needed in Roller velocity templates. |
| These are the documented macros in order defined in this file: |
| |
| #includeTemplate($weblog $pageName) |
| #showAutodiscoveryLinks($weblog) |
| #showTrackbackAutodiscovery($entry) |
| #showMetaDescription() |
| #showAnalyticsTrackingCode($weblog) |
| |
| #showWeblogEntriesPager($pager) |
| #showNextPrevEntriesControl($pager) |
| #showMobileNextPrevEntriesControl($pager) |
| |
| #showWeblogEntryComments($entry) |
| #showMobileWeblogEntryComments($entry) |
| #showWeblogEntryCommentForm($entry) |
| |
| #showWeblogEntryLinksList($entries) |
| #showBookmarkLinksList($folderObj) |
| #showWeblogCategoryLinksList() |
| #showMobileCategoryLinksList() |
| #showAtomFeedsList($weblog) |
| #showRSSFeedsList($weblog) |
| |
| #showWeblogEntryCalendar($weblog $category) |
| |
| #showPageMenu($weblog) |
| #showAuthorMenu($vertical) |
| |
| #showWeblogSearchForm($weblog) |
| #showMobileSearchForm($weblog) |
| #showWeblogSearchAgainForm($weblog) |
| #showMobileSearchAgainForm($weblog) |
| #showNextPrevSearchControl($pager) |
| #showMobileNextPrevSearchControl($pager) |
| |
| #showMobilePopupDialog($id $header $message) |
| |
| #_showCommonJavaScript() |
| |
| #showEntryTags($entry) |
| *# |
| |
| |
| #** |
| Parse and include page template from weblog. |
| *# |
| #macro(includeTemplate $weblog $pageName) |
| #set($pageArg = false)## This is required for such constructs; see Velocity docs and ROL-689 |
| #set($pageArg = $weblog.getTemplateByName($pageName)) |
| #if ($pageArg) |
| #set($pageId = $pageArg.id+'|'+$model.deviceType) |
| #parse($pageId) |
| #end |
| #end |
| |
| |
| #** |
| Show RSS, Atom and RSD auto-discovery links as HTML link elements. |
| *# |
| #macro(showAutodiscoveryLinks $weblog) |
| #if ($weblog.enableBloggerApi) |
| <link rel="EditURI" type="application/rsd+xml" title="RSD" href="$url.rsd"/> |
| #end |
| |
| ## main feed urls are always available |
| #if (!$model.searchResults) |
| <link rel="alternate" type="application/atom+xml" title="Recent Entries (Atom)" href="$url.feed.entries.atom" /> |
| <link rel="alternate" type="application/rss+xml" title="Recent Entries (RSS)" href="$url.feed.entries.rss" /> |
| <link rel="alternate" type="application/atom+xml" title="Recent Comments (Atom)" href="$url.feed.comments.atom" /> |
| <link rel="alternate" type="application/rss+xml" title="Recent Comments (RSS)" href="$url.feed.comments.rss" /> |
| |
| #if ($model.tags) |
| <link rel="alternate" type="application/atom+xml" title="Entries tagged $model.tags.toString() (Atom)" href="$url.feed.entries.atomByTags($model.tags, false)" /> |
| <link rel="alternate" type="application/rss+xml" title="Entries tagged $model.tags.toString() (RSS)" href="$url.feed.entries.rssByTags($model.tags, false)" /> |
| #elseif ($model.weblogCategory) |
| <link rel="alternate" type="application/atom+xml" title="Entries for category $model.weblogCategory.name (Atom)" href="$url.feed.entries.atom($model.weblogCategory.name, false)" /> |
| <link rel="alternate" type="application/rss+xml" title="Entries for category $model.weblogCategory.name (RSS)" href="$url.feed.entries.rss($model.weblogCategory.name, false)" /> |
| #end |
| |
| #else |
| <link rel="alternate" type="application/rss+xml" title="Search results for '$utils.escapeHTML($model.term)'" href="$utils.escapeHTML($url.feed.entries.search($model.term,$model.weblogCategory.name))" /> |
| #end |
| #if ($site) |
| <link rel="search" |
| title="OpenSearch Descriptor for $config.siteName" |
| type="application/opensearchdescription+xml" |
| href="$url.absoluteSite/roller-services/opensearch" /> |
| #else |
| <link rel="search" |
| title="OpenSearch Descriptor for weblog $model.weblog.name" |
| type="application/opensearchdescription+xml" |
| href="$url.absoluteSite/roller-services/opensearch/$model.weblog.handle" /> |
| #end |
| #end |
| |
| |
| #** |
| * Display a trackback auto-discovery RDF comment for a WeblogEntry, but only |
| * if trackbacks are enabled and comments are allowed for the entry. |
| **# |
| #macro( showTrackbackAutodiscovery $entry ) |
| #if($config.trackbacksEnabled && $model.weblog.allowComments && $entry.commentsStillAllowed) |
| <!-- |
| <rdf:RDF xmlns:rdf="http://www.w3.org/1999/02/22-rdf-syntax-ns#" |
| xmlns:trackback="http://madskills.com/public/xml/rss/module/trackback/" |
| xmlns:dc="http://purl.org/dc/elements/1.1/"> |
| <rdf:Description |
| rdf:about="$url.entry($entry.anchor)" |
| trackback:ping="$url.trackback($entry.anchor)" |
| dc:title="$entry.title" |
| dc:identifier="$url.entry($entry.anchor)" |
| dc:subject="$entry.category.name" |
| dc:description="$entry.title" |
| dc:creator="$entry.creator.userName" |
| dc:date="$entry.pubTime" /> |
| </rdf:RDF> |
| --> |
| #end |
| #end |
| |
| #** |
| Adds a meta description tag, suitable for use in HTML header sections. This tag is frequently used by |
| search engines to provide a short description for links returned. The description value will set to the |
| weblog's tagline if on a multiple blog entry page or the weblog entry search description if on a single |
| blog entry (permalink) page. If the relevant description value has not been configured no meta tag |
| will be created. |
| *# |
| #macro(showMetaDescription) |
| #if ($model.permalink) |
| #if ($utils.isNotEmpty($model.weblogEntry.searchDescription)) |
| <meta name="description" content="$model.weblogEntry.searchDescription"> |
| #end |
| #elseif ($utils.isNotEmpty($model.weblog.about)) |
| <meta name="description" content="$model.weblog.about"> |
| #end |
| #end |
| |
| #** |
| Adds a tracking code for website analytics (e.g. Google Analytics). Will use the blog-defined |
| tracking code if defined and permitted by the installation, else the server-defined tracking |
| code if defined will be used. |
| *# |
| #macro(showAnalyticsTrackingCode $weblog) |
| #if ($config.analyticsOverrideAllowed && $utils.isNotEmpty($weblog.analyticsCode)) |
| $weblog.analyticsCode |
| #elseif ($utils.isNotEmpty($config.defaultAnalyticsTrackingCode)) |
| $config.defaultAnalyticsTrackingCode |
| #end |
| #end |
| |
| #** |
| Shows weblog entries pager via default day template |
| *# |
| #macro(showWeblogEntriesPager $pager) |
| #set($dayPage = $model.weblog.getTemplateByName("_day")) |
| #set($map = $pager.getEntries()) |
| #foreach($day in $map.keySet()) |
| #set($entries = $map.get($day)) |
| #set($pageId = $dayPage.id+'|'+$model.deviceType) |
| #parse($pageId) |
| #end |
| #end |
| |
| |
| #** Show next/prev control for specified pager *# |
| #macro(showNextPrevEntriesControl $pager) |
| #set($prevLink = false) |
| #set($nextLink = false) |
| #if ($pager.prevLink) |
| #set($prevLink = $pager.prevLink) |
| #set($prevName = $pager.prevName) |
| #elseif ($pager.prevCollectionLink) |
| #set($prevLink = $pager.prevCollectionLink) |
| #set($prevName = $pager.prevCollectionName) |
| #end |
| #if ($pager.nextLink) |
| #set($nextLink = $pager.nextLink) |
| #set($nextName = $pager.nextName) |
| #elseif ($pager.nextCollectionLink) |
| #set($nextLink = $pager.nextCollectionLink) |
| #set($nextName = $pager.nextCollectionName) |
| #end |
| #if ($prevLink) |
| « <a href="$prevLink">$prevName</a> | |
| #end |
| #if ($prevLink || $nextLink) |
| <a href="$pager.getHomeLink()">$pager.getHomeName()</a> |
| #end |
| #if ($nextLink) |
| | <a href="$nextLink">$nextName</a> » |
| #end |
| #end |
| ## Mobile Version |
| #macro(showMobileNextPrevEntriesControl $pager) |
| #set($prevLink = false) |
| #set($nextLink = false) |
| #if ($pager.prevLink) |
| #set($prevLink = $pager.prevLink) |
| #set($prevName = $pager.prevName) |
| #elseif ($pager.prevCollectionLink) |
| #set($prevLink = $pager.prevCollectionLink) |
| #set($prevName = $pager.prevCollectionName) |
| #end |
| #if ($pager.nextLink) |
| #set($nextLink = $pager.nextLink) |
| #set($nextName = $pager.nextName) |
| #elseif ($pager.nextCollectionLink) |
| #set($nextLink = $pager.nextCollectionLink) |
| #set($nextName = $pager.nextCollectionName) |
| #end |
| #if ($prevLink || $nextLink) |
| <div data-role="navbar" data-iconpos="top"> |
| <ul> |
| #if ($prevLink) |
| <li> |
| <a href="$prevLink" data-transition="fade" data-theme="a" data-icon="arrow-l"> |
| $prevName |
| </a> |
| </li> |
| #end |
| ## If we do not want the home link on the first page remove >> || $nextLink |
| #if ($prevLink || $nextLink) |
| <li> |
| <a href="$pager.getHomeLink()" data-transition="fade" data-theme="a" data-icon="home"> |
| $pager.getHomeName() |
| </a> |
| </li> |
| #end |
| #if ($nextLink) |
| <li> |
| <a href="$nextLink" data-transition="fade" data-theme="a" data-icon="arrow-r"> |
| $nextName |
| </a> |
| </li> |
| #end |
| </ul> |
| </div> |
| #end |
| |
| #end |
| |
| |
| #** |
| Show comments for weblog entry according to Roller configuration. |
| *# |
| #macro(showWeblogEntryComments $entry) |
| <a name="comments"></a> |
| <div class="comments" id="comments"> |
| |
| #if($model.commentForm.preview) |
| #set($comments = [$model.commentForm.previewComment]) |
| <div class="comments-head">$text.get( "macro.weblog.preview" ):</div> |
| #else |
| <div class="comments-head">$text.get( "macro.weblog.comments" ):</div> |
| #set($comments = $entry.getComments(true, true)) |
| #end |
| |
| <br/> |
| #foreach( $comment in $comments ) |
| #if($comment.approved || $model.commentForm.preview) |
| <a name="comment-$comment.timestamp" id="comment-$comment.timestamp"></a> |
| <div class="comment#if($velocityCount % 2 == 0) even#else odd#end" id="comment${velocityCount}"> |
| |
| $comment.content |
| |
| <p class="comment-details"> |
| $text.get("macro.weblog.postedby") |
| #if (!$utils.isEmpty($comment.name) && !$utils.isEmpty($comment.url)) |
| <a rel="nofollow" href="$comment.url"><b>$comment.name</b></a> |
| #elseif (!$utils.isEmpty($comment.name)) |
| <b>$comment.name</b> |
| #elseif ($comment.remoteHost) |
| <b>$comment.remoteHost</b> |
| #else |
| <b>$text.get("macro.weblog.comment.unknown")</b> |
| #end |
| |
| $text.get("macro.weblog.on") $utils.formatDate($comment.postTime, $text.get( "macro.weblog.datepattern" )) |
| |
| <a href="$url.comment($entry.anchor, $comment.timestamp)" |
| class="entrypermalink" title="$text.get( "macro.weblog.commentpermalink.title" )">#</a> |
| </p> |
| |
| </div> |
| |
| #end |
| #end |
| </div> |
| #end |
| ## Mobile Version |
| #macro(showMobileWeblogEntryComments $entry) |
| <!-- showMobileWeblogEntryComments --> |
| #if($model.commentForm.preview) |
| #set($comments = [$model.commentForm.previewComment]) |
| #set( $heading = $text.get( "macro.weblog.preview" )) |
| #else |
| #set($comments = $entry.getComments(true, true)) |
| #set( $heading = $text.get( "macro.weblog.comments" )) |
| #end |
| #if($comments.size() > 0) |
| <ul data-role="listview" data-divider-theme="b" data-inset="true"> |
| <li data-role="list-divider"> |
| $heading |
| </li> |
| #foreach( $comment in $comments ) |
| #if($comment.approved || $model.commentForm.preview) |
| ##<li data-role="list-divider" data-theme="a"> |
| ## TODO |
| ##<a name="comment-$comment.timestamp" id="comment-$comment.timestamp"></a> |
| ##</li> |
| <li data-theme="a"> |
| <p class="ui-li-desc content-textbox"> |
| $comment.content |
| </p> |
| <p class="ui-li-desc content-textbox"> |
| $text.get("macro.weblog.postedby") |
| #if (!$utils.isEmpty($comment.name) && !$utils.isEmpty($comment.url)) |
| <a rel="nofollow" href="$comment.url"><b>$comment.name</b></a> |
| #elseif (!$utils.isEmpty($comment.name)) |
| <b>$comment.name</b> |
| #elseif ($comment.remoteHost) |
| <b>$comment.remoteHost</b> |
| #else |
| <b>$text.get("macro.weblog.comment.unknown")</b> |
| #end |
| |
| $text.get("macro.weblog.on") $utils.formatDate($comment.postTime, $text.get( "macro.weblog.datepattern" )) |
| ##<a href="$url.comment($entry.anchor, $comment.timestamp)" title="$text.get( "macro.weblog.commentpermalink.title" )" data-role="button" data-inline="true" data-mini="true">#</a> |
| </p> |
| </li> |
| #end |
| #end |
| </ul> |
| #end |
| #end |
| |
| |
| #** |
| Show comments form for weblog entry. |
| *# |
| #macro(showWeblogEntryCommentForm $entry) |
| #set($cform = $model.getCommentForm()) |
| |
| <div class="comments-form"> |
| <div class="comments-head">$text.get("macro.weblog.postcommentHeader")</div> |
| <a name="comment-form"></a> |
| |
| #if( $entry.commentsStillAllowed ) |
| |
| #if( $cform.error ) |
| <span class="error">$cform.message</span> |
| #elseif( !$cform.error && !$utils.isEmpty($cform.message) ) |
| <span class="status">$cform.message</span> |
| #end |
| |
| <form method="post" action="$url.entry($entry.anchor)" focus="name" name="commentForm" onsubmit="saveUserInformation(this); return validateComments(this)"> |
| <input type="hidden" name="method" value="post" /> |
| |
| <ul> |
| <li> |
| <label class="desc">$text.get( "macro.weblog.name" )</label> |
| <input type="text" name="name" class="text large" value="$cform.name" size="50" maxlength="255" /> |
| </li> |
| |
| <li><label class="desc">$text.get( "macro.weblog.email" )</label> |
| <input type="text" name="email" class="text large" value="$cform.email" size="50" maxlength="255" /> |
| </li> |
| |
| <li><label class="desc">$text.get( "macro.weblog.url" )</label> |
| <input type="text" name="url" class="text large" value="$cform.url" size="50" maxlength="255" /> |
| </li> |
| |
| #if ($config.commentEmailNotify) |
| <li><input type="checkbox" class="checkbox" id="notify" name="notify" #if($cform.notify)CHECKED #end/> |
| <label for="notify" class="choice">$text.get( "macro.weblog.notifyMeOfComments" )</label> |
| </li> |
| #end |
| <li> |
| <input type="checkbox" class="checkbox" id="rememberInfo" name="rememberInfo" /> |
| <label for="rememberInfo" class="choice">$text.get( "macro.weblog.rememberinfo" )</label> |
| </li> |
| <li> |
| <label class="desc">$text.get( "macro.weblog.yourcomment" )</label> |
| <textarea name="content" class="textarea large" cols="40" rows="10">$cform.content</textarea> |
| </li> |
| <li class="info"> |
| <span class="comments-syntax-indicator"> |
| $text.get( "macro.weblog.htmlsyntax" ) |
| #if($config.commentEscapeHtml) |
| <span class="disabled">$text.get( "macro.weblog.htmldisabled" )</span> |
| #else |
| <span class="enabled">$text.get( "macro.weblog.htmlenabled" )</span> |
| #end |
| </span> |
| </li> |
| <li class="info"> |
| <script src="$url.site/theme/scripts/clientSideInclude.js"></script> |
| <div id="commentAuthenticator"></div> |
| </li> |
| <li> |
| <input type="button" class="button" name="post" value=" $text.get("macro.weblog.postpreview" ) " |
| onclick="this.form.method.value='preview';this.form.submit()" /> |
| <input type="submit" class="button" name="post" value=" $text.get( "macro.weblog.post" ) " /> |
| </li> |
| </ul> |
| |
| </form> |
| |
| <script src="$url.site/theme/scripts/roller.js"></script> |
| <script> |
| /* <![CDATA[ */ |
| clientSideInclude('commentAuthenticator', '$url.commentAuthenticator'); |
| |
| var author = getCookie("commentAuthor"); |
| var email = getCookie("commentEmail"); |
| var url = getCookie("commentUrl"); |
| // check each field - IE will render "null" |
| if (author) { |
| document.forms['commentForm'].name.value = author; |
| } |
| if (email) { |
| document.forms['commentForm'].email.value = email; |
| } |
| if (url) { |
| document.forms['commentForm'].url.value = url; |
| } |
| |
| if (author || email || url) { |
| document.forms['commentForm'].rememberInfo.checked = true; |
| } |
| |
| function saveUserInformation(theForm) { |
| if (theForm.rememberInfo.checked) { |
| rememberUser(theForm); |
| } else { |
| forgetUser(theForm); |
| } |
| } |
| |
| function validateComments(theForm) { |
| if (theForm.content.value == "") { |
| alert("$text.get( "macro.weblog.commentwarning" )"); |
| theForm.content.focus(); |
| return false; |
| } |
| } |
| /* ]]> */ |
| </script> |
| |
| #else |
| <span class="status">$text.get( "comments.disabled" )</span> |
| #end |
| </div> |
| #end |
| |
| |
| #** |
| Show entries as a HTML ul list. |
| *# |
| #macro(showWeblogEntryLinksList $entriesList) |
| <ul class="rEntriesList"> |
| #foreach ($var in $entriesList) |
| <li class="recentposts"><a href="$var.permalink">$var.title</a></li> |
| #end |
| </ul> |
| #end |
| |
| |
| #** |
| Show bookmarks as a HTML ul list. |
| *# |
| #macro(showBookmarkLinksList $folderObject) |
| <ul class="rFolder"> |
| #set($bookmarks = $folderObject.getBookmarks()) |
| #set($divId = $utils.replace($folderObject.name, " ", "_" )) |
| #foreach($bookmark in $bookmarks) |
| <li class="rFolderItem"> |
| #if($utils.isNotEmpty($bookmark.Image)) |
| #if( $bookmark.Image.startsWith("http://") ) |
| <a href="$bookmark.url"> |
| <img alt="$bookmark.description" border="0" |
| src="$bookmark.image" class="rBookmark" /></a> |
| #else |
| <a href="$bookmark.url"> |
| <img alt="$bookmark.description" border="0" |
| src="$bookmark.image" class="rBookmark" /></a> |
| #end |
| #else |
| #if($utils.isNotEmpty( $bookmark.FeedUrl)) |
| <a href="$bookmark.feedUrl"><img class="smrssbadge" |
| src="$url.absoluteSite/images/smrssbadge.gif" |
| alt="$text.get("macro.bookmark.urlFeed")"/></a> |
| #end |
| <a href="$bookmark.url" title="$bookmark.description">$bookmark.name</a> |
| #end |
| </li> |
| #end |
| </ul> |
| #end |
| |
| |
| #** |
| Show weblog's categories in specified parent category. |
| *# |
| #macro(showWeblogCategoryLinksList) |
| <ul class="rCategory"> |
| #if ($model.weblogCategory || $model.permalink) |
| <li><a href="$url.home">$text.get("generic.all")</a></li> |
| #else |
| <li class="selected"><a href="$url.home">$text.get("generic.all")</a></li> |
| #end |
| #set($cats = $model.weblog.getWeblogCategories()) |
| #foreach($cat in $cats) |
| #if ($model.weblogCategory && $model.weblogCategory.name == $cat.name || ($model.permalink && $model.weblogEntry.category.name == $cat.name)) |
| <li class="selected"><a href="$url.category($cat.name)">$cat.name</a></li> |
| #else |
| <li><a href="$url.category($cat.name)">$cat.name</a></li> |
| #end |
| #end |
| </ul> |
| #end |
| |
| |
| ## Mobile version |
| #macro(showMobileCategoryLinksList) |
| <!-- showMobileCategoryLinksList --> |
| <div data-role="popup" id="categories"> |
| <div data-role="collapsible-set" data-theme="a" data-content-theme="a" data-collapsed-icon="arrow-r" data-expanded-icon="arrow-d" style="margin:0; width:250px;"> |
| <div data-role="collapsible" data-collapsed="false" data-inset="false"> |
| <h2>Categories</h2> |
| <ul data-role="listview"> |
| #if ($model.weblogCategory || $model.permalink) |
| <li><a href="$url.home" data-transition="fade">$text.get("generic.all")</a></li> |
| #else |
| <li data-icon="gear" class="ui-btn-active"><a href="$url.home" data-transition="fade">$text.get("generic.all")</a></li> |
| #end |
| #set($active = $text.get("generic.all")) |
| #set($cats = $model.weblog.getWeblogCategories()) |
| #foreach($cat in $cats) |
| #if ($model.weblogCategory && $model.weblogCategory.name == $cat.name || ($model.permalink && $model.weblogEntry.category.name == $cat.name)) |
| <li data-icon="gear" class="ui-btn-active"><a href="$url.category($cat.name)" data-transition="fade">$cat.name</a></li> |
| #set($active = $cat.name) |
| #else |
| <li><a href="$url.category($cat.name)" data-transition="fade">$cat.name</a></li> |
| #end |
| #end |
| </ul> |
| </div> |
| </div> |
| </div> |
| <a href="#categories" data-rel="popup" data-role="button">Categories - $active</a> |
| #end |
| |
| |
| #** |
| * Show list of all RSS feeds available for weblog. |
| *# |
| #macro(showAtomFeedsList $weblog) |
| <ul class="rFeeds"> |
| <li><a href="$url.feed.entries.atom">$text.get("generic.all")</a></li> |
| #set($categories = $weblog.weblogCategories ) |
| #foreach( $cat in $categories ) |
| <li><a href="$url.feed.entries.atom($cat.name, false)">$cat.name</a></li> |
| #end |
| <li><a href="$url.feed.comments.atom">Comments</a></li> |
| </ul> |
| #end |
| |
| |
| #** |
| * Show list of all Atom feeds available for weblog. |
| *# |
| #macro(showRSSFeedsList $weblog) |
| <ul class="rFeeds"> |
| <li><a href="$url.feed.entries.rss">$text.get("generic.all")</a></li> |
| #set($categories = $weblog.weblogCategories ) |
| #foreach( $cat in $categories ) |
| <li><a href="$url.feed.entries.rss($cat.name, false)">$cat.name</a></li> |
| #end |
| <li><a href="$url.feed.comments.rss">Comments</a></li> |
| </ul> |
| #end |
| |
| |
| #** |
| * Show Roller Page Navigation Bar, includes links to all pages. |
| *# |
| #macro(showPageMenu $weblog) |
| <ul class="rNavigationBar"> |
| <li class="rNavItem"> |
| <a href="$url.site/"><span>$config.siteShortName</span></a> |
| </li> |
| <li class="rNavItem"> |
| <a href="$url.home"><span>Weblog</span></a> |
| </li> |
| #foreach($iPage in $weblog.pages) |
| #if (!$iPage.hidden && $iPage.navbar && $iPage.link != "Weblog") |
| #set($isSelected = false) |
| #if ($model.weblogPage && $iPage.Id == $model.weblogPage.Id) #set($isSelected = true) #end |
| #if (!$isSelected) |
| <li class="rNavItem"><a href="$url.page($iPage.link)"><span>$iPage.name</span></a></li> |
| #else |
| <li class="rNavItem"><span>$iPage.name</span></li> |
| #end |
| #end |
| #end |
| #if ($utils.isUserAuthorizedToAuthor($weblog)) |
| <li class="rNavItem"> |
| <a href="$url.createEntry"><span>$text.get("navigationBar.newEntry")</span></a> |
| </li> |
| #if($utils.isUserAuthorizedToAdmin($weblog)) |
| <li class="rNavItem"> |
| <a href="$url.editSettings"><span>$text.get("navigationBar.settings")</span></a> |
| </li> |
| #end |
| <li class="rNavItem"> |
| <a href="$url.logout"><span>$text.get("navigationBar.logout")</span></a> |
| </li> |
| #else |
| #if ($utils.isUserAuthenticated()) |
| <li class="rNavItem"> |
| <a href="$url.logout"><span>$text.get("navigationBar.logout")</span></a> |
| </li> |
| #else |
| <li class="rNavItem"> |
| <a href="$url.login"><span>$text.get("navigationBar.login")</span></a> |
| </li> |
| #end |
| #end |
| </ul> |
| #end |
| |
| |
| #** |
| Show weblog entry calendar, with optional category restriction. |
| *# |
| #macro(showWeblogEntryCalendar $weblog $category) |
| $calendarModel.showWeblogEntryCalendar($weblog, $category) |
| #end |
| |
| #** |
| Show large format weblog entry calendar, with optional category restriction. |
| *# |
| #macro(showWeblogEntryCalendarBig $weblog $category) |
| $calendarModel.showWeblogEntryCalendarBig($weblog, $category) |
| #end |
| |
| |
| #** |
| Show weblog author menu with vertical or horizontal orientation. |
| *# |
| #macro(showAuthorMenu $vertical) |
| |
| #set( $authorMenu = $menuModel.authorMenu ) |
| #if( $authorMenu ) |
| #if( $vertical ) |
| #foreach( $menu in $authorMenu.tabs ) |
| <ul class="rMenu"> |
| #foreach( $item in $menu.items ) |
| <li class="rMenuItem"><a href="$url.action($item.action, '/roller-ui/authoring')">$text.get( $menu.key ):$text.get( $item.key )</a></li> |
| #end |
| </ul> |
| #end |
| #else |
| #set( $menuCnt = 0 ) |
| #foreach( $menu in $authorMenu.tabs ) |
| #foreach( $item in $menu.items ) |
| #if ($menuCnt > 0) | #end |
| <a href="$url.action($item.action, '/roller-ui/authoring')">$text.get( $menu.key ):$text.get( $item.key )</a> |
| #set($menuCnt = $menuCnt + 1) |
| #end |
| #end |
| #end |
| #end |
| |
| #end |
| |
| |
| #** |
| Show weblog author menu with vertical or horizontal orientation. |
| *# |
| #macro(showAdminMenu $vertical) |
| |
| #set( $adminMenu = $menuModel.adminMenu ) |
| #if( $adminMenu ) |
| #if( $vertical ) |
| #foreach( $menu in $adminMenu.tabs ) |
| <ul class="rMenu"> |
| #foreach( $item in $menu.items ) |
| <li class="rMenuItem"><a href="$url.action($item.action, '/roller-ui/admin')">$text.get( $menu.key ):$text.get( $item.key )</a></li> |
| #end |
| </ul> |
| #end |
| #else |
| #set( $menuCnt = 0 ) |
| #foreach( $menu in $adminMenu.tabs ) |
| #foreach( $item in $menu.items ) |
| #if ($menuCnt > 0) | #end |
| <a href="$url.action($item.action, '/roller-ui/admin')">$text.get( $menu.key ):$text.get( $item.key )</a> |
| #set($menuCnt = $menuCnt + 1) |
| #end |
| #end |
| #end |
| #end |
| |
| #end |
| |
| |
| #** |
| Show search form for a weblog. |
| *# |
| #macro(showWeblogSearchForm $weblog $showCatChooser) |
| <form id="searchForm" method="get" action="$url.search" style="margin: 0; padding: 0" onsubmit="return validateSearch(this)"> |
| <p> |
| <input type="text" id="q" name="q" size="10" class="text small" maxlength="255" value="#if($model.term)$model.term#end" /> |
| #if( $showCatChooser ) |
| #set( $cats = $model.weblog.getWeblogCategories()) |
| <select name="cat"> |
| <option value="">- $text.get("mainPage.category") -</option> |
| #foreach( $cat in $cats ) |
| <option #if($cat.name == $model.term)selected="selected"#end>$cat.name</option> |
| #end |
| </select> |
| #end |
| <input type="submit" class="button" value="$text.get( "macro.weblog.searchbutton" )" id="searchbutton" /> |
| </p> |
| </form> |
| <script> |
| function validateSearch(form) { |
| if (form.q.value == "") { |
| alert("$text.get("macro.weblog.searchalert")"); |
| form.q.focus(); |
| return false; |
| } |
| return true; |
| } |
| </script> |
| #end |
| ## Mobile Version |
| #macro(showMobileSearchForm $weblog $showCatChooser) |
| <form id="searchForm" method="get" action="$url.search" onsubmit="return validateSearch(this)"> |
| <p> |
| <input type="search" id="q" name="q" placeholder="Search..." maxlength="255" value="#if($model.term)$model.term#end" /> |
| #if( $showCatChooser ) |
| #set( $cats = $model.weblog.getWeblogCategories()) |
| <select name="cat"> |
| <option value="">- $text.get("mainPage.category") -</option> |
| #foreach( $cat in $cats ) |
| <option #if($cat.name == $model.term)selected="selected"#end>$cat.name</option> |
| #end |
| </select> |
| #end |
| <input type="submit" id="searchbutton" data-role="button" data-theme="a" value="$text.get( "macro.weblog.searchbutton" )" /> |
| </p> |
| </form> |
| <script> |
| function validateSearch(form) { |
| if (form.q.value == "") { |
| $("#searchDialog").popup('open').focus(); |
| $("#searchDialog").popup({ afterclose: function( event, ui ) { |
| form.q.focus(); |
| } |
| }); |
| return false; |
| } |
| return true; |
| } |
| </script> |
| #showMobilePopupDialog('searchDialog','Search', $text.get("macro.weblog.searchalert")) |
| #end |
| |
| |
| #** |
| Show search again form for a weblog. |
| *# |
| #macro(showWeblogSearchAgainForm $weblog) |
| <div id="searchAgain"> |
| $text.get( "macro.weblog.searchhits", [$model.term, $model.hits]) |
| <form method="get" action="$url.search" style="margin: 5px"> |
| <input type="text" id="q" name="q" class="text medium" maxlength="255" value="$model.term" style="padding-left: 1px" /><br /> |
| #set( $cats = $model.weblog.getWeblogCategories()) |
| #if(!$site && $cats && $cats.size() > 1) |
| <select name="cat" class="select"> |
| <option value="">$text.get( "macro.searchresults.incategory" )</option> |
| #foreach( $cat in $cats ) |
| <option #if($cat.name == $model.weblogCategory.name)selected="selected"#end>$cat.name</option> |
| #end |
| </select> |
| #end |
| <input type="submit" value="$text.get( "macro.weblog.searchbutton" )" class="button" /> |
| </form> |
| |
| $text.get( "macro.weblog.searchgoogle", [$model.term, $url.absoluteSite, $url.site, ${weblog.handle}] ) |
| </div> |
| #end |
| ## Mobile Version |
| #macro(showMobileSearchAgainForm $weblog) |
| <div id="searchAgain"> |
| $text.get( "macro.weblog.searchhits", [$model.term, $model.hits]) |
| <form method="get" action="$url.search" style="margin: 5px"> |
| <input type="search" id="q" name="q" placeholder="Search..." maxlength="255" value="$model.term" /> |
| #set($cats = $model.weblog.getWeblogCategories()) |
| #if(!$site && $cats && $cats.size() > 1) |
| <select name="cat" class="select"> |
| <option value="">$text.get( "macro.searchresults.incategory" )</option> |
| #foreach( $cat in $cats ) |
| <option #if($cat.name == $model.weblogCategory.name)selected="selected"#end>$cat.name</option> |
| #end |
| </select> |
| #end |
| <input type="submit" data-role="button" data-theme="a" value="$text.get( "macro.weblog.searchbutton" )" /> |
| </form> |
| |
| </div> |
| #end |
| |
| |
| #** |
| Show next/prev pager for search results. |
| *# |
| #macro(showNextPrevSearchControl $pager) |
| #set( $min = $model.offset + 1 ) |
| #set( $max = $model.offset + $model.limit ) |
| #if( $max > $model.hits )#set( $max = $model.hits )#end |
| <h3> |
| $text.get("searchSummary.text", [$min, $max, $model.hits]) |
| </h3> |
| |
| #set($prevLink = false) |
| #set($nextLink = false) |
| #if ($pager.prevLink) |
| #set($prevLink = $pager.prevLink) |
| #set($prevName = $pager.prevName) |
| #end |
| #if ($pager.nextLink) |
| #set($nextLink = $pager.nextLink) |
| #set($nextName = $pager.nextName) |
| #end |
| #if ($prevLink) |
| « <a href="$prevLink">$prevName</a> | |
| #end |
| #if ($prevLink || $nextLink) |
| <a href="$pager.getHomeLink()">$pager.getHomeName()</a> |
| #end |
| #if ($nextLink) |
| | <a href="$nextLink">$nextName</a> » |
| #end |
| #end |
| ## Mobile Version |
| #macro(showMobileNextPrevSearchControl $pager) |
| #set( $min = $model.offset + 1 ) |
| #set( $max = $model.offset + $model.limit ) |
| #if( $max > $model.hits )#set( $max = $model.hits )#end |
| <h3> |
| $text.get("searchSummary.text", [$min, $max, $model.hits]) |
| </h3> |
| #set($prevLink = false) |
| #set($nextLink = false) |
| #if ($pager.prevLink) |
| #set($prevLink = $pager.prevLink) |
| #set($prevName = $pager.prevName) |
| #end |
| #if ($pager.nextLink) |
| #set($nextLink = $pager.nextLink) |
| #set($nextName = $pager.nextName) |
| #end |
| |
| ## Show the pager |
| #if ($prevLink || $nextLink) |
| <div data-role="navbar" data-iconpos="top"> |
| <ul> |
| #if ($prevLink) |
| <li> |
| <a href="$prevLink" data-transition="fade" data-theme="a" data-icon="arrow-l"> |
| $prevName |
| </a> |
| </li> |
| #end |
| ## If we do not want the home link on the first page remove >> || $nextLink |
| #if ($prevLink || $nextLink) |
| <li> |
| <a href="$pager.getHomeLink()" data-transition="fade" data-theme="a" data-icon="home"> |
| $pager.getHomeName() |
| </a> |
| </li> |
| #end |
| #if ($nextLink) |
| <li> |
| <a href="$nextLink" data-transition="fade" data-theme="a" data-icon="arrow-r"> |
| $nextName |
| </a> |
| </li> |
| #end |
| </ul> |
| </div> |
| #end |
| #end |
| |
| |
| #** |
| Show mobile alert popup. |
| *# |
| #macro(showMobilePopupDialog $id $header $message) |
| <div data-role="popup" id="$id" data-dismissible="false" style="white-space: normal" class="ui-corner-all"> |
| <div data-role="footer" data-theme="b" class="ui-corner-top"> |
| <h1>$header</h1> |
| </div> |
| <div data-role="content" data-theme="a" class="ui-corner-bottom ui-content"> |
| <h3 class="wrap ui-title">$message</h3> |
| <a href="#" data-role="button" data-inline="true" data-rel="back" data-transition="fade" data-theme="a">OK</a> |
| </div> |
| </div> |
| #end |
| |
| #** |
| Include Javascript code needed for expanding folder macros (undocumented). |
| *# |
| #macro(_showCommonJavascript) |
| #if (!$zzz__incudedCommonJavaScript__zzz) |
| <script> |
| function setCookie(name,value,expires,path,domain,secure) { |
| document.cookie = name + "=" + escape (value) + |
| ((expires) ? "; expires=" + expires.toGMTString() : "") + |
| ((path) ? "; path=" + path : "") + |
| ((domain) ? "; domain=" + domain : "") + ((secure) ? "; secure" : ""); |
| } |
| function getCookie(name) { |
| var prefix = name + "=" |
| var start = document.cookie.indexOf(prefix) |
| if (start==-1) return null; |
| var end = document.cookie.indexOf(";", start+prefix.length) |
| if (end==-1) end=document.cookie.length; |
| var value=document.cookie.substring(start+prefix.length, end) |
| return unescape(value); |
| } |
| /* The toggleFolder and togglePlusMinus functions are for expanding/contracting folders */ |
| function toggleFolder(targetId) { |
| var expanded; |
| if (document.getElementById) { |
| target = document.getElementById(targetId); |
| if (target.style.display == "none") { |
| target.style.display = ""; |
| expanded = true; |
| } else { |
| target.style.display = "none"; |
| expanded = false; |
| } |
| togglePlusMinus("i" + targetId); |
| // set a cookie to remember this preference |
| var expires = new Date(); |
| expires.setTime(expires.getTime() + 24 * 365 * 60 * 60 * 1000); // sets it for approx 365 days. |
| setCookie("rfolder-"+targetId,expanded,expires,"/"); |
| } |
| } |
| function togglePlusMinus(targetId) { |
| if (document.getElementById) { |
| target = document.getElementById(targetId); |
| if (target.innerHTML == "+") { |
| target.innerHTML = "-"; |
| } else { |
| target.innerHTML = "+"; |
| } |
| } |
| } |
| function folderPreference(folderId) { |
| var folderCookie = getCookie("rfolder-"+folderId); |
| if (folderCookie != null) { // we have user's last setting |
| folder = document.getElementById(folderId); |
| plusMinus = document.getElementById("i"+folderId); |
| if (folderCookie == "true") { // show |
| folder.style.display = ""; |
| plusMinus.innerHTML = "-"; |
| } else { // hide |
| folder.style.display = "none"; |
| plusMinus.innerHTML = "+"; |
| } |
| } |
| } |
| function createXMLHttpRequestObject() { |
| var ro; |
| var browser = navigator.appName; |
| if (browser == "Microsoft Internet Explorer") { |
| ro = new ActiveXObject("Microsoft.XMLHTTP"); |
| } else { |
| ro = new XMLHttpRequest(); |
| } |
| return ro; |
| } |
| var http = createXMLHttpRequestObject(); |
| var init = false; |
| var isBusy = false; |
| </script> |
| #set($zzz__incudedCommonJavaScript__zzz = true) |
| #end |
| #end |
| |
| |
| #** |
| Display a list of tag urls for the tags on a given entry. |
| *# |
| #macro(showEntryTags $entry) |
| |
| #set ( $tags = $entry.tags ) |
| #foreach($tag in $tags) |
| <a href="$url.tag($tag.name)" rel="tag">$tag.name</a> |
| #end |
| |
| #end |
| |
| |
| #macro(_Jave $type) |
| <script> |
| var type = '$type'; |
| function setCookie(c_name, value, exdays) { |
| var exdate = new Date(); |
| exdate.setDate(exdate.getDate() + exdays); |
| var c_value = escape(value) + ((exdays == null) ? "" : "; expires=" + exdate.toUTCString()); |
| document.cookie = c_name + "=" + c_value; |
| } |
| setCookie("roller_user_request_type", type, 30); |
| |
| </script> |
| #end |
| |
| |
| |
| |