Weasyl nested messages

Will group messages on the notification center - journals are grouped by user and the rest is grouped by submission

  1. // ==UserScript==
  2. // @name Weasyl nested messages
  3. // @namespace binarte.com.weasylmessages
  4. // @description Will group messages on the notification center - journals are grouped by user and the rest is grouped by submission
  5. // @include https://www.weasyl.com/messages/notifications*
  6. // @version 1
  7. // @grant none
  8. // permitir colagem
  9. // ==/UserScript==
  10. try {
  11. //console.log(journals);
  12. function compactItems(journals, refClass) {
  13. var newjournals = document.createElement('div');
  14. journals.parentNode.insertBefore(newjournals, journals);
  15. var journalDivs = {
  16. };
  17. var cur = journals.firstChild;
  18. while (cur) {
  19. var next = cur.nextSibling;
  20. if (cur.className === 'item') {
  21. var user
  22. if (refClass) {
  23. user = cur.getElementsByClassName(refClass) [0].href;
  24. } else {
  25. user = cur.getElementsByTagName('a');
  26. user = user[user.length - 1].href;
  27. }
  28. var jdiv = journalDivs[user];
  29. if (typeof jdiv == 'undefined') {
  30. jdiv = journalDivs[user] = document.createElement('div');
  31. jdiv.style.overflow = 'hidden';
  32. newjournals.appendChild(jdiv);
  33. } else if (!jdiv.ExpandButton) {
  34. var btn = document.createElement('span');
  35. jdiv.Counter = document.createElement('span');
  36. jdiv.Counter.textContent = '(2)';
  37. jdiv.Count = 2;
  38.  
  39. var ref = jdiv.firstChild.getElementsByClassName('date')[0];
  40. ref.parentNode.insertBefore(jdiv.Counter,ref);
  41. jdiv.ExpandButton = btn;
  42. btn.innerHTML = '⨁';
  43. btn.title = 'Expand';
  44. btn.style.display = 'block';
  45. btn.style.position = 'absolute';
  46. btn.style.zIndex = '10';
  47. btn.style.cursor='pointer';
  48. btn.style.marginLeft='-1em';
  49. btn.Div = jdiv;
  50. btn.Collapsed = true;
  51. btn.CollapsedHeight = '' + (cur.offsetHeight - 3) + 'px';
  52. btn.onclick = function () {
  53. if (this.Collapsed) {
  54. this.Div.style.maxHeight = '';
  55. if (this.Div.Counter){
  56. this.Div.Counter.style.display = 'none';
  57. }
  58. this.Collapsed = false;
  59. this.innerHTML = '⨀';
  60. this.title = 'Collapse';
  61. } else {
  62. this.Div.style.maxHeight = this.CollapsedHeight;
  63. if (this.Div.Counter){
  64. this.Div.Counter.style.display = '';
  65. }
  66. this.Collapsed = true;
  67. this.innerHTML = '⨁';
  68. this.title = 'Expand';
  69. }
  70. }
  71. var checkbox = jdiv.getElementsByTagName('input') [0];
  72. console.log(checkbox);
  73. checkbox.ExpandButton = btn;
  74. checkbox.Div = jdiv;
  75. checkbox.onchange = function () {
  76. if (this.ExpandButton.Collapsed) {
  77. var inputs = this.Div.getElementsByTagName('input');
  78. for (var i = 1; i < inputs.length; i++) {
  79. var cur = inputs[i];
  80. cur.checked = this.checked;
  81. cur = cur.nextSibling;
  82. }
  83. }
  84. }
  85. jdiv.style.maxHeight = btn.CollapsedHeight;
  86. jdiv.insertBefore(btn, jdiv.firstChild);
  87. } else {
  88. jdiv.Counter.textContent = '(' + (++jdiv.Count) + ')';
  89. }
  90. jdiv.appendChild(cur);
  91. }
  92. cur = next;
  93. }
  94. newjournals.id = journals.id;
  95. journals.parentNode.removeChild(journals);
  96. }
  97. var journals = document.getElementById('journals');
  98. if (journals) {
  99. compactItems(journals, 'username');
  100. }
  101. var types = [
  102. 'shouts',
  103. 'submission_comments',
  104. 'user_favorites',
  105. 'character_comments',
  106. 'journal_comments'
  107. ];
  108. for (var i = 0; i < types.length; i++) {
  109. var type = types[i];
  110. var shouts = document.getElementById(type);
  111. if (shouts) {
  112. compactItems(shouts, false);
  113. }
  114. }
  115. } catch (ex) {
  116. console.log(ex);
  117. }