GA follow

Быстрое управление подпиской в ленту. Кнопка "Читать/Отписаться" в поле информации об авторах постов.

You will need to install an extension such as Tampermonkey, Greasemonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Violentmonkey to install this script.

You will need to install an extension such as Tampermonkey or Userscripts to install this script.

You will need to install an extension such as Tampermonkey to install this script.

You will need to install a user script manager extension to install this script.

(I already have a user script manager, let me install it!)

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install an extension such as Stylus to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

You will need to install a user style manager extension to install this style.

(I already have a user style manager, let me install it!)

// ==UserScript==
// @name        GA follow
// @namespace   glav.su
// @description Быстрое управление подпиской в ленту. Кнопка "Читать/Отписаться" в поле информации об авторах постов.
// @include     http://glav.su/forum/*
// @include     https://glav.su/forum/*
// @version     1.1
// @grant       none
// ==/UserScript==
function addStyle(styleText) {
	var style = document.createElement('style');
	if (document.head) {
		document.head.appendChild(style);
		style.innerHTML = styleText;
	}
}
addStyle([
	'.readButton, .unreadButton {',
		'cursor: pointer;',
		'display: inline-block;',
		'height: 20px;',
		'line-height: 20px;',
		'padding: 2px 6px;',
		'white-space: nowrap;',
		'width: 75px;',
		'text-align: center;',
		'border-radius: 5px;',
		'margin: 10px;',
	'}',
	'.readButton {',
		'color: #000;',
		'background-color: #fff;',
		'border: 1px solid #999;',
	'}',
	'.readButton:hover {',
		'background-color: #036;',
		'color: #fff;',
	'}',
	'.unreadButton {',
		'color: #fff;',
		'background-color: #369;',
		'border: 1px solid #036;',
	'}',
	'.unreadButton:hover {',
		'background-color: #900;',
	'}',
].join(''));

var myUID = $(".lUserPanelUserItemProfile").find('a[href^="'+APP_URL+'/members/"]')
		.attr('href').replace(/.*?\/members\/(\d+).*/, '$1');
		
var $sandbox = ( (s=$("#sandbox")).length == 1 )? 
		s : $('<div id="sandbox" style="display: none;">').appendTo( $(document.body) );//песочница
		
window.myFollows = ({
		list: {},
		update: function(callback){
			var _this = this;
			$.ajax({
				url: APP_URL + '/members/' + myUID + '/follows/',
				dataType: 'html',
				success: function(data){
					var dt = data.toString().replace(/[\n\r]/mg, '');
					$sandbox.empty()
						.html( dt.replace(/^.*(<div id="jsUF">.*?<\/table>\s*?<\/div>).*$/, '$1') );
					$sandbox.find('a').each(function(ax, a){
						_this.list[$(a).attr('href').replace(/.*?\/members\/(\d+).*/, '$1')] = 
							{ name: $(a).text(), };
					});
					$sandbox.empty();
					if( typeof callback == 'function' ){
						callback();
					}
				}
			});
			return this;
		},
		add_button: function(msg){
			var userUID = (nm_a = $(msg).find("td.fItem.forumMessagesListMessageAuthorName a")).length > 0 ?
					$(nm_a).attr('href').replace(/.*?\/members\/(\d+).*/, '$1') : '';
			if( userUID == myUID || userUID == ''){
				return true;
			}
			var messID = $(msg).attr("id").replace(/forumMessagesListMessage(\d+)/, "$1");
			var ifollow = +(typeof this.list[userUID] !== 'undefined');
			$(msg).find("td#forumMessagesListMessage" + messID + "AuthorInfo div.cBlock")
				.after($('<span class="' + ['readButton', 'unreadButton'][ifollow] + '" fw="' + ifollow + '">')
					.html( ['Читать', 'Читаю'][ifollow] )
					.hover(function(){
							$(this).html(['Читать', 'Отменить'][+($(this).attr('fw') == "1")]);
						},
						function(){
							$(this).html(['Читать', 'Читаю'][+($(this).attr('fw') == "1")]);
					})
					.click(function(){
						var _this = this;
						$.get(APP_URL + '/user/ajax/followmember/', {
								memberId: userUID,
							}, function (res) {
								if( res.status == 1 ){
									var fw = +(res.follower !== null);
									$(_this)
										.html( ['Читать', 'Читаю'][fw] )
										.attr( 'class', ['readButton', 'unreadButton'][fw] )
										.attr( 'fw', fw );
									if( fw == 0 ){
										delete window.myFollows.list[userUID];
									}else if( typeof window.myFollows.list[userUID] == 'undefined' ){
										window.myFollows.list[userUID] = res.follower;
									}
								}
							}, 'json');
					})
				);
		},
	}).update(function(){
		$("#forumMessagesList .forumMessagesListMessage").each(function(midx, msg){
			window.myFollows.add_button(msg);		
		});
	});