UserNotes

Скрипт для Лепры, позволяющий видеть, добавлять и изменять заметки прямо в посте и на глагне

当前为 2022-03-26 提交的版本,查看 最新版本

  1. // ==UserScript==
  2. // @name UserNotes
  3. // @author Gipnokote
  4. // @version 1.11
  5. // @namespace https://leprosorium.ru/*
  6. // @include https://*leprosorium.ru/*
  7. // @description Скрипт для Лепры, позволяющий видеть, добавлять и изменять заметки прямо в посте и на глагне
  8. // @license MIT
  9. // run-at document-end
  10. // ==/UserScript==
  11.  
  12.  
  13.  
  14. unsafeWindow.getNote = function(user_id, user_login){
  15. var userLinks = $$('div.ddi a.c_user[data-user_id='+user_id+']');
  16. var userNotes = $$('div.ddi span.usernote_'+user_id);
  17. userNotes.destroy();
  18. var noteRequest = new futuAjaxNew({
  19. type : 'GET',
  20. button : document.createElement('div'),
  21. url : router.generate('user_note'),
  22. data : 'user_login=' + encodeURIComponent(user_login) + '&author_login=' + encodeURIComponent(globals.user.login),
  23. onLoadFunction : function (response) {
  24. if (response.user_notes && response.user_notes[0]) {
  25. userLinks.map(function injectNotes(userLink) {
  26. var userNote = document.createElement('span');
  27. userNote.setAttribute('class', 'usernote_' + user_id);
  28. userNote.innerHTML = ', [<span style="color:green;cursor:pointer;" onClick="setUserNote('+response.user_notes[0].id+', \''+user_id+'\', \''+user_login+'\', \''+response.user_notes[0].body.replace(/"/g,'&quot;')+'\'); return false;">'+response.user_notes[0].body+'</span>]';
  29. userNote.inject(userLink, 'after');
  30. });
  31. } else {
  32. userLinks.map(function injectNotes(userLink) {
  33. var userNote = document.createElement('span');
  34. userNote.setAttribute('class', 'usernote_' + user_id);
  35. userNote.innerHTML = ', [<span style="color:green;cursor:pointer;" onClick="setUserNote(null, \''+user_id+'\', \''+user_login+'\', \'\');">+</span>]';
  36. userNote.inject(userLink, 'after');
  37. });
  38. }
  39. }
  40. });
  41. };
  42.  
  43. unsafeWindow.setNote = function (id, user_id, user_login, note) {
  44. var type;
  45. var url;
  46. if (id) {
  47. type = 'PUT';
  48. url = router.generate('user_note_set', {
  49. note_id : id
  50. });
  51. } else {
  52. type = 'POST';
  53. url = router.generate('user_note');
  54. }
  55.  
  56. var noteRequest = new futuAjaxNew ({
  57. button: document.createElement("div"),
  58. type: type,
  59. url: url,
  60. headerContentType: 'application/json',
  61. data: JSON.stringify({user_login: user_login, body: note}),
  62. onLoadFunction : function (response) {
  63. getNote(user_id, user_login);
  64. }
  65. });
  66. };
  67.  
  68. unsafeWindow.setUserNote = function (id, user_id, user_login, currentNote){
  69. var z = prompt('Введите заметку:',currentNote);
  70. if (z!==null) {
  71. setNote(id, user_id, user_login, z);
  72. }
  73. };
  74.  
  75. function eliminateDuplicates(arr) {
  76. var hashTable = {};
  77.  
  78. return arr.filter(function (el) {
  79. var key = JSON.stringify(el);
  80. var match = Boolean(hashTable[key]);
  81.  
  82. return (match ? false : hashTable[key] = true);
  83. });
  84. }
  85.  
  86. function chunk(arr, chunkSize) {
  87. if (chunkSize <= 0) return [];
  88. var R = [];
  89. for (var i=0,len=arr.length; i<len; i+=chunkSize)
  90. R.push(arr.slice(i,i+chunkSize));
  91. return R;
  92. }
  93.  
  94. var uids = eliminateDuplicates($$('div.ddi a.c_user').getProperties('data-user_id', 'data-user_login'));
  95. var uid_chunks = chunk(uids, 5);
  96.  
  97. uid_chunks.map(function process(uid_chunk, index) {
  98. setTimeout(function() {
  99. uid_chunk.map(function process(uid) {
  100. getNote(uid['data-user_id'], uid['data-user_login']);
  101. });
  102. }, index * 250);
  103. });