[niconico video] Add the "Add My List" button to mylist page

Add the "Add My List" button to niconico video mylist page

  1. // ==UserScript==
  2. // @name [niconico video] Add the "Add My List" button to mylist page
  3. // @name:ja [ニコニコ動画] マイリストページからマイリストするボタンを追加
  4. // @description Add the "Add My List" button to niconico video mylist page
  5. // @description:ja マイリストページからマイリストするボタンを追加
  6. // @namespace masshiro.blog
  7. // @version 20200412
  8. // @author masshiro
  9. // @license MIT License
  10. // @match http://www.nicovideo.jp/mylist/*
  11. // @match https://www.nicovideo.jp/mylist/*
  12. // @grant none
  13. // ==/UserScript==
  14.  
  15. (function () {
  16. 'use strict';
  17.  
  18. var addButtons = function () {
  19. var span = document.createElement('span');
  20. span.style='color:#F00;text-decoration:underline;cursor:pointer';
  21. span.innerHTML='追加';
  22.  
  23. var a = document.createElement('a');
  24. a.className = 'addmylist';
  25. a.appendChild(span);
  26.  
  27. a.addEventListener('click',function () {
  28. window.open('http://www.nicovideo.jp/mylist_add/video/' + encodeURIComponent(document.querySelectorAll('.SYS_box_item')[0].querySelectorAll('a')[0].getAttribute('href').replace('watch/','')), 'nicomylistadd', 'width=500, height=400, menubar=no, scrollbars=no');
  29. },false);
  30.  
  31. Array.prototype.forEach.call(document.querySelectorAll('.SYS_box_item_buttons p'), function(item,i) {
  32. if(typeof item.querySelectorAll('a.addmylist')[0] === 'undefined'){
  33. var as = a.cloneNode(true);
  34. as.addEventListener('click',function () {
  35. window.open('http://www.nicovideo.jp/mylist_add/video/' + encodeURIComponent(document.querySelectorAll('.SYS_box_item')[i].querySelectorAll('a')[0].getAttribute('href').replace('watch/','')), 'nicomylistadd', 'width=500, height=400, menubar=no, scrollbars=no');
  36. },false);
  37. item.appendChild(as);
  38. }
  39. });
  40. };
  41. var DOMObserverTimer = false;
  42. var DOMObserverConfig = {
  43. attributes: true,
  44. childList: true,
  45. subtree: true
  46. };
  47. var DOMObserver = new MutationObserver(function () {
  48. if (DOMObserverTimer !== 'false') {
  49. clearTimeout(DOMObserverTimer);
  50. }
  51. DOMObserverTimer = setTimeout(function () {
  52. DOMObserver.disconnect();
  53. addButtons();
  54. DOMObserver.observe(document.body, DOMObserverConfig);
  55. }, 100);
  56. });
  57. DOMObserver.observe(document.body, DOMObserverConfig);
  58.  
  59. })();