Changes for page XWiki Syntax Guide

Last modified by Robert Schaub on 2025/09/21 00:16

From version 2.1
edited by Robert Schaub
on 2025/09/21 00:16
Change comment: Install extension [org.xwiki.platform:xwiki-platform-help-ui/16.1.0]
To version 1.1
edited by XWikiGuest
on 2025/09/20 21:46
Change comment: Updated parent field.

Summary

Details

Page properties
Title
... ... @@ -1,1 +1,0 @@
1 -$services.localization.render("help.syntaxpage.title")
Parent
... ... @@ -1,1 +1,1 @@
1 -Main.WebHome
1 +bestworkplace:The Best Workplace - Our Vision.Main.WebHome
Author
... ... @@ -1,1 +1,1 @@
1 -xwiki:XWiki.Robert
1 +XWiki.XWikiGuest
Content
... ... @@ -1,321 +1,0 @@
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 = $numbertool.toNumber($crtCategoryId).intValue())
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.documentReference.name.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($foreach.count, 1)}${extraParams}")
163 - #set ($category.cssClass = "${category.id}Icon")
164 - #if ("$!{crtCategoryId}" != '' && $foreach.count == $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,1 +1,0 @@
1 -long
Code
... ... @@ -1,14 +1,0 @@
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 -});
Use this extension
... ... @@ -1,1 +1,0 @@
1 -onDemand
Name
... ... @@ -1,1 +1,0 @@
1 -Syntax Guide javascript
Parse content
... ... @@ -1,1 +1,0 @@
1 -No
XWiki.StyleSheetExtension[0]
Caching policy
... ... @@ -1,1 +1,0 @@
1 -long
Code
... ... @@ -1,46 +1,0 @@
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 -}
Use this extension
... ... @@ -1,1 +1,0 @@
1 -onDemand
Name
... ... @@ -1,1 +1,0 @@
1 -Syntax Guide Stylesheet
Parse content
... ... @@ -1,1 +1,0 @@
1 -Yes