From bdb7c93a55236b9822a0cfba10df51313075a6dd Mon Sep 17 00:00:00 2001 From: Alex O'Ree Date: Fri, 7 Nov 2025 15:46:25 -0500 Subject: [PATCH 1/6] JSPWIKI-1198 installed plugins are now available in the autocomplete menu --- .../org/apache/wiki/api/plugin/Plugin.java | 28 +++++ .../wiki/plugin/DefaultPluginManager.java | 18 +++ .../org/apache/wiki/plugin/PluginManager.java | 10 ++ .../wiki/search/DefaultSearchManager.java | 76 +++++++++++- .../org/apache/wiki/search/SearchManager.java | 3 + .../src/main/javascript/Wiki.Snips.JSPWiki.js | 111 ++++++++++++------ .../main/javascript/Wiki.Snips.Markdown.js | 31 ++++- jspwiki-portable/build.xml | 7 ++ jspwiki-portable/pom.xml | 6 + jspwiki-test-plugin/pom.xml | 21 ++++ jspwiki-test-plugin/readme.txt | 22 ++++ .../test/plugin/JspwikiTestPlugin.java | 37 ++++++ .../org.apache.wiki.api.plugin,Plugin | 1 + .../src/main/resources/ini/jspwiki_module.xml | 8 ++ .../src/main/scripts/jspwiki-common.js | 3 +- .../src/main/scripts/wiki-edit/Snipe.Snips.js | 55 +++++---- jspwiki-war/src/main/scripts/wiki/Wiki.js | 10 +- pom.xml | 1 + 18 files changed, 380 insertions(+), 68 deletions(-) create mode 100644 jspwiki-test-plugin/pom.xml create mode 100644 jspwiki-test-plugin/readme.txt create mode 100644 jspwiki-test-plugin/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java create mode 100644 jspwiki-test-plugin/src/main/resources/META-INF/services/org.apache.wiki.api.plugin,Plugin create mode 100644 jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java b/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java index 950496a41a..c37cd30d63 100644 --- a/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java +++ b/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java @@ -48,5 +48,33 @@ public interface Plugin { * @throws PluginException In case anything goes wrong. */ String execute( Context context, Map< String, String > params ) throws PluginException; + + /** + * Provides the ability for a plugin to provide a suggestion or template + * for execution within a wiki page. Default returns just the FQCN of the + * plugin, which should enable it to fire off, however no parameters are + * plugin. + * + * Example: com.company.Plugin inputParamter='test' + * + * @since 3.0.0 + * @return String + */ + default String getSnipExample() { + return this.getClass().getCanonicalName(); + } + /** + * Provides the ability for a plugin to provide it's display name that + * is visible via the [{}] autocomplete/suggestion mechanism within the + * editor. + * + * Example: Calls My Custom plugin + * + * @since 3.0.0 + * @return String + */ + default String getDisplayName() { + return this.getClass().getSimpleName(); + } } diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java index 8e082d4406..a7a39bfe08 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java @@ -59,11 +59,13 @@ Licensed to the Apache Software Foundation (ASF) under one import java.util.ArrayList; import java.util.Collection; import java.util.HashMap; +import java.util.HashSet; import java.util.List; import java.util.Map; import java.util.NoSuchElementException; import java.util.Properties; import java.util.ResourceBundle; +import java.util.Set; import java.util.StringTokenizer; /** @@ -715,4 +717,20 @@ public Plugin newWikiPlugin( final String pluginName, final ResourceBundle rb ) return plugin; } + @Override + public List getDiscoveredPlugins() { + Collection pluginModules = modules(); + Set plugins = new HashSet<>(); + for(WikiModuleInfo plugin : pluginModules) { + try { + Plugin p = (Plugin) Class.forName(((WikiPluginInfo)plugin).getClassName()).getDeclaredConstructor().newInstance(); + plugins.add(p); + } catch (Throwable ex) { + LOG.error("failed to load class " + plugin.getName(), ex); + } + } + + return new ArrayList<>(plugins); + } + } diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/PluginManager.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/PluginManager.java index aa5f752fb1..552e4c97b9 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/PluginManager.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/PluginManager.java @@ -25,6 +25,7 @@ Licensed to the Apache Software Foundation (ASF) under one import org.apache.wiki.modules.ModuleManager; import java.io.IOException; +import java.util.List; import java.util.Map; import java.util.ResourceBundle; @@ -129,4 +130,13 @@ public interface PluginManager extends ModuleManager { */ Plugin newWikiPlugin( String pluginName, ResourceBundle rb ) throws PluginException; + /** + * gets a list of plugins available via the java service provider discovery + * mechanism. Helpful for populating autocomplete capabilities. + * + * @since 3.0.0 + * @return list of plugin instances. + */ + List getDiscoveredPlugins(); + } diff --git a/jspwiki-main/src/main/java/org/apache/wiki/search/DefaultSearchManager.java b/jspwiki-main/src/main/java/org/apache/wiki/search/DefaultSearchManager.java index c31ae6fda1..1d6b8076fe 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/search/DefaultSearchManager.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/search/DefaultSearchManager.java @@ -54,6 +54,9 @@ Licensed to the Apache Software Foundation (ASF) under one import java.util.Map; import java.util.Properties; import java.util.Set; +import org.apache.wiki.api.plugin.Plugin; +import org.apache.wiki.plugin.PluginManager; +import static org.apache.wiki.search.SearchManager.PLUGIN_SEARCH; /** @@ -80,8 +83,79 @@ public DefaultSearchManager( final Engine engine, final Properties properties ) // TODO: Replace with custom annotations. See JSPWIKI-566 WikiAjaxDispatcherServlet.registerServlet( JSON_SEARCH, new JSONSearch() ); + WikiAjaxDispatcherServlet.registerServlet( PLUGIN_SEARCH, new PluginSearch() ); } + /** + * Provides a JSON AJAX API to the JSPWiki Plugin discovery mechanism, + * primarily used for [{}] based auto complete + */ + public class PluginSearch implements WikiAjaxServlet { + + public static final String AJAX_ACTION_PLUGINS = "plugins"; + public static final int DEFAULT_MAX_RESULTS = 20; + public int maxResults = DEFAULT_MAX_RESULTS; + + /** {@inheritDoc} */ + @Override + public String getServletMapping() { + return PLUGIN_SEARCH; + } + public static class SimpleSnipData { + public String displayName; + public String snip; + } + + /** {@inheritDoc} */ + @Override + public void service( final HttpServletRequest req, + final HttpServletResponse resp, + final String actionName, + final List< String > params ) throws IOException { + String result = "[]"; + String itemId = null; + if( actionName != null && StringUtils.isNotBlank( actionName ) ) { + if( !params.isEmpty() ) { + itemId = params.get( 0 ); + LOG.debug( "itemId=" + itemId ); + if( params.size() > 1 ) { + itemId = params.get( 0 ); + final String maxResultsParam = params.get( 1 ); + LOG.debug( "maxResultsParam=" + maxResultsParam ); + if( StringUtils.isNotBlank( maxResultsParam ) && StringUtils.isNumeric( maxResultsParam ) ) { + maxResults = Integer.parseInt( maxResultsParam ); + } + } + } + + if( actionName.equals( AJAX_ACTION_PLUGINS ) ) { + LOG.debug( "Calling getPlugins() START" ); + PluginManager mgr = m_engine.getManager(PluginManager.class); + final List< Plugin > plugins = mgr.getDiscoveredPlugins(); + List< SimpleSnipData > callResults = new ArrayList<>(); + for (Plugin p : plugins) { + if ( itemId != null && StringUtils.isNotBlank(itemId) ) { + if ( !p.getSnipExample().startsWith(itemId) ) { + continue; + } + } else { + SimpleSnipData data = new SimpleSnipData(); + data.snip = p.getSnipExample(); + data.displayName = p.getDisplayName(); + callResults.add(data); + } + if ( callResults.size() > maxResults ) + break; + } + LOG.debug( "Calling getSuggestions() DONE. " + callResults.size() ); + result = AjaxUtil.toJson( callResults ); + } + } + LOG.debug( "result=" + result ); + resp.getWriter().write( result ); + } + } + /** * Provides a JSON AJAX API to the JSPWiki Search Engine. */ @@ -160,7 +234,7 @@ public List< String > getSuggestions( String wikiName, final int maxLength ) { final String cleanWikiName = MarkupParser.cleanLink(wikiName).toLowerCase() + filename; final String oldStyleName = MarkupParser.wikifyLink(wikiName).toLowerCase() + filename; final Set< String > allPages = m_engine.getManager( ReferenceManager.class ).findCreated(); - + int counter = 0; for( final Iterator< String > i = allPages.iterator(); i.hasNext() && counter < maxLength; ) { final String p = i.next(); diff --git a/jspwiki-main/src/main/java/org/apache/wiki/search/SearchManager.java b/jspwiki-main/src/main/java/org/apache/wiki/search/SearchManager.java index a483212b13..cb241c3aa3 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/search/SearchManager.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/search/SearchManager.java @@ -44,6 +44,9 @@ public interface SearchManager extends PageFilter, InternalModule, WikiEventList /** The name of the JSON object that manages search. */ String JSON_SEARCH = "search"; + + /** the name of the Plugin discovery endpoint */ + String PLUGIN_SEARCH = "plugins"; /** * Returns the SearchProvider used. diff --git a/jspwiki-main/src/main/javascript/Wiki.Snips.JSPWiki.js b/jspwiki-main/src/main/javascript/Wiki.Snips.JSPWiki.js index 0a5dfbcadf..634348ce62 100644 --- a/jspwiki-main/src/main/javascript/Wiki.Snips.JSPWiki.js +++ b/jspwiki-main/src/main/javascript/Wiki.Snips.JSPWiki.js @@ -44,7 +44,7 @@ Function: snippets */ Wiki.Snips = { - + ready: false, // Snipe predefined commands find: { }, undo: { event: "undo" }, @@ -519,41 +519,43 @@ Wiki.Snips = { //lback: "(^|[^\\[])\\[{([^\\[\\]\\n\\r]*)(?:\\|\\])?$", match: "^([^\\[\\]\\n\\r]*)\\}\\]" }, - pluginDlg: [ Dialog.Selection, { - caption: "dialog.plugin".localize(), - body: { - "ALLOW {permission} principal ": "Page Access Rights ", - "SET {name}='value'":"Set a Wiki variable", - "${varname}":"Get a Wiki variable", - "If name='{value}' page='pagename' exists='true' contains='regexp'\n\nbody\n":"IF plugin", - "SET keywords={keyword1, keyword2}":"Set Page Keywords", - "SET alias='{pagename}'":"Set Page Alias", - "SET page-styles='prettify-nonum table-condensed-fit'":"Set Page Styles", - "SET sidebar='off'":"Hide Sidebar", - //"Table":"Advanced Tables", - //"Groups":"View all Wiki Groups", - "":"", - "Counter":"Insert a simple counter", - "PageViewPlugin":"Count Views of this page", - "CurrentTimePlugin format='yyyy mmm-dd'":"Insert Current Time", - "Denounce":"Denounce a link", - "Image src='{image.jpg}'":"Insert an Image ", - "IndexPlugin":"Index of all pages", - - "InsertPage page='{pagename}'":"Insert another Page", - "ListLocksPlugin":"List page locks", - "RecentChangesPlugin":"Displays the recent changed pages", - "ReferringPagesPlugin page='{pagename}' separator=',' include='regexp' exclude='regexp'":"Incoming Links (referring pages)", - "ReferredPagesPlugin page='{pagename}' type='local|external|attachment' depth='1..8' include='regexp' exclude='regexp'":"Outgoing Links (referred pages)", - "Search query='{Janne}' max='10'":"Insert a Search query", - "TableOfContents ":"Table Of Contents ", - "UndefinedPagesPlugin":"List pages that are missing", - "UnusedPagesPlugin":"List pages that have been orphaned", - "WeblogArchivePlugin":"Displays a list of older weblog entries", - "WeblogEntryPlugin":"Makes a new weblog entry", - "WeblogPlugin page='{pagename}' startDate='300604' days='30' maxEntries='30' allowComments='false'":"Builds a weblog" - } - }] + pluginDlg: [ Dialog.Selection, + { + caption: "dialog.plugin".localize(), + body: { + "ALLOW {permission} principal ": "Page Access Rights ", + "SET {name}='value'":"Set a Wiki variable", + "${varname}":"Get a Wiki variable", + "If name='{value}' page='pagename' exists='true' contains='regexp'\n\nbody\n":"IF plugin", + "SET keywords={keyword1, keyword2}":"Set Page Keywords", + "SET alias='{pagename}'":"Set Page Alias", + "SET page-styles='prettify-nonum table-condensed-fit'":"Set Page Styles", + "SET sidebar='off'":"Hide Sidebar", + //"Table":"Advanced Tables", + //"Groups":"View all Wiki Groups", + "":"", + "Counter":"Insert a simple counter", + "PageViewPlugin":"Count Views of this page", + "CurrentTimePlugin format='yyyy mmm-dd'":"Insert Current Time", + "Denounce":"Denounce a link", + "Image src='{image.jpg}'":"Insert an Image ", + "IndexPlugin":"Index of all pages", + + "InsertPage page='{pagename}'":"Insert another Page", + "ListLocksPlugin":"List page locks", + "RecentChangesPlugin":"Displays the recent changed pages", + "ReferringPagesPlugin page='{pagename}' separator=',' include='regexp' exclude='regexp'":"Incoming Links (referring pages)", + "ReferredPagesPlugin page='{pagename}' type='local|external|attachment' depth='1..8' include='regexp' exclude='regexp'":"Outgoing Links (referred pages)", + "Search query='{Janne}' max='10'":"Insert a Search query", + "TableOfContents ":"Table Of Contents ", + "UndefinedPagesPlugin":"List pages that are missing", + "UnusedPagesPlugin":"List pages that have been orphaned", + "WeblogArchivePlugin":"Displays a list of older weblog entries", + "WeblogEntryPlugin":"Makes a new weblog entry", + "WeblogPlugin page='{pagename}' startDate='300604' days='30' maxEntries='30' allowComments='false'":"Builds a weblog" + } + } + ] }, @@ -628,5 +630,40 @@ Wiki.Snips = { } }] + }, + +//load up any server defined plugins +//note this file is ran through wro4j maven plugin which is limited ES6 support +//thus the usage of super old xhr requests and var vs let. +//see https://github.com/wro4j/wro4j/issues/1178 + + loadPlugins: function(){ + console.info("loading plugin list"); + const pluginDiscoveryRequest2 = new XMLHttpRequest(); + pluginDiscoveryRequest2.open('GET', 'ajax/plugins/plugins', true); // true for asynchronous + pluginDiscoveryRequest2.onload = function() { + if (pluginDiscoveryRequest2.status >= 200 && pluginDiscoveryRequest2.status < 300) { + var data = JSON.parse(pluginDiscoveryRequest2.responseText); + //Wiki.Snips.pluginDlg["TableOfContents "] = "Table Of Contents "; + for (var i=0; i < data.length; i++) { + Wiki.Snips.pluginDlg.pluginDlg[1].body[data[i].snip] = data[i].displayName; + } + Wiki.Snips.ready = true; + console.info("plugin list loaded"); + } else { + console.error('Request failed. Returned status of ' + pluginDiscoveryRequest2.status); + Wiki.Snips.ready = true; + } + }; + pluginDiscoveryRequest2.onerror = function() { + console.error('Network error occurred'); + Wiki.Snips.ready = true; + }; + pluginDiscoveryRequest2.send(); } -} + + +}; +window.addEventListener("load", function() { + Wiki.Snips.loadPlugins(); +}); \ No newline at end of file diff --git a/jspwiki-markdown/src/main/javascript/Wiki.Snips.Markdown.js b/jspwiki-markdown/src/main/javascript/Wiki.Snips.Markdown.js index 32bc5ce11a..94ccd7a0bd 100644 --- a/jspwiki-markdown/src/main/javascript/Wiki.Snips.Markdown.js +++ b/jspwiki-markdown/src/main/javascript/Wiki.Snips.Markdown.js @@ -44,7 +44,7 @@ Function: snippets */ Wiki.Snips = { - + ready: false, // Snipe predefined commands find: { }, undo: { event: "undo" }, @@ -628,5 +628,32 @@ Wiki.Snips = { } }] + }, + + loadPlugins: function(){ + const pluginDiscoveryRequest2 = new XMLHttpRequest(); + pluginDiscoveryRequest2.open('GET', 'ajax/plugins/plugins', true); // true for asynchronous + pluginDiscoveryRequest2.onload = function() { + if (pluginDiscoveryRequest2.status >= 200 && pluginDiscoveryRequest2.status < 300) { + var data = JSON.parse(pluginDiscoveryRequest2.responseText); + //Wiki.Snips.pluginDlg["TableOfContents "] = "Table Of Contents "; + for (var i=0; i < data.length; i++) { + Wiki.Snips.pluginDlg.pluginDlg[1].body[data[i].snip] = data[i].displayName; + } + Wiki.Snips.ready = true; + } else { + console.error('Request failed. Returned status of ' + pluginDiscoveryRequest2.status); + Wiki.Snips.ready = true; + } + }; + pluginDiscoveryRequest2.onerror = function() { + console.error('Network error occurred'); + Wiki.Snips.ready = true; + }; + pluginDiscoveryRequest2.send(); } -} +}; + +window.addEventListener("load", function() { + Wiki.Snips.loadPlugins(); +}); \ No newline at end of file diff --git a/jspwiki-portable/build.xml b/jspwiki-portable/build.xml index 1c8fb31215..cd140f7fe8 100644 --- a/jspwiki-portable/build.xml +++ b/jspwiki-portable/build.xml @@ -69,12 +69,19 @@ + + + + + + + diff --git a/jspwiki-portable/pom.xml b/jspwiki-portable/pom.xml index b675204d54..43367750ff 100644 --- a/jspwiki-portable/pom.xml +++ b/jspwiki-portable/pom.xml @@ -257,6 +257,12 @@ war provided + + ${project.groupId} + jspwiki-test-plugin + ${project.version} + provided + org.apache.tomcat.embed diff --git a/jspwiki-test-plugin/pom.xml b/jspwiki-test-plugin/pom.xml new file mode 100644 index 0000000000..d7f8f4c8fb --- /dev/null +++ b/jspwiki-test-plugin/pom.xml @@ -0,0 +1,21 @@ + + + 4.0.0 + + org.apache.jspwiki + jspwiki-builder + 3.0.0-SNAPSHOT + + jspwiki-test-plugin + jar + + + ${project.groupId} + jspwiki-main + ${project.version} + + + + org.apache.jspwiki.jspwiki.test.plugin.JspwikiTestPlugin + + \ No newline at end of file diff --git a/jspwiki-test-plugin/readme.txt b/jspwiki-test-plugin/readme.txt new file mode 100644 index 0000000000..3997bd9f9b --- /dev/null +++ b/jspwiki-test-plugin/readme.txt @@ -0,0 +1,22 @@ +This test plugin was created for testing the newer (v3.0.0) API +changes that provide plugin discovery and the ability to get +an example available in the UI. + +In case that's not clear, after installing this plugin, then +starting the server and editing a page, ctrl+space will show +a snippet (refered to as a "snip" in the code) that provides +a usage example in the browser. This helps to eliminate guess +work and provides a better user experience. + +To deploy this plugin: + mvn clean install +Then + copy target\*.jar $JSPWIKI_HOME +Where $JSPWIKI_HOME is something like + tomcat/webapps/jspwiki/WEB-INF/lib +Then start up the tomcat server/container that you're running. + +That should be it. Enjoy. + +Remember this is just a test plugin, meaning it's only to +demonstrate the proof of concept. It really doesn't do much. \ No newline at end of file diff --git a/jspwiki-test-plugin/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java b/jspwiki-test-plugin/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java new file mode 100644 index 0000000000..112555ed17 --- /dev/null +++ b/jspwiki-test-plugin/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java @@ -0,0 +1,37 @@ +/* + * Copyright 2025 The Apache Software Foundation. + * + * Licensed under the Apache License, Version 2.0 (the "License"); + * you may not use this file except in compliance with the License. + * You may obtain a copy of the License at + * + * http://www.apache.org/licenses/LICENSE-2.0 + * + * Unless required by applicable law or agreed to in writing, software + * distributed under the License is distributed on an "AS IS" BASIS, + * WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. + * See the License for the specific language governing permissions and + * limitations under the License. + */ +package org.apache.jspwiki.jspwiki.test.plugin; + +import java.util.Map; +import org.apache.wiki.api.core.Context; +import org.apache.wiki.api.exceptions.PluginException; +import org.apache.wiki.api.plugin.Plugin; + +/** + * a simple hello world test plugin + * + * @author AO + */ +public class JspwikiTestPlugin implements Plugin { + + public JspwikiTestPlugin() { + } + + @Override + public String execute(Context context, Map params) throws PluginException { + return "

HelloWorld

"; + } +} diff --git a/jspwiki-test-plugin/src/main/resources/META-INF/services/org.apache.wiki.api.plugin,Plugin b/jspwiki-test-plugin/src/main/resources/META-INF/services/org.apache.wiki.api.plugin,Plugin new file mode 100644 index 0000000000..80a7487ea4 --- /dev/null +++ b/jspwiki-test-plugin/src/main/resources/META-INF/services/org.apache.wiki.api.plugin,Plugin @@ -0,0 +1 @@ +org.apache.jspwiki.jspwiki.test.plugin.JspwikiTestPlugin diff --git a/jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml b/jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml new file mode 100644 index 0000000000..44aee1b2f1 --- /dev/null +++ b/jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml @@ -0,0 +1,8 @@ + + + + Apache + 2.10.1 + JspwikiTestPlugin + + diff --git a/jspwiki-war/src/main/scripts/jspwiki-common.js b/jspwiki-war/src/main/scripts/jspwiki-common.js index aef3516cd3..4e3fa8cd2e 100644 --- a/jspwiki-war/src/main/scripts/jspwiki-common.js +++ b/jspwiki-war/src/main/scripts/jspwiki-common.js @@ -52,6 +52,7 @@ Complementary Dynamic Styles (see jspwiki-commonstyles.js) * 270 WikiColumns: dynamic style * 300 Prettify: dynamic style +Note this file gets minimied/compiled into haddock.js */ /* extend mootools */ @@ -69,7 +70,7 @@ String.extend({ }); return text; } -}) +}); // get text of a dhtml node function $getText(el) { diff --git a/jspwiki-war/src/main/scripts/wiki-edit/Snipe.Snips.js b/jspwiki-war/src/main/scripts/wiki-edit/Snipe.Snips.js index fcf8e01ce9..0d92391ec4 100644 --- a/jspwiki-war/src/main/scripts/wiki-edit/Snipe.Snips.js +++ b/jspwiki-war/src/main/scripts/wiki-edit/Snipe.Snips.js @@ -55,46 +55,49 @@ Snipe.Snips = new Class({ self.suggestions = {}; for( cmd in snips ){ + try{ + snip = $.toFunction( snips[cmd] )( workarea, cmd ); - snip = $.toFunction( snips[cmd] )( workarea, cmd ); + // short format of snip + if( typeOf(snip) == "string" ){ snip = { snippet:snip }; } - // short format of snip - if( typeOf(snip) == "string" ){ snip = { snippet:snip }; } + //shortcut keys + if(snip.key && (key = snip.key) ){ - //shortcut keys - if( (key = snip.key) ){ + // key: "f" => "control+f" ; key: "shift+enter" (no change) + if( !key.contains( "+" ) ){ key = control + key; } + self.keys[ key.toLowerCase() ] = cmd; - // key: "f" => "control+f" ; key: "shift+enter" (no change) - if( !key.contains( "+" ) ){ key = control + key; } - self.keys[ key.toLowerCase() ] = cmd; + } - } + if( snip.suggest && (suggest = snip.suggest) ){ - if( (suggest = snip.suggest) ){ + //this is a suggest snippets + if( typeOf(suggest) == "string" ){ - //this is a suggest snippets - if( typeOf(suggest) == "string" ){ + snip.suggest = { + lback: RegExp( suggest + "$" ), + match: RegExp( "^" + suggest ) + } - snip.suggest = { - lback: RegExp( suggest + "$" ), - match: RegExp( "^" + suggest ) } - } - - self.suggestions[cmd] = snip; + self.suggestions[cmd] = snip; - //otherwise regular snippet - //} else { + //otherwise regular snippet + //} else { - } + } - //check for snip dialogs -- they have the same name as the command - //TODO better: use the dialog property ! - if( snip[cmd] ){ self.dialogs[cmd] = snip[cmd]; } //deprecated - if( snip.dialog ){ self.dialogs[cmd] = snip.dialog; } + //check for snip dialogs -- they have the same name as the command + //TODO better: use the dialog property ! + if( snip[cmd] ){ self.dialogs[cmd] = snip[cmd]; } //deprecated + if( snip.dialog ){ self.dialogs[cmd] = snip.dialog; } - snips[cmd] = snip; + snips[cmd] = snip; + } catch(e) { + console.debug(e); + } } //console.log(this.keys, this.suggest, this.snip); diff --git a/jspwiki-war/src/main/scripts/wiki/Wiki.js b/jspwiki-war/src/main/scripts/wiki/Wiki.js index f19bfb0a73..ce3c335cc9 100644 --- a/jspwiki-war/src/main/scripts/wiki/Wiki.js +++ b/jspwiki-war/src/main/scripts/wiki/Wiki.js @@ -70,7 +70,14 @@ var Wiki = { wiki.add = behavior.add.bind(behavior); wiki.once = behavior.once.bind(behavior); wiki.update = behavior.update.bind(behavior); - + + setTimeout(function(){ + if (wiki.Snips) { + wiki.Snips.loadPlugins(); + } else { + console.warn("snips are not loaded yet, cannot fetch the plugin list"); + } + //add the standard jspwiki behaviors; needed to render the haddock JSP templates wiki.add( "body", wiki.caniuse ) @@ -170,6 +177,7 @@ var Wiki = { popstate: wiki.popstate, domready: wiki.domready.bind(wiki) }); + }, 500); }, diff --git a/pom.xml b/pom.xml index 3a70af4944..2ca7435fad 100644 --- a/pom.xml +++ b/pom.xml @@ -150,6 +150,7 @@ jspwiki-portable jspwiki-it-tests jspwiki-bom + jspwiki-test-plugin From 6b6648cbc0acd4f4673b3c541d3f63afd7ad8001 Mon Sep 17 00:00:00 2001 From: Alex O'Ree Date: Sat, 15 Nov 2025 16:41:28 -0500 Subject: [PATCH 2/6] JSPWIKI-1198 moves the test module into the test module and some minor code cleanup update the api change to include localization support updates all existing plugins to use the new api methods JSPWIKI-1242 fix for the web blog snippet being incorrect --- .../org/apache/wiki/api/plugin/Plugin.java | 9 +- .../jspwiki-test-plugin}/pom.xml | 11 +- .../jspwiki-test-plugin}/readme.txt | 0 .../test/plugin/JspwikiTestPlugin.java | 1 - .../org.apache.wiki.api.plugin,Plugin | 0 .../src/main/resources/ini/jspwiki_module.xml | 2 +- jspwiki-it-tests/pom.xml | 1 + .../java/org/apache/wiki/plugin/Counter.java | 2 + .../apache/wiki/plugin/CurrentTimePlugin.java | 47 ++++-- .../java/org/apache/wiki/plugin/Denounce.java | 8 + .../java/org/apache/wiki/plugin/Groups.java | 9 ++ .../java/org/apache/wiki/plugin/IfPlugin.java | 13 ++ .../java/org/apache/wiki/plugin/Image.java | 15 ++ .../org/apache/wiki/plugin/IndexPlugin.java | 8 + .../org/apache/wiki/plugin/InsertPage.java | 12 ++ .../apache/wiki/plugin/ListLocksPlugin.java | 12 ++ .../java/org/apache/wiki/plugin/Note.java | 4 + .../apache/wiki/plugin/PageViewPlugin.java | 8 + .../wiki/plugin/RecentChangesPlugin.java | 9 ++ .../wiki/plugin/ReferredPagesPlugin.java | 13 ++ .../wiki/plugin/ReferringPagesPlugin.java | 12 ++ .../plugin/ReferringUndefinedPagesPlugin.java | 7 + .../java/org/apache/wiki/plugin/Search.java | 14 ++ .../apache/wiki/plugin/TableOfContents.java | 16 +- .../wiki/plugin/UndefinedPagesPlugin.java | 8 + .../apache/wiki/plugin/UnusedPagesPlugin.java | 8 + .../wiki/plugin/WeblogArchivePlugin.java | 8 + .../apache/wiki/plugin/WeblogEntryPlugin.java | 8 + .../org/apache/wiki/plugin/WeblogPlugin.java | 20 +++ .../wiki/search/DefaultSearchManager.java | 7 +- .../src/main/javascript/Wiki.Snips.JSPWiki.js | 42 ++--- .../src/main/resources/ini/jspwiki_module.xml | 153 ++++++++++++++---- .../plugin/PluginResources.properties | 25 +++ .../wiki/ui/admin/beans/PluginBeanTest.java | 13 +- jspwiki-portable/build.xml | 2 +- jspwiki-portable/pom.xml | 2 +- pom.xml | 3 +- 37 files changed, 431 insertions(+), 101 deletions(-) rename {jspwiki-test-plugin => jspwiki-it-tests/jspwiki-test-plugin}/pom.xml (67%) rename {jspwiki-test-plugin => jspwiki-it-tests/jspwiki-test-plugin}/readme.txt (100%) rename {jspwiki-test-plugin => jspwiki-it-tests/jspwiki-test-plugin}/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java (98%) rename {jspwiki-test-plugin => jspwiki-it-tests/jspwiki-test-plugin}/src/main/resources/META-INF/services/org.apache.wiki.api.plugin,Plugin (100%) rename {jspwiki-test-plugin => jspwiki-it-tests/jspwiki-test-plugin}/src/main/resources/ini/jspwiki_module.xml (85%) diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java b/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java index c37cd30d63..c7c5c23782 100644 --- a/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java +++ b/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java @@ -18,6 +18,7 @@ Licensed to the Apache Software Foundation (ASF) under one */ package org.apache.wiki.api.plugin; +import java.util.Locale; import org.apache.wiki.api.core.Context; import org.apache.wiki.api.exceptions.PluginException; @@ -66,14 +67,14 @@ default String getSnipExample() { /** * Provides the ability for a plugin to provide it's display name that * is visible via the [{}] autocomplete/suggestion mechanism within the - * editor. - * - * Example: Calls My Custom plugin + * editor.Example: Calls My Custom plugin * + * + * @param locale * @since 3.0.0 * @return String */ - default String getDisplayName() { + default String getDisplayName(Locale locale) { return this.getClass().getSimpleName(); } diff --git a/jspwiki-test-plugin/pom.xml b/jspwiki-it-tests/jspwiki-test-plugin/pom.xml similarity index 67% rename from jspwiki-test-plugin/pom.xml rename to jspwiki-it-tests/jspwiki-test-plugin/pom.xml index d7f8f4c8fb..562462ed76 100644 --- a/jspwiki-test-plugin/pom.xml +++ b/jspwiki-it-tests/jspwiki-test-plugin/pom.xml @@ -1,21 +1,18 @@ 4.0.0 - - org.apache.jspwiki - jspwiki-builder + + org.apache.jspwiki.it + jspwiki-it-builder 3.0.0-SNAPSHOT jspwiki-test-plugin jar - ${project.groupId} + org.apache.jspwiki jspwiki-main ${project.version} - - org.apache.jspwiki.jspwiki.test.plugin.JspwikiTestPlugin - \ No newline at end of file diff --git a/jspwiki-test-plugin/readme.txt b/jspwiki-it-tests/jspwiki-test-plugin/readme.txt similarity index 100% rename from jspwiki-test-plugin/readme.txt rename to jspwiki-it-tests/jspwiki-test-plugin/readme.txt diff --git a/jspwiki-test-plugin/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java b/jspwiki-it-tests/jspwiki-test-plugin/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java similarity index 98% rename from jspwiki-test-plugin/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java rename to jspwiki-it-tests/jspwiki-test-plugin/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java index 112555ed17..41b52edb92 100644 --- a/jspwiki-test-plugin/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java +++ b/jspwiki-it-tests/jspwiki-test-plugin/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java @@ -23,7 +23,6 @@ /** * a simple hello world test plugin * - * @author AO */ public class JspwikiTestPlugin implements Plugin { diff --git a/jspwiki-test-plugin/src/main/resources/META-INF/services/org.apache.wiki.api.plugin,Plugin b/jspwiki-it-tests/jspwiki-test-plugin/src/main/resources/META-INF/services/org.apache.wiki.api.plugin,Plugin similarity index 100% rename from jspwiki-test-plugin/src/main/resources/META-INF/services/org.apache.wiki.api.plugin,Plugin rename to jspwiki-it-tests/jspwiki-test-plugin/src/main/resources/META-INF/services/org.apache.wiki.api.plugin,Plugin diff --git a/jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml b/jspwiki-it-tests/jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml similarity index 85% rename from jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml rename to jspwiki-it-tests/jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml index 44aee1b2f1..08e4f49d19 100644 --- a/jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml +++ b/jspwiki-it-tests/jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml @@ -2,7 +2,7 @@ Apache - 2.10.1 + 3.0.0 JspwikiTestPlugin diff --git a/jspwiki-it-tests/pom.xml b/jspwiki-it-tests/pom.xml index c6ae8edbfa..8cd7c4c241 100644 --- a/jspwiki-it-tests/pom.xml +++ b/jspwiki-it-tests/pom.xml @@ -38,6 +38,7 @@ jspwiki-it-test-custom-jdbc jspwiki-it-test-cma jspwiki-it-test-cma-jdbc + jspwiki-test-plugin diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Counter.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Counter.java index f164041afd..baa4abd8d4 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Counter.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Counter.java @@ -38,7 +38,9 @@ Licensed to the Apache Software Foundation (ASF) under one * * * @since 1.9.30 + * @deprecated use PageViewCounter */ +@Deprecated public class Counter implements Plugin { // private static Logger log = LogManager.getLogger( Counter.class ); diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/CurrentTimePlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/CurrentTimePlugin.java index 7a8f6438cc..ae5c829264 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/CurrentTimePlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/CurrentTimePlugin.java @@ -27,44 +27,57 @@ Licensed to the Apache Software Foundation (ASF) under one import java.text.SimpleDateFormat; import java.util.Date; +import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; /** - * Just displays the current date and time. - * The time format is exactly like in the java.text.SimpleDateFormat class. + * Just displays the current date and time. The time format is exactly like in + * the java.text.SimpleDateFormat class. * - *

Parameters :

- * NONE - * @since 1.7.8 - * @see java.text.SimpleDateFormat + *

+ * Parameters :

+ * NONE + * + * @since 1.7.8 + * @see java.text.SimpleDateFormat */ public class CurrentTimePlugin implements Plugin { - // private static Logger log = LogManager.getLogger( CurrentTimePlugin.class ); + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + + } + + @Override + public String getSnipExample() { + return "CurrentTimePlugin format='yyyy mm-dd'"; + } /** - * {@inheritDoc} + * {@inheritDoc} */ @Override - public String execute( final Context context, final Map< String, String > params ) throws PluginException { - final String formatString = params.get( "format" ); + public String execute(final Context context, final Map< String, String> params) throws PluginException { + final String formatString = params.get("format"); try { final SimpleDateFormat fmt; - if( formatString != null ) { - fmt = new SimpleDateFormat( formatString ); + if (formatString != null) { + fmt = new SimpleDateFormat(formatString); } else { - fmt = Preferences.getDateFormat( context, TimeFormat.DATETIME ); + fmt = Preferences.getDateFormat(context, TimeFormat.DATETIME); } final Date d = new Date(); // Now. - return TextUtil.replaceEntities( fmt.format( d ) ); + return TextUtil.replaceEntities(fmt.format(d)); - } catch( final IllegalArgumentException e ) { - final ResourceBundle rb = Preferences.getBundle( context, Plugin.CORE_PLUGINS_RESOURCEBUNDLE ); - throw new PluginException( rb.getString( "currenttimeplugin.badformat" ) + e.getMessage() ); + } catch (final IllegalArgumentException e) { + final ResourceBundle rb = Preferences.getBundle(context, Plugin.CORE_PLUGINS_RESOURCEBUNDLE); + throw new PluginException(rb.getString("currenttimeplugin.badformat") + e.getMessage()); } } diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Denounce.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Denounce.java index 97bf81142a..5e6fb6623c 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Denounce.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Denounce.java @@ -40,8 +40,10 @@ Licensed to the Apache Software Foundation (ASF) under one import java.util.ArrayList; import java.util.Enumeration; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Properties; +import java.util.ResourceBundle; /** * Denounces a link by removing it from any search engine. @@ -119,6 +121,12 @@ public class Denounce implements Plugin { } } + @Override + public String getDisplayName(Locale locale) { + + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Groups.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Groups.java index 6c8a9f63c9..b9c56e5bfb 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Groups.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Groups.java @@ -30,7 +30,9 @@ Licensed to the Apache Software Foundation (ASF) under one import java.security.Principal; import java.util.Arrays; import java.util.Comparator; +import java.util.Locale; import java.util.Map; +import java.util.ResourceBundle; /** *

Prints the groups managed by this wiki, separated by commas. @@ -45,6 +47,13 @@ public class Groups implements Plugin { private static final Comparator COMPARATOR = new PrincipalComparator(); + @Override + public String getDisplayName(Locale locale) { + + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/IfPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/IfPlugin.java index c52c46ce06..4c8765c1cf 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/IfPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/IfPlugin.java @@ -38,7 +38,10 @@ Licensed to the Apache Software Foundation (ASF) under one import org.apache.wiki.variables.VariableManager; import java.security.Principal; +import java.util.Locale; import java.util.Map; +import java.util.ResourceBundle; +import org.apache.wiki.i18n.InternationalizationManager; /** * The IfPlugin allows parts of a WikiPage to be executed conditionally, and is intended as a flexible way @@ -140,6 +143,16 @@ public class IfPlugin implements Plugin { /** The parameter name for checking whether a page/var exists. Value is {@value}. */ public static final String PARAM_EXISTS = "exists"; + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + + @Override + public String getSnipExample() { + return "If name='{value}' page='pagename' exists='true' contains='regexp'\n\nbody\n"; + } /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Image.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Image.java index a47f81575f..e977928189 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Image.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Image.java @@ -18,6 +18,7 @@ Licensed to the Apache Software Foundation (ASF) under one */ package org.apache.wiki.plugin; +import java.util.Locale; import org.apache.wiki.api.core.Attachment; import org.apache.wiki.api.core.Context; import org.apache.wiki.api.core.ContextEnum; @@ -30,6 +31,7 @@ Licensed to the Apache Software Foundation (ASF) under one import org.apache.wiki.util.TextUtil; import java.util.Map; +import java.util.ResourceBundle; /** @@ -89,6 +91,19 @@ public class Image implements Plugin { private static String getCleanParameter( final Map< String, String > params, final String paramId ) { return TextUtil.replaceEntities( params.get( paramId ) ); } + + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + + @Override + public String getSnipExample() { + return "Image src='{image.jpg}'"; + } + + /** * {@inheritDoc} diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/IndexPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/IndexPlugin.java index dac3e762c6..e50f52ec77 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/IndexPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/IndexPlugin.java @@ -35,7 +35,9 @@ Licensed to the Apache Software Foundation (ASF) under one import org.jdom2.output.XMLOutputter; import java.util.List; +import java.util.Locale; import java.util.Map; +import java.util.ResourceBundle; import java.util.Set; import java.util.regex.Pattern; import java.util.stream.Collectors; @@ -62,6 +64,12 @@ public class IndexPlugin extends AbstractReferralPlugin implements Plugin { private static final Logger LOG = LogManager.getLogger(IndexPlugin.class); private final Namespace xmlns_XHTML = Namespace.getNamespace("http://www.w3.org/1999/xhtml"); + + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } /** * {@inheritDoc} diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/InsertPage.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/InsertPage.java index 159abf0edb..11b93d7c75 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/InsertPage.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/InsertPage.java @@ -35,6 +35,7 @@ Licensed to the Apache Software Foundation (ASF) under one import java.util.ArrayList; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.ResourceBundle; @@ -79,6 +80,17 @@ public class InsertPage implements Plugin { /** This attribute is stashed in the WikiContext to make sure that we don't have circular references. */ public static final String ATTR_RECURSE = "org.apache.wiki.plugin.InsertPage.recurseCheck"; + + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + + @Override + public String getSnipExample() { + return "InsertPage page='{pagename}'"; + } /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/ListLocksPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/ListLocksPlugin.java index 501ea179ef..d24ae356b2 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/ListLocksPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/ListLocksPlugin.java @@ -26,6 +26,7 @@ Licensed to the Apache Software Foundation (ASF) under one import org.apache.wiki.preferences.Preferences; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; @@ -38,6 +39,17 @@ Licensed to the Apache Software Foundation (ASF) under one */ public class ListLocksPlugin implements Plugin { + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + + + @Override + public String getSnipExample() { + return "ListLocksPlugin"; + } /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Note.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Note.java index 587e33c177..62d6f62561 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Note.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Note.java @@ -55,6 +55,10 @@ public class Note implements Plugin { /** The default name for the note. Value is {@value}. */ public static final String DEFAULT_NOTE_IMAGE = "note.png"; + @Override + public String getSnipExample() { + return "Note " + PROP_NOTE_IMAGE + "=note.png This text shows as tooltip"; + } /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/PageViewPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/PageViewPlugin.java index 850d7c210a..4778cbc30f 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/PageViewPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/PageViewPlugin.java @@ -55,9 +55,11 @@ Licensed to the Apache Software Foundation (ASF) under one import java.util.Comparator; import java.util.HashSet; import java.util.Iterator; +import java.util.Locale; import java.util.Map; import java.util.Map.Entry; import java.util.Properties; +import java.util.ResourceBundle; import java.util.TreeMap; @@ -129,6 +131,12 @@ public class PageViewPlugin extends AbstractReferralPlugin implements Plugin, In /** Constant for storage interval in seconds. */ private static final int STORAGE_INTERVAL = 60; + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + /** * Initialize the PageViewPlugin and its singleton. * diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/RecentChangesPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/RecentChangesPlugin.java index e6c77fae1e..ab0a1d80ad 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/RecentChangesPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/RecentChangesPlugin.java @@ -45,7 +45,9 @@ Licensed to the Apache Software Foundation (ASF) under one import java.util.Collection; import java.util.Date; import java.util.GregorianCalendar; +import java.util.Locale; import java.util.Map; +import java.util.ResourceBundle; /** @@ -76,6 +78,13 @@ public class RecentChangesPlugin extends AbstractReferralPlugin implements Plugi public static final String DEFAULT_DATE_FORMAT ="dd.MM.yyyy"; + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + + /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferredPagesPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferredPagesPlugin.java index adf0852e38..b922ac14bb 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferredPagesPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferredPagesPlugin.java @@ -39,7 +39,9 @@ Licensed to the Apache Software Foundation (ASF) under one import java.util.ArrayList; import java.util.Collection; import java.util.HashSet; +import java.util.Locale; import java.util.Map; +import java.util.ResourceBundle; /** @@ -97,6 +99,17 @@ public class ReferredPagesPlugin implements Plugin { /** The maximum depth. Value is {@value}. */ public static final int MAX_DEPTH = 8; + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + + @Override + public String getSnipExample() { + return "ReferredPagesPlugin page='{pagename}' type='local|external|attachment' depth='1..8' include='regexp' exclude='regexp'"; + } + /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringPagesPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringPagesPlugin.java index 959582c3c5..e281450076 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringPagesPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringPagesPlugin.java @@ -32,6 +32,7 @@ Licensed to the Apache Software Foundation (ASF) under one import java.text.MessageFormat; import java.util.Collection; +import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; @@ -64,6 +65,17 @@ public class ReferringPagesPlugin extends AbstractReferralPlugin { /** Parameter name for choosing the page. Value is {@value}. */ public static final String PARAM_PAGE = "page"; + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + + @Override + public String getSnipExample() { + return "ReferringPagesPlugin page='{pagename}' separator=',' include='regexp' exclude='regexp'"; + } + /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringUndefinedPagesPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringUndefinedPagesPlugin.java index 07323c0409..8c1b34ecff 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringUndefinedPagesPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/ReferringUndefinedPagesPlugin.java @@ -27,6 +27,7 @@ Licensed to the Apache Software Foundation (ASF) under one import java.text.MessageFormat; import java.util.Collection; +import java.util.Locale; import java.util.Map; import java.util.Objects; import java.util.ResourceBundle; @@ -48,6 +49,12 @@ public class ReferringUndefinedPagesPlugin extends AbstractReferralPlugin { /** Parameter name for setting the text to show when the maximum items is overruled. Value is {@value}. */ public static final String PARAM_EXTRAS = "extras"; + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + @Override public String execute( final Context context, final Map params) throws PluginException { final ResourceBundle rb = Preferences.getBundle(context, Plugin.CORE_PLUGINS_RESOURCEBUNDLE); diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Search.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Search.java index 2889e3e858..b341e5b4e9 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Search.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Search.java @@ -37,7 +37,9 @@ Licensed to the Apache Software Foundation (ASF) under one import java.io.IOException; import java.util.Collection; import java.util.Iterator; +import java.util.Locale; import java.util.Map; +import java.util.ResourceBundle; /** * The "Search" plugin allows you to access the JSPWiki search routines and show the displays in an array on your page. @@ -67,6 +69,18 @@ public class Search implements Plugin { /** The parameter name for setting the how many results will be fetched. Value is {@value}. */ public static final String PARAM_MAX = "max"; + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + + @Override + public String getSnipExample() { + return "Search query='{Janne}' max='10'"; + } + + /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/TableOfContents.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/TableOfContents.java index 394953fefc..b500e18b85 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/TableOfContents.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/TableOfContents.java @@ -37,6 +37,7 @@ Licensed to the Apache Software Foundation (ASF) under one import org.apache.wiki.variables.VariableManager; import java.io.IOException; +import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; @@ -70,7 +71,7 @@ public class TableOfContents implements Plugin, HeadingListener { private static final String VAR_ALREADY_PROCESSING = "__TableOfContents.processing"; - final StringBuffer m_buf = new StringBuffer(); + private final StringBuffer m_buf = new StringBuffer(); private boolean m_usingNumberedList; private String m_prefix = ""; private int m_starting; @@ -79,6 +80,19 @@ public class TableOfContents implements Plugin, HeadingListener { private int m_level3Index; private int m_lastLevel; + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + + + + @Override + public String getSnipExample() { + return "TableOfContents"; + } + /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/UndefinedPagesPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/UndefinedPagesPlugin.java index 877cef1d93..68c4ca257a 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/UndefinedPagesPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/UndefinedPagesPlugin.java @@ -23,7 +23,9 @@ Licensed to the Apache Software Foundation (ASF) under one import org.apache.wiki.references.ReferenceManager; import java.util.Collection; +import java.util.Locale; import java.util.Map; +import java.util.ResourceBundle; /** @@ -37,6 +39,12 @@ Licensed to the Apache Software Foundation (ASF) under one */ public class UndefinedPagesPlugin extends AbstractReferralPlugin { + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/UnusedPagesPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/UnusedPagesPlugin.java index c5d84a2309..5ccd96596a 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/UnusedPagesPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/UnusedPagesPlugin.java @@ -24,7 +24,9 @@ Licensed to the Apache Software Foundation (ASF) under one import org.apache.wiki.util.TextUtil; import java.util.Collection; +import java.util.Locale; import java.util.Map; +import java.util.ResourceBundle; /** * Plugin for displaying pages that are not linked to in other pages. @@ -41,6 +43,12 @@ public class UnusedPagesPlugin extends AbstractReferralPlugin { /** If set to "true", attachments are excluded from display. Value is {@value}. */ public static final String PARAM_EXCLUDEATTS = "excludeattachments"; + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogArchivePlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogArchivePlugin.java index 6dc16fd8aa..ea229cb122 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogArchivePlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogArchivePlugin.java @@ -32,7 +32,9 @@ Licensed to the Apache Software Foundation (ASF) under one import java.util.Comparator; import java.util.Date; import java.util.List; +import java.util.Locale; import java.util.Map; +import java.util.ResourceBundle; import java.util.SortedSet; import java.util.TreeSet; @@ -53,6 +55,12 @@ public class WeblogArchivePlugin implements Plugin { private SimpleDateFormat m_monthUrlFormat; + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + /** * {@inheritDoc} */ diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogEntryPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogEntryPlugin.java index ab4b6bcde8..c26634a699 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogEntryPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogEntryPlugin.java @@ -36,6 +36,7 @@ Licensed to the Apache Software Foundation (ASF) under one import java.text.SimpleDateFormat; import java.util.Collection; import java.util.Date; +import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; @@ -70,6 +71,13 @@ public class WeblogEntryPlugin implements Plugin { * Parameter name for setting the page Value is {@value}. */ public static final String PARAM_BLOGNAME = "page"; + + + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } /** * Returns a new page name for entries. It goes through the list of all blog pages, and finds out the next in line. diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogPlugin.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogPlugin.java index 3104ddc6cb..c6f3743725 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogPlugin.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/WeblogPlugin.java @@ -49,6 +49,7 @@ Licensed to the Apache Software Foundation (ASF) under one import java.util.Date; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.ResourceBundle; import java.util.Set; @@ -156,6 +157,20 @@ public static String makeEntryPage( final String pageName, final String date ) { return TextUtil.replaceString(DEFAULT_PAGEFORMAT,"%p",pageName)+date; } + @Override + public String getDisplayName(Locale locale) { + final ResourceBundle rb = ResourceBundle.getBundle(PluginManager.PLUGIN_RESOURCE_LOCATION, locale); + return rb.getString(this.getClass().getSimpleName()); + } + + @Override + public String getSnipExample() { + final SimpleDateFormat fmt = new SimpleDateFormat( DEFAULT_DATEFORMAT ); + String date = fmt.format(new Date(System.currentTimeMillis()-(30*24*60*60*1000L))); + return "WeblogPlugin page='{pagename}' startDate='" + date + "' days='30' maxEntries='30' allowComments='false'"; + } + + /** * {@inheritDoc} */ @@ -203,6 +218,11 @@ public String execute( final Context context, final Map< String, String > params if( (startDay = params.get(PARAM_STARTDATE)) == null ) { startDay = context.getHttpParameter( "weblog."+PARAM_STARTDATE ); } + if ("ddMMyy".equalsIgnoreCase(startDay)) { + //if using the default snippet, this value is clearly the default + //and is not valid + startDay = null; + } if( TextUtil.isPositive( params.get(PARAM_ALLOWCOMMENTS) ) ) { hasComments = true; diff --git a/jspwiki-main/src/main/java/org/apache/wiki/search/DefaultSearchManager.java b/jspwiki-main/src/main/java/org/apache/wiki/search/DefaultSearchManager.java index 1d6b8076fe..396b8386e3 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/search/DefaultSearchManager.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/search/DefaultSearchManager.java @@ -51,11 +51,14 @@ Licensed to the Apache Software Foundation (ASF) under one import java.util.HashMap; import java.util.Iterator; import java.util.List; +import java.util.Locale; import java.util.Map; import java.util.Properties; import java.util.Set; import org.apache.wiki.api.plugin.Plugin; +import org.apache.wiki.i18n.InternationalizationManager; import org.apache.wiki.plugin.PluginManager; +import org.apache.wiki.preferences.Preferences; import static org.apache.wiki.search.SearchManager.PLUGIN_SEARCH; @@ -133,6 +136,8 @@ public void service( final HttpServletRequest req, PluginManager mgr = m_engine.getManager(PluginManager.class); final List< Plugin > plugins = mgr.getDiscoveredPlugins(); List< SimpleSnipData > callResults = new ArrayList<>(); + final Context wikiContext = Wiki.context().create(m_engine, req, "pluginDisco"); + Locale locale = Preferences.getLocale(wikiContext); for (Plugin p : plugins) { if ( itemId != null && StringUtils.isNotBlank(itemId) ) { if ( !p.getSnipExample().startsWith(itemId) ) { @@ -141,7 +146,7 @@ public void service( final HttpServletRequest req, } else { SimpleSnipData data = new SimpleSnipData(); data.snip = p.getSnipExample(); - data.displayName = p.getDisplayName(); + data.displayName = p.getDisplayName(locale); callResults.add(data); } if ( callResults.size() > maxResults ) diff --git a/jspwiki-main/src/main/javascript/Wiki.Snips.JSPWiki.js b/jspwiki-main/src/main/javascript/Wiki.Snips.JSPWiki.js index 634348ce62..e96c2a27e1 100644 --- a/jspwiki-main/src/main/javascript/Wiki.Snips.JSPWiki.js +++ b/jspwiki-main/src/main/javascript/Wiki.Snips.JSPWiki.js @@ -526,33 +526,33 @@ Wiki.Snips = { "ALLOW {permission} principal ": "Page Access Rights ", "SET {name}='value'":"Set a Wiki variable", "${varname}":"Get a Wiki variable", - "If name='{value}' page='pagename' exists='true' contains='regexp'\n\nbody\n":"IF plugin", + //"If name='{value}' page='pagename' exists='true' contains='regexp'\n\nbody\n":"IF plugin", "SET keywords={keyword1, keyword2}":"Set Page Keywords", "SET alias='{pagename}'":"Set Page Alias", "SET page-styles='prettify-nonum table-condensed-fit'":"Set Page Styles", "SET sidebar='off'":"Hide Sidebar", //"Table":"Advanced Tables", //"Groups":"View all Wiki Groups", - "":"", - "Counter":"Insert a simple counter", - "PageViewPlugin":"Count Views of this page", - "CurrentTimePlugin format='yyyy mmm-dd'":"Insert Current Time", - "Denounce":"Denounce a link", - "Image src='{image.jpg}'":"Insert an Image ", - "IndexPlugin":"Index of all pages", - - "InsertPage page='{pagename}'":"Insert another Page", - "ListLocksPlugin":"List page locks", - "RecentChangesPlugin":"Displays the recent changed pages", - "ReferringPagesPlugin page='{pagename}' separator=',' include='regexp' exclude='regexp'":"Incoming Links (referring pages)", - "ReferredPagesPlugin page='{pagename}' type='local|external|attachment' depth='1..8' include='regexp' exclude='regexp'":"Outgoing Links (referred pages)", - "Search query='{Janne}' max='10'":"Insert a Search query", - "TableOfContents ":"Table Of Contents ", - "UndefinedPagesPlugin":"List pages that are missing", - "UnusedPagesPlugin":"List pages that have been orphaned", - "WeblogArchivePlugin":"Displays a list of older weblog entries", - "WeblogEntryPlugin":"Makes a new weblog entry", - "WeblogPlugin page='{pagename}' startDate='300604' days='30' maxEntries='30' allowComments='false'":"Builds a weblog" + //"":"", + //deprecated "Counter":"Insert a simple counter", + //"PageViewPlugin":"Count Views of this page", + //"CurrentTimePlugin format='yyyy mmm-dd'":"Insert Current Time", + //"Denounce":"Denounce a link", + //"Image src='{image.jpg}'":"Insert an Image ", + //"IndexPlugin":"Index of all pages", + + //"InsertPage page='{pagename}'":"Insert another Page", + //"ListLocksPlugin":"List page locks", + //"RecentChangesPlugin":"Displays the recent changed pages", + //"ReferringPagesPlugin page='{pagename}' separator=',' include='regexp' exclude='regexp'":"Incoming Links (referring pages)", + //"ReferredPagesPlugin page='{pagename}' type='local|external|attachment' depth='1..8' include='regexp' exclude='regexp'":"Outgoing Links (referred pages)", + //"Search query='{Janne}' max='10'":"Insert a Search query", + //"TableOfContents ":"Table Of Contents ", + //"UndefinedPagesPlugin":"List pages that are missing", + //"UnusedPagesPlugin":"List pages that have been orphaned", + //"WeblogArchivePlugin":"Displays a list of older weblog entries", + //"WeblogEntryPlugin":"Makes a new weblog entry", + //"WeblogPlugin page='{pagename}' startDate='300604' days='30' maxEntries='30' allowComments='false'":"Builds a weblog" } } ] diff --git a/jspwiki-main/src/main/resources/ini/jspwiki_module.xml b/jspwiki-main/src/main/resources/ini/jspwiki_module.xml index 4dab13c7c6..22b5f80f11 100644 --- a/jspwiki-main/src/main/resources/ini/jspwiki_module.xml +++ b/jspwiki-main/src/main/resources/ini/jspwiki_module.xml @@ -26,38 +26,125 @@ --> - - - Janne Jalkanen - editors/plain.jsp - 2.4 - org.apache.wiki.ui.admin.beans.PlainEditorAdminBean - - - - MooEditable - editors/wysiwyg.jsp - 2.10 - - - - Janne Jalkanen - 2.4 - If - - - - Janne Jalkanen - 2.4 - - - - Janne Jalkanen - 2.6 - + + + Janne Jalkanen + editors/plain.jsp + 2.4 + org.apache.wiki.ui.admin.beans.PlainEditorAdminBean + + + + MooEditable + editors/wysiwyg.jsp + 2.10 + + + + Janne Jalkanen + 2.4 + If + + + + Janne Jalkanen + 2.4 + + + ASF + 2.4 + + + ASF + 2.4 + + + ASF + 2.8 + + + ASF + 2.1.40 + + + ASF + 2.4 + + + ASF + 2.1.37 + + + ASF + 2.0.22 + + + + ASF + 2.4 + + + ASF + 2.4 + + + ASF + 2.4 + + + ASF + 2.4 + + + + ASF + 2.4 + + + ASF + 2.2 + + + ASF + 2.2 + + + ASF + 2.2 + + + ASF + 2.2 + + + ASF + 2.2 + + + ASF + 2.2 + + + + ASF + 2.4 + + + ASF + 2.4 + + + ASF + 2.4 + + + + Janne Jalkanen + 2.6 + \ No newline at end of file diff --git a/jspwiki-main/src/main/resources/plugin/PluginResources.properties b/jspwiki-main/src/main/resources/plugin/PluginResources.properties index 741110a697..9e92fe9906 100644 --- a/jspwiki-main/src/main/resources/plugin/PluginResources.properties +++ b/jspwiki-main/src/main/resources/plugin/PluginResources.properties @@ -82,3 +82,28 @@ plugin.listlocks.no.locks.exist=No locks exist currently. # ReferringUndefinedPagesPlugin referringundefinedpagesplugin.more = ...and {0} more + + +# plugin display names + +CurrentTimePlugin=Insert Current Time +Denounce=Denounce a link +Groups=View all Wiki Groups +Image=Insert an Image +IfPlugin=IF Plugin +IndexPlugin=Index of all pages +InsertPage=Insert another Page +ListLocksPlugin=List page locks +Note=Note +PageViewPlugin=Count Views of this page +RecentChangesPlugin=Displays the recent changed pages +ReferredPagesPlugin=Outgoing Links (referred pages) +ReferringPagesPlugin=Incoming Links (referring pages) +ReferringUndefinedPagesPlugin=Pages containing dead links +Search=Insert a Search Query +TableOfConents=Table of Contents +UndefinedPagesPlugin=List pages that are missing +UnusedPagesPlugin=List pages that have been orphaned +WeblogArchivePlugin=Displays a list of older weblog entries +WeblogEntryPlugin=Makes a new weblog entry +WeblogPlugin=Builds a weblog diff --git a/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java b/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java index bfa7f6710a..b9b7243cc7 100644 --- a/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java +++ b/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java @@ -40,17 +40,8 @@ public void testDoGet() throws WikiException, NotCompliantMBeanException { testEngine = new TestEngine( props ); final Context context = Wiki.context().create( testEngine, Wiki.contents().page( testEngine, "TestPage01" ) ); final PluginBean pb = new PluginBean( testEngine ); - final String expectedHtml = "

" + - "

Plugins

" + - "" + - "" + - "" + - "" + - "" + - "" + - "
NameAliasAuthorNotes
IfPluginIfJanne Jalkanen
NoteJanne Jalkanen
SamplePluginsamplealiasJanne Jalkanen
SamplePlugin2samplealias2Janne Jalkanen
" + - "
"; - Assertions.assertEquals( expectedHtml, pb.doGet( context ) ); + + Assertions.assertNotNull( pb.doGet( context ) ); } } diff --git a/jspwiki-portable/build.xml b/jspwiki-portable/build.xml index cd140f7fe8..7cf78085ca 100644 --- a/jspwiki-portable/build.xml +++ b/jspwiki-portable/build.xml @@ -72,7 +72,7 @@
- + diff --git a/jspwiki-portable/pom.xml b/jspwiki-portable/pom.xml index 43367750ff..c72b61e4cf 100644 --- a/jspwiki-portable/pom.xml +++ b/jspwiki-portable/pom.xml @@ -258,7 +258,7 @@ provided - ${project.groupId} + org.apache.jspwiki.it jspwiki-test-plugin ${project.version} provided diff --git a/pom.xml b/pom.xml index 2ca7435fad..de8d075af2 100644 --- a/pom.xml +++ b/pom.xml @@ -150,7 +150,6 @@ jspwiki-portable jspwiki-it-tests jspwiki-bom - jspwiki-test-plugin @@ -676,7 +675,7 @@ @{argLine} - false + true plain From c720fe4304eb344fa4e5db18690ab518c0d7b154 Mon Sep 17 00:00:00 2001 From: Alex O'Ree Date: Sat, 15 Nov 2025 17:19:30 -0500 Subject: [PATCH 3/6] JSPWIKI-1198 I18N the display names of all plugins so that the suggestion menu is localized. --- .../plugin/PluginResources.properties | 2 +- .../plugin/PluginResources_de.properties | 29 +++++- .../plugin/PluginResources_es.properties | 49 +++++++--- .../plugin/PluginResources_fi.properties | 21 +++++ .../plugin/PluginResources_fr.properties | 89 ++++++++++++------- .../plugin/PluginResources_it.properties | 21 +++++ .../plugin/PluginResources_nl.properties | 21 +++++ .../plugin/PluginResources_pt_BR.properties | 21 +++++ .../plugin/PluginResources_ru.properties | 21 +++++ .../plugin/PluginResources_zh_CN.properties | 21 +++++ 10 files changed, 242 insertions(+), 53 deletions(-) diff --git a/jspwiki-main/src/main/resources/plugin/PluginResources.properties b/jspwiki-main/src/main/resources/plugin/PluginResources.properties index 9e92fe9906..fd0ed87ee8 100644 --- a/jspwiki-main/src/main/resources/plugin/PluginResources.properties +++ b/jspwiki-main/src/main/resources/plugin/PluginResources.properties @@ -94,7 +94,7 @@ IfPlugin=IF Plugin IndexPlugin=Index of all pages InsertPage=Insert another Page ListLocksPlugin=List page locks -Note=Note +Note=Note (tooltip) PageViewPlugin=Count Views of this page RecentChangesPlugin=Displays the recent changed pages ReferredPagesPlugin=Outgoing Links (referred pages) diff --git a/jspwiki-main/src/main/resources/plugin/PluginResources_de.properties b/jspwiki-main/src/main/resources/plugin/PluginResources_de.properties index 4246ce1fa0..b7935fc01e 100644 --- a/jspwiki-main/src/main/resources/plugin/PluginResources_de.properties +++ b/jspwiki-main/src/main/resources/plugin/PluginResources_de.properties @@ -26,7 +26,7 @@ # "du" animiert zum mitmachen. Anrede wird klein geschrieben. # # Die Datei muss in der Codierung ISO 8859-1 (Latin-1) abgespeichert werden. -# Umlaute und Sonderzeichen können daher direkt eingetippt werden und müssen (dürfen) +# Umlaute und Sonderzeichen k\u00f6nnen daher direkt eingetippt werden und m\u00fcssen (d\u00fcrfen) # insbesondere nicht mittels HTML-Entities escaped werden. # # Translation revised on 2008-02-05 by Florian Holeczek @@ -35,7 +35,7 @@ # Errors rendering plugins -plugin.error.insertionfailed={0} : {1} - Einfügen eines Plugins fehlgeschlagen: {2} +plugin.error.insertionfailed={0} : {1} - Einf\u00fcgen eines Plugins fehlgeschlagen: {2} plugin.error.cannotinstantiate=Kann Plugin '{0}' nicht instanziieren. plugin.error.notallowed=Keine Zugriffsberechtigung auf Plugin '{0}'. plugin.error.instantationfailed=Instanziierung des Plugins '{0}' fehlgeschlagen. @@ -57,7 +57,7 @@ bugreporthandler.titlerequired=Ein Titel muss angegeben werden! # CurrentTimePlugin -currenttimeplugin.badformat=Du hast ein ungültiges Format angegeben. +currenttimeplugin.badformat=Du hast ein ung\u00fcltiges Format angegeben. # WeblogEntryPlugin @@ -91,10 +91,31 @@ formtextarea.namemissing=Das Element 'textarea' erwartet den Parameter 'name'. # ListLocks plugin plugin.listlocks.page=Seite -plugin.listlocks.locked.by=gesperrt für +plugin.listlocks.locked.by=gesperrt f\u00fcr plugin.listlocks.acquired=gesperrt ab plugin.listlocks.expires=gesperrt bis plugin.listlocks.no.locks.exist=Momentan existieren keine Sperren. # ReferringUndefinedPagesPlugin referringundefinedpagesplugin.more = ... und {0} weitere +CurrentTimePlugin= +Denounce=Denunzieren Sie einen Link +Groups=Alle Wiki-Gruppen anzeigen +Image=F\u00fcge ein Bild ein +IfPlugin=IF-Plugin +IndexPlugin=Index aller Seiten +InsertPage=F\u00fcgen Sie eine weitere Seite ein +ListLocksPlugin=Seitensperren auflisten +Note=Hinweis (Tooltip) +PageViewPlugin=Anzahl der Seitenaufrufe +RecentChangesPlugin=Zeigt die zuletzt ge\u00e4nderten Seiten an +ReferredPagesPlugin=Ausgehende Links (verwiesene Seiten) +ReferringPagesPlugin=Eingehende Links (verweisende Seiten) +ReferringUndefinedPagesPlugin=Seiten mit defekten Links +Search=Suchanfrage einf\u00fcgen +TableOfConents=Inhaltsverzeichnis +UndefinedPagesPlugin=Fehlende Seiten auflisten +UnusedPagesPlugin=Liste der verwaisten Seiten +WeblogArchivePlugin=Zeigt eine Liste \u00e4lterer Weblog-Eintr\u00e4ge an +WeblogEntryPlugin=Erstellt einen neuen Blogeintrag +WeblogPlugin=Erstellt einen Weblog diff --git a/jspwiki-main/src/main/resources/plugin/PluginResources_es.properties b/jspwiki-main/src/main/resources/plugin/PluginResources_es.properties index 23d0d5899f..8037e8fd49 100644 --- a/jspwiki-main/src/main/resources/plugin/PluginResources_es.properties +++ b/jspwiki-main/src/main/resources/plugin/PluginResources_es.properties @@ -21,14 +21,14 @@ # Errors rendering plugins -plugin.error.insertionfailed = {0} : {1} - Fallo en la inserción del Plugin: {2} +plugin.error.insertionfailed = {0} : {1} - Fallo en la inserci\u00f3n del Plugin: {2} plugin.error.cannotinstantiate = No se pudo instanciar el plugin {0} -plugin.error.notallowed = No está permitido el acceso al plugin {0} -plugin.error.instantationfailed = La instanciación del plugin {0} ha fallado. +plugin.error.notallowed = No est\u00e1 permitido el acceso al plugin {0} +plugin.error.instantationfailed = La instanciaci\u00f3n del plugin {0} ha fallado. plugin.error.failed = El plugin ha fallado plugin.error.couldnotfind = No se pudo encontrar el plugin {0} plugin.error.notawikiplugin = La clase {0} no es un plugin del Wiki. -plugin.error.missingparameter = Parámetro faltante en la definición del plugin: {0} +plugin.error.missingparameter = Par\u00e1metro faltante en la definici\u00f3n del plugin: {0} plugin.error.parsingarguments = Zyrf. Problemas al parsear los argumentos: {0} # TableOfContents @@ -38,18 +38,18 @@ tableofcontents.title = Tabla de Contenidos bugreporthandler.new = Se ha creado un nuevo informe de errores: {0} bugreporthandler.unable = ¡No se pudo crear el nuevo informe de errores! -bugreporthandler.titlerequired = ¡El título es obligatorio! +bugreporthandler.titlerequired = ¡El t\u00edtulo es obligatorio! # CurrentTimePlugin -currenttimeplugin.badformat = Especificaste un formato erróneo +currenttimeplugin.badformat = Especificaste un formato err\u00f3neo # WeblogEntryPlugin weblogentryplugin.newentry = Nueva entrada weblogentryplugin.postedby = Publicado por {0}   weblogentryplugin.permalink = Enlace permanente -weblogentryplugin.addcomment = Añadir nuevo comentario ({0}) +weblogentryplugin.addcomment = A\u00f1adir nuevo comentario ({0}) weblogentryplugin.more = (más) # InserPagePlugin @@ -58,27 +58,48 @@ insertpage.more=Mu00e1s... # ReferringPagesPlugin # This is in JSPWikiMarkup; {0} is where you put in the number -referringpagesplugin.more = ... y {0} más +referringpagesplugin.more = ... y {0} m\u00e1s referringpagesplugin.nobody = ...nadie # Forms plugins formclose.noneedtoshow = (no es necesario mostrar el cierre ahora) -forminput.namemissing = El elemento campo de entrada no tiene definido el parámetro 'name'. +forminput.namemissing = El elemento campo de entrada no tiene definido el par\u00e1metro 'name'. forminput.noneedtoshow = (no es necesario mostrar el campo de entrada de texto ahora) -formopen.missingparam = El elemento FormOpen no tiene definido el parámetro '{0}'. +formopen.missingparam = El elemento FormOpen no tiene definido el par\u00e1metro '{0}'. formopen.postorgetonly = El atributo 'Method' debe ser obligatoriamente 'post' o 'get' formopen.noneedtoshow = (no es necesario mostrar la apertura del form ahora) formoutput.missingargument = El argumento '{0}' es requerido por el plugin Form -formselect.namemissing = El elemento Select no tiene definido el parámetro 'name'. +formselect.namemissing = El elemento Select no tiene definido el par\u00e1metro 'name'. formtextarea.noneedtoshow = (no es necesario mostrar el campo textarea ahora) -formtextarea.namemissing = El elemento Textarea no tiene definido el parámetro 'name'. +formtextarea.namemissing = El elemento Textarea no tiene definido el par\u00e1metro 'name'. # ListLocks plugin -plugin.listlocks.page=Página +plugin.listlocks.page=P\u00e1gina plugin.listlocks.locked.by=Bloqueada por plugin.listlocks.acquired=Adquirida plugin.listlocks.expires=Expira plugin.listlocks.no.locks.exist=No existen bloqueos actualmente. # ReferringUndefinedPagesPlugin -referringundefinedpagesplugin.more = ... y {0} más \ No newline at end of file +referringundefinedpagesplugin.more = ... y {0} m\u00e1s +CurrentTimePlugin=Insertar hora actual +Denounce=Denunciar un enlace +Groups=Ver todos los grupos Wiki +Image=Insertar una imagen +IfPlugin=Complemento SI +IndexPlugin=\u00cdndice de todas las p\u00e1ginas. +InsertPage=Insertar otra p\u00e1gina +ListLocksPlugin=Bloqueos de p\u00e1gina de lista +Note=Nota (informaci\u00f3n sobre herramientas) +PageViewPlugin=N\u00famero de visitas a esta p\u00e1gina +RecentChangesPlugin=Muestra las p\u00e1ginas modificadas recientemente. +ReferredPagesPlugin=Enlaces salientes (p\u00e1ginas de referencia) +ReferringPagesPlugin=Enlaces entrantes (p\u00e1ginas de referencia) +ReferringUndefinedPagesPlugin=P\u00e1ginas con enlaces rotos +Search=Insertar una consulta de b\u00fasqueda +TableOfConents=Sommario +UndefinedPagesPlugin=Lista de p\u00e1ginas que faltan +UnusedPagesPlugin=Lista de p\u00e1ginas que han quedado hu\u00e9rfanas +WeblogArchivePlugin=Muestra una lista de entradas antiguas del blog. +WeblogEntryPlugin=Crea una nueva entrada en el blog +WeblogPlugin=Crea un blog diff --git a/jspwiki-main/src/main/resources/plugin/PluginResources_fi.properties b/jspwiki-main/src/main/resources/plugin/PluginResources_fi.properties index 25e1bdfbf3..c27bb9e48f 100644 --- a/jspwiki-main/src/main/resources/plugin/PluginResources_fi.properties +++ b/jspwiki-main/src/main/resources/plugin/PluginResources_fi.properties @@ -80,3 +80,24 @@ weblogentryplugin.permalink=Pysyv\u00e4 linkki weblogentryplugin.addcomment= Lis\u00e4\u00e4 uusi kommentti ({0}) weblogentryplugin.more=(lis\u00e4\u00e4) insertpage.more=Lis\u00e4\u00e4... +CurrentTimePlugin=Lis\u00e4\u00e4 nykyinen aika +Denounce=Hylk\u00e4\u00e4 linkki +Groups=N\u00e4yt\u00e4 kaikki wikiryhm\u00e4t +Image=Lis\u00e4\u00e4 kuva +IfPlugin=IF-laajennus +IndexPlugin=Kaikkien sivujen hakemisto +InsertPage=Lis\u00e4\u00e4 toinen sivu +ListLocksPlugin=Listaa sivun lukitukset +Note=Huomautus (ty\u00f6kaluvihje) +PageViewPlugin=Laske t\u00e4m\u00e4n sivun katselukerrat +RecentChangesPlugin=N\u00e4ytt\u00e4\u00e4 viimeksi muutetut sivut +ReferredPagesPlugin=L\u00e4htev\u00e4t linkit (viittaukset) +ReferringPagesPlugin=Saapuvat linkit (viittaavat sivut) +ReferringUndefinedPagesPlugin=Sivut, jotka sis\u00e4lt\u00e4v\u00e4t toimimattomia linkkej\u00e4 +Search=Lis\u00e4\u00e4 hakukysely +TableOfConents=Sis\u00e4llysluettelo +UndefinedPagesPlugin=Listaa puuttuvat sivut +UnusedPagesPlugin=Listaa orvoiksi j\u00e4\u00e4neet sivut +WeblogArchivePlugin=N\u00e4ytt\u00e4\u00e4 luettelon vanhemmista blogimerkinn\u00f6ist\u00e4 +WeblogEntryPlugin=Tekee uuden blogimerkinn\u00e4n +WeblogPlugin=Rakentaa weblogin diff --git a/jspwiki-main/src/main/resources/plugin/PluginResources_fr.properties b/jspwiki-main/src/main/resources/plugin/PluginResources_fr.properties index 2b59b83514..a459374e17 100644 --- a/jspwiki-main/src/main/resources/plugin/PluginResources_fr.properties +++ b/jspwiki-main/src/main/resources/plugin/PluginResources_fr.properties @@ -17,46 +17,46 @@ # This is the French language bundle for JSPWiki core plugins # Don't add your own plugins to this file; create your own bundle, please. -# Ceci est le bundle de langue franÁaise pour les plugins noyau de JSPWiki -# N'ajoutez pas vos propres ressources ? ce fichier ; veuillez crÈer votre propre bundle ? la place. +# Ceci est le bundle de langue fran\u00c1aise pour les plugins noyau de JSPWiki +# N'ajoutez pas vos propres ressources ? ce fichier ; veuillez cr\u00c8er votre propre bundle ? la place. # # Every non-English sign is written as Java Unicode sequence -# Warning: in every property value, which is a MessageFormat pattern (with {xx} in it), simple quotes (\u0027) MUST be doubled -# Tous les signes non-anglais sont Ècrits sous la forme de sÈquences Unicode Java -# Attention : dans toutes les valeurs de propriÈtÈs qui sont des patrons MessageFormat (avec un ou plusieurs {xx}), les apostrophes (\u0027) DOIVENT Ítre dupliquÈes +# Warning: in every property value, which is a MessageFormat pattern (with {xx} in it), simple quotes (') MUST be doubled +# Tous les signes non-anglais sont \u00c8crits sous la forme de s\u00c8quences Unicode Java +# Attention : dans toutes les valeurs de propri\u00c8t\u00c8s qui sont des patrons MessageFormat (avec un ou plusieurs {xx}), les apostrophes (') DOIVENT \u00cdtre dupliqu\u00c8es -# ElÈments communs +# El\u00c8ments communs # Erreurs d'activation des plugins -plugin.error.insertionfailed = {0} : {1} - Echec d\u0027\u0027insertion de plugin\u00A0: {2} -plugin.error.cannotinstantiate = Impossible d\u0027\u0027instancier le plugin {0} -plugin.error.notallowed = Acc\u00E8s au plugin {0} refus\u00E9 -plugin.error.instantationfailed = Echec d\u0027\u0027instantiation du plugin {0}. +plugin.error.insertionfailed = {0} : {1} - Echec d''insertion de plugin\u00a0: {2} +plugin.error.cannotinstantiate = Impossible d''instancier le plugin {0} +plugin.error.notallowed = Acc\u00e8s au plugin {0} refus\u00e9 +plugin.error.instantationfailed = Echec d''instantiation du plugin {0}. plugin.error.failed = Echec du plugin. plugin.error.couldnotfind = Impossible de trouver le plugin {0} -plugin.error.notawikiplugin = La classe {0} n\u0027\u0027est pas un plugin Wiki. -plugin.error.missingparameter = Param\u00E8tre manquant dans la d\u00E9finition du plugin\u00A0: {0} -plugin.error.parsingarguments = Argh\u00A0! Probl\u00E8mes rencontr\u00E9s en analysant les arguments\u00A0: {0} +plugin.error.notawikiplugin = La classe {0} n''est pas un plugin Wiki. +plugin.error.missingparameter = Param\u00e8tre manquant dans la d\u00e9finition du plugin\u00a0: {0} +plugin.error.parsingarguments = Argh\u00a0! Probl\u00e8mes rencontr\u00e9s en analysant les arguments\u00a0: {0} # TableOfContents -tableofcontents.title = Table des mati\u00E8res +tableofcontents.title = Table des mati\u00e8res # BugReportHandler -bugreporthandler.new = Une nouvelle page a \u00E9t\u00E9 cr\u00E9\u00E9e\u00A0: {0} -bugreporthandler.unable = Impossible de cr\u00E9er une nouvelle page\u00A0! -bugreporthandler.titlerequired = Un titre est requis\u00A0! +bugreporthandler.new = Une nouvelle page a \u00e9t\u00e9 cr\u00e9\u00e9e\u00a0: {0} +bugreporthandler.unable = Impossible de cr\u00e9er une nouvelle page\u00a0! +bugreporthandler.titlerequired = Un titre est requis\u00a0! # CurrentTimePlugin -currenttimeplugin.badformat = Le format que vous avez sp\u00E9cifi\u00E9 est incorrect +currenttimeplugin.badformat = Le format que vous avez sp\u00e9cifi\u00e9 est incorrect # WeblogEntryPlugin -weblogentryplugin.newentry = Nouvelle entr\u00E9e -weblogentryplugin.postedby = Publi\u00E9 par {0}   +weblogentryplugin.newentry = Nouvelle entr\u00e9e +weblogentryplugin.postedby = Publi\u00e9 par {0}   weblogentryplugin.permalink = Permalien weblogentryplugin.addcomment = Ajouter nouveau commentaire ({0}) weblogentryplugin.more = (plus ) @@ -71,26 +71,47 @@ referringpagesplugin.more = ...et [{0} plus |{1}]\\\\ referringpagesplugin.nobody = ...personne # Plugins Forms -formclose.noneedtoshow = (inutile de montrer le bouton de fermeture imm\u00E9diatement) -forminput.namemissing = L\u0027\u00E9l\u00E9ment d\u0027entr\u00E9e requiert le param\u00E8tre "name". -forminput.noneedtoshow = (inutile de montrer le champ d\u0027entr\u00E9e imm\u00E9diatement) -formopen.missingparam = L\u0027\u0027\u00E9l\u00E9ment d\u0027\u0027ouverture requiert le param\u00E8tre "{0}". -formopen.postorgetonly = La m\u00E9thode doit Ítre "post" ou "get" -formopen.noneedtoshow = (inutile de montrer le bouton d\u0027ouverture imm\u00E9diatement) +formclose.noneedtoshow = (inutile de montrer le bouton de fermeture imm\u00e9diatement) +forminput.namemissing = L'\u00e9l\u00e9ment d'entr\u00e9e requiert le param\u00e8tre "name". +forminput.noneedtoshow = (inutile de montrer le champ d'entr\u00e9e imm\u00e9diatement) +formopen.missingparam = L''\u00e9l\u00e9ment d''ouverture requiert le param\u00e8tre "{0}". +formopen.postorgetonly = La m\u00e9thode doit \u00cdtre "post" ou "get" +formopen.noneedtoshow = (inutile de montrer le bouton d'ouverture imm\u00e9diatement) formoutput.missingargument = Argument "{0}" requis pour le plugin Form -formselect.namemissing = L\u0027\u00E9l\u00E9ment SELECT requiert le param\u00E8tre "name". -formtextarea.noneedtoshow = (inutile de montrer le champ de saisie imm\u00E9diatement) -formtextarea.namemissing = Le champ de saisie requiert le param\u00E8tre "name". +formselect.namemissing = L'\u00e9l\u00e9ment SELECT requiert le param\u00e8tre "name". +formtextarea.noneedtoshow = (inutile de montrer le champ de saisie imm\u00e9diatement) +formtextarea.namemissing = Le champ de saisie requiert le param\u00e8tre "name". # Plugin ListLocks plugin.listlocks.page=Page -plugin.listlocks.locked.by=Verrouill\u00E9e par -plugin.listlocks.acquired=Verrouill\u00E9e depuis -plugin.listlocks.expires=Verrouill\u00E9e jusqu\u0027\u00E0 -plugin.listlocks.no.locks.exist=Aucun verrou n\u0027est pos\u00E9 pour le moment. +plugin.listlocks.locked.by=Verrouill\u00e9e par +plugin.listlocks.acquired=Verrouill\u00e9e depuis +plugin.listlocks.expires=Verrouill\u00e9e jusqu'\u00e0 +plugin.listlocks.no.locks.exist=Aucun verrou n'est pos\u00e9 pour le moment. #Plugin Denounce -#denounce.denouncetext = <Le lien vers les moteurs de recherche d\u00E9sapprouv\u00E9s a \u00E9t\u00E9 supprim\u00E9> +#denounce.denouncetext = <Le lien vers les moteurs de recherche d\u00e9sapprouv\u00e9s a \u00e9t\u00e9 supprim\u00e9> # ReferringUndefinedPagesPlugin referringundefinedpagesplugin.more = ...et [{0} plus |{1}]\\\\ +CurrentTimePlugin=Ins\u00e9rer l'heure actuelle +Denounce=D\u00e9noncer un lien +Groups=Afficher tous les groupes Wiki +Image=Ins\u00e9rer une image +IfPlugin=SI Plugin +IndexPlugin=Index de toutes les pages +InsertPage=Ins\u00e9rer une autre page +ListLocksPlugin=Verrous de page de liste +Note=Note (info-bulle) +PageViewPlugin=Nombre de vues de cette page +RecentChangesPlugin=Affiche les pages r\u00e9cemment modifi\u00e9es +ReferredPagesPlugin=Liens sortants (pages r\u00e9f\u00e9renc\u00e9es) +ReferringPagesPlugin=Liens entrants (pages r\u00e9f\u00e9rentes) +ReferringUndefinedPagesPlugin=Pages contenant des liens morts +Search=Ins\u00e9rer une requ\u00eate de recherche +TableOfConents=Table des mati\u00e8res +UndefinedPagesPlugin=Liste des pages manquantes +UnusedPagesPlugin=Liste des pages orphelines +WeblogArchivePlugin=Affiche une liste d'articles de blog plus anciens +WeblogEntryPlugin=Cr\u00e9e un nouvel article de blog +WeblogPlugin=Cr\u00e9e un blog diff --git a/jspwiki-main/src/main/resources/plugin/PluginResources_it.properties b/jspwiki-main/src/main/resources/plugin/PluginResources_it.properties index 57bfc23076..7cd9e0907d 100644 --- a/jspwiki-main/src/main/resources/plugin/PluginResources_it.properties +++ b/jspwiki-main/src/main/resources/plugin/PluginResources_it.properties @@ -79,3 +79,24 @@ weblogentryplugin.permalink=Collegamento permanente weblogentryplugin.addcomment= Aggiungi un nuovo commento ({0}) weblogentryplugin.more=(Di pi\u00f9) insertpage.more=Di pi\u00f9... +CurrentTimePlugin=Inserisci l'ora corrente +Denounce=Denunciare un collegamento +Groups=Visualizza tutti i gruppi Wiki +Image=Inserisci un'immagine +IfPlugin=SE Plugin +IndexPlugin=Indice di tutte le pagine +InsertPage=Inserisci un'altra pagina +ListLocksPlugin=Elenco blocchi pagina +Note=Nota (suggerimento) +PageViewPlugin=Conta le visualizzazioni di questa pagina +RecentChangesPlugin=Visualizza le pagine modificate di recente +ReferredPagesPlugin=Link in uscita (pagine referenziate) +ReferringPagesPlugin=Link in entrata (pagine di riferimento) +ReferringUndefinedPagesPlugin=Pagine contenenti link non funzionanti +Search=Inserisci una query di ricerca +TableOfConents=Sommario +UndefinedPagesPlugin=Elenca le pagine mancanti +UnusedPagesPlugin=Elenca le pagine che sono rimaste orfane +WeblogArchivePlugin=Visualizza un elenco di voci di weblog pi\u00f9 vecchie +WeblogEntryPlugin=Crea una nuova voce del weblog +WeblogPlugin=Crea un weblog diff --git a/jspwiki-main/src/main/resources/plugin/PluginResources_nl.properties b/jspwiki-main/src/main/resources/plugin/PluginResources_nl.properties index 9438f4473d..b0fb8cb0af 100644 --- a/jspwiki-main/src/main/resources/plugin/PluginResources_nl.properties +++ b/jspwiki-main/src/main/resources/plugin/PluginResources_nl.properties @@ -87,3 +87,24 @@ referringundefinedpagesplugin.more = ... en {0} meer weblogentryplugin.postedby=Geplaatst door {0}   weblogentryplugin.more=(meer) insertpage.more=Meer... +CurrentTimePlugin=Voeg huidige tijd in +Denounce=Een link afwijzen +Groups=Bekijk alle Wiki-groepen +Image=Afbeelding invoegen +IfPlugin=IF-plug-in +IndexPlugin=Index van alle pagina's +InsertPage=Voeg nog een pagina in +ListLocksPlugin=Lijstpaginavergrendelingen +Note=Opmerking (tooltip) +PageViewPlugin=Aantal weergaven van deze pagina +RecentChangesPlugin=Geeft de recent gewijzigde pagina's weer +ReferredPagesPlugin=Uitgaande links (verwezen pagina's) +ReferringPagesPlugin=Inkomende links (verwijzende pagina's) +ReferringUndefinedPagesPlugin=Pagina's met dode links +Search=Een zoekopdracht invoegen +TableOfConents=Inhoudsopgave +UndefinedPagesPlugin=Lijst met ontbrekende pagina's +UnusedPagesPlugin=Lijst met pagina's die zijn verweesd +WeblogArchivePlugin=Geeft een lijst weer met oudere weblogberichten +WeblogEntryPlugin=Maakt een nieuw weblogbericht +WeblogPlugin=Bouwt een weblog diff --git a/jspwiki-main/src/main/resources/plugin/PluginResources_pt_BR.properties b/jspwiki-main/src/main/resources/plugin/PluginResources_pt_BR.properties index 3f903b204b..2016683a6a 100644 --- a/jspwiki-main/src/main/resources/plugin/PluginResources_pt_BR.properties +++ b/jspwiki-main/src/main/resources/plugin/PluginResources_pt_BR.properties @@ -79,3 +79,24 @@ weblogentryplugin.permalink=Link permanente weblogentryplugin.addcomment= Adicionar novo coment\u00e1rio ({0}) weblogentryplugin.more=(mais) insertpage.more=Mais... +CurrentTimePlugin=Inserir hora atual +Denounce=Denunciar um link +Groups=Ver todos os grupos Wiki +Image=Inserir uma imagem +IfPlugin=Plug-in SE +IndexPlugin=\u00cdndice de todas as p\u00e1ginas +InsertPage=Insira outra p\u00e1gina +ListLocksPlugin=Listar bloqueios de p\u00e1gina +Note=Nota (dica de ferramenta) +PageViewPlugin=N\u00famero de visualiza\u00e7\u00f5es desta p\u00e1gina +RecentChangesPlugin=Exibe as p\u00e1ginas alteradas recentemente. +ReferredPagesPlugin=Links externos (p\u00e1ginas referenciadas) +ReferringPagesPlugin=Links de entrada (p\u00e1ginas de refer\u00eancia) +ReferringUndefinedPagesPlugin=P\u00e1ginas contendo links quebrados +Search=Insira uma consulta de pesquisa +TableOfConents=\u00cdndice +UndefinedPagesPlugin=Liste as p\u00e1ginas que est\u00e3o faltando. +UnusedPagesPlugin=Liste as p\u00e1ginas que ficaram \u00f3rf\u00e3s. +WeblogArchivePlugin=Exibe uma lista de entradas antigas do blog. +WeblogEntryPlugin=Cria uma nova entrada no blog. +WeblogPlugin=Constr\u00f3i um blog diff --git a/jspwiki-main/src/main/resources/plugin/PluginResources_ru.properties b/jspwiki-main/src/main/resources/plugin/PluginResources_ru.properties index 6f484fe22f..35e7941611 100644 --- a/jspwiki-main/src/main/resources/plugin/PluginResources_ru.properties +++ b/jspwiki-main/src/main/resources/plugin/PluginResources_ru.properties @@ -79,3 +79,24 @@ weblogentryplugin.permalink=\u041f\u043e\u0441\u0442\u043e\u044f\u043d\u043d\u04 weblogentryplugin.addcomment= \u0414\u043e\u0431\u0430\u0432\u0438\u0442\u044c \u043d\u043e\u0432\u044b\u0439 \u043a\u043e\u043c\u043c\u0435\u043d\u0442\u0430\u0440\u0438\u0439 ({0}) weblogentryplugin.more=(\u0431\u043e\u043b\u0435\u0435) insertpage.more=\u0411\u043e\u043b\u0435\u0435... +CurrentTimePlugin=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0442\u0435\u043a\u0443\u0449\u0435\u0435 \u0432\u0440\u0435\u043c\u044f +Denounce=\u041e\u0442\u043a\u043b\u043e\u043d\u0438\u0442\u044c \u0441\u0441\u044b\u043b\u043a\u0443 +Groups=\u041f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u0435\u0442\u044c \u0432\u0441\u0435 \u0433\u0440\u0443\u043f\u043f\u044b Wiki +Image=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0438\u0437\u043e\u0431\u0440\u0430\u0436\u0435\u043d\u0438\u0435 +IfPlugin=\u0415\u0421\u041b\u0418 \u043f\u043b\u0430\u0433\u0438\u043d +IndexPlugin=\u0423\u043a\u0430\u0437\u0430\u0442\u0435\u043b\u044c \u0432\u0441\u0435\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 +InsertPage=\u0412\u0441\u0442\u0430\u0432\u0438\u0442\u044c \u0434\u0440\u0443\u0433\u0443\u044e \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u0443 +ListLocksPlugin=\u0421\u043f\u0438\u0441\u043e\u043a \u0431\u043b\u043e\u043a\u0438\u0440\u043e\u0432\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446 +Note=\u041f\u0440\u0438\u043c\u0435\u0447\u0430\u043d\u0438\u0435 (\u043f\u043e\u0434\u0441\u043a\u0430\u0437\u043a\u0430) +PageViewPlugin=\u041a\u043e\u043b\u0438\u0447\u0435\u0441\u0442\u0432\u043e \u043f\u0440\u043e\u0441\u043c\u043e\u0442\u0440\u043e\u0432 \u044d\u0442\u043e\u0439 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b +RecentChangesPlugin=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u043f\u043e\u0441\u043b\u0435\u0434\u043d\u0438\u0435 \u0438\u0437\u043c\u0435\u043d\u0435\u043d\u043d\u044b\u0435 \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b +ReferredPagesPlugin=\u0418\u0441\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 (\u0441\u0441\u044b\u043b\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b) +ReferringPagesPlugin=\u0412\u0445\u043e\u0434\u044f\u0449\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 (\u0441\u0441\u044b\u043b\u0430\u044e\u0449\u0438\u0435\u0441\u044f \u0441\u0442\u0440\u0430\u043d\u0438\u0446\u044b) +ReferringUndefinedPagesPlugin=\u0421\u0442\u0440\u0430\u043d\u0438\u0446\u044b, \u0441\u043e\u0434\u0435\u0440\u0436\u0430\u0449\u0438\u0435 \u043d\u0435\u0440\u0430\u0431\u043e\u0442\u0430\u044e\u0449\u0438\u0435 \u0441\u0441\u044b\u043b\u043a\u0438 +Search=\u0412\u0441\u0442\u0430\u0432\u044c\u0442\u0435 \u043f\u043e\u0438\u0441\u043a\u043e\u0432\u044b\u0439 \u0437\u0430\u043f\u0440\u043e\u0441 +TableOfConents=\u041e\u0433\u043b\u0430\u0432\u043b\u0435\u043d\u0438\u0435 +UndefinedPagesPlugin=\u0421\u043f\u0438\u0441\u043e\u043a \u043e\u0442\u0441\u0443\u0442\u0441\u0442\u0432\u0443\u044e\u0449\u0438\u0445 \u0441\u0442\u0440\u0430\u043d\u0438\u0446 +UnusedPagesPlugin=\u0421\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0440\u0430\u043d\u0438\u0446, \u043a\u043e\u0442\u043e\u0440\u044b\u0435 \u0431\u044b\u043b\u0438 \u043f\u043e\u0442\u0435\u0440\u044f\u043d\u044b +WeblogArchivePlugin=\u041e\u0442\u043e\u0431\u0440\u0430\u0436\u0430\u0435\u0442 \u0441\u043f\u0438\u0441\u043e\u043a \u0441\u0442\u0430\u0440\u044b\u0445 \u0437\u0430\u043f\u0438\u0441\u0435\u0439 \u0432 \u0431\u043b\u043e\u0433\u0435 +WeblogEntryPlugin=\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u043d\u043e\u0432\u0443\u044e \u0437\u0430\u043f\u0438\u0441\u044c \u0432 \u0432\u0435\u0431-\u0431\u043b\u043e\u0433\u0435 +WeblogPlugin=\u0421\u043e\u0437\u0434\u0430\u0435\u0442 \u0432\u0435\u0431\u043b\u043e\u0433 diff --git a/jspwiki-main/src/main/resources/plugin/PluginResources_zh_CN.properties b/jspwiki-main/src/main/resources/plugin/PluginResources_zh_CN.properties index cb2fd83c1e..7789201117 100644 --- a/jspwiki-main/src/main/resources/plugin/PluginResources_zh_CN.properties +++ b/jspwiki-main/src/main/resources/plugin/PluginResources_zh_CN.properties @@ -80,3 +80,24 @@ weblogentryplugin.permalink=\u6c38\u4e45\u94fe\u63a5 weblogentryplugin.addcomment=\u6dfb\u52a0\u65b0\u8bc4\u8bba ({0}) weblogentryplugin.more=\uff08\u66f4\u591a\u7684\uff09 insertpage.more=\u66f4\u591a\u7684... +CurrentTimePlugin=\u63d2\u5165\u5f53\u524d\u65f6\u95f4 +Denounce=\u8c34\u8d23\u94fe\u63a5 +Groups=\u67e5\u770b\u6240\u6709\u7ef4\u57fa\u7fa4\u7ec4 +Image=\u63d2\u5165\u56fe\u7247 +IfPlugin=\u5982\u679c\u63d2\u4ef6 +IndexPlugin=\u6240\u6709\u9875\u9762\u7684\u7d22\u5f15 +InsertPage=\u63d2\u5165\u53e6\u4e00\u9875 +ListLocksPlugin=\u5217\u8868\u9875\u9762\u9501\u5b9a +Note=\u6ce8\uff08\u5de5\u5177\u63d0\u793a\uff09 +PageViewPlugin=\u7edf\u8ba1\u6b64\u9875\u9762\u7684\u6d4f\u89c8\u91cf +RecentChangesPlugin=\u663e\u793a\u6700\u8fd1\u66f4\u6539\u7684\u9875\u9762 +ReferredPagesPlugin=\u5916\u90e8\u94fe\u63a5\uff08\u5f15\u7528\u9875\u9762\uff09 +ReferringPagesPlugin=\u5916\u90e8\u94fe\u63a5\uff08\u5f15\u7528\u9875\u9762\uff09 +ReferringUndefinedPagesPlugin=\u5305\u542b\u6b7b\u94fe\u63a5\u7684\u9875\u9762 +Search=\u63d2\u5165\u641c\u7d22\u67e5\u8be2 +TableOfConents=\u76ee\u5f55 +UndefinedPagesPlugin=\u5217\u51fa\u7f3a\u5931\u7684\u9875\u9762 +UnusedPagesPlugin=\u5217\u51fa\u5df2\u5b64\u7acb\u9875\u9762 +WeblogArchivePlugin=\u663e\u793a\u8f83\u65e9\u7684\u535a\u5ba2\u6587\u7ae0\u5217\u8868 +WeblogEntryPlugin=\u521b\u5efa\u65b0\u7684\u535a\u5ba2\u6587\u7ae0 +WeblogPlugin=\u5efa\u7acb\u535a\u5ba2 From 3f3447818f73099e619f1f00855c2a6265e69897 Mon Sep 17 00:00:00 2001 From: Alex O'Ree Date: Sun, 16 Nov 2025 08:22:55 -0500 Subject: [PATCH 4/6] JSPWIKI-1198 address pr comments --- .../org/apache/wiki/api/plugin/Plugin.java | 3 +- .../java/org/apache/wiki/plugin/Counter.java | 2 - .../wiki/ui/admin/beans/PluginBeanTest.java | 44 +++++++++++++++---- jspwiki-portable/build.xml | 6 --- jspwiki-portable/pom.xml | 6 --- 5 files changed, 38 insertions(+), 23 deletions(-) diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java b/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java index c7c5c23782..8e5bc47968 100644 --- a/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java +++ b/jspwiki-api/src/main/java/org/apache/wiki/api/plugin/Plugin.java @@ -54,7 +54,8 @@ public interface Plugin { * Provides the ability for a plugin to provide a suggestion or template * for execution within a wiki page. Default returns just the FQCN of the * plugin, which should enable it to fire off, however no parameters are - * plugin. + * provided in this case. Override it to provide example inputs to aid users + * with configuring your plugin. * * Example: com.company.Plugin inputParamter='test' * diff --git a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Counter.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Counter.java index baa4abd8d4..f164041afd 100644 --- a/jspwiki-main/src/main/java/org/apache/wiki/plugin/Counter.java +++ b/jspwiki-main/src/main/java/org/apache/wiki/plugin/Counter.java @@ -38,9 +38,7 @@ Licensed to the Apache Software Foundation (ASF) under one * * * @since 1.9.30 - * @deprecated use PageViewCounter */ -@Deprecated public class Counter implements Plugin { // private static Logger log = LogManager.getLogger( Counter.class ); diff --git a/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java b/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java index b9b7243cc7..c352e86f35 100644 --- a/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java +++ b/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java @@ -28,20 +28,48 @@ Licensed to the Apache Software Foundation (ASF) under one import javax.management.NotCompliantMBeanException; import java.util.Properties; - public class PluginBeanTest { - + Properties props = TestEngine.getTestProperties(); TestEngine testEngine; - + @Test public void testDoGet() throws WikiException, NotCompliantMBeanException { - testEngine = new TestEngine( props ); - final Context context = Wiki.context().create( testEngine, Wiki.contents().page( testEngine, "TestPage01" ) ); - final PluginBean pb = new PluginBean( testEngine ); - - Assertions.assertNotNull( pb.doGet( context ) ); + testEngine = new TestEngine(props); + final Context context = Wiki.context().create(testEngine, Wiki.contents().page(testEngine, "TestPage01")); + final PluginBean pb = new PluginBean(testEngine); + final String expectedHtml = + "
" + + "

Plugins

" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "" + + "
NameAliasAuthorNotes
CurrentTimePluginASF
DenounceASF
GroupsASF
IfPluginIfJanne Jalkanen
ImageASF
IndexPluginASF
InsertPageASF
ListLocksPluginASF
NoteJanne Jalkanen
PageViewPluginASF
RecentChangesPluginASF
ReferredPagesPluginASF
ReferringPagesPluginASF
ReferringUndefinedPagesPluginASF
SamplePluginsamplealiasJanne Jalkanen
SamplePlugin2samplealias2Janne Jalkanen
SearchASF
TableOfContentsASF
UndefinedPagesPluginASF
UnusedPagesPluginASF
WeblogArchivePluginASF
WeblogEntryPluginASF
WeblogPluginASF
" + + "
"; + Assertions.assertEquals(expectedHtml, pb.doGet(context)); } } diff --git a/jspwiki-portable/build.xml b/jspwiki-portable/build.xml index 7cf78085ca..1f1914992b 100644 --- a/jspwiki-portable/build.xml +++ b/jspwiki-portable/build.xml @@ -69,12 +69,6 @@ - - - - - - diff --git a/jspwiki-portable/pom.xml b/jspwiki-portable/pom.xml index c72b61e4cf..b675204d54 100644 --- a/jspwiki-portable/pom.xml +++ b/jspwiki-portable/pom.xml @@ -257,12 +257,6 @@ war provided
- - org.apache.jspwiki.it - jspwiki-test-plugin - ${project.version} - provided - org.apache.tomcat.embed From abfa0b7dbdbe8e207ebd233d62efa8c17f2ca057 Mon Sep 17 00:00:00 2001 From: Alex O'Ree Date: Sun, 16 Nov 2025 10:34:29 -0500 Subject: [PATCH 5/6] JSPWIKI-1198 fixes the build, adds the counter plugin to the xml file which will display it in the browser now --- jspwiki-it-tests/jspwiki-test-plugin/pom.xml | 2 +- jspwiki-main/src/main/resources/ini/jspwiki_module.xml | 4 ++++ .../java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java | 5 +++-- 3 files changed, 8 insertions(+), 3 deletions(-) diff --git a/jspwiki-it-tests/jspwiki-test-plugin/pom.xml b/jspwiki-it-tests/jspwiki-test-plugin/pom.xml index 562462ed76..339b15efa3 100644 --- a/jspwiki-it-tests/jspwiki-test-plugin/pom.xml +++ b/jspwiki-it-tests/jspwiki-test-plugin/pom.xml @@ -3,7 +3,7 @@ 4.0.0 org.apache.jspwiki.it - jspwiki-it-builder + jspwiki-it-tests 3.0.0-SNAPSHOT jspwiki-test-plugin diff --git a/jspwiki-main/src/main/resources/ini/jspwiki_module.xml b/jspwiki-main/src/main/resources/ini/jspwiki_module.xml index 22b5f80f11..3ef2883c25 100644 --- a/jspwiki-main/src/main/resources/ini/jspwiki_module.xml +++ b/jspwiki-main/src/main/resources/ini/jspwiki_module.xml @@ -57,6 +57,10 @@ ASF 2.4 + + + ASF + 1.9.30 ASF diff --git a/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java b/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java index c352e86f35..ebbc575a08 100644 --- a/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java +++ b/jspwiki-main/src/test/java/org/apache/wiki/ui/admin/beans/PluginBeanTest.java @@ -44,6 +44,7 @@ public void testDoGet() throws WikiException, NotCompliantMBeanException { + "

Plugins

" + "" + "" + + "" + "" + "" + "" @@ -60,8 +61,8 @@ public void testDoGet() throws WikiException, NotCompliantMBeanException { + "" + "" + "" - + "" - + "" + + "" + + "" + "" + "" + "" From 9faf47e8ff54c302a1b809d217725f662fa6ef2f Mon Sep 17 00:00:00 2001 From: Alex O'Ree Date: Sun, 16 Nov 2025 13:12:10 -0500 Subject: [PATCH 6/6] change log --- ChangeLog.md | 6 ++++++ jspwiki-api/src/main/java/org/apache/wiki/api/Release.java | 2 +- 2 files changed, 7 insertions(+), 1 deletion(-) diff --git a/ChangeLog.md b/ChangeLog.md index 2b9da84626..547fff3a16 100644 --- a/ChangeLog.md +++ b/ChangeLog.md @@ -16,6 +16,12 @@ KIND, either express or implied. See the License for the specific language governing permissions and limitations under the License. --> +**2025-11-16 Alex O'Ree (alexoree AT apache DOT org)** + +* _3.0.0-git-09_ + +* [JSPWIKI-1198](https://issues.apache.org/jira/browse/JSPWIKI-1198) - Plugin API change that enables all plugins to be internationalized and visible in the auto complete suggestion/snippet menu + **2025-11-16 Alex O'Ree (alexoree AT apache DOT org)** diff --git a/jspwiki-api/src/main/java/org/apache/wiki/api/Release.java b/jspwiki-api/src/main/java/org/apache/wiki/api/Release.java index 1a0998d2a9..b549a4c5ac 100644 --- a/jspwiki-api/src/main/java/org/apache/wiki/api/Release.java +++ b/jspwiki-api/src/main/java/org/apache/wiki/api/Release.java @@ -69,7 +69,7 @@ public final class Release { *

* If the build identifier is empty, it is not added. */ - public static final String BUILD = "08"; + public static final String BUILD = "09"; /** * This is the generic version string you should use when printing out the version. It is of

NameAliasAuthorNotes
CounterASF
CurrentTimePluginASF
DenounceASF
GroupsASF
ReferringUndefinedPagesPluginASF
SamplePluginsamplealiasJanne Jalkanen
SamplePlugin2samplealias2Janne Jalkanen
SearchASF
TableOfContentsASF
SearchASF
TableOfContentsASF
UndefinedPagesPluginASF
UnusedPagesPluginASF
WeblogArchivePluginASF