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
on 2017/11/28 14:52
Change comment: Install extension [org.xwiki.platform:xwiki-platform-help-ui/9.9]
Summary
-
Page properties (4 modified, 0 added, 0 removed)
-
Objects (0 modified, 2 added, 0 removed)
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.XWikiGuest1 +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})§ion=$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