Advertisement
pastuh

Youtube subscription search

Mar 19th, 2019
271
0
Never
Not a member of Pastebin yet? Sign Up, it unlocks many cool features!
  1. // ==UserScript==
  2. // @name           Youtube subscription search
  3. // @namespace      https://www.youtube.com/
  4. // @include        https://www.youtube.com/*
  5. // @grant          GM_addStyle
  6. // @require http://code.jquery.com/jquery-latest.js
  7. // ==/UserScript==
  8.  
  9. GM_addStyle(`
  10. #subSearch {
  11. width: 100%;
  12. padding: 6px 10px;
  13. font-size: 16px;
  14. color: #666;
  15. background: #fff;
  16. cursor:pointer;
  17. }
  18. #subSearch:hover {
  19. background: #dcdcdc;
  20. }
  21. input#subSearch:focus {
  22.   background-color: yellow;
  23. }
  24. ytd-guide-collapsible-entry-renderer[can-show-more],
  25. #expander-item,
  26. #collapser-item {
  27. background-color: #e1e1e1 !important;
  28. }
  29. `);
  30.  
  31. $(function(){
  32.     let sub_titles;
  33.     let more_titles;
  34.  
  35.     let $sub_block = $('#sections').find('ytd-guide-section-renderer').eq(2);
  36.     $sub_block.prepend(
  37.         `
  38. <input id="subSearch" type="text" placeholder="Find subscription"/>
  39. `
  40.     );
  41.  
  42.     sub_titles = $sub_block.find('#items').children('ytd-guide-entry-renderer').find('.title').toArray();
  43.  
  44.     $sub_block.on('keyup clear', '#subSearch', filterSubscriptions);
  45.     $sub_block.on('click', 'ytd-guide-collapsible-entry-renderer', clearFilter);
  46.  
  47.     function filterSubscriptions(e) {
  48.         const search_text = e.target.value.toLowerCase();
  49.  
  50.         sub_titles.forEach(function(subscription) {
  51.             const item = subscription.textContent;
  52.             if( item.toLowerCase().indexOf(search_text) != -1 ) {
  53.                 $(subscription).closest('ytd-guide-entry-renderer').css('display','block');
  54.             } else {
  55.                 $(subscription).closest('ytd-guide-entry-renderer').css('display','none');
  56.             }
  57.         });
  58.     }
  59.  
  60.     function clearFilter() {
  61.         let checkExist = setInterval(function() {
  62.             let attr = $sub_block.find('#items').children('ytd-guide-collapsible-entry-renderer').attr('expanded');
  63.  
  64.             if ( typeof attr !== undefined && attr !== false ) {
  65.                 $('#subSearch').val('').focus();
  66.                 $( "#subSearch" ).trigger( "clear" );
  67.  
  68.                 more_titles = $sub_block.find('#items #expandable-items').children('ytd-guide-entry-renderer').find('.title').toArray();
  69.                 if(sub_titles.length < more_titles.length) {
  70.                     sub_titles.push.apply(sub_titles, more_titles);
  71.                 }
  72.  
  73.                 clearInterval(checkExist);
  74.             }
  75.         }, 100);
  76.  
  77.     }
  78.  
  79. });
Advertisement
Add Comment
Please, Sign In to add comment
Advertisement