Changeset 16836 in josm for trunk


Ignore:
Timestamp:
2020-08-03T20:39:45+02:00 (4 years ago)
Author:
simon04
Message:

fix #18555 - Tag2Link: make search engine configurable

Advanced preference key tag2link.search

Location:
trunk
Files:
2 edited

Legend:

Unmodified
Added
Removed
  • trunk/src/org/openstreetmap/josm/tools/Tag2Link.java

    r16835 r16836  
    99import java.net.MalformedURLException;
    1010import java.net.URL;
     11import java.util.Arrays;
    1112import java.util.Collections;
     13import java.util.List;
    1214import java.util.Map;
    1315import java.util.function.UnaryOperator;
     
    1517import java.util.regex.Pattern;
    1618import java.util.stream.Collectors;
    17 import java.util.stream.Stream;
    1819
    1920import javax.json.Json;
     
    2324
    2425import org.openstreetmap.josm.data.osm.OsmUtils;
     26import org.openstreetmap.josm.data.preferences.CachingProperty;
    2527import org.openstreetmap.josm.data.preferences.ListProperty;
    2628import org.openstreetmap.josm.io.CachedFile;
     
    5961            Collections.singletonList("resource://META-INF/resources/webjars/tag2link/2020.8.3/index.json"));
    6062
     63    static final CachingProperty<List<String>> PREF_SEARCH_ENGINES = new ListProperty("tag2link.search",
     64            Arrays.asList("https://duckduckgo.com/?q=$1", "https://www.google.com/search?q=$1")).cached();
     65
    6166    private Tag2Link() {
    6267        // private constructor for utility class
     
    139144        // Search
    140145        if (key.matches("^(.+[:_])?name([:_]" + languagePattern + ")?$")) {
    141             linkConsumer.acceptLink(tr("Search on DuckDuckGo"), "https://duckduckgo.com/?q=" + value);
     146            PREF_SEARCH_ENGINES.get().forEach(url ->
     147                    linkConsumer.acceptLink(tr("Search on {0}", getHost(url, url)), url.replace("$1", Utils.encodeUrl(value))));
    142148        }
    143149
     
    192198
    193199    private static String getLinkName(String url, String fallback) {
     200        return tr("Open {0}", getHost(url, fallback));
     201    }
     202
     203    private static String getHost(String url, String fallback) {
    194204        try {
    195             return tr("Open {0}", new URL(url).getHost());
     205            return new URL(url).getHost().replaceFirst("^www\\.", "");
    196206        } catch (MalformedURLException e) {
    197             return tr("Open {0}", fallback);
     207            return fallback;
    198208        }
    199209    }
  • trunk/test/unit/org/openstreetmap/josm/tools/Tag2LinkTest.java

    r16834 r16836  
    4848     */
    4949    @Test
     50    public void testName() {
     51        Tag2Link.getLinksForTag("name", "foobar", this::addLink);
     52        checkLinks("Search on duckduckgo.com // https://duckduckgo.com/?q=foobar",
     53                "Search on google.com // https://www.google.com/search?q=foobar");
     54    }
     55
     56    /**
     57     * Unit test of function {@link Tag2Link#getLinksForTag}.
     58     */
     59    @Test
    5060    public void testWebsite() {
    5161        Tag2Link.getLinksForTag("website", "http://www.openstreetmap.org/", this::addLink);
    52         checkLinks("Open www.openstreetmap.org // http://www.openstreetmap.org/");
     62        checkLinks("Open openstreetmap.org // http://www.openstreetmap.org/");
    5363        links.clear();
    5464        Tag2Link.getLinksForTag("website", "https://www.openstreetmap.org/", this::addLink);
    55         checkLinks("Open www.openstreetmap.org // https://www.openstreetmap.org/");
     65        checkLinks("Open openstreetmap.org // https://www.openstreetmap.org/");
    5666        links.clear();
    5767        Tag2Link.getLinksForTag("website", "www.openstreetmap.org", this::addLink);
    58         checkLinks("Open www.openstreetmap.org // http://www.openstreetmap.org");
     68        checkLinks("Open openstreetmap.org // http://www.openstreetmap.org");
    5969    }
    6070
Note: See TracChangeset for help on using the changeset viewer.