Skip to content

Instantly share code, notes, and snippets.

Embed
What would you like to do?
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

D-ominik commented Sep 30, 2021

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

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