diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminUsersSheet.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminUsersSheet.xml index 1f6b50f1a328..866c419a7c6c 100644 --- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminUsersSheet.xml +++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/AdminUsersSheet.xml @@ -244,7 +244,10 @@ #macro (maybeShowDeleteUserWarning $userReference $right) #countPagesLastModifiedBy($userReference) #if ($pageCount > 0) - <div class="box errormessage xform"> + {{/html}} + + {{error cssClass="xform"}} + {{html}} #set ($pageIndexReference = $services.model.createDocumentReference( $userReference.wikiReference.name, 'Main', 'AllDocs')) #set ($pageIndexURL = $xwiki.getURL($pageIndexReference) + '#|t=alldocs&doc.author=' + @@ -273,7 +276,10 @@ [$rightTranslation]))</span> </dd> </dl> - </div> + {{/html}} + {{/error}} + + {{html clean="false"}} #end #end diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ColorThemePropertyDisplayer.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ColorThemePropertyDisplayer.xml index b28294577634..c0d66c2af6cc 100644 --- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ColorThemePropertyDisplayer.xml +++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ColorThemePropertyDisplayer.xml @@ -129,7 +129,7 @@ <div class="XWikiColorThemeDisplayer"> #set ($colorThemeExists = $xwiki.exists($services.model.resolveDocument($value))) #if ("$!value" != '' && !$colorThemeExists) - <p class="errormessage">$services.localization.render('admin.colorthemes.invalidtheme', $escapetool.xml($value))</p> + #error(<p>$services.localization.render('admin.colorthemes.invalidtheme', $escapetool.xml($value))</p>) #end #if ($isSubWiki && (!$flamingoThemesFromMainWiki.isEmpty() || !$colibriThemesFromMainWiki.isEmpty())) diff --git a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClass.xml b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClass.xml index 322c77c2a4cd..644700af3c01 100644 --- a/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClass.xml +++ b/xwiki-platform-core/xwiki-platform-administration/xwiki-platform-administration-ui/src/main/resources/XWiki/ConfigurableClass.xml @@ -429,7 +429,7 @@ $xwiki.jsfx.use('js/xwiki/actionbuttons/actionButtons.js', true) $escapetool.xml($sectionDisplayName) </span> #if(!$hasAccess) - <br/><span class="errormessage">$services.localization.render('xe.admin.configurable.sectionIconNoAccess')</span> + <br/>#inlineError($services.localization.render('xe.admin.configurable.sectionIconNoAccess')) #end </a> </li> diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Macros.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Macros.xml index a30e619bcfc9..0b98b6123918 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Macros.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Macros.xml @@ -119,7 +119,7 @@ #displayAnnotationBoxButtons('edit') </form> #else - <div class="box infomessage">$services.localization.render('annotations.action.edit.error.notfound')</div> + #info($services.localization.render('annotations.action.edit.error.notfound')) #end </div> #end @@ -152,7 +152,7 @@ ##<div class="clearfloats"></div> #displayAnnotationFromReference($ann $mode $docRef) #else - <div class="box infomessage">$services.localization.render('annotations.action.view.error.notfound')</div> + #info($services.localization.render('annotations.action.view.error.notfound')) #end </div> #end diff --git a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Settings.xml b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Settings.xml index 3860c00c4fe9..1f2c9454db3a 100644 --- a/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Settings.xml +++ b/xwiki-platform-core/xwiki-platform-annotation/xwiki-platform-annotation-ui/src/main/resources/AnnotationCode/Settings.xml @@ -148,10 +148,10 @@ </div> <div class="clearfloats" /> #else - <div class="box infomessage">$services.localization.render('annotations.settings.error.wrongsyntax')</div> + #info($services.localization.render('annotations.settings.error.wrongsyntax')) #end #else - <div class="box infomessage">$services.localization.render('annotations.settings.error.notarget')</div> + #info($services.localization.render('annotations.settings.error.notarget')) #end </div> {{/html}} diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/ClassEditSheet.xml b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/ClassEditSheet.xml index eade57c3b882..aba665d1fbfe 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/ClassEditSheet.xml +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/ClassEditSheet.xml @@ -228,9 +228,7 @@ xcontext.put('propertyCustomDisplayer', new PropertyCustomDisplayer(xcontext)) ["#pageLink($sheetReference)"]) </span> #else - <span class="warningmessage"> - $services.localization.render('platform.appwithinminutes.classEditorMultipleSheetsWarning') - </span> + #inlineWarning($services.localization.render('platform.appwithinminutes.classEditorMultipleSheetsWarning')) #end </dd> <dt> @@ -705,7 +703,7 @@ xcontext.put('propertyCustomDisplayer', new PropertyCustomDisplayer(xcontext)) #updateAndSaveTranslations #if ($action == 'save') #if ($errorMessage) - <div class="box errormessage">$errorMessage</div> + #error($errorMessage) #elseif ("$!request.wizard" == 'true') ## Redirect to next wizard step. #set ($className = $stringtool.removeEnd($doc.fullName, 'Class')) diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/CreateApplication.xml b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/CreateApplication.xml index 836021546319..7af845d4df12 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/CreateApplication.xml +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/CreateApplication.xml @@ -140,14 +140,10 @@ </dl> #set ($appHomeRef = $services.model.resolveDocument('', 'default', $appReference)) #if ($appDescriptor || $xwiki.exists($appHomeRef) || $xwiki.exists($appClassRef)) - <div class="box warningmessage"> - $services.localization.render('platform.appwithinminutes.appNameIsUsedWarning') - </div> + #warning($services.localization.render('platform.appwithinminutes.appNameIsUsedWarning')) #end #if (!$services.security.authorization.hasAccess('script', $xcontext.userReference, $appHomeRef)) - <div class="box errormessage"> - $escapetool.xml($services.localization.render('platform.appwithinminutes.appHomePageNoScriptRight')) - </div> + #error($escapetool.xml($services.localization.render('platform.appwithinminutes.appHomePageNoScriptRight'))) #end #end #end diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/LiveTableEditSheet.xml b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/LiveTableEditSheet.xml index d594b89dbc2c..3d721de0c527 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/LiveTableEditSheet.xml +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/LiveTableEditSheet.xml @@ -337,9 +337,7 @@ #updateAndSaveIcon() #if ($action == 'save') #if ($errorMessage) - {{html clean="false"}} - <div class="box errormessage">$errorMessage</div> - {{/html}} + {{error}}$services.rendering.escape($errorMessage, 'xwiki/2.1'){{/error}} #else ## Redirect to view mode. $response.sendRedirect($doc.getURL()) diff --git a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/LiveTableViewSheet.xml b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/LiveTableViewSheet.xml index 6181193f9dbc..1d6e895f354c 100644 --- a/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/LiveTableViewSheet.xml +++ b/xwiki-platform-core/xwiki-platform-appwithinminutes/xwiki-platform-appwithinminutes-ui/src/main/resources/AppWithinMinutes/LiveTableViewSheet.xml @@ -183,14 +183,8 @@ #end #macro (renameAppModalBody) - <div class="box infomessage"> - $services.icon.renderHTML('info') - $services.localization.render('appWithinMinutes.renameApp.changeAppTitleInfo') - </div> - <div class="box warningmessage"> - $services.icon.renderHTML('warning') - $services.localization.render('appWithinMinutes.renameApp.regenerateAppCodeWarning') - </div> + #info($services.localization.render('appWithinMinutes.renameApp.changeAppTitleInfo')) + #warning($services.localization.render('appWithinMinutes.renameApp.regenerateAppCodeWarning')) <div class="hidden"> <input type="hidden" name="form_token" value="$!escapetool.xml($services.csrf.token)" /> <input type="hidden" name="oldAppReference" value="$escapetool.xml( @@ -242,7 +236,7 @@ #set ($classFullName = $doc.getValue('class')) #if ("$!classFullName" == '' || !$xwiki.exists($classFullName)) {{warning}} - {{translation key="platform.appwithinminutes.appHomePageMovedWarning"/}} + {{translation key="platform.appwithinminutes.appHomePageMovedWarning"/}} {{/warning}} #end diff --git a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/resources/templates/attachment/moveStatus.vm b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/resources/templates/attachment/moveStatus.vm index ffa47d70c2fd..e9167c233f5b 100644 --- a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/resources/templates/attachment/moveStatus.vm +++ b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/main/resources/templates/attachment/moveStatus.vm @@ -67,7 +67,5 @@ #end #else $response.setStatus(404) -
- $escapetool.xml($services.localization.render('attachment.move.status.notFound')) -
+ #error($escapetool.xml($services.localization.render('attachment.move.status.notFound'))) #end \ No newline at end of file diff --git a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/test/java/org/xwiki/attachment/MovePageTest.java b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/test/java/org/xwiki/attachment/MovePageTest.java index eff9247d12a2..d2375b7eaae6 100644 --- a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/test/java/org/xwiki/attachment/MovePageTest.java +++ b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/test/java/org/xwiki/attachment/MovePageTest.java @@ -21,6 +21,8 @@ import java.nio.charset.Charset; +import javax.inject.Named; + import org.apache.commons.io.IOUtils; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; @@ -31,7 +33,8 @@ import org.xwiki.attachment.internal.configuration.DefaultAttachmentConfiguration; import org.xwiki.attachment.script.AttachmentScriptService; import org.xwiki.csrf.script.CSRFTokenScriptService; -import org.xwiki.icon.IconManagerScriptServiceComponentList; +import org.xwiki.icon.IconManagerScriptService; +import org.xwiki.icon.internal.DefaultIconRenderer; import org.xwiki.job.JobExecutor; import org.xwiki.model.internal.reference.converter.EntityReferenceConverter; import org.xwiki.model.reference.DocumentReference; @@ -43,8 +46,8 @@ import org.xwiki.template.TemplateManager; import org.xwiki.template.script.TemplateScriptService; import org.xwiki.test.annotation.ComponentList; -import org.xwiki.test.page.IconSetup; import org.xwiki.test.page.PageTest; +import org.xwiki.test.junit5.mockito.MockComponent; import com.xpn.xwiki.doc.XWikiDocument; import com.xpn.xwiki.internal.model.reference.DocumentReferenceConverter; @@ -60,7 +63,6 @@ * @since 14.0RC1 */ @SecurityScriptServiceComponentList -@IconManagerScriptServiceComponentList @ComponentList({ ModelScriptService.class, AttachmentScriptService.class, @@ -80,8 +82,13 @@ class MovePageTest extends PageTest private TemplateManager templateManager; - @Mock - private CSRFTokenScriptService csrfScriptService; + @MockComponent(classToMock = CSRFTokenScriptService.class) + @Named("csrf") + private ScriptService csrfScriptService; + + @MockComponent(classToMock = IconManagerScriptService.class) + @Named("icon") + private ScriptService iconManagerScriptService; private ContextualAuthorizationManager contextualAuthorizationManager; @@ -89,12 +96,11 @@ class MovePageTest extends PageTest void setUp() throws Exception { this.templateManager = this.oldcore.getMocker().getInstance(TemplateManager.class); - // Initializes then environment for the icon extension. - IconSetup.setUp(this, "/icons/default.iconset"); - this.componentManager.registerComponent(ScriptService.class, "csrf", this.csrfScriptService); this.componentManager.registerMockComponent(JobExecutor.class); - when(this.csrfScriptService.isTokenValid(any(String.class))).thenReturn(true); + when(((CSRFTokenScriptService)this.csrfScriptService).isTokenValid(any(String.class))).thenReturn(true); this.contextualAuthorizationManager = this.componentManager.getInstance(ContextualAuthorizationManager.class); + when(((IconManagerScriptService)this.iconManagerScriptService).renderHTML(any(String.class))) + .then(invocationOnMock -> { return invocationOnMock.getArgument(0) + "Icon";}); } @Test @@ -122,7 +128,7 @@ void move() throws Exception this.context.setDoc(document); this.request.put("attachment", ATTACHMENT_NAME); Document render = Jsoup.parse(this.templateManager.render(MOVE_TEMPLATE)); - assertEquals("Space Page attachment.txt", render.getElementsByClass("breadcrumb").get(0).text()); + assertEquals("homeIcon Space Page attachment.txt", render.getElementsByClass("breadcrumb").get(0).text()); assertEquals(ATTACHMENT_NAME, render.getElementById("targetAttachmentNameTitle").val()); assertEquals("xwiki:Space.Page", render.getElementsByAttributeValue("name", "sourceLocation").val()); assertEquals(ATTACHMENT_NAME, render.getElementsByAttributeValue("name", "sourceAttachmentName").val()); @@ -153,7 +159,7 @@ void submitMoveTargetEditNotAllowed() throws Exception this.request.put("step", "2"); Document render = Jsoup.parse(this.templateManager.render(MOVE_TEMPLATE)); - assertEquals("error: attachment.move.targetNotWritable", + assertEquals("exclamationIcon error attachment.move.targetNotWritable", render.getElementsByClass("errormessage").get(0).text()); } @@ -164,7 +170,8 @@ void submitTargetAttachmentNameEmpty() throws Exception this.request.put("step", "2"); this.request.put("form_token", "a6DSv7pKWcPargoTvyx2Ww"); Document render = Jsoup.parse(this.templateManager.render(MOVE_TEMPLATE)); - assertEquals("error: attachment.move.emptyName", render.select(".errormessage").text()); + assertEquals("exclamationIcon error attachment.move.emptyName", + render.select(".errormessage").text()); } @Test @@ -194,7 +201,7 @@ void submitMoveTargetAlreadyExists() throws Exception this.request.put("step", "2"); Document render = Jsoup.parse(this.templateManager.render(MOVE_TEMPLATE)); - assertEquals("error: attachment.move.alreadyExists " + assertEquals("exclamationIcon error attachment.move.alreadyExists " + "[attachment.txt, Space.Target\"', /xwiki/bin/view/Space/Target%22%27]", render.getElementsByClass("errormessage").get(0).text()); } diff --git a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/test/java/org/xwiki/attachment/MoveStatusPagesTest.java b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/test/java/org/xwiki/attachment/MoveStatusPagesTest.java index c7bfa5c1d854..58716199221f 100644 --- a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/test/java/org/xwiki/attachment/MoveStatusPagesTest.java +++ b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/test/java/org/xwiki/attachment/MoveStatusPagesTest.java @@ -22,6 +22,8 @@ import java.util.List; import java.util.Map; +import javax.inject.Named; + import org.jsoup.Jsoup; import org.jsoup.nodes.Document; import org.jsoup.select.Elements; @@ -29,6 +31,7 @@ import org.junit.jupiter.api.Test; import org.mockito.Mock; import org.xwiki.attachment.refactoring.MoveAttachmentRequest; +import org.xwiki.icon.IconManagerScriptService; import org.xwiki.job.Request; import org.xwiki.job.event.status.JobProgress; import org.xwiki.job.event.status.JobStatus; @@ -40,6 +43,7 @@ import org.xwiki.template.TemplateManager; import org.xwiki.template.script.TemplateScriptService; import org.xwiki.test.annotation.ComponentList; +import org.xwiki.test.junit5.mockito.MockComponent; import org.xwiki.test.page.HTML50ComponentList; import org.xwiki.test.page.PageTest; import org.xwiki.test.page.XWikiSyntax21ComponentList; @@ -73,11 +77,17 @@ class MoveStatusPagesTest extends PageTest @Mock private JobScriptService jobScriptService; + @MockComponent(classToMock = IconManagerScriptService.class) + @Named("icon") + private ScriptService iconManagerScriptService; + @BeforeEach void setUp() throws Exception { this.templateManager = this.oldcore.getMocker().getInstance(TemplateManager.class); this.componentManager.registerComponent(ScriptService.class, "job", this.jobScriptService); + when(((IconManagerScriptService)this.iconManagerScriptService).renderHTML(any(String.class))) + .then(invocationOnMock -> invocationOnMock.getArgument(0) + "Icon"); } @Test @@ -85,7 +95,7 @@ void renderScriptStatusUnknown() throws Exception { this.request.put("moveId", "42"); Document render = Jsoup.parse(this.templateManager.render(MOVE_STATUS_TEMPLATE)); - assertEquals("attachment.move.status.notFound", render.select(".errormessage").text()); + assertEquals("exclamationIcon error attachment.move.status.notFound", render.select(".errormessage").text()); verify(this.jobScriptService).getJobStatus(List.of("refactoring", "moveAttachment", "42")); } diff --git a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/test/resources/icons/default.iconset b/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/test/resources/icons/default.iconset deleted file mode 100644 index b58e21cc1010..000000000000 --- a/xwiki-platform-core/xwiki-platform-attachment/xwiki-platform-attachment-api/src/test/resources/icons/default.iconset +++ /dev/null @@ -1,9 +0,0 @@ -## General settings -xwiki.iconset.type = image -xwiki.iconset.render.wiki = [[image:path:$xwiki.getSkinFile("icons/silk/${icon}.png")||data-xwiki-lightbox="false"]] -xwiki.iconset.render.html = Icon -xwiki.iconset.icon.url = $xwiki.getSkinFile("icons/silk/${icon}.png") - -chart-organisation = chart-organisation -cross = cross -home = home \ No newline at end of file diff --git a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-ui/src/main/resources/XWiki/Extension/Security/Code/Admin.xml b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-ui/src/main/resources/XWiki/Extension/Security/Code/Admin.xml index c90dcecd9ee8..5e42d94faac3 100644 --- a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-ui/src/main/resources/XWiki/Extension/Security/Code/Admin.xml +++ b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-ui/src/main/resources/XWiki/Extension/Security/Code/Admin.xml @@ -89,7 +89,9 @@ #set ($indexJobStatus = $services.job.getJobStatus(['extension_security'])) #if ($indexJobStatus) - <div class="box infomessage"> + ## We use the velocity macro here instead of the XWiki macro, in order to keep HTML in the content + ## With the XWiki macro, the progress bar is not properly rendered. + #define ($infoMessageContent) #if ($indexJobStatus.state != 'FINISHED') $escapetool.xml($services.localization.render('extension.security.indexed.started', [$xwiki.formatDate($indexJobStatus.startDate)])) #set ($discard = $xwiki.jsfx.use('uicomponents/job/job.js')) @@ -101,13 +103,14 @@ <div class="xcontent job-status" data-url="$escapetool.xml($jobStatusURL)"> #displayJobProgressBar($indexJobStatus, true) </div> - #else - $escapetool.xml($services.localization.render('extension.security.indexed.on', [$xwiki.formatDate($indexJobStatus.startDate)])) - #end -</div> #else - <div class="box warningmessage">$escapetool.xml($services.localization.render('extension.security.indexed.nojob'))</div> + $escapetool.xml($services.localization.render('extension.security.indexed.on', [$xwiki.formatDate($indexJobStatus.startDate)])) #end + #end + #info($infoMessageContent) + #else + {{warning}}{{translation key='extension.security.indexed.nojob'/}}{{/warning}} + #end {{/html}} #end {{/velocity}} diff --git a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-ui/src/main/resources/XWiki/Extension/Security/Code/NotificationAlert.xml b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-ui/src/main/resources/XWiki/Extension/Security/Code/NotificationAlert.xml index fc2cc7cc851e..7d3f40b0639b 100644 --- a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-ui/src/main/resources/XWiki/Extension/Security/Code/NotificationAlert.xml +++ b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-security/xwiki-platform-extension-security-ui/src/main/resources/XWiki/Extension/Security/Code/NotificationAlert.xml @@ -307,9 +307,7 @@ #set ($parameters = [$count, $htmlLink]) {{html wiki='false' clean='false'}} <li> - <div class='box errormessage'> - $services.localization.render('extension.security.notification.message', $parameters) - </div> + #error($services.localization.render('extension.security.notification.message', $parameters)) </li> {{/html}} #end diff --git a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-ui/src/main/resources/XWiki/Extensions.xml b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-ui/src/main/resources/XWiki/Extensions.xml index 7490015b453f..5e358dfe79a7 100644 --- a/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-ui/src/main/resources/XWiki/Extensions.xml +++ b/xwiki-platform-core/xwiki-platform-extension/xwiki-platform-extension-ui/src/main/resources/XWiki/Extensions.xml @@ -116,13 +116,13 @@ #if ($recommended) #if (!$extensions.iterator().hasNext()) - <div class="box warningmessage">$services.localization.render('extensions.search.recommended.fallback', ["<em>$!escapetool.xml($request.search)</em>"])</div> + #warning($services.localization.render('extensions.search.recommended.fallback', ["<em>$!escapetool.xml($request.search)</em>"])) ## Search again with the recommended filter #set ($extensions = $repository.search("$!request.search", $paginationParams.firstItem, $paginationParams.itemsPerPage)) #set ($totalHits = $extensions.totalHits) #set ($recommended = false) #elseif (!$customExtensionFilter) - <div class="box infomessage"> + #define ($infoHeaderContent) #if ($compatible) $services.localization.render('extensions.search.compatiblerecommended.disclaimer') #else @@ -142,12 +142,13 @@ <input type="submit" value="${escapetool.xml($services.localization.render('extensions.search.all.label'))}" class="btn btn-default"/> #end </form> - </div> + #end + #info("$infoHeaderContent") #end #end #if (!$extensions.iterator().hasNext()) - <div class="box infomessage">$services.localization.render($noResultsMessageKey, ["<em>$!escapetool.xml($request.search)</em>"])</div> + #info($services.localization.render($noResultsMessageKey, ["<em>$!escapetool.xml($request.search)</em>"])) #else #if ($totalHits && $totalHits > $paginationParams.itemsPerPage) #set ($hasPagination = true) @@ -165,39 +166,46 @@ #end #if ($indexed) + #define ($formContent) + <form action="${xwiki.relativeRequestURL}"> + #if ($request.section) + <input type="hidden" name="section" value="${escapetool.xml($request.section)}" /> + #end + <input type="hidden" name="search" value="$!{escapetool.xml($request.search)}" /> + <input type="hidden" name="recommended" value="$recommended" /> + <input type="hidden" name="indexed" value="$indexed" /> + <input type="hidden" name="compatible" value="$compatible" /> + #if ($indexJobStatus.state != 'RUNNING') + <input type="submit" value="${escapetool.xml($services.localization.render('extensions.search.indexed.reindex'))}" name="index_start" class="btn btn-default"/> + #end + </form> + #end #set ($indexJobStatus = $repository.getStatus("wiki:${xcontext.database}")) #if ($indexJobStatus) - <div class="box infomessage"> #if ($indexJobStatus.state != 'FINISHED') - $escapetool.xml($services.localization.render('extensions.search.indexed.started', [$xwiki.formatDate($indexJobStatus.startDate)])) #set ($discard = $xwiki.jsfx.use('uicomponents/job/job.js')) #set ($jobStatusURL = $doc.getURL('get', $escapetool.url({ 'xpage': 'job_status_json', 'outputSyntax': 'plain', 'jobId': $indexJobStatus.request.id }))) - <div class="xcontent job-status" data-url="$escapetool.xml($jobStatusURL)"> - #displayJobProgressBar($indexJobStatus, true) - </div> + #define ($infoFooterContent) + $escapetool.xml($services.localization.render('extensions.search.indexed.started', [$xwiki.formatDate($indexJobStatus.startDate)])) + <div class="xcontent job-status" data-url="$escapetool.xml($jobStatusURL)"> + #displayJobProgressBar($indexJobStatus, true) + </div> + #end #else - $escapetool.xml($services.localization.render('extensions.search.indexed.on', [$xwiki.formatDate($indexJobStatus.startDate)])) + #define ($infoFooterContent) + $escapetool.xml($services.localization.render('extensions.search.indexed.on', [$xwiki.formatDate($indexJobStatus.startDate)])) + #end #end + #info("$infoFooterContent + $formContent") #else - <div class="box warningmessage">$escapetool.xml($services.localization.render('extensions.search.indexed.nojob')) + #warning("$escapetool.xml($services.localization.render('extensions.search.indexed.nojob')) + $formContent") #end - <form action="${xwiki.relativeRequestURL}"> - #if ($request.section) - <input type="hidden" name="section" value="${escapetool.xml($request.section)}" /> - #end - <input type="hidden" name="search" value="$!{escapetool.xml($request.search)}" /> - <input type="hidden" name="recommended" value="$recommended" /> - <input type="hidden" name="indexed" value="$indexed" /> - <input type="hidden" name="compatible" value="$compatible" /> - #if ($indexJobStatus.state != 'RUNNING') - <input type="submit" value="${escapetool.xml($services.localization.render('extensions.search.indexed.reindex'))}" name="index_start" class="btn btn-default"/> - #end - </form> - </div> #end #end </div> diff --git a/xwiki-platform-core/xwiki-platform-filter/xwiki-platform-filter-ui/src/main/resources/Filter/FilterStreamJobJSON.xml b/xwiki-platform-core/xwiki-platform-filter/xwiki-platform-filter-ui/src/main/resources/Filter/FilterStreamJobJSON.xml index f885600b8afe..9e09cd5ab1a0 100644 --- a/xwiki-platform-core/xwiki-platform-filter/xwiki-platform-filter-ui/src/main/resources/Filter/FilterStreamJobJSON.xml +++ b/xwiki-platform-core/xwiki-platform-filter/xwiki-platform-filter-ui/src/main/resources/Filter/FilterStreamJobJSON.xml @@ -43,13 +43,11 @@ #set($finished = $jobStatus.state.name() == 'FINISHED') #if ($finished) #if (!$jobStatus.logTail.hasLogLevel('ERROR')) - <div class="box successmessage"> - Done. - </div> + ## Remove when the following issue is resolved: + ## TODO XWIKI-22710: Add translations for FilterStreamJobJSON + #success('Done.') #else - <div class="box errormessage"> - Error has been found during the conversion ! - </div> + #error('Error has been found during the conversion !') #end #end #end diff --git a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/copy.vm b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/copy.vm index b1db398c8c34..0ce44650c147 100644 --- a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/copy.vm +++ b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/copy.vm @@ -292,9 +292,7 @@ #end #else $response.setStatus(404) -
- $services.localization.render('core.copy.status.notFound') -
+ #error($services.localization.render('core.copy.status.notFound')) #end #end diff --git a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/editobject.vm b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/editobject.vm index 007ae3cf90c8..46c2ac6b8f5c 100644 --- a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/editobject.vm +++ b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/editobject.vm @@ -30,6 +30,21 @@ * Displays a class name without its space prefix. XML-escapes the output. *# #macro(cleanClassname $classname)$!{escapetool.xml($classname.substring($classname.indexOf('.')).substring(1))}#end + +#* + * Displays a warning box, with an extra class. Note that the implementation of this macro should be very close to the + * one of the #warning macro defined in the web templates macros. + * This is the only place where we use this extraClass feature, so the implementation is contained here. + * Note that the exact context this content is rendered in is not fixed, using the XWiki macro + * would have ended up in unstable behaviour. + *# +#macro (_warningWithExtraClass $text $extraClass) +
+ $services.icon.renderHTML('warning') + $services.localization.render('warning') +
$text
+
+#end ## #* * Display an object @@ -79,7 +94,7 @@ #set ($deprecatedProperties = $class.getDeprecatedObjectProperties($obj)) #if ($deprecatedProperties.size() > 0) -
+ #define ($warningMessageContent) $services.localization.render('core.editors.object.removeDeprecatedProperties.info', [${escapetool.xml($class.name)}])
#foreach ($prop in $deprecatedProperties) @@ -94,7 +109,8 @@ $services.localization.render('core.editors.object.removeDeprecatedProperties.link')
- + #end + #_warningWithExtraClass($warningMessageContent 'deprecatedProperties') #end #end @@ -245,14 +261,14 @@ #if ($mustSync) #break #end #end #if ($mustSync) -
+ #define ($warningMessageContent) $services.localization.render('core.editors.object.removeDeprecatedProperties.all.info')
- $services.icon.renderHTML('cross') $services.localization.render('core.editors.object.removeDeprecatedProperties.all.link')
-
+ #end + #_warningWithExtraClass($warningMessageContent 'deprecatedProperties') #end #end ## checkPropertyDeprecation ## diff --git a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/macros.vm b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/macros.vm index 71b2b9e83647..ad776b41fcdd 100644 --- a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/macros.vm +++ b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/macros.vm @@ -249,7 +249,7 @@ #livetable_filters($collist $colprops $classname) -
$services.localization.render('platform.livetable.environmentCannotLoadTableMessage')
+ #warning($services.localization.render('platform.livetable.environmentCannotLoadTableMessage')) diff --git a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/renameStatus.vm b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/renameStatus.vm index 6f1bb689fc52..d1ecdd24f77c 100644 --- a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/renameStatus.vm +++ b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/renameStatus.vm @@ -94,7 +94,5 @@ #end #else $response.setStatus(404) -
- $services.localization.render('core.rename.status.notFound') -
+ #error($services.localization.render('core.rename.status.notFound')) #end diff --git a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/restore.vm b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/restore.vm index e6ecd268972c..b8cfa4b54477 100644 --- a/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/restore.vm +++ b/xwiki-platform-core/xwiki-platform-flamingo/xwiki-platform-flamingo-skin/xwiki-platform-flamingo-skin-resources/src/main/resources/flamingo/restore.vm @@ -96,8 +96,7 @@ #end #else $response.setStatus(404) -
- $services.localization.render('core.restore.status.notFound') + #error($services.localization.render('core.restore.status.notFound'))
#end #end diff --git a/xwiki-platform-core/xwiki-platform-invitation/xwiki-platform-invitation-ui/src/main/resources/Invitation/InvitationCommon.xml b/xwiki-platform-core/xwiki-platform-invitation/xwiki-platform-invitation-ui/src/main/resources/Invitation/InvitationCommon.xml index c25358801da4..0bd75bdd2a8b 100644 --- a/xwiki-platform-core/xwiki-platform-invitation/xwiki-platform-invitation-ui/src/main/resources/Invitation/InvitationCommon.xml +++ b/xwiki-platform-core/xwiki-platform-invitation/xwiki-platform-invitation-ui/src/main/resources/Invitation/InvitationCommon.xml @@ -119,18 +119,20 @@ ## Tell the user that some of the email addresses are invalid. #if($invalidAddresses && $invalidAddresses.size() > 0) <p class="invalid-address-message"> - <span class="errormessage"> + {{/html}} + {{error}} #if($recips.size() == 1) ## The email address given is invalid and will not be sent to. - $escapetool.xml($services.localization.render('xe.invitation.displayMessage.theAddressIsInvalid')) + $services.rendering.escape($services.localization.render('xe.invitation.displayMessage.theAddressIsInvalid'), 'xwiki/2.1') #else #if($invalid.size() > 1) - $escapetool.xml($services.localization.render('xe.invitation.displayMessage.someAddressesAreInvalid', [$invalidAddresses.size()])) + $services.rendering.escape($services.localization.render('xe.invitation.displayMessage.someAddressesAreInvalid', [$invalidAddresses.size()]), 'xwiki/2.1') #else - $escapetool.xml($services.localization.render('xe.invitation.displayMessage.anAddressesIsInvalid')) + $services.rendering.escape($services.localization.render('xe.invitation.displayMessage.anAddressesIsInvalid'), 'xwiki/2.1') #end #end - </span> + {{/error}} + {{html wiki=false clean=false}} </p> #end ## Subject: diff --git a/xwiki-platform-core/xwiki-platform-office/xwiki-platform-office-ui/src/main/resources/XWiki/OfficeImporter.xml b/xwiki-platform-core/xwiki-platform-office/xwiki-platform-office-ui/src/main/resources/XWiki/OfficeImporter.xml index cc45a0bcf04d..3407cc93792e 100644 --- a/xwiki-platform-core/xwiki-platform-office/xwiki-platform-office-ui/src/main/resources/XWiki/OfficeImporter.xml +++ b/xwiki-platform-core/xwiki-platform-office/xwiki-platform-office-ui/src/main/resources/XWiki/OfficeImporter.xml @@ -148,14 +148,17 @@ #end #macro (officeImporterForm_overwriteContent) - <dt class="box warningmessage"> - <label> - <input name="overwriteContent" type="checkbox" value="true" checked /> - $escapetool.xml($services.localization.render('office.import.overwriteContent')) - </label> - <span class="xHint"> - $escapetool.xml($services.localization.render('office.import.overwriteContent.hint')) - </span> + <dt> + #define ($warningMessageContent) + <label> + <input name="overwriteContent" type="checkbox" value="true" checked /> + $escapetool.xml($services.localization.render('office.import.overwriteContent')) + </label> + <span class="xHint"> + $escapetool.xml($services.localization.render('office.import.overwriteContent.hint')) + </span> + #end + #warning($warningMessageContent) </dt> <dd> #officeImporterForm_confirmationModal({ diff --git a/xwiki-platform-core/xwiki-platform-office/xwiki-platform-office-ui/src/main/resources/XWiki/OfficeImporterAdmin.xml b/xwiki-platform-core/xwiki-platform-office/xwiki-platform-office-ui/src/main/resources/XWiki/OfficeImporterAdmin.xml index e0be57986906..427af336cdd6 100644 --- a/xwiki-platform-core/xwiki-platform-office/xwiki-platform-office-ui/src/main/resources/XWiki/OfficeImporterAdmin.xml +++ b/xwiki-platform-core/xwiki-platform-office/xwiki-platform-office-ui/src/main/resources/XWiki/OfficeImporterAdmin.xml @@ -91,10 +91,7 @@ ### Info about the place to modify the configuration ### <p> - <span class="box infomessage"> - ## TODO: we do not escape this string because we inject some HTML code. We should improve it. - $services.localization.render('admin.ooserver.options.source', ['<span class="monospace">xwiki.properties</span>']) - </span> + #info($escapetool.html($services.localization.render('admin.ooserver.options.source', ['__VALUE__'])).replaceFirst('__VALUE__', '<span class="monospace">xwiki.properties</span>')) </p> <dl> ### @@ -150,7 +147,7 @@ #if ("$!homePath" != '') $escapetool.html($homePath) #else - <div class="box errormessage">$escapetool.html($services.localization.render('office.configuration.serverpath.error.notSetNotAutodetected'))</div> + #error($escapetool.html($services.localization.render('office.configuration.serverpath.error.notSetNotAutodetected'))) #end </dd> ### diff --git a/xwiki-platform-core/xwiki-platform-oldcore/src/main/resources/ApplicationResources.properties b/xwiki-platform-core/xwiki-platform-oldcore/src/main/resources/ApplicationResources.properties index c52cd5b76028..516bfc5e76b0 100644 --- a/xwiki-platform-core/xwiki-platform-oldcore/src/main/resources/ApplicationResources.properties +++ b/xwiki-platform-core/xwiki-platform-oldcore/src/main/resources/ApplicationResources.properties @@ -420,6 +420,8 @@ Error=Error error=Error warning=Warning Warning=Warning +info=Information +success=Success uploadavatarfile=Upload new user photo setthisavatar=Set this photo notauser=This is not a user! diff --git a/xwiki-platform-core/xwiki-platform-skin/xwiki-platform-skin-ui/src/main/resources/SkinsCode/XWikiSkinsSheet.xml b/xwiki-platform-core/xwiki-platform-skin/xwiki-platform-skin-ui/src/main/resources/SkinsCode/XWikiSkinsSheet.xml index b37222669c8c..145535bc98ac 100644 --- a/xwiki-platform-core/xwiki-platform-skin/xwiki-platform-skin-ui/src/main/resources/SkinsCode/XWikiSkinsSheet.xml +++ b/xwiki-platform-core/xwiki-platform-skin/xwiki-platform-skin-ui/src/main/resources/SkinsCode/XWikiSkinsSheet.xml @@ -99,9 +99,7 @@ {{html}} <noscript> - <div class="box errormessage"> - $escapetool.xml($services.localization.render('skin.sheet.nojs', ['LINK_START', 'LINK_END', 'XWiki.XWikiSkinFileOverrideClass'])).replace('LINK_START', "<a href='$escapetool.xml($doc.getURL('edit', 'editor=object'))'>").replace('LINK_END', '</a>') - </div> + #error($escapetool.xml($services.localization.render('skin.sheet.nojs', ['LINK_START', 'LINK_END', 'XWiki.XWikiSkinFileOverrideClass'])).replace('LINK_START', "<a href='$escapetool.xml($doc.getURL('edit', 'editor=object'))'>").replace('LINK_END', '</a>')) </noscript> {{/html}} diff --git a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-ui/src/main/java/org/xwiki/test/ui/po/diff/RenderedChanges.java b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-ui/src/main/java/org/xwiki/test/ui/po/diff/RenderedChanges.java index ef026898c196..acb66c61d5de 100644 --- a/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-ui/src/main/java/org/xwiki/test/ui/po/diff/RenderedChanges.java +++ b/xwiki-platform-core/xwiki-platform-test/xwiki-platform-test-ui/src/main/java/org/xwiki/test/ui/po/diff/RenderedChanges.java @@ -51,7 +51,8 @@ public RenderedChanges(WebElement container) public boolean hasNoChanges() { return !getDriver().findElementsWithoutWaiting(this.container, - By.xpath("//div[@class = 'infomessage' and contains(text(), 'No changes')]")).isEmpty() + By.xpath("//div[contains(@class, 'infomessage')]" + + "/descendant-or-self::*[contains(text(),'No changes')]")).isEmpty() && getChangedBlocks().isEmpty(); } diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/changesdoc.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/changesdoc.vm index a72067369c87..3594381c5843 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/changesdoc.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/changesdoc.vm @@ -134,13 +134,9 @@ #if ($includes.contains('renderedChanges')) #set ($htmlDiff = $services.diff.html.unified($origdoc.renderedContent, $newdoc.renderedContent)) #if ($htmlDiff == '') -
- $escapetool.xml($services.localization.render('web.history.changes.noChanges')) -
+ #info($escapetool.xml($services.localization.render('web.history.changes.noChanges'))) #elseif ("$!htmlDiff" == '') -
- $escapetool.xml($services.localization.render('web.history.changes.failedToCompute')) -
+ #error($escapetool.xml($services.localization.render('web.history.changes.failedToCompute'))) #else #if (($origdoc.isRestricted() || $newdoc.isRestricted()) && ($services.user.allProperties.type == 'ADVANCED' || $stringtool.contains($htmlDiff, 'xwikirenderingerror'))) diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/children.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/children.vm index 1029fa49a5d2..2ed282f5d52e 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/children.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/children.vm @@ -109,9 +109,7 @@ ####################################################### #macro(displayChildren) #if ($services.parentchild.isParentChildMechanismEnabled()) -
- $services.localization.render('core.children.warningParentChild') -
+ #warning($services.localization.render('core.children.warningParentChild')) #end #if ($doc.documentReference.name != 'WebHome') diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/createinline.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/createinline.vm index 07c8c0f5616e..aa882dcc9e82 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/createinline.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/createinline.vm @@ -84,8 +84,8 @@ #set ($disableModalConfirmation = false) ## check if the exception is about the non-allowed spaces for template #if("$!exception" != '' && $exception.code == 11016) -
- #set($allowedSpaces = $createAllowedSpaces) + #set($allowedSpaces = $createAllowedSpaces) + #define ($errorMessageContent) #if ($allowedSpaces.size() == 1) $escapetool.xml($services.localization.render('core.create.template.allowedspace.inline', [$templateProvider, $allowedSpaces.get(0)])) @@ -93,7 +93,8 @@ $escapetool.xml($services.localization.render('core.create.template.allowedspaces.inline', [$templateProvider, $allowedSpaces.toString()])) #end -
+ #end + #error($errorMessageContent) #set ($disableModalConfirmation = true) #end ## check if the exception is about the document which already exists diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/distribution/macros.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/distribution/macros.vm index 3611685a9ee5..9b234bbfb967 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/distribution/macros.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/distribution/macros.vm @@ -121,9 +121,9 @@

