GA follow

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

  1. // ==UserScript==
  2. // @name GA follow
  3. // @namespace glav.su
  4. // @description Быстрое управление подпиской в ленту. Кнопка "Читать/Отписаться" в поле информации об авторах постов.
  5. // @include http://glav.su/forum/*
  6. // @include https://glav.su/forum/*
  7. // @version 1.1
  8. // @grant none
  9. // ==/UserScript==
  10. function addStyle(styleText) {
  11. var style = document.createElement('style');
  12. if (document.head) {
  13. document.head.appendChild(style);
  14. style.innerHTML = styleText;
  15. }
  16. }
  17. addStyle([
  18. '.readButton, .unreadButton {',
  19. 'cursor: pointer;',
  20. 'display: inline-block;',
  21. 'height: 20px;',
  22. 'line-height: 20px;',
  23. 'padding: 2px 6px;',
  24. 'white-space: nowrap;',
  25. 'width: 75px;',
  26. 'text-align: center;',
  27. 'border-radius: 5px;',
  28. 'margin: 10px;',
  29. '}',
  30. '.readButton {',
  31. 'color: #000;',
  32. 'background-color: #fff;',
  33. 'border: 1px solid #999;',
  34. '}',
  35. '.readButton:hover {',
  36. 'background-color: #036;',
  37. 'color: #fff;',
  38. '}',
  39. '.unreadButton {',
  40. 'color: #fff;',
  41. 'background-color: #369;',
  42. 'border: 1px solid #036;',
  43. '}',
  44. '.unreadButton:hover {',
  45. 'background-color: #900;',
  46. '}',
  47. ].join(''));
  48.  
  49. var myUID = $(".lUserPanelUserItemProfile").find('a[href^="'+APP_URL+'/members/"]')
  50. .attr('href').replace(/.*?\/members\/(\d+).*/, '$1');
  51. var $sandbox = ( (s=$("#sandbox")).length == 1 )?
  52. s : $('<div id="sandbox" style="display: none;">').appendTo( $(document.body) );//песочница
  53. window.myFollows = ({
  54. list: {},
  55. update: function(callback){
  56. var _this = this;
  57. $.ajax({
  58. url: APP_URL + '/members/' + myUID + '/follows/',
  59. dataType: 'html',
  60. success: function(data){
  61. var dt = data.toString().replace(/[\n\r]/mg, '');
  62. $sandbox.empty()
  63. .html( dt.replace(/^.*(<div id="jsUF">.*?<\/table>\s*?<\/div>).*$/, '$1') );
  64. $sandbox.find('a').each(function(ax, a){
  65. _this.list[$(a).attr('href').replace(/.*?\/members\/(\d+).*/, '$1')] =
  66. { name: $(a).text(), };
  67. });
  68. $sandbox.empty();
  69. if( typeof callback == 'function' ){
  70. callback();
  71. }
  72. }
  73. });
  74. return this;
  75. },
  76. add_button: function(msg){
  77. var userUID = (nm_a = $(msg).find("td.fItem.forumMessagesListMessageAuthorName a")).length > 0 ?
  78. $(nm_a).attr('href').replace(/.*?\/members\/(\d+).*/, '$1') : '';
  79. if( userUID == myUID || userUID == ''){
  80. return true;
  81. }
  82. var messID = $(msg).attr("id").replace(/forumMessagesListMessage(\d+)/, "$1");
  83. var ifollow = +(typeof this.list[userUID] !== 'undefined');
  84. $(msg).find("td#forumMessagesListMessage" + messID + "AuthorInfo div.cBlock")
  85. .after($('<span class="' + ['readButton', 'unreadButton'][ifollow] + '" fw="' + ifollow + '">')
  86. .html( ['Читать', 'Читаю'][ifollow] )
  87. .hover(function(){
  88. $(this).html(['Читать', 'Отменить'][+($(this).attr('fw') == "1")]);
  89. },
  90. function(){
  91. $(this).html(['Читать', 'Читаю'][+($(this).attr('fw') == "1")]);
  92. })
  93. .click(function(){
  94. var _this = this;
  95. $.get(APP_URL + '/user/ajax/followmember/', {
  96. memberId: userUID,
  97. }, function (res) {
  98. if( res.status == 1 ){
  99. var fw = +(res.follower !== null);
  100. $(_this)
  101. .html( ['Читать', 'Читаю'][fw] )
  102. .attr( 'class', ['readButton', 'unreadButton'][fw] )
  103. .attr( 'fw', fw );
  104. if( fw == 0 ){
  105. delete window.myFollows.list[userUID];
  106. }else if( typeof window.myFollows.list[userUID] == 'undefined' ){
  107. window.myFollows.list[userUID] = res.follower;
  108. }
  109. }
  110. }, 'json');
  111. })
  112. );
  113. },
  114. }).update(function(){
  115. $("#forumMessagesList .forumMessagesListMessage").each(function(midx, msg){
  116. window.myFollows.add_button(msg);
  117. });
  118. });