Changes for page XWiki Syntax Guide

Last modified by superadmin on 2017/11/28 14:52
From empty
To version 1.1
edited by superadmin
on 2017/11/28 14:52
Change comment: Install extension [org.xwiki.platform:xwiki-platform-help-ui/9.9]

Summary

Details

Page properties
Title
... ... @@ -1,0 +1,1 @@
1 +$services.localization.render("help.syntaxpage.title")
Parent
... ... @@ -1,0 +1,1 @@
1 +Main.WebHome
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.XWikiGuest
1 +xwiki:XWiki.superadmin
Content
... ... @@ -1,0 +1,321 @@
1 +{{velocity output="false"}}
2 +#set($SUPPORTED_SYNTAXES = {})
3 +#set($void = $SUPPORTED_SYNTAXES.put('1.0', 'XWiki Syntax 1.0'))
4 +#set($void = $SUPPORTED_SYNTAXES.put('2.0', 'XWiki Syntax 2.0'))
5 +#set($void = $SUPPORTED_SYNTAXES.put('2.1', 'XWiki Syntax 2.1'))
6 +##
7 +## needed for sections that contain descriptions valid for several syntaxes
8 +## basically it is hack to reuse the 2.0 descriptions for 2.1
9 +#set($SUPPORTED_SYNTAX_ORDER = ['1.0', '2.0', '2.1'])
10 +##
11 +## filter all syntaxes that are not installed/configured
12 +#set($configuredSyntaxes = $services.rendering.getConfiguredSyntaxes())
13 +#set($enabledSyntaxIds = [])
14 +#foreach($syntax in $configuredSyntaxes)
15 + #set($discard = $enabledSyntaxIds.add($syntax.toIdString()))
16 +#end
17 +#set($unavailableSyntaxes=[])
18 +#foreach($supportedSyntax in $SUPPORTED_SYNTAX_ORDER)
19 + #set($fullSyntaxId = "xwiki/$supportedSyntax")
20 + #if(!$enabledSyntaxIds.contains($fullSyntaxId))
21 + #set($discard = $unavailableSyntaxes.add($supportedSyntax))
22 + #end
23 +#end
24 +#foreach($unavailableSyntax in $unavailableSyntaxes)
25 + #set($discard = $SUPPORTED_SYNTAX_ORDER.remove($unavailableSyntax))
26 + #set($discard = $SUPPORTED_SYNTAXES.removeKey($unavailableSyntax))
27 +#end
28 +
29 +#if ($request.xaction == 'switchContext')
30 + $response.sendRedirect($request.target)
31 + #stop
32 +#end
33 +
34 +#set ($crtCategoryId = "$!{request.category}")
35 +#if ($crtCategoryId != '')
36 + #set ($crtCategoryId = $mathtool.toInteger($crtCategoryId))
37 +#end
38 +#set ($crtSectionId = "$!{request.section}")
39 +#set ($crtSyntaxVer = "$!{request.syntax}")
40 +#if (!$SUPPORTED_SYNTAXES.containsKey($crtSyntaxVer))
41 + ## Default to the most current one (if we have any)
42 + #if(!$SUPPORTED_SYNTAX_ORDER.isEmpty())
43 + #set ($crtSyntaxVer = $SUPPORTED_SYNTAX_ORDER.get($mathtool.sub($SUPPORTED_SYNTAX_ORDER.size(),1)))
44 + #end
45 +#end
46 +#set($crtSyntaxPos = $SUPPORTED_SYNTAX_ORDER.indexOf($crtSyntaxVer))
47 +
48 +#set ($extraParamList = [])
49 +#if ($request.language)
50 + #set ($discard = $extraParamList.add("language=$escapetool.url($request.language)"))
51 +#end
52 +#if ($request.xpage)
53 + #set ($discard = $extraParamList.add("xpage=$escapetool.url($request.xpage)"))
54 +#end
55 +#if ($extraParamList.isEmpty())
56 + #set ($extraParams = '')
57 +#else
58 + #set ($extraParams = '&'+$stringtool.join($extraParamList,'&'))
59 +#end
60 +
61 +##
62 +## Syntax menu map
63 +##
64 +#set($syntaxMenu = [])
65 +#set($catCount = -1)
66 +#set($catName = "")
67 +#set($catChildren = [])
68 +#set($results = $services.query.xwql('from doc.object(XWiki.XWikiSyntaxClass) as syntax order by syntax.category, syntax.section').addFilter('currentlanguage').addFilter('unique').execute())
69 +
70 +#if($results.empty)
71 + No syntax sections found!
72 +#else
73 + #foreach ($item in $results)
74 + #set($sectionDoc = $xwiki.getDocument($item))
75 + #set($obj = $sectionDoc.getObject("XWiki.XWikiSyntaxClass"))
76 +
77 + ## detect if we entered a new category
78 + #if($catCount < $obj.getProperty("category").value)
79 + ## Put previous category into map (if existing), and reset children map
80 + #if($catId)
81 + #set($cat = { 'id' : $catId, 'name' : $catName, 'children' : $catChildren })
82 + $syntaxMenu.add($cat)
83 + #set($catChildren = [])
84 + #end
85 + ## extract new catId and catName values, and sectionTitle as we are already traveling the DOM
86 + #foreach($headerBlock in $sectionDoc.getDocument().getXDOM().getBlocks('class:HeaderBlock', 'DESCENDANT'))
87 + #if($headerBlock.getLevel().getAsInt() == 1)
88 + #set($catId = $headerBlock.getId().substring(1))
89 + #set($catName = $services.rendering.render($headerBlock, 'plain/1.0'))
90 + #elseif($headerBlock.getLevel().getAsInt() == 2)
91 + #set($sectionTitle = $services.rendering.render($headerBlock, 'plain/1.0'))
92 + #break
93 + #end
94 + #end
95 + #foreach($headerBlock in $sectionDoc.getTranslatedDocument().getDocument().getXDOM().getBlocks('class:HeaderBlock', 'DESCENDANT'))
96 + #if($headerBlock.getLevel().getAsInt() == 1)
97 + #set($catName = $services.rendering.render($headerBlock, 'plain/1.0'))
98 + #elseif($headerBlock.getLevel().getAsInt() == 2)
99 + #set($sectionTitle = $services.rendering.render($headerBlock, 'plain/1.0'))
100 + #break ## otherwise finds nested example headlines
101 + #end
102 + #end
103 + #set($catCount = $obj.getProperty("category").value)
104 + #else
105 + ## still in same category, only need new section title
106 + #foreach($headerBlock in $sectionDoc.getTranslatedDocument().getDocument().getXDOM().getBlocks('class:HeaderBlock', 'DESCENDANT'))
107 + #if($headerBlock.getLevel().getAsInt() == 2)
108 + #set($sectionTitle = $services.rendering.render($headerBlock, 'plain/1.0'))
109 + #break
110 + #end
111 + #end
112 + #end
113 +
114 + ## Add new sections to category children map
115 + #set($child = {'id' : $sectionDoc.getName().substring(11), 'minSyntax' : $obj.getProperty("minSyntaxId").value, 'maxSyntax' : $obj.getProperty("maxSyntaxId").value, 'name' : $sectionTitle})
116 + $catChildren.add($child)
117 + #end
118 +#end
119 +#set($cat = { 'id' : $catId, 'name' : $catName, 'children' : $catChildren })
120 +$syntaxMenu.add($cat)
121 +
122 +
123 +##
124 +## Filter only the sections that are valid for a Syntax
125 +##
126 +#set ($categoriesToRemove = [])
127 +#foreach ($category in $syntaxMenu)
128 + #set ($sectionsToRemove = [])
129 + #foreach ($section on $category.children)
130 + #set($minSyntaxPos = $SUPPORTED_SYNTAX_ORDER.indexOf($section.minSyntax))
131 + #if ($minSyntaxPos > $crtSyntaxPos)
132 + #set ($discard = $sectionsToRemove.add($section))
133 + #if ($section.id == $crtSectionId)
134 + #set ($crtSectionId = '') ## clear section if it doesn't exist (can happen when switching from 2.x to 1.0 syntax)
135 + #end
136 + #end
137 + #end
138 + #set ($discard = $category.children.removeAll($sectionsToRemove))
139 + #if ($category.children.size() == 0)
140 + #set ($discard = $categoriesToRemove.add($category))
141 + #end
142 +#end
143 +#set ($discard = $syntaxMenu.removeAll($categoriesToRemove))
144 +#if ("$!crtCategoryId" != '' && $crtCategoryId >= $syntaxMenu.size())
145 + #set ($crtCategoryId = '')
146 +#end
147 +
148 +#if ($crtSectionId != '')
149 + #set ($crtItemId = $crtSectionId)
150 +#elseif ($crtCategoryId != '')
151 + #set ($crtItemId = $syntaxMenu.get($crtCategoryId).id)
152 +#end
153 +#set ($crtSection = $util.null)
154 +#set ($crtCategory = $util.null)
155 +
156 +
157 +##
158 +## Prepare the Syntax menu map for processing
159 +##
160 +#foreach ($category in $syntaxMenu)
161 + ## "Standard" URLs and icons for categories
162 + #set ($category.url = "?syntax=$escapetool.url(${crtSyntaxVer})&category=${mathtool.sub($velocityCount, 1)}${extraParams}")
163 + #set ($category.cssClass = "${category.id}Icon")
164 + #if ("$!{crtCategoryId}" != '' && $velocityCount == $mathtool.add($crtCategoryId, 1))
165 + #set ($crtCategory = $category)
166 + #end
167 + ##
168 + ## Process each syntax section
169 + #foreach ($section in $category.children)
170 + #if ($xwiki.exists("XWiki.XWikiSyntax${section.id}"))
171 + #if ($crtSectionId == $section.id)
172 + #set ($crtSection = $section)
173 + #set ($crtCategory = $category)
174 + #end
175 + #set ($section.url = "?syntax=$escapetool.url(${crtSyntaxVer})&section=$escapetool.url(${section.id})${extraParams}")
176 + #end
177 + #end
178 +#end
179 +
180 +#**
181 + * Displays the sections from a syntax category
182 + *
183 + * Expected format:
184 + * sections = vector of items
185 + * item = map with the following fields:
186 + * 'id' : mandatory
187 + * 'name' : the text displayed for the corresponding menu item;
188 + * optional, defaults to
189 + * $services.localization.render("$!{translationPrefix}${item.id}")
190 + *
191 + * @param $sections the sections list, in the format described above
192 + * @param $translationPrefix the translation prefix added to the id of each
193 + * item, in order to generate the name and description; ignored when
194 + * name or description are specified
195 + * @param $heading the heading syntax
196 + *#
197 +#macro(syntax_displayCategory $sections $translationPrefix $heading)
198 + #foreach ($section in $sections)
199 + #syntax_displaySection($section $translationPrefix $heading)
200 + #end
201 +#end
202 +
203 +#macro(syntax_displaySection $section $translationPrefix $heading)
204 + #set ($displayVersion = $crtSyntaxVer)
205 + ## here is the hack to display the description for 2.0 if we have no description for 2.x
206 + ## this likely needs more work if e.g. there is a 3.x which is not compatible with 2.x
207 + #set($maxSyntaxPos = $SUPPORTED_SYNTAX_ORDER.indexOf($section.maxSyntax))
208 + #if ($crtSyntaxPos > $maxSyntaxPos)
209 + #set ($displayVersion = $section.maxSyntax)
210 + #end
211 + #if($heading)
212 + (% class="sectionheader" %)
213 + $heading $section.name $heading
214 +
215 + #end
216 + {{include reference="XWiki.XWikiSyntax${section.id}" section="H${displayVersion}${section.id}"/}}
217 +#end
218 +
219 +
220 +#**
221 + * Displays the syntax categories
222 + *
223 + * Expected format:
224 + * sections = vector of items
225 + * item = map with the following fields:
226 + * 'id' : mandatory
227 + * 'name' : the text displayed for the corresponding menu item;
228 + * optional, defaults to
229 + * $services.localization.render("$!{translationPrefix}${item.id}")
230 + *
231 + * @param $sections the sections list, in the format described above
232 + * @param $translationPrefix the translation prefix added to the id of each
233 + * item, in order to generate the name and description; ignored when
234 + * name or description are specified
235 + *#
236 +#macro(syntax_displayCategories $syntaxMenu $translationPrefix)
237 + #set ($subHeading = '====')
238 + #foreach ($category in $syntaxMenu)
239 + == $category.name ==
240 +
241 + #syntax_displayCategory($category.children 'syntax.' '===')
242 + #end
243 +#end
244 +
245 +#**
246 + * Displays the drop down allowing to switch the syntax.
247 + *#
248 +#macro (syntaxSwitch)
249 + #set ($crtSelection = "")
250 + #if ("$!{crtCategoryId}" != '')
251 + #set ($crtSelection = "category=$escapetool.url($!{crtCategoryId})")
252 + #elseif ($crtSectionId != '')
253 + #set ($crtSelection = "section=$escapetool.url($!{crtSectionId})")
254 + #end
255 + #if ($crtSelection != "")
256 + #set ($crtSelection = "${crtSelection}${extraParams}")
257 + #else
258 + #set ($crtSelection = "$extraParams")
259 + #end
260 +{{html}}
261 + <form id="change-context" class="xformInline" action="$doc.getURL()">
262 + <div>
263 + <input type="hidden" name="xaction" value="switchContext" />
264 + #if ($request.language)
265 + <input type="hidden" name="language" value="$escapetool.xml($request.language)" />
266 + #end
267 + #if ($request.xpage)
268 + <input type="hidden" name="xpage" value="$escapetool.xml($request.xpage)" />
269 + #end
270 + <select id="goto-select" name="target" title="$escapetool.xml($services.localization.render("help.changesyntax"))">
271 + <optgroup label="$services.localization.render('help.choose_syntax')">
272 + #foreach($syntaxId in $SUPPORTED_SYNTAX_ORDER)
273 + #set ($query = "syntax=${escapetool.url($syntaxId)}&${crtSelection}")
274 + <option value="$escapetool.xml($doc.getURL('view', $query))"#if($crtSyntaxVer == $syntaxId) selected="selected"#end>$escapetool.html($SUPPORTED_SYNTAXES.get($syntaxId))</option>
275 + #end
276 + </optgroup>
277 + </select>
278 + <span class="buttonwrapper"><input type="submit" value="$escapetool.xml($services.localization.render('admin.switchContext'))" class="button" /></span>
279 + </div>
280 + </form>
281 +{{/html}}
282 +#end
283 +{{/velocity}}
284 +
285 +{{velocity}}
286 +##**************************************************************************************************
287 +## From the Administration Sheet, used to display a common UI for some wiki features
288 +## here used to display all categories / sections of the syntax guide
289 +##**************************************************************************************************
290 +$xwiki.get('jsx').use($doc.getFullName())##
291 +$xwiki.get('ssx').use($doc.getFullName())##
292 +#if ($crtSectionId != '')
293 + #set ($sectionName = ${crtSection.name})
294 +#elseif ($crtCategoryId != '')
295 + #set ($sectionName = ${crtCategory.name})
296 +#else
297 + #set ($sectionName = $services.localization.render("help.syntaxall"))
298 +#end
299 +#set ($syntaxTitle = $services.localization.render("help.syntaxtitle", ["${crtSyntaxVer}"]))
300 +#syntaxSwitch()
301 +(((
302 +#set ($query = "syntax=$escapetool.url(${crtSyntaxVer})${extraParams}")
303 +#if ($crtCategory){{html}}<a href="${doc.getURL('view', ${query})}">$syntaxTitle</a>{{/html}}#{else}(% class="current" %)$syntaxTitle#{end}#if ($crtCategory) » #if ($crtSection){{html}}<a href="${crtCategory.url}">${crtCategory.name}</a>{{/html}}#{else}(% class="current" %)${crtCategory.name}#{end}#if ($crtSection) » (% class="current" %)${crtSection.name}#end#end
304 +)))
305 +== $syntaxTitle: $sectionName ==
306 +
307 +#verticalNavigation($syntaxMenu {'translationPrefix' : 'syntax.', 'crtItemId' : "$!crtItemId", 'cssClass' : 'syntax-menu'})
308 +##-----------------------------------------
309 +## syntax-page display
310 +##-----------------------------------------
311 + #set ($subHeading = '===')
312 + (% id="syntax-page-content" %)(((
313 + #if(!$crtSection && !$crtCategory)
314 + #syntax_displayCategories($syntaxMenu 'syntax.')
315 + #elseif (!$crtSection)
316 + #syntax_displayCategory($crtCategory.children 'syntax.' '==')
317 + #else
318 + #syntax_displaySection($crtSection 'syntax.' false)
319 + #end
320 + ))) ## syntax-page-content
321 +{{/velocity}}
XWiki.JavaScriptExtension[0]
Caching policy
... ... @@ -1,0 +1,1 @@
1 +long
Code
... ... @@ -1,0 +1,14 @@
1 +/* Administration application custom JavaScript */
2 +
3 +document.observe('xwiki:dom:loaded', function() {
4 + if($('goto-select')) {
5 + Event.observe($('goto-select'), 'change', function (event) {
6 + var select = event.element();
7 + var i = select.selectedIndex;
8 + if (window.location != select.options[i].value) {
9 + window.location = select.options[i].value;
10 + }
11 + });
12 + $('goto-select').next().hide();
13 + }
14 +});
Name
... ... @@ -1,0 +1,1 @@
1 +Syntax Guide javascript
Parse content
... ... @@ -1,0 +1,1 @@
1 +No
Use this extension
... ... @@ -1,0 +1,1 @@
1 +onDemand
XWiki.StyleSheetExtension[0]
Caching policy
... ... @@ -1,0 +1,1 @@
1 +long
Code
... ... @@ -1,0 +1,46 @@
1 +#document-title {
2 + margin-bottom: 1em;
3 +}
4 +#change-context {
5 + float: right;
6 + padding-top: 0.5em;
7 +}
8 +#goto-select optgroup {
9 + margin: 0.5ex;
10 +}
11 +
12 +#syntax-page-content {
13 + margin-left: 15em;
14 +}
15 +#syntax-page-content table {
16 + width: 99%;
17 +}
18 +#syntax-page-content>h3 {
19 + display: none;
20 +}
21 +#syntax-page-content>h3.sectionheader {
22 + display: block;
23 +}
24 +
25 +/*******************************************************/
26 +
27 +.syntax-menu .generalIcon {
28 + background-image: url("$xwiki.getSkinFile('icons/silk/page_white_code.gif')");
29 +}
30 +
31 +.syntax-menu .editingIcon {
32 + background-image: url("$xwiki.getSkinFile('icons/silk/page_white_edit.gif')");
33 +}
34 +
35 +.syntax-menu .advancedIcon {
36 + background-image: url("$xwiki.getSkinFile('icons/silk/wand.gif')");
37 +}
38 +
39 +.syntax-menu .programmingIcon {
40 + background-image: url("$xwiki.getSkinFile('icons/silk/page_white_gear.gif')");
41 +}
42 +
43 +/* Firefox panics when it has an overflowing table but the content is pre-formatted. */
44 +tbody>tr>td>tt {
45 + white-space: normal !important;
46 +}
Name
... ... @@ -1,0 +1,1 @@
1 +Syntax Guide Stylesheet
Parse content
... ... @@ -1,0 +1,1 @@
1 +Yes
Use this extension
... ... @@ -1,0 +1,1 @@
1 +onDemand