#if ($request.previousUIId && $request.previousUIVersion && $wiki == $request.wiki) ## We shouldn't get here unless JavaScript is disabled (the form is submitted with AJAX normally). -
$services.localization.render('extensions.advancedSearch.noResults', + #info($services.localization.render('extensions.advancedSearch.noResults', ["$!escapetool.xml($request.previousUIId)", - "$!escapetool.xml($request.previousUIVersion)"])
+ "$!escapetool.xml($request.previousUIVersion)"])) #end #end diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/edit_macros.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/edit_macros.vm index 196b41c5891b..67f712c43082 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/edit_macros.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/edit_macros.vm @@ -41,15 +41,11 @@ #set ($discard = $editConfirmation.put('title', $services.localization.render($titleKey))) #define ($message) #if ($checkResult.isError()) -
- #set ($messageKey = 'platform.core.editConfirmation.errors') - $escapetool.xml($services.localization.render($messageKey)) -
+ #set ($messageKey = 'platform.core.editConfirmation.errors') + #error($escapetool.xml($services.localization.render($messageKey))) #else -
- #set ($messageKey = 'platform.core.editConfirmation.warnings') - $escapetool.xml($services.localization.render($messageKey)) -
+ #set ($messageKey = 'platform.core.editConfirmation.warnings') + #warning($escapetool.xml($services.localization.render($messageKey))) #end #if (!$checkResult.errorMessages.isEmpty()) #foreach ($block in $checkResult.errorMessages) diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/extension.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/extension.vm index b35b836fcd0a..d478e221fbc9 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/extension.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/extension.vm @@ -740,7 +740,7 @@ $namespace## 'installplan': 'extensions.install.error.alreadyInstalled', 'uninstallplan': 'extensions.uninstall.error.notInstalled' }) -
$services.localization.render($emptyPlanMessageKeys.get($plan.jobType))
+ #info($services.localization.render($emptyPlanMessageKeys.get($plan.jobType))) #else
#foreach($entry in $extensionsByAction.entrySet()) @@ -1186,15 +1186,15 @@ $namespace## #if ($extension) #displayExtension($extension, $readOnly) #else -
$services.localization.render('extensions.advancedSearch.noResults', + #info($services.localization.render('extensions.advancedSearch.noResults', ["$!escapetool.xml($request.extensionId)", - "$!escapetool.xml($request.extensionVersion)"])
+ "$!escapetool.xml($request.extensionVersion)"])) ## DEBUG START: Check if there is any job status associated with the specified extension. #getExtensionJobStatus($request.extensionId, $request.extensionVersion $jobStatus) #if ($jobStatus) ## Normally we shouldn't get here. -
We found an extension job associated with the missing extension:
+ #error("We found an extension job associated with the missing extension:") #displayExtensionJobStatus($jobStatus) #end ## DEBUG STOP @@ -1358,7 +1358,7 @@ $namespace## ## Send error back. $response.sendError(400, $errorMessage) #else -
$errorMessage #printThrowable($lastError)
+ #error("$errorMessage #printThrowable($lastError)") #end #else ## Redirect to extension display. @@ -1689,9 +1689,7 @@ $doc.getURL($xcontext.action, $escapetool.url($parameters))## #end ## #if ($outdated.isEmpty() && $invalid.isEmpty()) -
- $services.localization.render('platform.extension.updater.noUpdatesAvailable') -
+ #success($services.localization.render('platform.extension.updater.noUpdatesAvailable')) #else #displayExtensionUpdaterPlanActionByNamespace($invalid 'invalid') #displayExtensionUpdaterPlanActionByNamespace($outdated 'outdated') diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/extensionHistory.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/extensionHistory.vm index 98945c096e23..279dcb6a2a68 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/extensionHistory.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/extensionHistory.vm @@ -120,7 +120,7 @@ #set ($message = $services.localization.render('extension.history.currentJobInfo', ["$jobType", "$jobId"])) #end -
$services.icon.renderHTML('info') $message
+ #info($message) #end #end @@ -233,10 +233,7 @@
@@ -465,10 +462,7 @@ #end #else -
- $services.icon.renderHTML('info') - $services.localization.render('extension.history.replayPlan.empty') -
+ #info($services.localization.render('extension.history.replayPlan.empty')) #end
#if ($hasGlobalAdmin && $records && $records.size() > 0) @@ -491,10 +485,7 @@ #displayExtensionHistoryReplayStatus($replayJobStatus) #else

