Changes for page ExtensionManagerMacros

Last modified by Thomas Mortagne on 2012/03/02

From version 1.1 >
edited by Vincent Massol
on 2012/01/11
To version < 2.1 >
edited by Admin
on 2012/01/30
>
Change comment: Imported from XAR

Summary

Details

Page properties
Author
... ... @@ -1,1 +1,1 @@
1 -XWiki.VincentMassol
1 +XWiki.Admin
Content
... ... @@ -2,7 +2,6 @@
2 2  $xwiki.ssx.use('ExtensionManagerMacros')
3 3  $xwiki.jsx.use('ExtensionManagerMacros')
4 4  #set ($extensionManager = $services.extension)
5 -#set ($versionManager = $extensionManager.versionManager)
6 6  #if ($request.extensionwiki && $request.extensionwiki.trim() != '')
7 7   #set($extensionwiki = $request.extensionwiki)
8 8   #set($extensionnamespace = "wiki:${extensionwiki}")
... ... @@ -12,13 +12,35 @@
12 12   (% class="extHeader" %)(((
13 13   (% class="extHeaderLeft" %)(((
14 14   {{html}}
15 - <form action="$doc.getURL($xcontext.action, $request.getQueryString().replaceAll('(^|&)actionshowdetails=[^&]++&?', '$1').replaceAll('(^|&)(extension(id|version)=[^&]++&?+)+', '$1').replaceAll('(^|&)section=[^&]++', '$1section=XWiki.AddExtensions').replaceAll('(^|&)searchextension=[^&]++&?', '$1'))" method="post">
14 + <form class="xform half" action="$doc.getURL($xcontext.action, $request.getQueryString().replaceAll('(^|&)actionshowdetails=[^&]++&?', '$1').replaceAll('(^|&)(extension(id|version)=[^&]++&?+)+', '$1').replaceAll('(^|&)section=[^&]++', '$1section=XWiki.AddExtensions').replaceAll('(^|&)searchextension=[^&]++&?', '$1'))" method="post">
16 16   <div class="globalsearch extHeaderLeftSearch">
17 - <label class="hidden" for="extensionsearchinput">Search</label><input type="text" class="globalsearchinput#if ("$!request.searchextension" == '') withTip#end extHeaderLeftInput" id="extensionsearchinput" name="searchextension" value="#if ("$!request.searchextension" != '')$request.searchextension#{else}search extension...#{end}" size="60"><input type="image" class="button" value="Go" alt="Go" src="/xwiki/resources/icons/xwiki/search.png">
16 + <label class="label" for="extensionsearchinput">$msg.get('extensions.search.title')</label><input type="text" class="globalsearchinput#if ("$!request.searchextension" == '') withTip#end extHeaderLeftInput" id="extensionsearchinput" name="searchextension" value="#if ("$!request.searchextension" != '')${request.searchextension}#{else}$msg.get('extensions.search.tip')#{end}" size="60"><input type="image" class="button" value="$msg.get('panels.search.submit')" alt="$msg.get('panels.search.submit')" src="$xwiki.getSkinFile('icons/xwiki/search.png')">
18 18   </div>
19 19   </form>
20 20   {{/html}}
21 21   )))
21 + (% class="extHeaderRight" %)(((
22 + ## Advanced search form
23 + {{html clean="false"}}
24 + <form action="$escapetool.xml($doc.getURL($xcontext.action, $request.getQueryString()))" method="post" class="xform">
25 + <fieldset id="advancedextensionsearch">
26 + <div id="advancedextensionsearch-body"></div>
27 + <legend><a href="#advancedextensionsearch-body">$msg.get('extensions.advancedSearch.title')</a></legend>
28 + <div class="plainmessage advancedsearchpopup hidden">
29 + <input type="hidden" name="xback" value="$escapetool.xml($doc.getURL($xcontext.action, $request.queryString))" />
30 + <dl>
31 + <dt><label for="advancedextensionsearch-id">$msg.get('extensions.advancedSearch.id.label')</label></dt>
32 + <dd><input type="text" name="extensionid" id="advancedextensionsearch-id" value="" /></dd>
33 + <dt><label for="advancedextensionsearch-version">$msg.get('extensions.advancedSearch.version.label')</label></dt>
34 + <dd><input type="text" name="extensionversion" id="advancedextensionsearch-version" value="" /></dd>
35 + </dl>
36 + <p><span class="buttonwrapper"><input type="submit" name="actioninstall" value="$msg.get('extensions.advancedSearch.actions.submit')" class="button" /></span>
37 + <span class="buttonwrapper"><a href="#searchextension" class="actioncancel secondary button">$msg.get('extensions.advancedSearch.actions.cancel')</a></span></p>
38 + </div>
39 + </fieldset>
40 + </form>
41 + {{/html}}
42 + )))
22 22   (% class="clearfloats" %)((()))
23 23   )))
24 24  #end
... ... @@ -59,10 +59,10 @@
59 59  
60 60   #if ($extension.authors.size() > 0)
61 61   (% class="extension-authors" %)(((
62 - $msg.get('by:') ##
83 + $msg.get('extensions.info.authors') ##
63 63   #foreach ($author in $extension.authors)
64 64   #if ($author.name == 'devs')
65 - [[$msg.get('XWiki Development Team')>>http://www.xwiki.org/]]##
86 + [[$msg.get('extensions.info.authors.xwikiorg')>>http://www.xwiki.org/]]##
66 66   #elseif ("$!author.url" != '' && "$!author.name" != '')
67 67   [[${author.name}>>${author.url}]]##
68 68   #else
... ... @@ -69,8 +69,7 @@
69 69   ${author.name}##
70 70   #end
71 71   #if ($foreach.hasNext), ##
72 - #else
73 - )))
93 + #else )))
74 74  
75 75   #end
76 76   #end
... ... @@ -91,12 +91,12 @@
91 91   #end
92 92   (% class="extension-body" %)(((
93 93   (% class="innerMenu" %)
94 - * [[Description>>||anchor="extension-body-description-${extension.id.id}-${extension.id.version}"]]
114 + * [[$msg.get('extensions.info.category.description')>>||anchor="extension-body-description-${extension.id.id}-${extension.id.version}"]]
95 95   #if ("$!{extension.releaseNotes}" != '')
96 - * [[Release Notes>>||anchor="extension-body-relnotes-${extension.id.id}-${extension.id.version}"]]
116 + * [[$msg.get('extensions.info.category.releaseNotes')>>||anchor="extension-body-relnotes-${extension.id.id}-${extension.id.version}"]]
97 97   #end
98 98   #if ($extension.dependencies.size() > 0 || $backwardDependencies.size() > 0)
99 - * [[Dependencies>>||anchor="extension-body-dependencies-${extension.id.id}-${extension.id.version}"]]
119 + * [[$msg.get('extensions.info.category.dependencies')>>||anchor="extension-body-dependencies-${extension.id.id}-${extension.id.version}"]]
100 100   #end
101 101  
102 102   {{id name="extension-body-description-${extension.id.id}-${extension.id.version}" /}}
... ... @@ -145,16 +145,16 @@
145 145   (% class="extension-body-dependencies extension-body-section" %)(((
146 146   $msg.get('extensions.info.dependencies.directDependencies', [$extension.dependencies.size()])
147 147   #foreach ($dependency in $extension.dependencies)
148 - #set ($dependencyExtension = $extensionManager.resolve($dependency.id, $dependency.version))
168 + #set ($dependencyExtension = $extensionManager.resolve($dependency))
149 149   #set ($dependencyClass = "$!{dependencyExtension.class}")
150 150   #if ($dependencyExtension)
151 151   * [[#displayExtensionName($dependencyExtension)>>##
152 152   #if ($dependencyClass.endsWith('CoreExtension'))
153 - path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.version}&section=XWiki.CoreExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-core"]]
173 + path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.versionConstraint}&section=XWiki.CoreExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-core"]]
154 154   #elseif ($dependencyClass.endsWith('LocalExtension'))
155 - path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.version}&section=XWiki.InstalledExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-installed"]]
175 + path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.versionConstraint}&section=XWiki.InstalledExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-installed"]]
156 156   #else
157 - path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.version}&section=XWiki.AddExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-remote"]]
177 + path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id}&extensionversion=${dependency.versionConstraint}&section=XWiki.AddExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-remote"]]
158 158   #end
159 159   #else
160 160   * (% class="dependency-type-unknown" %)${dependency.id}
... ... @@ -176,7 +176,7 @@
176 176   path:$doc.getURL($xcontext.action, "actionshowdetails=true&extensionid=${dependency.id.id}&extensionversion=${dependency.id.version}&section=XWiki.AddExtensions&xback=${escapetool.url($xback)}")||class="dependency-type-remote"]]##
177 177   #end
178 178   #if ("$!{namespace.key}" != '')
179 - (in wiki $namespace.key)
199 + $msg.get('extensions.info.dependency.wiki', [$namespace.key])
180 180   #else
181 181  
182 182   #end
... ... @@ -188,30 +188,6 @@
188 188   )))
189 189  #end
190 190  
191 -#macro (prepareInstall $extensionid $extensionversion $extensionsToInstall $extensionsToUpgrade $extensionsSuggested $coreExtensionsConflicts)
192 - #set ($extension = $extensionManager.resolve($extensionid, $extensionversion))
193 - #set ($extensionclass = "${extension.class}")
194 - #if (!$extensionclass.endsWith('CoreExtension'))
195 - #if (!$extension.isInstalled($extensionwiki))
196 - #set($installedExtension = $extensionManager.getInstalledExtension($extensionid, $extensionwiki))
197 - #if ($installedExtension && $versionManager.compareVersions($installedExtension.id.version, $extensionversion) > 0)
198 - #set($extensionsToUpgrade[$extension.id] = $extension)
199 - #else
200 - #set($extensionsToInstall[$extension.id] = $extension)
201 - #end
202 - #prepareInstallDependencies($extension, $extensionsToInstall, $extensionsToUpgrade, $extensionsSuggested, $coreExtensionsConflicts)
203 - #end
204 - #elseif ($versionManager.compareVersions($extensionversion, $extension.id.version) > 0)
205 - #set($coreExtensionsConflicts[$extension.id] = [$extension, $extensionversion])
206 - #end
207 -#end
208 -
209 -#macro (prepareInstallDependencies $extension $extensionsToInstall $extensionsToUpgrade $extensionsSuggested $coreExtensionsConflicts)
210 - #foreach ($dependency in $extension.dependencies)
211 - #prepareInstall($dependency.id, $dependency.version, $extensionsToInstall, $extensionsToUpgrade, $extensionsSuggested, $coreExtensionsConflicts)
212 - #end
213 -#end
214 -
215 215  #macro (printThrowable $throwable)
216 216   $throwable.class: #if(!$throwable.message)null#else$throwable.message#end
217 217  
... ... @@ -224,7 +224,11 @@
224 224  #end
225 225  
226 226  #macro (printJobLog $job)
227 - #foreach ($log in $job.status.log)
223 + #printStatusLog($job.status)
224 +#end
225 +
226 +#macro (printStatusLog $status)
227 + #foreach ($log in $status.log)
228 228   #set ($logLevel = $log.level.toString().toLowerCase())
229 229   {{$logLevel}}
230 230   $log.formattedMessage
... ... @@ -235,20 +235,6 @@
235 235   #end
236 236  #end
237 237  
238 -#macro (prepareUninstall $extensionid $extensionversion $extensionsToUninstall)
239 - #set ($discard = $extensionsToUninstall.add("${extensionid}-${extensionversion}"))
240 - #set ($backwardDependencies = $extensionManager.getBackwardDependencies($extensionid, $extensionversion))
241 - #prepareUninstallBackwardDependencies($backwardDependencies, $extensionsToUninstall)
242 -#end
243 -
244 -#macro(prepareUninstallBackwardDependencies $backwardDependencies $extensionsToUninstall)
245 - #foreach ($backwardDependencyMap in $backwardDependencies.values())
246 - #foreach ($backwardDependency in $backwardDependencyMap)
247 - #prepareUninstall($backwardDependency.id.id, $backwardDependency.id.version, $extensionsToUninstall)
248 - #end
249 - #end
250 -#end
251 -
252 252  #macro(computeXBack)
253 253   #set ($xback = "$!{request.xback}")
254 254   #if ($xback == '')
XWiki.JavaScriptExtension[0]
Code
... ... @@ -19,6 +19,7 @@
19 19   */
20 20   initialize : function () {
21 21   $$(this.extensionItemSelector + " form input[name='actionshowdetails']").invoke("observe", "click", this.loadExtensionDetails.bindAsEventListener(this));
22 + this.prepareAdvancedInstall();
22 22   },
23 23   /**
24 24   * Ajax loading of Extension details
... ... @@ -25,6 +25,7 @@
25 25   */
26 26   loadExtensionDetails : function(event) {
27 27   var form = event.element().form;
29 + var originalAction = form.action;
28 28  
29 29   event.stop();
30 30   // Ignore consecutive requests, just handle the first one
... ... @@ -68,6 +68,7 @@
68 68   var newExtensionItem = originalExtensionItem.next();
69 69   originalExtensionItem.remove();
70 70   // Attach behavior to the new element
73 + newExtensionItem.down('form').action = originalAction;
71 71   this.addExtensionElementBehavior(newExtensionItem);
72 72   }.bind(this),
73 73   onFailure : function (response) {
... ... @@ -84,7 +84,9 @@
84 84   // In the end: re-enable the button
85 85   form.__disabled = false;
86 86   // Remove the loading marker if it's still there (i.e. fetching failed)
87 - form.down(".extension-body.loading").remove();
90 + if (form && form.down(".extension-body.loading")) {
91 + form.down(".extension-body.loading").remove();
92 + }
88 88   }
89 89   }
90 90   );
... ... @@ -148,6 +148,35 @@
148 148   $(menuLink.getAttribute('href').substring(1)).next(this.extensionDetailsSectionSelector).setStyle({'display' : 'block'});
149 149   // ... also marking the clicked menu item as current
150 150   menuLink.up(this.extensionMenuItemSelector).addClassName(this.crtExtensionMenuItemMarker);
156 + },
157 +
158 + prepareAdvancedInstall : function() {
159 + var advancedSearchBox = $('advancedextensionsearch');
160 + if (!advancedSearchBox) {
161 + return;
162 + }
163 + var advancedSearchTrigger = advancedSearchBox.down('legend a');//ry :)
164 + if (advancedSearchTrigger) {
165 + var target = advancedSearchTrigger.up('legend').next();
166 + if (target) {
167 + advancedSearchTrigger.observe('click', function(event) {
168 + event.stop();
169 + advancedSearchTrigger.blur();
170 + target.toggleClassName('hidden');
171 + advancedSearchTrigger.toggleClassName('expanded');
172 + });
173 + var cancelTrigger = target.down('a.actioncancel');
174 + if (cancelTrigger) {
175 + cancelTrigger.observe('click', function(event) {
176 + event.stop();
177 + cancelTrigger.up('form').select('input[type=text]').each(function(input) {
178 + input.value = '';
179 + });
180 + advancedSearchTrigger.click();
181 + });
182 + }
183 + }
184 + }
151 151   }
152 152   });
153 153  
XWiki.StyleSheetExtension[0]
Code
... ... @@ -23,7 +23,7 @@
23 23   font-size: 1.2em;
24 24   font-weight: 700;
25 25   border: none;
26 - background: url("$xwiki.getSkinFile('icons/silk/cog.gif')") no-repeat scroll 0.2em 0.3em transparent;
26 + background: url("$xwiki.getSkinFile('icons/silk/cog.png')") no-repeat scroll 0.2em 0.3em transparent;
27 27   margin: 0 0 0 -1.8em;
28 28   padding: 2px 0 2px 1.8em;
29 29  }
... ... @@ -65,6 +65,8 @@
65 65  
66 66  .extension-description {
67 67   font-size: .9em;
68 + white-space: pre-wrap;
69 + word-wrap: break-word;
68 68  }
69 69  .extension-body {
70 70   background-color: $theme.highlightColor;
... ... @@ -107,33 +107,46 @@
107 107   list-style-type: none;
108 108  }
109 109  .dependency-type-core {
110 - background-image: url("$xwiki.getSkinFile('icons/silk/cog.gif')");
112 + background-image: url("$xwiki.getSkinFile('icons/silk/cog.png')");
111 111  }
112 112  .dependency-type-installed {
113 - background-image: url("$xwiki.getSkinFile('icons/silk/plugin.gif')");
115 + background-image: url("$xwiki.getSkinFile('icons/silk/plugin.png')");
114 114  }
115 115  .dependency-type-remote {
116 - background-image: url("$xwiki.getSkinFile('icons/silk/world.gif')");
118 + background-image: url("$xwiki.getSkinFile('icons/silk/world.png')");
117 117  }
118 118  .dependency-type-unknown {
119 - background-image: url("$xwiki.getSkinFile('icons/silk/plugin_error.gif')");
121 + background-image: url("$xwiki.getSkinFile('icons/silk/plugin_error.png')");
120 120  }
121 121  
122 -#advancedextensionsearch div {
123 - display: none;
124 -}
125 125  #advancedextensionsearch legend {
126 - font-size: .8em;
125 + font-size: .875em;
126 + margin: 0;
127 + border: 0 none;
128 + text-align: right;
127 127  }
130 +
128 128  #advancedextensionsearch legend a:after {
129 - content: ">>";
132 + content: " \bb";
130 130  }
134 +#advancedextensionsearch legend a.expanded:after {
135 + color: transparent;
136 +}
131 131  #advancedextensionsearch-body {
132 132   display: none;
133 133  }
134 -#advancedextensionsearch-body:target ~ div {
140 +#advancedextensionsearch-body:target ~ div.hidden {
135 135   display: block;
136 136  }
143 +div.advancedsearchpopup {
144 + box-shadow: 0 0 10px rgba(0, 0, 0, 0.25);
145 + padding: .3em .5em;
146 + position: absolute;
147 + right: 0;
148 + text-align: left;
149 + width: 95%;
150 + z-index: 200;
151 +}
137 137  /****************************** <Inner Menu> *************************/
138 138  
139 139  .innerMenu {
... ... @@ -309,7 +309,7 @@
309 309  }
310 310  
311 311  .changedRight {
312 - background: url("/xwiki/resources/icons/silk/bullet_black.gif") no-repeat scroll 0 center transparent;
327 + background: url("$xwiki.getSkinFile('icons/silk/bullet_black.png')") no-repeat scroll 0 center transparent;
313 313   font-weight: bold;
314 314  }
315 315  
... ... @@ -343,7 +343,15 @@
343 343  
344 344  .extHeaderLeft {
345 345   float: left;
361 + width: 50%;
346 346  }
363 +.extHeaderLeft .xform label {
364 + display: block;
365 + font-weight: bold;
366 +}
367 +.extHeaderLeft .xform .globalsearch {
368 + text-align: left;
369 +}
347 347  
348 348  .extHeaderBottom .extHeaderLeft{
349 349   padding-left: 2.5em;
... ... @@ -354,6 +354,8 @@
354 354   float: right;
355 355   cursor: pointer;
356 356   margin: 3px 0 -3px;
380 + position: relative;
381 + width: 40%;
357 357  }
358 358  
359 359  .extHeaderBottom .extHeaderRight {
... ... @@ -368,7 +368,7 @@
368 368  }
369 369  
370 370  .type {
371 - background: url("/xwiki/resources/icons/silk/bricks.gif") no-repeat scroll 0 0 transparent;
396 + background: url("$xwiki.getSkinFile('icons/silk/bricks.png')") no-repeat scroll 0 0 transparent;
372 372  }
373 373  
374 374  .extFilter {
... ... @@ -442,23 +442,23 @@
442 442  }
443 443  
444 444  .typeApp{
445 - background-image: url("/xwiki/resources/icons/silk/application.gif");
470 + background-image: url("$xwiki.getSkinFile('icons/silk/application.png')");
446 446  }
447 447  
448 448  .typeModule{
449 - background-image: url("/xwiki/resources/icons/silk/connect.gif");
474 + background-image: url("$xwiki.getSkinFile('icons/silk/connect.png')");
450 450  }
451 451  
452 452  .typeSkin{
453 - background-image: url("/xwiki/resources/icons/silk/layout_content.gif");
478 + background-image: url("$xwiki.getSkinFile('icons/silk/layout_content.png')");
454 454  }
455 455  
456 456  .typeMacro{
457 - background-image: url("/xwiki/resources/icons/silk/cog.gif");
482 + background-image: url("$xwiki.getSkinFile('icons/silk/cog.png')");
458 458  }
459 459  
460 460  .typePlugin{
461 - background-image: url("/xwiki/resources/icons/silk/plugin.gif");
486 + background-image: url("$xwiki.getSkinFile('icons/silk/plugin.png')");
462 462  }
463 463  
464 464  .extItem.statusInstalled {

Get Connected