// License: GPL. For details, see LICENSE file.
package org.openstreetmap.josm.gui.help;
//import java.awt.Component;
//import java.util.Locale;
//
//import javax.swing.AbstractButton;
//import javax.swing.Action;
//import javax.swing.JComponent;
//import javax.swing.JMenu;
//import javax.swing.KeyStroke;
import org.openstreetmap.josm.Main;
//import org.openstreetmap.josm.actions.HelpAction;
//import org.openstreetmap.josm.tools.LanguageInfo;
/**
* GWT
*
* TODO
* parts commented out
*/
public class HelpUtil {
/**
* Replies the base wiki URL.
*
* @return the base wiki URL
*/
static public String getWikiBaseUrl() {
return Main.pref.get("help.baseurl", "http://josm.openstreetmap.de");
}
/**
* Replies the base wiki URL for help pages
*
* @return the base wiki URL for help pages
*/
static public String getWikiBaseHelpUrl() {
return getWikiBaseUrl() + "/wiki";
}
/**
* Replies the URL on the wiki for an absolute help topic. The URL is encoded in UTF-8.
*
* @param absoluteHelpTopic the absolute help topic
* @return the url
* @see #buildAbsoluteHelpTopic(String)
* @see #buildAbsoluteHelpTopic(String, Locale)
*/
static public String getHelpTopicUrl(String absoluteHelpTopic) {
String ret = getWikiBaseHelpUrl();
ret = ret.replaceAll("\\/+$", "");
absoluteHelpTopic =absoluteHelpTopic.replace(" ", "%20");
absoluteHelpTopic = absoluteHelpTopic.replaceAll("^\\/+", "/");
return ret + absoluteHelpTopic;
}
/**
* Replies the URL to the edit page for the absolute help topic.
*
* @param absoluteHelpTopic the absolute help topic
* @return the URL to the edit page
*/
static public String getHelpTopicEditUrl(String absoluteHelpTopic) {
String topicUrl = getHelpTopicUrl(absoluteHelpTopic);
topicUrl = topicUrl.replaceAll("#[^#]*$", ""); // remove optional fragment
return topicUrl + "?action=edit";
}
// /**
// * Extracts the relative help topic from an URL. Replies null, if
// * no relative help topic is found.
// *
// * @param url the url
// * @return the relative help topic in the URL, i.e. "/Action/New"
// */
// static public String extractRelativeHelpTopic(String url) {
// String topic = extractAbsoluteHelpTopic(url);
// if (topic == null) return null;
// String pattern = "/[A-Z][a-z]:" + getHelpTopicPrefix(Locale.ENGLISH).replaceAll("^\\/+", "");
// if (url.matches(pattern))
// return topic.substring(pattern.length());
// return null;
// }
// /**
// * Extracts the absolute help topic from an URL. Replies null, if
// * no absolute help topic is found.
// *
// * @param url the url
// * @return the absolute help topic in the URL, i.e. "/De:Help/Action/New"
// */
// static public String extractAbsoluteHelpTopic(String url) {
// if (!url.startsWith(getWikiBaseHelpUrl())) return null;
// url = url.substring(getWikiBaseHelpUrl().length());
// String prefix = getHelpTopicPrefix(Locale.ENGLISH);
// if (url.startsWith(prefix))
// return url;
//
// String pattern = "/[A-Z][a-z]:" + prefix.replaceAll("^\\/+", "");
// if (url.matches(pattern))
// return url;
//
// return null;
// }
// /**
// * Replies the help topic prefix for the current locale. Examples:
// * <ul>
// * <li>/Help if the current locale is a locale with language "en"</li>
// * <li>/De:Help if the current locale is a locale with language "de"</li>
// * </ul>
// *
// * @return the help topic prefix
// * @see #getHelpTopicPrefix(Locale)
// */
// static public String getHelpTopicPrefix() {
// return getHelpTopicPrefix(Locale.getDefault());
// }
// /**
// * Replies the help topic prefix for the given locale. Examples:
// * <ul>
// * <li>/Help if the locale is a locale with language "en"</li>
// * <li>/De:Help if the locale is a locale with language "de"</li>
// * </ul>
// *
// * @param locale the locale. {@see Locale#ENGLISH} assumed, if null.
// * @return the help topic prefix
// * @see #getHelpTopicPrefix(Locale)
// */
// static public String getHelpTopicPrefix(Locale locale) {
// if (locale == null) {
// locale = Locale.ENGLISH;
// }
// String ret = Main.pref.get("help.pathhelp", "/Help");
// ret = ret.replaceAll("^\\/+", ""); // remove leading /
// ret = "/" + LanguageInfo.getWikiLanguagePrefix(locale) + ret;
// return ret;
// }
// /**
// * Replies the absolute, localized help topic for the given topic.
// *
// * Example: for a topic "/Dialog/RelationEditor" and the locale "de", this method
// * replies "/De:Help/Dialog/RelationEditor"
// *
// * @param topic the relative help topic. Home help topic assumed, if null.
// * @param locale the locale. {@see Locale#ENGLISH} assumed, if null.
// * @return the absolute, localized help topic
// */
// static public String buildAbsoluteHelpTopic(String topic, Locale locale) {
// if (locale == null) {
// locale = Locale.ENGLISH;
// }
// if (topic == null || topic.trim().length() == 0 || topic.trim().equals("/"))
// return getHelpTopicPrefix(locale);
// String ret = getHelpTopicPrefix(locale);
// if (topic.startsWith("/")) {
// ret += topic;
// } else {
// ret += "/" + topic;
// }
// ret = ret.replaceAll("\\/+", "\\/"); // just in case, collapse sequences of //
// return ret;
// }
// /**
// * Replies the absolute, localized help topic for the given topic and the
// * current locale.
// *
// * @param topic the relative help topic. Home help topic assumed, if null.
// * @return the absolute, localized help topic
// * @see Locale#getDefault()
// * @see #buildAbsoluteHelpTopic(String, Locale)
// */
// static public String buildAbsoluteHelpTopic(String topic) {
// return buildAbsoluteHelpTopic(topic, Locale.getDefault());
// }
//
// /**
// * Replies the context specific help topic configured for <code>context</code>.
// *
// * @return the help topic. null, if no context specific help topic is found
// */
// static public String getContextSpecificHelpTopic(Object context) {
// if (context == null)
// return null;
// if (context instanceof Helpful)
// return ((Helpful)context).helpTopic();
// if (context instanceof JMenu) {
// JMenu b = (JMenu)context;
// if (b.getClientProperty("help") != null)
// return (String)b.getClientProperty("help");
// return null;
// }
// if (context instanceof AbstractButton) {
// AbstractButton b = (AbstractButton)context;
// if (b.getClientProperty("help") != null)
// return (String)b.getClientProperty("help");
// return getContextSpecificHelpTopic(b.getAction());
// }
// if (context instanceof Action)
// return (String)((Action)context).getValue("help");
// if (context instanceof JComponent && ((JComponent)context).getClientProperty("help") != null)
// return (String)((JComponent)context).getClientProperty("help");
// if (context instanceof Component)
// return getContextSpecificHelpTopic(((Component)context).getParent());
// return null;
// }
//
// /**
// * Replies the global help action, if available. Otherwise, creates an instance
// * of {@see HelpAction}.
// *
// * @return
// */
// static private Action getHelpAction() {
// try {
// return Main.main.menu.help;
// } catch(NullPointerException e) {
// return new HelpAction();
// }
// }
//
// /**
// * Makes a component aware of context sensitive help.
// *
// * A relative help topic doesn't start with /Help and doesn't include a locale
// * code. Example: /Dialog/RelationEditor is a relative help topic, /De:Help/Dialog/RelationEditor
// * is not.
// *
// * @param component the component the component
// * @param topic the help topic. Set to the default help topic if null.
// */
// static public void setHelpContext(JComponent component, String relativeHelpTopic) {
// if (relativeHelpTopic == null) {
// relativeHelpTopic = "/";
// }
// component.getInputMap(JComponent.WHEN_IN_FOCUSED_WINDOW).put(KeyStroke.getKeyStroke("F1"), "help");
// component.getActionMap().put("help", getHelpAction());
// component.putClientProperty("help", relativeHelpTopic);
// }
/**
* This is a simple marker method for help topic literals. If you declare a help
* topic literal in the source you should enclose it in ht(...).
*
* <strong>Example</strong>
* <pre>
* String helpTopic = ht("/Dialog/RelationEditor");
* or
* putValue("help", ht("/Dialog/RelationEditor"));
* </pre>
*
*
* @param helpTopic
*/
static public String ht(String helpTopic) {
// this is just a marker method
return helpTopic;
}
}