$services.localization.render('extension.history.replayStatus.title')

-
- $services.icon.renderHTML('info') - $services.localization.render('extension.history.replayStatus.notFound', [$replayJobId]) -
+ #info($services.localization.render('extension.history.replayStatus.notFound', [$replayJobId])) #end #end diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job/question/ExtensionBreakingQuestion.form.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job/question/ExtensionBreakingQuestion.form.vm index 999089c70152..5a1cf83354e7 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job/question/ExtensionBreakingQuestion.form.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job/question/ExtensionBreakingQuestion.form.vm @@ -18,14 +18,10 @@ ## 02110-1301 USA, or see the FSF site: http://www.fsf.org. ## --------------------------------------------------------------------------- #template('job/question/macros.vm') - #questionHeader() - #set ($jobStatus = $job.status) #set ($question = $jobStatus.question) - -
-

$services.icon.renderHTML('warning') $escapetool.xml($services.localization.render("job.question.ExtensionBreakingQuestion.${job.type}.title"))

+#define ($warningMessageContent)

$escapetool.xml($services.localization.render("job.question.ExtensionBreakingQuestion.${job.type}.explanation"))

#set ($url = $xwiki.getURL($services.model.createDocumentReference('', 'XWiki', 'XWikiPreferences'), 'admin', 'section=XWiki.Extensions&search=&repo=installed')) #set ($link = '') @@ -42,5 +38,8 @@
#questionButtons($jobStatus) - +#end + +#_genericMessage("$warningMessageContent", 'warning', 'warning', 'warning', false, 'deleteWarningExtensions', $escapetool.xml($services.localization.render("job.question.ExtensionBreakingQuestion.${job.type}.title"))) + #questionFooter() diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job/question/XClassBreakingQuestion.form.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job/question/XClassBreakingQuestion.form.vm index 53bf7e360303..7f1ea4e42071 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job/question/XClassBreakingQuestion.form.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job/question/XClassBreakingQuestion.form.vm @@ -24,8 +24,7 @@ #questionHeader() #if ($question.isRefactoringForbidden()) -
-

