Have arrowkey nav use HTML next/prev links
This commit is contained in:
		
							parent
							
								
									015a597027
								
							
						
					
					
						commit
						13f4de8c14
					
				| @ -84,15 +84,15 @@ class BaseThemelet | |||||||
|         $body = $this->build_paginator($page_number, $total_pages, $base, $query, $show_random); |         $body = $this->build_paginator($page_number, $total_pages, $base, $query, $show_random); | ||||||
|         $page->add_block(new Block(null, $body, "main", 90, "paginator")); |         $page->add_block(new Block(null, $body, "main", 90, "paginator")); | ||||||
| 
 | 
 | ||||||
|         $page->add_html_header("<link rel='first' href='".make_link($base.'/1', $query)."'>"); |         $page->add_html_header("<link rel='first' href='".make_http(make_link($base.'/1', $query))."'>"); | ||||||
|         if ($page_number < $total_pages) { |         if ($page_number < $total_pages) { | ||||||
|             $page->add_html_header("<link rel='prefetch' href='".make_link($base.'/'.($page_number+1), $query)."'>"); |             $page->add_html_header("<link rel='prefetch' href='".make_http(make_link($base.'/'.($page_number+1), $query))."'>"); | ||||||
|             $page->add_html_header("<link rel='next' href='".make_link($base.'/'.($page_number+1), $query)."'>"); |             $page->add_html_header("<link rel='next' href='".make_http(make_link($base.'/'.($page_number+1), $query))."'>"); | ||||||
|         } |         } | ||||||
|         if ($page_number > 1) { |         if ($page_number > 1) { | ||||||
|             $page->add_html_header("<link rel='previous' href='".make_link($base.'/'.($page_number-1), $query)."'>"); |             $page->add_html_header("<link rel='previous' href='".make_http(make_link($base.'/'.($page_number-1), $query))."'>"); | ||||||
|         } |         } | ||||||
|         $page->add_html_header("<link rel='last' href='".make_link($base.'/'.$total_pages, $query)."'>"); |         $page->add_html_header("<link rel='last' href='".make_http(make_link($base.'/'.$total_pages, $query))."'>"); | ||||||
|     } |     } | ||||||
| 
 | 
 | ||||||
|     private function gen_page_link(string $base_url, ?string $query, int $page, string $name): string |     private function gen_page_link(string $base_url, ?string $query, int $page, string $name): string | ||||||
|  | |||||||
| @ -1,15 +0,0 @@ | |||||||
| <?php declare(strict_types=1); |  | ||||||
| 
 |  | ||||||
| class ArrowkeyNavigationInfo extends ExtensionInfo |  | ||||||
| { |  | ||||||
|     public const KEY = "arrowkey_navigation"; |  | ||||||
| 
 |  | ||||||
|     public $key = self::KEY; |  | ||||||
|     public $name = "Arrow Key Navigation"; |  | ||||||
|     public $url = "http://www.drudexsoftware.com/"; |  | ||||||
|     public $authors = ["Drudex Software"=>"support@drudexsoftware.com"]; |  | ||||||
|     public $license = self::LICENSE_GPLV2; |  | ||||||
|     public $description = "Allows viewers no navigate between images using the left & right arrow keys."; |  | ||||||
|     public $documentation = |  | ||||||
| "Simply enable this extension in the extension manager to enable arrow key navigation."; |  | ||||||
| } |  | ||||||
| @ -1,93 +0,0 @@ | |||||||
| <?php declare(strict_types=1); |  | ||||||
| 
 |  | ||||||
