Advertisement
Guest User

Untitled

a guest
Mar 1st, 2020
236
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
text 2.83 KB | None | 0 0
  1. // ==UserScript==
  2. // @name DreamWidth - hide from latest
  3. // @author Red2, based on script by Tenno Seremel, with permission
  4. // @license CC BY-NC-SA
  5. // @namespace red-2
  6. // @match https://*.dreamwidth.org/*
  7. // @version 0.1
  8. // @grant GM_setValue
  9. // @grant GM_getValue
  10. // @run-at document-end
  11. // @noframes
  12. // ==/UserScript==
  13. 'use strict';
  14.  
  15. function find_parent_by_rule(element, parent_class_rule)
  16. {
  17. let result = null;
  18. let x = element;
  19.  
  20. while (x && !result && (x !== document)) {
  21. if (x.matches(parent_class_rule)) {
  22. result = x;
  23. }
  24. x = x.parentNode;
  25. }
  26.  
  27. return result;
  28. }
  29.  
  30. function hide_post(ev)
  31. {
  32. ev.preventDefault();
  33. let item = find_parent_by_rule(ev.currentTarget, '.usercontent');
  34. if (item) {
  35. item.parentNode.removeChild(item);
  36. }
  37. }
  38.  
  39. function get_user_name(entry)
  40. {
  41. let username = '';
  42.  
  43. let user_el = entry.querySelector('.author > .ljuser');
  44. if (user_el && user_el.hasAttribute('lj:user')) {
  45. username = user_el.getAttribute('lj:user');
  46. }
  47.  
  48. return username;
  49. }
  50.  
  51.  
  52. function block_author(ev)
  53. {
  54.  
  55. ev.preventDefault();
  56. let aUserName = '';
  57. let item = find_parent_by_rule(ev.currentTarget, '.usercontent');
  58. if (item) {
  59. aUserName = get_user_name(item);
  60. item.innerHTML = "Blocked posts by " + aUserName;
  61. if (aUserName) {
  62. add_user_name(aUserName);
  63. remove_user(aUserName);
  64. }
  65. }
  66.  
  67. }
  68.  
  69. function add_user_name(aName)
  70. {
  71. if (aName && (hiddenArray.indexOf(aName) < 0)){
  72. hiddenArray.push(aName);
  73. GM_setValue('hidden', hiddenArray.join(","));
  74. }
  75. }
  76.  
  77. function remove_user(aName)
  78. {
  79. let entries = document.querySelectorAll('.latest-entry');
  80. for(let entry of entries) {
  81. let myAuthor = get_user_name(entry);
  82. if (myAuthor && (myAuthor == aName)){
  83. entry.parentNode.removeChild(entry);
  84. }
  85. }
  86. }
  87.  
  88.  
  89. function add_button(container, text, handler)
  90. {
  91. let list_item = document.createElement('div');
  92. list_item.setAttribute('class', 'link');
  93.  
  94. let button = document.createElement('button');
  95. button.textContent = text;
  96. button.setAttribute('type', 'button');
  97. button.setAttribute('style', 'border:none;background:transparent;color:inherit;font:inherit;padding:0;cursor:pointer');
  98. button.addEventListener('click', handler, false);
  99.  
  100. list_item.appendChild(button);
  101. container.appendChild(list_item);
  102. }
  103.  
  104. let actions = document.querySelectorAll('.author');
  105. let entries = document.querySelectorAll('.latest-entry');
  106. let hiddenArray = GM_getValue('hidden', '').split(",");
  107. for(let entry of entries) {
  108. let myAuthor = get_user_name(entry);
  109. if (myAuthor && (hiddenArray.indexOf(myAuthor) >= 0)){
  110. entry.parentNode.removeChild(entry);
  111. }
  112. }
  113. for (let action of actions) {
  114. add_button(action, 'Скрыть пост', hide_post);
  115. add_button(action, 'Заблокировать', block_author);
  116. }
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement