UserNotes

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

当前为 2017-01-27 提交的版本,查看 最新版本

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