Skip to content

Instantly share code, notes, and snippets.

@NoxArt
Last active March 16, 2025 06:41
Show Gist options
  • Save NoxArt/8085521 to your computer and use it in GitHub Desktop.
Save NoxArt/8085521 to your computer and use it in GitHub Desktop.
AdminerRestoreMenuScroll plugin for Adminer
<?php
/** Remembers and restores scollbar position of side menu
* @author Jiří @NoxArt Petruželka, www.noxart.cz
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
*/
class AdminerRestoreMenuScroll {
protected $script;
/**
* @param string text to append before first calendar usage
*/
public function __construct($script = "<script type='text/javascript'>\n(function(){\nvar executed = false;\nvar saveAndRestore = function() {\nif( executed ) {\nreturn;\n}\n
executed = true;\nvar menu = document.getElementById('menu');\nvar scrolled = localStorage.getItem('_adminerScrolled');\nif( scrolled && scrolled >= 0 ) {\nmenu.scrollTop = scrolled;\n}\n
window.addEventListener('unload', function(){\nlocalStorage.setItem('_adminerScrolled', menu.scrollTop);\n});\n};\ndocument.addEventListener && document.addEventListener('DOMContentLoaded', saveAndRestore);\ndocument.attachEvent && document.attachEvent('onreadystatechange', saveAndRestore);\n})();\n</script>")
{
$this->script = $script;
}
public function head()
{
echo $this->script;
}
}
@D-ominik
Copy link

This plugin is one of the most valuable for Adminer, unfortunately it doesn't work anymore. Here is an updated version:

<?php
/** Remembers and restores scollbar position of side menu
* @author Jiří @NoxArt Petruželka, www.noxart.cz
* @license http://www.apache.org/licenses/LICENSE-2.0 Apache License, Version 2.0
* @license http://www.gnu.org/licenses/gpl-2.0.html GNU General Public License, version 2 (one or other)
*/
class AdminerRestoreMenuScroll {

	public function __construct() {
	}

	public function head(){
		?>
		<script <?php echo nonce(); ?>>
		(function(){
			var executed = false;
			var saveAndRestore = function() {
				if (executed) {
					return;
				}

				executed = true;
				var menu = document.getElementById('menu');
				var scrolled = localStorage.getItem('_adminerScrolled');
				if (scrolled && scrolled >= 0) {
					setTimeout(function() {
						menu.scrollTop = scrolled;
					}, 50);
				}

				window.addEventListener('unload', function(){
					localStorage.setItem('_adminerScrolled', menu.scrollTop);
				});
			};
			document.addEventListener && document.addEventListener('DOMContentLoaded', saveAndRestore);
			document.attachEvent && document.attachEvent('onreadystatechange', saveAndRestore);
		})();
		</script>
		<?php
	}

}

@NoxArt
Copy link
Author

NoxArt commented Sep 30, 2021

Glad you find it helpful. Thank you for fixing it and also reformatting, much more readable

@vrana
Copy link

vrana commented Mar 16, 2025

Adminer 5 wrapped itself into a namespace and plugins now need to call Adminer's functions via this namespace.

Please update this Gist to this: https://gist.github.com/vrana/8d9e12e260731a516f973a284760aa03

Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment