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
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..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
@@ -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;
@@ -48,5 +49,34 @@ 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
+ * provided in this case. Override it to provide example inputs to aid users
+ * with configuring your 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
+ *
+ *
+ * @param locale
+ * @since 3.0.0
+ * @return String
+ */
+ default String getDisplayName(Locale locale) {
+ return this.getClass().getSimpleName();
+ }
}
diff --git a/jspwiki-it-tests/jspwiki-test-plugin/pom.xml b/jspwiki-it-tests/jspwiki-test-plugin/pom.xml
new file mode 100644
index 0000000000..339b15efa3
--- /dev/null
+++ b/jspwiki-it-tests/jspwiki-test-plugin/pom.xml
@@ -0,0 +1,18 @@
+
+
+ 4.0.0
+
+ org.apache.jspwiki.it
+ jspwiki-it-tests
+ 3.0.0-SNAPSHOT
+
+ jspwiki-test-plugin
+ jar
+
+
+ org.apache.jspwiki
+ jspwiki-main
+ ${project.version}
+
+
+
\ No newline at end of file
diff --git a/jspwiki-it-tests/jspwiki-test-plugin/readme.txt b/jspwiki-it-tests/jspwiki-test-plugin/readme.txt
new file mode 100644
index 0000000000..3997bd9f9b
--- /dev/null
+++ b/jspwiki-it-tests/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-it-tests/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
new file mode 100644
index 0000000000..41b52edb92
--- /dev/null
+++ b/jspwiki-it-tests/jspwiki-test-plugin/src/main/java/org/apache/jspwiki/jspwiki/test/plugin/JspwikiTestPlugin.java
@@ -0,0 +1,36 @@
+/*
+ * 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
+ *
+ */
+public class JspwikiTestPlugin implements Plugin {
+
+ public JspwikiTestPlugin() {
+ }
+
+ @Override
+ public String execute(Context context, Map params) throws PluginException {
+ return "HelloWorld
";
+ }
+}
diff --git a/jspwiki-it-tests/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
new file mode 100644
index 0000000000..80a7487ea4
--- /dev/null
+++ b/jspwiki-it-tests/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-it-tests/jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml b/jspwiki-it-tests/jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml
new file mode 100644
index 0000000000..08e4f49d19
--- /dev/null
+++ b/jspwiki-it-tests/jspwiki-test-plugin/src/main/resources/ini/jspwiki_module.xml
@@ -0,0 +1,8 @@
+
+
+
+ Apache
+ 3.0.0
+ JspwikiTestPlugin
+
+
diff --git a/jspwiki-it-tests/pom.xml b/jspwiki-it-tests/pom.xml
index 0b5c323ab7..60ba7a015f 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/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/DefaultPluginManager.java b/jspwiki-main/src/main/java/org/apache/wiki/plugin/DefaultPluginManager.java
index 89e990d134..e7dfdb5a80 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;
/**
@@ -719,4 +721,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/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/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/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 c31ae6fda1..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,9 +51,15 @@ 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;
/**
@@ -80,8 +86,81 @@ 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<>();
+ 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) ) {
+ continue;
+ }
+ } else {
+ SimpleSnipData data = new SimpleSnipData();
+ data.snip = p.getSnipExample();
+ data.displayName = p.getDisplayName(locale);
+ 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 +239,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..e96c2a27e1 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",
+ //"":"",
+ //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"
+ }
+ }
+ ]
},
@@ -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-main/src/main/resources/ini/jspwiki_module.xml b/jspwiki-main/src/main/resources/ini/jspwiki_module.xml
index 4dab13c7c6..3ef2883c25 100644
--- a/jspwiki-main/src/main/resources/ini/jspwiki_module.xml
+++ b/jspwiki-main/src/main/resources/ini/jspwiki_module.xml
@@ -26,38 +26,129 @@
-->
-
-
- 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
+ 1.9.30
+
+
+ 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..fd0ed87ee8 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 (tooltip)
+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/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
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..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
@@ -28,29 +28,49 @@ 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 );
- final String expectedHtml = "" +
- "
Plugins
" +
- "
" +
- "| Name | Alias | Author | Notes |
" +
- "| IfPlugin | If | Janne Jalkanen | |
" +
- "| Note | | Janne Jalkanen | |
" +
- "| SamplePlugin | samplealias | Janne Jalkanen | |
" +
- "| SamplePlugin2 | samplealias2 | Janne Jalkanen | |
" +
- "
" +
- "
";
- Assertions.assertEquals( expectedHtml, 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
"
+ + "
"
+ + "| Name | Alias | Author | Notes |
"
+ + "| Counter | | ASF | |
"
+ + "| CurrentTimePlugin | | ASF | |
"
+ + "| Denounce | | ASF | |
"
+ + "| Groups | | ASF | |
"
+ + "| IfPlugin | If | Janne Jalkanen | |
"
+ + "| Image | | ASF | |
"
+ + "| IndexPlugin | | ASF | |
"
+ + "| InsertPage | | ASF | |
"
+ + "| ListLocksPlugin | | ASF | |
"
+ + "| Note | | Janne Jalkanen | |
"
+ + "| PageViewPlugin | | ASF | |
"
+ + "| RecentChangesPlugin | | ASF | |
"
+ + "| ReferredPagesPlugin | | ASF | |
"
+ + "| ReferringPagesPlugin | | ASF | |
"
+ + "| ReferringUndefinedPagesPlugin | | ASF | |
"
+ + "| SamplePlugin | samplealias | Janne Jalkanen | |
"
+ + "| SamplePlugin2 | samplealias2 | Janne Jalkanen | |
"
+ + "| Search | | ASF | |
"
+ + "| TableOfContents | | ASF | |
"
+ + "| UndefinedPagesPlugin | | ASF | |
"
+ + "| UnusedPagesPlugin | | ASF | |
"
+ + "| WeblogArchivePlugin | | ASF | |
"
+ + "| WeblogEntryPlugin | | ASF | |
"
+ + "| WeblogPlugin | | ASF | |
"
+ + "
"
+ + "
";
+ Assertions.assertEquals(expectedHtml, pb.doGet(context));
}
}
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..1f1914992b 100644
--- a/jspwiki-portable/build.xml
+++ b/jspwiki-portable/build.xml
@@ -75,6 +75,7 @@
+
diff --git a/jspwiki-war/src/main/scripts/jspwiki-common.js b/jspwiki-war/src/main/scripts/jspwiki-common.js
index 650ff44423..e6673089f7 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 f7c91d768c..5c62a76e9e 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);
},