GA follow

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

Versione datata 21/12/2016. Vedi la nuova versione l'ultima versione.

Dovrai installare un'estensione come Tampermonkey, Greasemonkey o Violentmonkey per installare questo script.

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

Dovrai installare un'estensione come Tampermonkey o Violentmonkey per installare questo script.

Dovrai installare un'estensione come Tampermonkey o Userscripts per installare questo script.

Dovrai installare un'estensione come ad esempio Tampermonkey per installare questo script.

Dovrai installare un gestore di script utente per installare questo script.

(Ho già un gestore di script utente, lasciamelo installare!)

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione come ad esempio Stylus per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

Dovrai installare un'estensione per la gestione degli stili utente per installare questo stile.

(Ho già un gestore di stile utente, lasciamelo installare!)

// ==UserScript==
// @name        GA follow
// @namespace   glav.su
// @description Быстрое управление подпиской в ленту. Кнопка "Читать/Отписаться" в поле информации об авторах постов.
// @include     http://glav.su/forum/*
// @include     https://glav.su/forum/*
// @version     1.0
// @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 = $(msg).find("td.fItem.forumMessagesListMessageAuthorName a")
					.attr('href').replace(/.*?\/members\/(\d+).*/, '$1');
			if( userUID == myUID ){
				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);		
		});
	});