$services.icon.renderHTML('warning') $escapetool.xml($services.localization.render("job.question.XClassBreakingQuestion.${job.type}.forbiddenTitle"))

+#define ($errorMessageContent)

$escapetool.xml($services.localization.render("job.question.XClassBreakingQuestion.${job.type}.forbiddenExplanation"))

@@ -43,10 +42,10 @@
-
+#end +#_genericMessage("$errorMessageContent", 'error', 'exclamation', 'error', false, 'deleteWarningXClass', $escapetool.xml($services.localization.render("job.question.XClassBreakingQuestion.${job.type}.forbiddenTitle"))) #else -
-

$services.icon.renderHTML('warning') $escapetool.xml($services.localization.render("job.question.XClassBreakingQuestion.${job.type}.title"))

+#define ($warningMessageContent)

$escapetool.xml($services.localization.render("job.question.XClassBreakingQuestion.${job.type}.explanation"))

#if ($question.isObjectsPotentiallyHidden())

$escapetool.xml($services.localization.render("job.question.XClassBreakingQuestion.objectsPotentiallyMissingWarning"))

@@ -62,7 +61,7 @@
#questionButtons($jobStatus) - #end - -#questionFooter() \ No newline at end of file +#_genericMessage("$warningMessageContent", 'warning', 'warning', 'warning', false, 'deleteWarningXClass', $escapetool.xml($services.localization.render("job.question.XClassBreakingQuestion.${job.type}.title"))) +#end +#questionFooter() diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job_macros.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job_macros.vm index 0aa586c76f69..9649817b607b 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job_macros.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job_macros.vm @@ -113,20 +113,17 @@ $services.template.execute('logging_macros.vm') #macro (jobFinishedMessage $status $translationPrefix $successKey $errorKey $canceledKey $warningKey) #if ($status.error) #set($messageKeys = [$errorKey, "${translationPrefix}.finish.error", "job.status.${status.jobType}.error", 'job.status.error']) - #set($messageClass = 'errormessage') + #error($services.localization.render($messageKeys)) #elseif ($status.canceled) #set($messageKeys = [$canceledKey, "${translationPrefix}.finish.canceled", "job.status.${status.jobType}.canceled", 'job.status.canceled']) - #set($messageClass = 'warningmessage') + #warning($services.localization.render($messageKeys)) #elseif ($status.logTail.hasLogLevel('error')) #set($messageKeys = [$warningKey, "${translationPrefix}.finish.warning", "job.status.${status.jobType}.warning", 'job.status.warning']) - #set($messageClass = 'warningmessage') + #warning($services.localization.render($messageKeys)) #else #set($messageKeys = [$successKey, "${translationPrefix}.finish.success", "job.status.${status.jobType}.success", 'job.status.success']) - #set($messageClass = 'successmessage') + #success($services.localization.render($messageKeys)) #end -
- $services.localization.render($messageKeys) -
#end #macro (displayJobFinishedMessage $status $successKey $errorKey $canceledKey $translationPrefix) diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job_status_json.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job_status_json.vm index f5a029f9d6fb..d953d00635a9 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job_status_json.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/job_status_json.vm @@ -28,7 +28,5 @@ #outputJobStatusJSON($jobStatus, $translationPrefix) #else $response.setStatus(404) -
- $escapetool.xml($services.localization.render("${translationPrefix}.notFound")) -
+ #error($escapetool.xml($services.localization.render("${translationPrefix}.notFound"))) #end \ No newline at end of file diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/macros.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/macros.vm index 0046153f558e..86763c1ab3ea 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/macros.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/macros.vm @@ -953,16 +953,57 @@ $html ### message ### +### This velocity macro aims at providing an element similar to a XWiki Macro-Message in places where this XWikiMacro +### cannot be used. +#macro(_genericMessage $text $classAffix $iconName $prettyNameKey $isInline $extraClass $title) + <#if($isInline)span#{else}div#end class="box ${classAffix}message $!{extraClass}"> + $services.icon.renderHTML($iconName) + $services.localization.render($prettyNameKey) +
+ #if("$!title" != "")
$!title
#end + $text +
+ +#end + +## Display a block warning message with the content $text. #macro(warning $text) -
$services.localization.render('warning'): $text
+#_genericMessage($text 'warning' 'warning' 'warning') #end +## Display an inline warning message with the content $text. +#macro(inlineWarning $text) +#_genericMessage($text 'warning' 'warning' 'warning' true) +#end + +## Display a block error message with the content $text. #macro(error $text) -
$services.localization.render('error'): $text
+#_genericMessage($text 'error' 'exclamation' 'error') +#end + +## Display an inline error message with the content $text. +#macro(inlineError $text) + #_genericMessage($text 'error' 'exclamation' 'error' true) #end +## Display a block info message with the content $text. #macro(info $text) -
$text
+#_genericMessage($text 'info' 'info' 'info') +#end + +## Display an inline info message with the content $text. +#macro(inlineInfo $text) + #_genericMessage($text 'info' 'info' 'info' true) +#end + +## Display a block success message with the content $text. +#macro(success $text) +#_genericMessage($text 'success' 'check' 'success') +#end + +## Display an inline success message with the content $text. +#macro(inlineSuccess $text) + #_genericMessage($text 'success' 'check' 'success' true) #end #macro(message $text) @@ -1516,7 +1557,7 @@ $Msz MB## #livetable_filters($collist $colprops $classname) -
$services.localization.render('platform.livetable.environmentCannotLoadTableMessage')
+ #warning($services.localization.render('platform.livetable.environmentCannotLoadTableMessage')) diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/passwd.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/passwd.vm index f70ac35ce4f0..16bf66a2af31 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/passwd.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/passwd.vm @@ -18,7 +18,7 @@ ## 02110-1301 USA, or see the FSF site: http://www.fsf.org. ## --------------------------------------------------------------------------- ### -### Change a user's password +### Change a user's password from the user preferences. ### ### #template("startpage.vm") @@ -61,7 +61,7 @@ #end #end #if($request.xwikipassword && $isValidPassword) - $services.localization.render('platform.core.profile.passwd.success') + #inlineInfo($services.localization.render('platform.core.profile.passwd.success'))
$services.localization.render('platform.core.profile.passwd.return') #end #if(!$isValidPassword) diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/renameStatus.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/renameStatus.vm index 8686b09af05e..638d08f655a1 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/renameStatus.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/renameStatus.vm @@ -96,7 +96,5 @@ #end #else $response.setStatus(404) -
- $services.localization.render('core.rename.status.notFound') -
+ #error($services.localization.render('core.rename.status.notFound')) #end diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/uploadfailure.vm b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/uploadfailure.vm index 9a9e61064b41..62015e018cc0 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/uploadfailure.vm +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/main/resources/templates/uploadfailure.vm @@ -49,7 +49,7 @@ $response.setStatus(500)##

