mirror of
				https://github.com/iv-org/invidious.git
				synced 2025-10-27 03:08:31 -05:00 
			
		
		
		
	
		
			
				
	
	
		
			150 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
			
		
		
	
	
			150 lines
		
	
	
		
			5.9 KiB
		
	
	
	
		
			JavaScript
		
	
	
	
	
	
| 'use strict';
 | |
| 
 | |
| (function () {
 | |
|     var video_player = document.getElementById('player_html5_api');
 | |
|     if (video_player) {
 | |
|         video_player.onmouseenter = function () { video_player['data-title'] = video_player['title']; video_player['title'] = ''; };
 | |
|         video_player.onmouseleave = function () { video_player['title'] = video_player['data-title']; video_player['data-title'] = ''; };
 | |
|         video_player.oncontextmenu = function () { video_player['title'] = video_player['data-title']; };
 | |
|     }
 | |
| 
 | |
|     // For dynamically inserted elements
 | |
|     addEventListener('click', function (e) {
 | |
|         if (!e || !e.target) return;
 | |
| 
 | |
|         var t = e.target;
 | |
|         var handler_name = t.getAttribute('data-onclick');
 | |
| 
 | |
|         switch (handler_name) {
 | |
|             case 'jump_to_time':
 | |
|                 e.preventDefault();
 | |
|                 var time = t.getAttribute('data-jump-time');
 | |
|                 player.currentTime(time);
 | |
|                 break;
 | |
|             case 'get_youtube_replies':
 | |
|                 var load_more = t.getAttribute('data-load-more') !== null;
 | |
|                 var load_replies = t.getAttribute('data-load-replies') !== null;
 | |
|                 get_youtube_replies(t, load_more, load_replies);
 | |
|                 break;
 | |
|             case 'toggle_parent':
 | |
|                 e.preventDefault();
 | |
|                 toggle_parent(t);
 | |
|                 break;
 | |
|             default:
 | |
|                 break;
 | |
|         }
 | |
|     });
 | |
| 
 | |
|     document.querySelectorAll('[data-mouse="switch_classes"]').forEach(function (el) {
 | |
|         var classes = el.getAttribute('data-switch-classes').split(',');
 | |
|         var classOnEnter = classes[0];
 | |
|         var classOnLeave = classes[1];
 | |
|         function toggle_classes(toAdd, toRemove) {
 | |
|             el.classList.add(toAdd);
 | |
|             el.classList.remove(toRemove);
 | |
|         }
 | |
|         el.onmouseenter = function () { toggle_classes(classOnEnter, classOnLeave); };
 | |
|         el.onmouseleave = function () { toggle_classes(classOnLeave, classOnEnter); };
 | |
|     });
 | |
| 
 | |
|     document.querySelectorAll('[data-onsubmit="return_false"]').forEach(function (el) {
 | |
|         el.onsubmit = function () { return false; };
 | |
|     });
 | |
| 
 | |
|     document.querySelectorAll('[data-onclick="mark_watched"]').forEach(function (el) {
 | |
|         el.onclick = function () { mark_watched(el); };
 | |
|     });
 | |
|     document.querySelectorAll('[data-onclick="mark_unwatched"]').forEach(function (el) {
 | |
|         el.onclick = function () { mark_unwatched(el); };
 | |
|     });
 | |
|     document.querySelectorAll('[data-onclick="add_playlist_video"]').forEach(function (el) {
 | |
|         el.onclick = function () { add_playlist_video(el); };
 | |
|     });
 | |
|     document.querySelectorAll('[data-onclick="add_playlist_item"]').forEach(function (el) {
 | |
|         el.onclick = function () { add_playlist_item(el); };
 | |
|     });
 | |
|     document.querySelectorAll('[data-onclick="remove_playlist_item"]').forEach(function (el) {
 | |
|         el.onclick = function () { remove_playlist_item(el); };
 | |
|     });
 | |
|     document.querySelectorAll('[data-onclick="revoke_token"]').forEach(function (el) {
 | |
|         el.onclick = function () { revoke_token(el); };
 | |
|     });
 | |
|     document.querySelectorAll('[data-onclick="remove_subscription"]').forEach(function (el) {
 | |
|         el.onclick = function () { remove_subscription(el); };
 | |
|     });
 | |
|     document.querySelectorAll('[data-onclick="notification_requestPermission"]').forEach(function (el) {
 | |
|         el.onclick = function () { Notification.requestPermission(); };
 | |
|     });
 | |
| 
 | |
|     document.querySelectorAll('[data-onrange="update_volume_value"]').forEach(function (el) {
 | |
|         function update_volume_value() {
 | |
|             document.getElementById('volume-value').textContent = el.value;
 | |
|         }
 | |
|         el.oninput = update_volume_value;
 | |
|         el.onchange = update_volume_value;
 | |
|     });
 | |
| 
 | |
| 
 | |
|     function revoke_token(target) {
 | |
|         var row = target.parentNode.parentNode.parentNode.parentNode.parentNode;
 | |
|         row.style.display = 'none';
 | |
|         var count = document.getElementById('count');
 | |
|         count.textContent--;
 | |
| 
 | |
|         var url = '/token_ajax?action_revoke_token=1&redirect=false' +
 | |
|             '&referer=' + encodeURIComponent(location.href) +
 | |
|             '&session=' + target.getAttribute('data-session');
 | |
| 
 | |
|         var payload = 'csrf_token=' + target.parentNode.querySelector('input[name="csrf_token"]').value;
 | |
| 
 | |
|         helpers.xhr('POST', url, {payload: payload}, {
 | |
|             onNon200: function (xhr) {
 | |
|                 count.textContent++;
 | |
|                 row.style.display = '';
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     function remove_subscription(target) {
 | |
|         var row = target.parentNode.parentNode.parentNode.parentNode.parentNode;
 | |
|         row.style.display = 'none';
 | |
|         var count = document.getElementById('count');
 | |
|         count.textContent--;
 | |
| 
 | |
|         var url = '/subscription_ajax?action_remove_subscriptions=1&redirect=false' +
 | |
|             '&referer=' + encodeURIComponent(location.href) +
 | |
|             '&c=' + target.getAttribute('data-ucid');
 | |
| 
 | |
|         var payload = 'csrf_token=' + target.parentNode.querySelector('input[name="csrf_token"]').value;
 | |
| 
 | |
|         helpers.xhr('POST', url, {payload: payload}, {
 | |
|             onNon200: function (xhr) {
 | |
|                 count.textContent++;
 | |
|                 row.style.display = '';
 | |
|             }
 | |
|         });
 | |
|     }
 | |
| 
 | |
|     // Handle keypresses
 | |
|     addEventListener('keydown', function (event) {
 | |
|         // Ignore modifier keys
 | |
|         if (event.ctrlKey || event.metaKey) return;
 | |
| 
 | |
|         // Ignore shortcuts if any text input is focused
 | |
|         let focused_tag = document.activeElement.tagName.toLowerCase();
 | |
|         const allowed = /^(button|checkbox|file|radio|submit)$/;
 | |
| 
 | |
|         if (focused_tag === 'textarea') return;
 | |
|         if (focused_tag === 'input') {
 | |
|             let focused_type = document.activeElement.type.toLowerCase();
 | |
|             if (!allowed.test(focused_type)) return;
 | |
|         }
 | |
| 
 | |
|         // Focus search bar on '/'
 | |
|         if (event.key === '/') {
 | |
|             document.getElementById('searchbox').focus();
 | |
|             event.preventDefault();
 | |
|         }
 | |
|     });
 | |
| })();
 |