auto_linker.ex (3332B)
1 defmodule AutoLinker do
2 @moduledoc """
3 Create url links from text containing urls.
4
5 Turns an input string like `"Check out google.com"` into
6 `Check out "<a href=\"http://google.com\" target=\"_blank\" rel=\"noopener noreferrer\">google.com</a>"`
7
8 ## Examples
9
10 iex> AutoLinker.link("http://google.com")
11 ~s(<a href="http://google.com" class="auto-linker" target="_blank" rel="noopener noreferrer">http://google.com</a>)
12
13 iex> AutoLinker.link("http://google.com", new_window: false, rel: false)
14 ~s(<a href="http://google.com" class="auto-linker">http://google.com</a>)
15
16 iex> AutoLinker.link("http://google.com", new_window: false, rel: false, class: false)
17 ~s(<a href="http://google.com">http://google.com</a>)
18
19 iex> AutoLinker.link("[Google](http://google.com)", markdown: true, new_window: false, rel: false, class: false)
20 ~s(<a href='http://google.com'>Google</a>)
21
22 iex> AutoLinker.link("[Google Search](http://google.com)", markdown: true)
23 ~s(<a href='http://google.com' class="auto-linker" target="_blank" rel="noopener noreferrer">Google Search</a>)
24 """
25
26 import AutoLinker.Parser
27
28 @doc """
29 Auto link a string.
30
31 Options:
32
33 * `class: "auto-linker"` - specify the class to be added to the generated link. false to clear
34 * `rel: "noopener noreferrer"` - override the rel attribute. false to clear
35 * `new_window: true` - set to false to remove `target='_blank'` attribute
36 * `scheme: false` - Set to true to link urls with schema `http://google`
37 * `truncate: false` - Set to a number to truncate urls longer then the number. Truncated urls will end in `..`
38 * `strip_prefix: false` - Strip the scheme prefix
39 * `exclude_class: false` - Set to a class name when you don't want urls auto linked in the html of the give class
40 * `exclude_id: false` - Set to an element id when you don't want urls auto linked in the html of the give element
41 * `exclude_patterns: ["```"]` - Don't link anything between the the pattern
42 * `markdown: false` - link markdown style links
43 * `email: false` - ignored
44 * `mention: false` - link @mentions (when `true`, requires `mention_prefix` or `mention_handler` options to be set)
45 * `mention_prefix: nil` - a prefix to build a link for a mention (example: `https://example.com/user/`)
46 * `mention_handler: nil` - a custom handler to validate and formart a mention
47 * `hashtag: false` - link #hashtags (when `true`, requires `hashtag_prefix` or `hashtag_handler` options to be set)
48 * `hashtag_prefix: nil` - a prefix to build a link for a hashtag (example: `https://example.com/tag/`)
49 * `hashtag_handler: nil` - a custom handler to validate and formart a hashtag
50 * `extra: false` - ignored, moved to detection if `extra_prefixes` is a non-empty list
51 * `extra_prefixes: ["magnet:?", …]` - list of prefixes that aren't http(s)://, mailto: or xmpp:
52
53 Each of the above options can be specified when calling `link(text, opts)`
54 or can be set in the `:auto_linker`'s configuration. For example:
55
56 config :auto_linker,
57 class: false,
58 new_window: false
59
60 Note that passing opts to `link/2` will override the configuration settings.
61 """
62 def link(text, opts \\ []) do
63 parse(text, opts)
64 end
65
66 def link_map(text, acc, opts \\ []) do
67 parse({text, acc}, opts)
68 end
69 end