Greasy Fork

来自缓存

Ninegag

9gag-link-helper on front-pages

// ==UserScript==
// @name        Ninegag
// @namespace   de.onenterframe.ninegag
// @description 9gag-link-helper on front-pages
// @include     *9gag.com/*
// @version     1.0.0
// @grant       none
// ==/UserScript==
var trace = function(o){
    console.log(o);
};

function insertCSS(){
    var css = '<style class="clippy">'
    + '#Clippy{position:fixed;left:calc(50% - 5em);top:85px;width:3em;height:3em;background:#000;border-radius:5px;box-shadow:0 0 5px 0 rgba(0,0,0,.5);z-index:-1;color:#FFF;font-weight:900;font-family:sans-serif;text-align:center;opacity:.00001;cursor:pointer;display:flex;flex-direction:row;flex-wrap:nowrap;justify-content:center;align-content:stretch;align-items:center}#Clippy i{display:none;flex:0 0 auto;align-self:center}#Clippy.active{z-index:100000;opacity:1}#Clippy.film i.fa-film,#Clippy.picture i.fa-picture-o{display:block}'
    + '</style>';
    css += '<link href="https://maxcdn.bootstrapcdn.com/font-awesome/4.7.0/css/font-awesome.min.css" rel="stylesheet">';
    $('head').append(css);
}
//
function insertVendors() {
    var scr = document.createElement('script'); 
    scr.src = 'https://cdnjs.cloudflare.com/ajax/libs/clipboard.js/1.6.1/clipboard.min.js';
    scr.onload = function() { 
       applyClippy();
    };
    document.body.appendChild(scr);
}
//
function insertBtnTemplates() {
    var tpl = '<button type="button" id="Clippy" class="btn clippy" data-clipboard-action="copy" data-clipboard-text=""><i class="fa fa-film" aria-hidden="true"></i><i class="fa fa-picture-o" aria-hidden="true"></i></button>';
    $('body').append(tpl);
}
//
function applyClippy() {
    
    var clippy = new Clipboard('#Clippy', {
        text: function(trigger) {
          return $(trigger).data('clipboard-text'); // source should somehow be copied from scope above it
        }
    });
    clippy.on('success', function(e) {
        /*
        console.info('Action:', e.action);
        console.info('Text:', e.text);
        console.info('Trigger:', e.trigger);
          //*/
        e.clearSelection();
    });

    clippy.on('error', function(e) {
        console.error('Action:', e.action);
        console.error('Trigger:', e.trigger);
    });
    
    $('#Clippy')
       .on('mouseenter', function(ev){
           ev.preventDefault();
           ev.stopImmediatePropagation();
           ev.stopPropagation();
           return false;
       })
    ;
    $('.post-container')
    .on('mouseover', 'a.badge-track', function(ev){
        if( !$(this).hasClass('badge-animated-cover') ) {
            // pictures:
            try {
                var src = $(this).find('img.badge-item-img').prop('src');
                var viewportOffset = $(this).parent()[0].getBoundingClientRect();
                var top = viewportOffset.top;
                $('#Clippy')
                   .addClass('picture')
                   .data('clipboard-text', src)
                   .addClass('active').css({
                       top: top + 60
                   })
                ;
            }
            catch(err) {
                trace(err)
            }
        } 
        if( $(this).hasClass('badge-animated-cover') ) {
            // videos:
            try {
                var poster = $(this).find('video').prop('poster');
                var video = $(this).find('video source[type="video/mp4"]').prop('src');
                var viewportOffset = $(this).parent()[0].getBoundingClientRect();
                var top = viewportOffset.top;
                var clip = '**click** ' + video + '\r\n' + poster;
                $('#Clippy')
                   .addClass('film')
                   .data('clipboard-text', clip)
                   .addClass('active').css({
                       top: top + 60
                   })
                ;
            }
            catch(err) {
                trace(err)
            }
        }
    })
    //*
    .on('mouseleave', 'a.badge-track', function(ev){
        if($(ev.relatedTarget).prop('id') != 'Clippy') {
           $('#Clippy').delay(1500).data('clipboard-text', '').removeClass('active film picture');
        }
    })
    //*/
    ;
    
}
//
$(function() {
    // !order
    insertBtnTemplates();
    insertCSS();
    insertVendors();
});