您需要先安装一个扩展,例如 篡改猴、Greasemonkey 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 暴力猴,之后才能安装此脚本。
您需要先安装一个扩展,例如 篡改猴 或 Userscripts ,之后才能安装此脚本。
您需要先安装一款用户脚本管理器扩展,例如 Tampermonkey,才能安装此脚本。
您需要先安装用户脚本管理器扩展后才能安装此脚本。
Rollover for user info and follow button.
当前为
// ==UserScript== // @name FollowOver // @namespace https://www.ekkooff.com/ // @version 1.3.0 // @description Rollover for user info and follow button. // @author Kevin Roberts (@echo) // @match https://gab.ai/* // @include https://gab.ai/* // @grant none // ==/UserScript== (function() { 'use strict'; var styles, userInfoPopup, loadingPopup; var addToBody = function() { $('body').append(styles).append(userInfoPopup).append(loadingPopup); if($('body').css('background-color')!=='rgba(0, 0, 0, 0)'&&$('body').css('background-color')!=='transparent') { var bgcolor = $('body').css('background-color'); userInfoPopup.css('background-color',bgcolor); loadingPopup.css('background-color',bgcolor); $('#followpopup-followback').css('background-color',bgcolor); } $('#followpopup-follow').click(function() { var id = $(this).data('id'); var d = {}; if($(this).text()==='Unfollow'||$(this).text()==='Pending') { d._method = 'delete'; } var priv = $(this).hasClass('private'); $.ajax({ method: 'POST', url: '/users/'+id+'/follow', data: d }).done(function(data) { if(data.state==='success') { if(d._method) { $('#followpopup-follow').text('Follow').removeClass().addClass('follow'); if($('#followpopup-followback i').hasClass('ion-arrow-swap')) { $('#followpopup-followback i').removeClass().addClass('ion-arrow-left-c'); } } else if(!priv) { $('#followpopup-follow').text('Unfollow').removeClass().addClass('unfollow'); if($('#followpopup-followback i').hasClass('ion-arrow-left-c')) { $('#followpopup-followback i').removeClass().addClass('ion-arrow-swap'); } } else { $('#followpopup-follow').text('Pending').removeClass().addClass('pending'); } if(priv) { $('#followpopup-follow').addClass('private'); } } }); return false; }); }; var init = function() { if(!window.hasOwnProperty('$')) { setTimeout(init,100); return; } var timeout=null; var timeout2=null; var id=null; //addToBody(); styles = $('<style type="text/css">\n\ #followpopup {\n\ font-family: freight-sans-pro!important;\n\ background-color:white;\n\ position:absolute;\n\ z-index:10000;\n\ display:none;\n\ height:140px;\n\ width:500px;\n\ padding:4px;\n\ border:1px solid #666;\n\ border-radius:5px;\n\ }\n\ #followpopup-loading {\n\ position: absolute;\n\ z-index: 9999;\n\ }\n\ #followpopup-loading .spinning {\n\ display: inline-block;\n\ animation-name: spin;\n\ animation-duration: 1500ms;\n\ animation-iteration-count: infinite;\n\ animation-timing-function: linear;\n\ }\n\ \n\ #followpopup-head {\n\ text-align: center;\n\ margin-bottom:3px;\n\ }\n\ #followpopup-head span {\n\ padding-right:5px;\n\ }\n\ \n\ #followpopup-bio {\n\ height: 82px;\n\ overflow: hidden;\n\ word-wrap: break-word;\n\ -ms-word-break: break-all;\n\ overflow-wrap: break-word;\n\ word-break: break-word;\n\ text-overflow: ellipsis;\n\ margin-bottom:5px;\n\ }\n\ \n\ #followpopup-info {\n\ border: 1px solid #edeeee;\n\ overflow:hidden;\n\ white-space: nowrap;\n\ text-overflow: ellipsis;\n\ border-radius:4px;\n\ display:block;\n\ width:100%;\n\ height: 28px;\n\ position:relative;\n\ }\n\ \n\ #followpopup-follow {\n\ right:0;\n\ position:absolute;\n\ width:55px;\n\ color: white;\n\ text-decoration: none;\n\ padding: 5px 10px;\n\ display: inline-block;\n\ }\n\ \n\ #followpopup-info span {\n\ border-right: 1px solid #edeeee;\n\ padding: 3px;\n\ display: inline-block;\n\ }\n\ \n\ #followpopup #followpopup-followback {\n\ background-color: white;\n\ right:75px;\n\ position:absolute;\n\ padding-right: 6px;\n\ height: 100%;\n\ }\n\ \n\ #followpopup .follow {\n\ background: #34cf7f;\n\ }\n\ \n\ #followpopup .unfollow {\n\ background: red;\n\ }\n\ \n\ #followpopup .pending {\n\ background: #edeeee;\n\ color: #000;\n\ }\n\ \n\ #followpopup .empty {\n\ background: transparent;\n\ }\n\ #followpopup .ion-checkmark-circled.verified-badge {\n\ background:transparent;\n\ color:#33f!important;\n\ }\n\ \n\ </style>'); userInfoPopup = $('<div id="followpopup">\ <div id="followpopup-head">\ <strong><span id="followpopup-name"></span></strong>\ <span id="followpopup-username"></span>\ </div>\ <div id="followpopup-bio"></div>\ <div id="followpopup-info">\ ?<span id="followpopup-score"></span>\ <span id="followpopup-posts"></span>\ <span id="followpopup-followers"></span>\ <span id="followpopup-following"></span>\ <span id="followpopup-followback"></span>\ <a href="#" id="followpopup-follow"></a>\ </div>\ </div>'); loadingPopup = $('<div id="followpopup-loading"><i class="ion-load-c spinning"> </i></div>'); var targets = 'a.post__meta__name__full, a.post__meta__name__username, .notification-list .notification-list__item__message div:first-child span a:first-child, .notification-list__item__users a, a.notification-list__item__mention__name, a.notification-list__item__mention__username, a.inner-post-mention, a.profile-badge__name, a.profile-badge__username'; var nameTarget = 'span.mini-user-list__item__name'; var usernameTarget = 'span.mini-user-list__item__username'; var allTargets = targets+', '+nameTarget+', '+usernameTarget; var populatePopup = function(data,css) { id = data.id; if(!$('#followpopup').length) addToBody(); $('#followpopup-name').html(data.name+(data.verified?' <i class="ion-checkmark-circled verified-badge"></i>':'')); $('#followpopup-username').text('@'+data.username); $('#followpopup-bio').text(data.bio); $('#followpopup-score').text(data.score); $('#followpopup-posts').text(data.post_count+' posts'); $('#followpopup-followers').text(data.follower_count+' followers'); $('#followpopup-following').text(data.following_count+' following'); if(data.followed) { if(data.following) { $('#followpopup-followback').html('<i class="ion-arrow-swap"></i>'); } else { $('#followpopup-followback').html('<i class="ion-arrow-left-c"></i>'+(data.is_accessible?'':'?')); } } else { $('#followpopup-followback').html((data.is_accessible?'':'?')); } $('#followpopup-follow').data('id',id); if(authUser.username!=data.username) { if(data.follow_pending) { $('#followpopup-follow').text('Pending').removeClass().addClass('pending'); } else if(!data.following) { $('#followpopup-follow').text('Follow').removeClass().addClass('follow'); } else { $('#followpopup-follow').text('Unfollow').removeClass().addClass('unfollow'); } } else { $('#followpopup-follow').text('').removeClass().addClass('empty'); } if(data.is_private) { $('#followpopup-follow').addClass('private'); } userInfoPopup.css(css).show(); }; var getUserInfo = function(name,e) { clearTimeout(timeout); var offset = $(e.currentTarget).offset(); var offset2 = $(e.currentTarget.parentElement).offset(); var height = $(window).height(); var width = $(window).width(); var css = { top:((e.clientY<(height/2))?offset.top+25:offset.top-160)+'px', left:(((width-515)>offset2.left)?offset2.left:width-515)+'px' }; var loadingCss = { top: ((e.clientY<(height/2))?offset.top+25:offset.top-25)+'px', left: offset.left }; loadingPopup.css(loadingCss).show(); $.ajax({ method: 'GET', url: '/users/'+name, headers: { 'Authorization': 'Bearer '+localStorage.id_token } }).done(function(data) { loadingPopup.hide(); populatePopup(data,css); }).error(function(data) { loadingPopup.hide(); }); }; $('body').on('mouseenter',targets ,function(e){ clearTimeout(timeout); clearTimeout(timeout2); var name = e.currentTarget.href.substr(e.currentTarget.href.lastIndexOf('/')+1); timeout2 = setTimeout(function() { getUserInfo(name,e); },500); }).on('mouseenter',nameTarget,function(e) { clearTimeout(timeout); clearTimeout(timeout2); var name = $(e.currentTarget).next().text().substring(1); timeout2 = setTimeout(function() { getUserInfo(name,e); },500); }).on('mouseenter',usernameTarget,function(e) { clearTimeout(timeout); clearTimeout(timeout2); var name = $(e.currentTarget).text().substring(1); timeout2 = setTimeout(function() { getUserInfo(name,e); },500); }).on('click',allTargets,function(e){ clearTimeout(timeout); clearTimeout(timeout2); userInfoPopup.hide(); }).on('mouseleave',allTargets,function(){ clearTimeout(timeout2); timeout = setTimeout(function(){ loadingPopup.hide(); userInfoPopup.hide(); }, 650); }); (function(history){ var pushState = history.pushState; history.pushState = function(state) { if (typeof history.onpushstate == "function") { history.onpushstate({state: state}); } clearTimeout(timeout); clearTimeout(timeout2); userInfoPopup.hide(); return pushState.apply(history, arguments); }; })(window.history); userInfoPopup.mouseenter(function() { clearTimeout(timeout); clearTimeout(timeout2); loadingPopup.hide(); }).mouseleave(function() { clearTimeout(timeout2); timeout = setTimeout(function() { loadingPopup.hide(); userInfoPopup.hide(); }, 650); }); }; window.addEventListener('load',init,false); })();