| class ArrowkeyNavigation extends Extension |  | ||||||
| { |  | ||||||
|     /** |  | ||||||
|      * Adds functionality for post/view on images. |  | ||||||
|      */ |  | ||||||
|     public function onDisplayingImage(DisplayingImageEvent $event) |  | ||||||
|     { |  | ||||||
|         $prev_url = make_http(make_link("post/prev/".$event->image->id)); |  | ||||||
|         $next_url = make_http(make_link("post/next/".$event->image->id)); |  | ||||||
|         $this->add_arrowkeys_code($prev_url, $next_url); |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Adds functionality for post/list. |  | ||||||
|      */ |  | ||||||
|     public function onPageRequest(PageRequestEvent $event) |  | ||||||
|     { |  | ||||||
|         if ($event->page_matches("post/list")) { |  | ||||||
|             $pageinfo = $this->get_list_pageinfo($event); |  | ||||||
|             $prev_url = make_http(make_link("post/list/".$pageinfo["prev"])); |  | ||||||
|             $next_url = make_http(make_link("post/list/".$pageinfo["next"])); |  | ||||||
|             $this->add_arrowkeys_code($prev_url, $next_url); |  | ||||||
|         } |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Adds the javascript to the page with the given urls. |  | ||||||
|      */ |  | ||||||
|     private function add_arrowkeys_code(string $prev_url, string $next_url) |  | ||||||
|     { |  | ||||||
|         global $page; |  | ||||||
| 
 |  | ||||||
|         $page->add_html_header("<script type=\"text/javascript\">
 |  | ||||||
| 			(function($){ |  | ||||||
| 				$(document).keyup(function(e) { |  | ||||||
| 					if($(e.target).is('input', 'textarea')){ return; } |  | ||||||
| 					if (e.metaKey || e.ctrlKey || e.altKey || e.shiftKey) { return; } |  | ||||||
| 					if (e.keyCode == 37) { window.location.href = '{$prev_url}'; } |  | ||||||
| 					else if (e.keyCode == 39) { window.location.href = '{$next_url}'; } |  | ||||||
| 				}); |  | ||||||
| 			})(jQuery); |  | ||||||
| 			</script>", 60);
 |  | ||||||
|     } |  | ||||||
| 
 |  | ||||||
|     /** |  | ||||||
|      * Returns info about the current page number. |  | ||||||
|      */ |  | ||||||
|     private function get_list_pageinfo(PageRequestEvent $event): array |  | ||||||
|     { |  | ||||||
|         global $config, $database; |  | ||||||
| 
 |  | ||||||
|         // get the amount of images per page
 |  | ||||||
|         $images_per_page = $config->get_int(IndexConfig::IMAGES); |  | ||||||
| 
 |  | ||||||
|         if ($event->count_args() > 1) { |  | ||||||
|             // if there are tags, use pages with tags
 |  | ||||||
|             $prefix = url_escape($event->get_arg(0)) . "/"; |  | ||||||
|             $page_number = $event->try_page_num(1); |  | ||||||
|             $total_pages = ceil($database->get_one( |  | ||||||
|                 "SELECT count FROM tags WHERE tag=:tag", |  | ||||||
|                 ["tag"=>$event->get_arg(0)] |  | ||||||
|             ) / $images_per_page); |  | ||||||
|         } else { |  | ||||||
|             // if there are no tags, use default
 |  | ||||||
|             $prefix = ""; |  | ||||||
|             $page_number = $event->try_page_num(0); |  | ||||||
|             $total_pages = ceil($database->get_one( |  | ||||||
|                 "SELECT COUNT(*) FROM images" |  | ||||||
|             ) / $images_per_page); |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // creates previous & next values
 |  | ||||||
|         // When previous first page, go to last page
 |  | ||||||
|         if ($page_number <= 1) { |  | ||||||
|             $prev = $total_pages; |  | ||||||
|         } else { |  | ||||||
|             $prev = $page_number-1; |  | ||||||
|         } |  | ||||||
|         if ($page_number >= $total_pages) { |  | ||||||
|             $next = 1; |  | ||||||
|         } else { |  | ||||||
|             $next = $page_number+1; |  | ||||||
|         } |  | ||||||
| 
 |  | ||||||
|         // Create return array
 |  | ||||||
|         return [ |  | ||||||
|             "prev" => $prefix.$prev, |  | ||||||
|             "next" => $prefix.$next, |  | ||||||
|         ]; |  | ||||||
|     } |  | ||||||
| } |  | ||||||
| @ -32,6 +32,7 @@ $(document).ready(function() { | |||||||
| 	/** Setup tablesorter **/ | 	/** Setup tablesorter **/ | ||||||
| 	$("table.sortable").tablesorter(); | 	$("table.sortable").tablesorter(); | ||||||
| 
 | 
 | ||||||
|  | 	/** Setup sidebar toggle **/ | ||||||
| 	try { | 	try { | ||||||
| 		var sidebar_hidden = (Cookies.get("ui-sidebar-hidden") || "").split("|"); | 		var sidebar_hidden = (Cookies.get("ui-sidebar-hidden") || "").split("|"); | ||||||
| 		for(var i in sidebar_hidden) { | 		for(var i in sidebar_hidden) { | ||||||
| @ -62,6 +63,7 @@ $(document).ready(function() { | |||||||
| 		}); | 		}); | ||||||
| 	}); | 	}); | ||||||
| 
 | 
 | ||||||
|  | 	/** setup unlocker buttons **/ | ||||||
| 	$(".shm-unlocker").each(function(idx, elm) { | 	$(".shm-unlocker").each(function(idx, elm) { | ||||||
| 		var tid = $(elm).data("unlock-sel"); | 		var tid = $(elm).data("unlock-sel"); | ||||||
| 		var tob = $(tid); | 		var tob = $(tid); | ||||||
| @ -70,4 +72,16 @@ $(document).ready(function() { | |||||||
| 			tob.attr("disabled", false); | 			tob.attr("disabled", false); | ||||||
| 		}); | 		}); | ||||||
| 	}); | 	}); | ||||||
|  | 
 | ||||||
|  | 	/** setup arrow key bindings **/ | ||||||
|  |     $(document).keyup(function(e) { | ||||||
|  |         if($(e.target).is('input', 'textarea')){ return; } | ||||||
|  |         if (e.metaKey || e.ctrlKey || e.altKey || e.shiftKey) { return; } | ||||||
|  |         if (e.keyCode == 37 && $("[rel='prev']").length) { | ||||||
|  |             window.location.href = $("[rel='pref']").attr("href"); | ||||||
|  |         } | ||||||
|  |         else if (e.keyCode == 39 && $("[rel='next']").length) { | ||||||
|  |             window.location.href = $("[rel='next']").attr("href"); | ||||||
|  |         } | ||||||
|  |     }); | ||||||
| }); | }); | ||||||
|  | |||||||
		Loading…
	
	
			
			x
			
			
		
	
		Reference in New Issue
	
	Block a user