File: outhtml_copy_clipboard.lua

package info (click to toggle)
highlight 4.10-1.1
  • links: PTS, VCS
  • area: main
  • in suites: forky, sid
  • size: 7,556 kB
  • sloc: cpp: 27,579; makefile: 411; sh: 341; ansic: 264; php: 236; python: 217; ruby: 132; perl: 61; tcl: 1
file content (48 lines) | stat: -rw-r--r-- 1,113 bytes parent folder | download | duplicates (3)
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48

Description="Adds copy to clipboard button to HTML output (beta)."

Categories = {"format", "html", "usability" }

function syntaxUpdate(desc)

  if (HL_OUTPUT ~= HL_FORMAT_HTML and HL_OUTPUT ~= HL_FORMAT_XHTML) then
    return
  end

  function DecorateLineBegin(lineNumber)

    if lineNumber==1 then
      return '<input type="button" value="&#128203;" class="hl_copy" style="position: absolute;right: 1em;">'
    end
  end

    FooterInjection=[=[
  <script type="text/javascript">
  /* <![CDATA[ */
  const hlButtons = document.querySelectorAll('input.hl_copy');

  hlButtons.forEach(cpButton => {
    cpButton.addEventListener('click', () => {
      const selection = window.getSelection();
      const range = document.createRange();
      range.selectNodeContents(cpButton.parentNode);
      selection.removeAllRanges();
      selection.addRange(range);

      try {
        document.execCommand('copy');
        selection.removeAllRanges();
        cpButton.value = "Copied.";
      } catch(e) {
      }
    });
  });
  /* ]]> */
  </script>
]=]

end

Plugins={
  { Type="lang", Chunk=syntaxUpdate },
}