github.phpd.cn/cilium/cilium@v1.6.12/Documentation/_static/copybutton.js (about)

     1  function runWhenDOMLoaded(cb) {
     2    if (document.readyState !== "loading") {
     3      cb();
     4    } else if (document.addEventListener) {
     5      document.addEventListener("DOMContentLoaded", cb);
     6    } else {
     7      document.attachEvent("onreadystatechange", function() {
     8        if (document.readyState == "complete") cb();
     9      });
    10    }
    11  }
    12  
    13  function codeCellId(index) {
    14    return "codecell" + index;
    15  }
    16  
    17  function clearSelection() {
    18    if (window.getSelection) {
    19      window.getSelection().removeAllRanges();
    20    } else if (document.selection) {
    21      document.selection.empty();
    22    }
    23  }
    24  
    25  function addCopyButtonToCodeCells() {
    26    if (window.ClipboardJS === undefined) {
    27      setTimeout(addCopyButtonToCodeCells, 1000);
    28      return;
    29    }
    30    var codeCells = document.querySelectorAll(".rst-content pre");
    31    codeCells.forEach(function(codeCell, index) {
    32      var wrapper = document.createElement("div");
    33      wrapper.className = "code-wrapper";
    34      codeCell.parentNode.insertBefore(wrapper, codeCell);
    35      wrapper.appendChild(codeCell);
    36      var id = codeCellId(index);
    37      codeCell.setAttribute("id", id);
    38      function clipboardButton(id) {
    39        var linesCount = codeCell.textContent.trim().split("\n").length;
    40        var buttonHtml = [];
    41        buttonHtml.push('<div class="copybutton-wrapper">');
    42        buttonHtml.push(
    43          '<img class="copy-icon" src="data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABwAAAAcCAMAAABF0y+mAAAABGdBTUEAALGPC/xhBQAAAAFzUkdCAK7OHOkAAACiUExURUdwTAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAAJkEv5MAAAA1dFJOUwAwnr/H5BShnG3DCRPPm5OdyC4jGzHhB7o4AmkDyTJE1vn6ymWjbAHtTIQE6dwNoGH71I2zlJ78SQAAAI9JREFUKM/t0kcOwkAMhWGnTZhUOoQWeu8w979aJEDiOWhGOQD/wpL1LbwxER32ivUU9E0e6zXsngDOfWLJGBZVwl36i6H4FL3mCDGfeqygDegkFjYZ9wEbQ37ZVoCu5Oj/sSLaBnSCTjPUYSv2upkOqSeigRbJcPPdYs1xNYMlPbHvvWyXgOcHe/vbdUPmCj5KFX8s6tJBAAAAAElFTkSuQmCC" alt="" />'
    44        );
    45        buttonHtml.push(
    46          '<a class="copybutton" data-clipboard-mode="first-line" data-clipboard-target="#' +
    47            id +
    48            '">'
    49        );
    50        buttonHtml.push(linesCount > 1 ? "Copy First Line" : "Copy Line");
    51        buttonHtml.push("</a>");
    52        if (linesCount > 1) {
    53          buttonHtml.push(
    54            '<a class="copybutton" data-clipboard-mode="all"  data-clipboard-target="#' +
    55              id +
    56              '">'
    57          );
    58          buttonHtml.push("Copy All");
    59          buttonHtml.push("</a>");
    60        }
    61        buttonHtml.push("</div>");
    62        return buttonHtml.join("\n");
    63      }
    64      codeCell.insertAdjacentHTML("afterend", clipboardButton(id));
    65    });
    66  
    67    new ClipboardJS(".copybutton", {
    68      text: function(trigger) {
    69        var parent = trigger.parentNode.parentNode;
    70        var code = parent.querySelector("pre");
    71        var mode = trigger.getAttribute("data-clipboard-mode");
    72        if (mode === "first-line") {
    73          return code.textContent
    74            .split("\n")[0]
    75            .trim()
    76            .replace(/^\$/, "")
    77            .trim();
    78        } else {
    79          return code.textContent;
    80        }
    81      }
    82    });
    83  }
    84  
    85  runWhenDOMLoaded(addCopyButtonToCodeCells);