$services.localization.render('core.action.upload.failure.failedFiles')

#end diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/CreateInlinePageTest.java b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/CreateInlinePageTest.java index 6f8aaa215d5c..aeea48e19a9b 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/CreateInlinePageTest.java +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/CreateInlinePageTest.java @@ -23,6 +23,7 @@ import java.util.stream.Stream; import javax.inject.Inject; +import javax.inject.Named; import org.jsoup.Jsoup; import org.jsoup.nodes.Document; @@ -31,8 +32,12 @@ import org.junit.jupiter.api.Test; import org.junit.jupiter.params.ParameterizedTest; import org.junit.jupiter.params.provider.MethodSource; +import org.mockito.invocation.InvocationOnMock; +import org.xwiki.icon.IconManagerScriptService; import org.xwiki.model.reference.DocumentReference; +import org.xwiki.script.service.ScriptService; import org.xwiki.template.TemplateManager; +import org.xwiki.test.junit5.mockito.MockComponent; import org.xwiki.test.page.PageTest; import org.xwiki.velocity.VelocityManager; @@ -41,6 +46,8 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNotNull; +import static org.mockito.ArgumentMatchers.any; +import static org.mockito.Mockito.when; /** * Tests the {@code createinline.vm} template. @@ -61,6 +68,10 @@ class CreateInlinePageTest extends PageTest private static final String CREATE_EXCEPTION_VELOCITY_KEY = "createException"; private static final String ERROR_MESSAGE_CLASS = "errormessage"; + + @MockComponent(classToMock = IconManagerScriptService.class) + @Named("icon") + private ScriptService iconManagerScriptService; @Inject private VelocityManager velocityManager; @@ -76,6 +87,9 @@ void setup() // Set a context document to avoid problems this.oldcore.getXWikiContext().setDoc(new XWikiDocument(new DocumentReference("xwiki", "space", "page"))); + + when(((IconManagerScriptService)this.iconManagerScriptService).renderHTML(any(String.class))) + .then(invocationOnMock -> { return invocationOnMock.getArgument(0) + "Icon";}); } /** @@ -159,10 +173,12 @@ void templateProviderRestrictionErrorEscaping(List allowedSpaces) throws String expectedMessage; if (allowedSpaces.size() == 1) { - expectedMessage = String.format("core.create.template.allowedspace.inline [%s, %s]", + expectedMessage = String.format("exclamationIcon error " + + "core.create.template.allowedspace.inline [%s, %s]", provider, allowedSpaces.get(0)); } else { - expectedMessage = String.format("core.create.template.allowedspaces.inline [%s, %s]", + expectedMessage = String.format("exclamationIcon error " + + "core.create.template.allowedspaces.inline [%s, %s]", provider, allowedSpaces); } assertEquals(expectedMessage, errormessage.text()); diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/EditMacrosPageTest.java b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/EditMacrosPageTest.java index ea7927a8acf6..6f27b2e9a93d 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/EditMacrosPageTest.java +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/EditMacrosPageTest.java @@ -23,6 +23,7 @@ import java.util.Map; import java.util.Optional; +import javax.inject.Named; import javax.script.ScriptContext; import javax.servlet.http.HttpSession; @@ -31,6 +32,7 @@ import org.junit.jupiter.api.BeforeEach; import org.junit.jupiter.api.Test; import org.mockito.Mock; +import org.xwiki.icon.IconManagerScriptService; import org.xwiki.model.reference.DocumentReference; import org.xwiki.model.validation.edit.EditConfirmationChecker; import org.xwiki.model.validation.edit.EditConfirmationCheckerResult; @@ -45,6 +47,7 @@ import org.xwiki.rendering.internal.configuration.RenderingConfigClassDocumentConfigurationSource; import org.xwiki.rendering.syntax.Syntax; import org.xwiki.script.ScriptContextManager; +import org.xwiki.script.service.ScriptService; import org.xwiki.template.internal.macro.TemplateMacro; import org.xwiki.test.annotation.ComponentList; import org.xwiki.test.junit5.mockito.MockComponent; @@ -56,6 +59,7 @@ import static org.junit.jupiter.api.Assertions.assertEquals; import static org.junit.jupiter.api.Assertions.assertNull; +import static org.mockito.ArgumentMatchers.any; import static org.mockito.Mockito.when; /** @@ -81,6 +85,10 @@ class EditMacrosPageTest extends PageTest @MockComponent private ReplaceCharacterEntityNameValidationConfiguration replaceCharacterEntityNameValidationConfiguration; + @MockComponent(classToMock = IconManagerScriptService.class) + @Named("icon") + private ScriptService iconManagerScriptService; + @Mock private HttpSession httpSession; @@ -88,6 +96,8 @@ class EditMacrosPageTest extends PageTest void setUp() { this.request.setSession(this.httpSession); + when(((IconManagerScriptService)this.iconManagerScriptService).renderHTML(any(String.class))) + .then(invocationOnMock -> { return invocationOnMock.getArgument(0) + "Icon";}); } @Test @@ -126,7 +136,8 @@ void oneWarningCheck() throws Exception Map editConfirmation = (Map) scriptContext.getAttribute("editConfirmation"); assertEquals("warning", editConfirmation.get("title")); Document message = Jsoup.parse(editConfirmation.get("message")); - assertEquals("platform.core.editConfirmation.warnings", message.selectFirst(".warningmessage").text()); + assertEquals("warningIcon warning " + + "platform.core.editConfirmation.warnings", message.selectFirst(".warningmessage").text()); assertEquals("Warning", message.selectFirst("#warning1").text()); assertEquals("cancel", editConfirmation.get("reject")); assertEquals("forcelock", editConfirmation.get("confirm")); @@ -160,7 +171,8 @@ void twoWarningsTwoErrorsCheck() throws Exception assertEquals("error", editConfirmation.get("title")); Document message = Jsoup.parse(editConfirmation.get("message")); // This test is not to test the structure, but to verify the order in which the text are displayed. - assertEquals("platform.core.editConfirmation.errors Error 1 Error 2 platform.core.editConfirmation" + assertEquals("exclamationIcon error " + + "platform.core.editConfirmation.errors Error 1 Error 2 platform.core.editConfirmation" + ".additionalWarnings Warning 1 Warning 2", message.text()); assertEquals("cancel", editConfirmation.get("reject")); assertNull(editConfirmation.get("confirm")); @@ -216,7 +228,7 @@ void oneErrorEditForced() throws Exception Map editConfirmation = (Map) scriptContext.getAttribute("editConfirmation"); assertEquals("error", editConfirmation.get("title")); Document message = Jsoup.parse(editConfirmation.get("message")); - assertEquals("platform.core.editConfirmation.errors", message.selectFirst(".errormessage").text()); + assertEquals("exclamationIcon error platform.core.editConfirmation.errors", message.selectFirst(".errormessage").text()); assertEquals("Error", message.selectFirst("#error1").text()); assertEquals("cancel", editConfirmation.get("reject")); assertNull(editConfirmation.get("confirm")); diff --git a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/JobStatusJSONPageTest.java b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/JobStatusJSONPageTest.java index 7eae4f61a2c0..6fe6cf901102 100644 --- a/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/JobStatusJSONPageTest.java +++ b/xwiki-platform-core/xwiki-platform-web/xwiki-platform-web-templates/src/test/java/org/xwiki/web/JobStatusJSONPageTest.java @@ -46,9 +46,13 @@ void nonExistingJob() throws Exception String output = this.templateManager.render("job_status_json.vm"); - assertThat(output, equalToCompressingWhiteSpace(""" -
- <test>.notFound + assertThat(output.strip(), equalToCompressingWhiteSpace(""" +
+ $services.icon.renderHTML($iconName) + error +
+ <test>.notFound +
""")); } } diff --git a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-ui/xwiki-platform-wiki-ui-mainwiki/src/main/resources/WikiManager/CreateWiki.xml b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-ui/xwiki-platform-wiki-ui-mainwiki/src/main/resources/WikiManager/CreateWiki.xml index c33e1af07e43..7221a43fe0f3 100644 --- a/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-ui/xwiki-platform-wiki-ui-mainwiki/src/main/resources/WikiManager/CreateWiki.xml +++ b/xwiki-platform-core/xwiki-platform-wiki/xwiki-platform-wiki-ui/xwiki-platform-wiki-ui-mainwiki/src/main/resources/WikiManager/CreateWiki.xml @@ -562,7 +562,7 @@ #set ($discard = $xwiki.ssfx.use('uicomponents/logging/logging.css', true)) #set ($discard = $xwiki.jsfx.use('uicomponents/logging/logging.js', true)) #set ($status = $services.wiki.creationjob.getJobStatus($request.wikiname)) - {{html}} + {{html clean="false"}} <form class="xform" method="post" action="$doc.getURL()"> <input type="hidden" name="wikiId" id="wikiId" value="$!escapetool.xml($request.wikiname)" /> <input type="hidden" name="csrf" id="csrf" value="$!escapetool.xml($services.csrf.getToken())" /> @@ -583,15 +583,21 @@ </div> #end #set($hasErrors = $status.logTail.hasLogLevel('ERROR')) - <p class="successmessage box #if($status.error || $state != 'FINISHED')hidden#end" id="successMessage"> - $services.localization.render('platform.wiki.create.wizard.step.creation.complete', ["<strong>$escapetool.xml($request.wikiname)</strong>"]) - </p> - <p class="warningmessage box #if(!$hasErrors || $state != 'FINISHED')hidden#end" id="errorlogMessage"> - $services.localization.render('platform.wiki.create.wizard.step.creation.errorlog', ["<strong>$escapetool.xml($request.wikiname)</strong>"]) - </p> - <p class="errormessage box #if(!$status.error || $state != 'FINISHED')hidden#end" id="errorMessage"> - $services.localization.render('platform.wiki.create.wizard.step.creation.error', ["<strong>$escapetool.xml($request.wikiname)</strong>"]) - </p> + {{/html}} + + {{success cssClass="successMessage #if($status.error || $state != 'FINISHED')hidden#end"}} + {{html}}$services.localization.render('platform.wiki.create.wizard.step.creation.complete', ["<strong>$escapetool.xml($request.wikiname)</strong>"]){{/html}} + {{/success}} + + {{warning cssClass="errorlogMessage #if(!$hasErrors || $state != 'FINISHED')hidden#end"}} + {{html}}$services.localization.render('platform.wiki.create.wizard.step.creation.errorlog', ["<strong>$escapetool.xml($request.wikiname)</strong>"]){{/html}} + {{/warning}} + + {{error cssClass="errorMessage #if(!$status.error || $state != 'FINISHED')hidden#end"}} + {{html}}$services.localization.render('platform.wiki.create.wizard.step.creation.error', ["<strong>$escapetool.xml($request.wikiname)</strong>"]){{/html}} + {{/error}} + + {{html clean="false"}} </div> ## Log #template('logging_macros.vm') @@ -660,18 +666,24 @@ #end #else #set($wikiId = $request.wikiId) - {{html}} + {{html clean="false"}} #wizardHeader($services.localization.render('platform.wiki.create.wizard.step.cleaningUp')) <div class="wizard-body"> + {{/html}} #if($request.deleteOk) - <p class="successmessage box"> - $services.localization.render('platform.wiki.create.wizard.step.cleaningup.success', ["<strong>$wikiId</strong>"]) - </p> + + {{success}} + {{html}}$services.localization.render('platform.wiki.create.wizard.step.cleaningup.success', ["<strong>$wikiId</strong>"]){{/html}} + {{/success}} + #else - <p class="errormessage box"> - $services.localization.render('platform.wiki.create.wizard.step.cleaningup.error', ["<strong>$wikiId</strong>"]) - </p> + + {{error}} + {{html}}$services.localization.render('platform.wiki.create.wizard.step.cleaningup.error', ["<strong>$wikiId</strong>"]){{/html}} + {{/error}} + #end + {{html clean="false"}} </div> </form> {{/html}} @@ -1126,13 +1138,13 @@ XWiki.WikiCreationStatusBar = Class.create({ $('ui-progress').addClassName('hidden'); // We need to know if we have error if (response.error.length > 0) { - $('errorMessage').removeClassName('hidden'); + $('.errorMessage').removeClassName('hidden'); $('cleanUp').removeClassName('hidden'); } else { // Success - $('successMessage').removeClassName('hidden'); + $('.successMessage').removeClassName('hidden'); if (response.hasErrorLog) { - $('errorlogMessage').removeClassName('hidden'); + $('.errorlogMessage').removeClassName('hidden'); $('cleanUp').removeClassName('hidden'); } $('finalize').removeClassName('hidden');