- CCT Public Page
- [CCT Members Area]
Page History
| Wiki Markup |
|---|
{groovy:output=wiki|showErrorOutput=true}
import com.atlassian.confluence.pages.Page;
import bucket.container.ContainerManager;
def index = request.getSession(true).getServletContext().getAttribute("climb.index")
if (index == null )
{
out.println "Creating index..."
index = new Index()
String pageTitle="Climbing Guides"
//String pageTitle="Hobart Craglets"
Page page = ContainerManager.getComponent("pageManager").getPage(context.spaceKey,pageTitle);
addChildren(page, index)
request.getSession(true).getServletContext().setAttribute("climb.index", index)
}
def totalStars = ["","*","**","***"]
def totalGrades = ["10","11","12","13","14","15","16","17","18","19","20","21","22","23","24","25","26","27","28","29","30","31","32","33","34","VE","V0","V1","V2","V3","V4","V5","V6","V7","V8","V9","V10","V11","V12","V13","V14","V15"]
def totalSorts = ["grade,stars,name","name","none"]
def sortBy = "grade,stars,name"
def grades = ["17","18" ]
def stars = ["***"]
def pages = ["Northern Buttress"]
def nameStartsWith = ""
def nameContains = ""
if (request.getParameter("climb.search") != null )
{
stars = toList( request.getParameterValues("climb.stars") )
grades = toList( request.getParameterValues("climb.grades") )
sortBy = request.getParameter("climb.sortBy")
nameStartsWith = request.getParameter("climb.nameStartsWith")
nameContains = request.getParameter("climb.nameContains")
pages = toList( request.getParameterValues("climb.pages") )
}
out.println '''
h2. Search Criteria
{info}Use Ctrl & Shift to select multiple values{info}
|| Stars || Name Starts With || Name Contains || Grade || Area || Sort By ||
| {html}
<form name='climb.form' method='get' >
<select multiple='true' name='climb.stars' >'''
for (a in totalStars)
{
out.println "<option " + (stars.contains(a)?"selected":"") + " value='" + a + "'>" + (a==""?"none":a) + "</option>"
}
out.println '''
</select>{html} | {html}
<input type='text' style='width:100px' name='climb.nameStartsWith' />
{html} | {html}
<input type='text' style='width:100px' name='climb.nameContains' />
{html} | {html}
<select multiple='true' size='8' name='climb.grades' >'''
for (a in totalGrades)
{
out.println "<option " + (grades.contains(a)?"selected":"") + " value='" + a + "'>" + a + "</option>"
}
out.println '''
{html} | {html}<select multiple='true' size='8' name='climb.pages' >'''
for (a in index.pages)
{
out.println "<option " + (pages.contains(a)?"selected":"") + " value='" + a + "'>" + a + "</option>"
}
out.println '''
</select>
{html} | {html}
<select name='climb.sortBy'>'''
for (a in totalSorts)
out.println "<option " + (sortBy==a?"selected":"") + " value='" + a + "'>" + a + "</option>"
out.println '''
</select>
{html} |
{html} <input type='submit' name='climb.search' value='Search..' /> </form>{html}
\\\\
'''
def filtered = new ArrayList();
for (c in index.climbs)
{
if ( pages.contains(c.page) && grades.contains(c.grade) && stars.contains(c.stars) )
{
if (nameContains==null || nameContains.length()==0 || c.name.contains(nameContains) )
{
if (nameStartsWith==null || nameStartsWith.length()==0 || c.name.startsWith(nameStartsWith) )
{
filtered.add c
}
}
}
}
if (sortBy!=null && !sortBy.equals("none"))
{
def sorter = { return it.name }
if (sortBy.equals(totalSorts[0]))
{
//out.println "sorting by grade"
sorter = { return it.grade + it.stars + it.name }
}
//out.println "sorting"
filtered.sort sorter
}
out.println "h2. Results"
out.println filtered.size + " results"
out.println "|| || Stars || Name || Length || Grade || Area ||"
for (c in filtered)
{
out.println "| □ | \\" + c.stars + " | " + c.name + " | " + c.length + " | " + c.grade + " | [" + c.page + "] |"
}
def addChildren(Page page, Index index)
{
for (child in page.sortedChildren)
{
doPage(child, index)
}
}
def doPage (Page page, Index index)
{
int index1 = page.content.indexOf("{guide}")
if (index1 > -1)
{
int index2 = page.content.indexOf("{guide}",index1+1)
String xml = page.content.substring(index1+7, index2)
//out.println ("Page:" + page )
def x = new XmlParser().parseText(xml)
def climbs = x.climb
climbs.addAll x.problem
if (climbs.size() > 0)
index.pages.add page.title
for (climb in climbs)
{
Climb c = new Climb( name: climb.@name ,
grade: climb.@grade ,
stars: climb.@stars,
length: climb.@length,
page: page.title)
c.stars = c.stars==null?"":c.stars
c.stars = c.stars.trim()
index.climbs.add( c )
}
}
addChildren(page, index)
}
def List toList(x)
{
def ret = []
for (c in x)
ret.add c
return ret
}
class Index
{
List climbs = []
List pages = []
}
class Climb
{
String name
String grade
String stars
String length
//String extra
//String number
String page;
String toString()
{
return stars==null?"":stars + " " + " " + length + " " + grade
}
}
{groovy} |
Overview
Content Tools