BlueCat Address Manager Copy to Clipboard on Hover

Add a copy to clipboard button to table cell while hovering over it in Table View in BlueCat Address Manager

当前为 2018-08-21 提交的版本,查看 最新版本

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Greasemonkey 油猴子Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Violentmonkey 暴力猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴Userscripts ,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey 篡改猴,才能安装此脚本。

您需要先安装一款用户脚本管理器扩展后才能安装此脚本。

(我已经安装了用户脚本管理器,让我安装!)

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展,比如 Stylus,才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

您需要先安装一款用户样式管理器扩展后才能安装此样式。

(我已经安装了用户样式管理器,让我安装!)

// ==UserScript==
// @name        BlueCat Address Manager Copy to Clipboard on Hover
// @namespace   *
// @description Add a copy to clipboard button to table cell while hovering over it in Table View in BlueCat Address Manager
// @include     */app*
// @version     3
// @grant       none
// @author      Marius Galm
// @copyright   2018, Marius Galm
// @license		MIT
// @icon        https://www.bluecatnetworks.com/wp-content/uploads/2018/03/cropped-bluecat-favicon-32x32.png
// @require     http://code.jquery.com/jquery-latest.js
// ==/UserScript==

//copy function
function copyThis() {
    var btn = document.getElementById("copybtn");
    if (btn !== undefined) {
        var parent = btn.parentNode;
        var text = parent.innerText.trim();
        if (text !== "") {
            copyTextToClipboard(text);
        } else {
            var span = parent.getElementsByTagName("span");
            if (span !== undefined) {
                var spantext = span[0].innerText.trim();
                copyTextToClipboard(spantext);
            }
        }
    }
};

function copyTextToClipboard(text) {
    var textArea = document.createElement("textarea");
    textArea.value = text;
    // Place in top-left corner of screen regardless of scroll position.
    textArea.style.position = 'fixed';
    textArea.style.top = 0;
    textArea.style.left = 0;
    // Ensure it has a small width and height. Setting to 1px / 1em
    // doesn't work as this gives a negative w/h on some browsers.
    textArea.style.width = '2em';
    textArea.style.height = '2em';
    // We don't need padding, reducing the size if it does flash render.
    textArea.style.padding = 0;
    // Clean up any borders.
    textArea.style.border = 'none';
    textArea.style.outline = 'none';
    textArea.style.boxShadow = 'none';
    // Avoid flash of white box if rendered for any reason.
    textArea.style.background = 'transparent';
    document.body.appendChild(textArea);
    textArea.focus();
    textArea.select();
    try {
        var successful = document.execCommand('copy');
        var msg = successful ? 'successful' : 'unsuccessful';
        var msgtext = 'Copying text command was ' + msg + '- Copied: "' +text+'"';
        //console.log('Copying text command was ' + msg);
        tempAlert(msgtext,1000);
    } catch (err) {
        console.log('Oops, unable to copy');
    }
    document.body.removeChild(textArea);
}

function tempAlert(msg,duration)
{
 var el = document.createElement("div");
 el.setAttribute("style","position:fixed;top:3%;left:50%;background-color:rgba(0,0,0,0);");
 el.innerHTML = msg;
 setTimeout(function(){
  el.parentNode.removeChild(el);
 },duration);
 document.body.appendChild(el);
}

if (document.readyState === "interactive" ) {

    //button to add
    var img = document.createElement('img');
    img.id = "copybtn";
    img.src = "/images/icons/small/copy.gif";
    img.border="0";
    img.style = "display: inline; height: 75%; padding-top: 2px;";
    img.alt="Copy to clipboard";
    img.title="Copy to clipboard";
    img.addEventListener('click', function () {
        copyThis();
    }, false);
    //console.log(img);

    //jQuery fix
    this.$ = this.jQuery = jQuery.noConflict(true);

    // object detail fields
    $(".detailsPane-fieldValue").hover(
        function () {
            //console.log($(this));
            if ($(this)[0].innerText.trim() !== "") {
                var text2 = $(this)[0].innerText;
                // if text doesn't contains newline
                //console.log(text2);
                var match = /\r|\n|^No$|^Yes$/.exec(text2);
                if (!match) {
                    if ($(this)[0].scrollWidth > $(this).innerWidth()) {
                        //Text has over-flown, add before the text (will collide with sCC though
                        $(this)[0].insertBefore(img,$(this)[0].firstChild);
                    } else {
                        // append
                        var parHeight = $(this)[0].scrollHeight;
                        if (parHeight >= 25) {
                            img.height = parHeight - 14;
                        } else if (parHeight >= 21) {
                            img.height = parHeight - 9;
                        } else {
                            //img.height = "75%";
                        }
                        $(this)[0].appendChild(img);
                    }
                    //console.log($(this));
                }
            }
        },
        function () {
            $("#copybtn").remove();
        }
    );

    // table values no header
    $("#outerTable tr td").not(':first').hover(
        function () {
            var list = $(this)[0].classList;
            if (list.contains("skinImage")||list.contains("first-selection")||list.contains("percent-bar-used")||list.contains("percent-bar-free")||list.contains("percent-bar")||list.contains("percent-bar-gateway")||list.contains("percent-bar-dhcp-reserved")||list.contains("percent-bar-static")||list.contains("percent-bar-dhcp-allocated")||list.contains("percent-bar-reserved")) {
                // list will probably grow
                //console.log($(this)[0].classList[0]);
            } else {
                if ($(this)[0].innerText.trim() !== "") {
                    var text2 = $(this)[0].innerText;
                    // if text doesn't contains newline
                    //console.log(text2);
                    var match = /\r|\n|^No$|^Yes$/.exec(text2);
                    if (!match) {
                        if ($(this)[0].scrollWidth > $(this).innerWidth()) {
                            //Text has over-flown, add before the text (will collide with sCC though
                            $(this)[0].insertBefore(img,$(this)[0].firstChild);
                        } else {
                            // append
                            var parHeight = $(this)[0].scrollHeight;
                            if (parHeight >= 25) {
                                img.height = parHeight - 14;
                            } else if (parHeight >= 21) {
                                img.height = parHeight - 9;
                            } else {
                                //img.height = "75%";
                            }
                            $(this)[0].appendChild(img);
                        }
                        //console.log($(this));
                    }
                }
            }
        },
        function () {
            $("#copybtn").remove();
        }
    );
}