npm package discovery and stats viewer.

Discover Tips

  • General search

    [free text search, go nuts!]

  • Package details

    pkg:[package-name]

  • User packages

    @[username]

Sponsor

Optimize Toolset

I’ve always been into building performant and accessible sites, but lately I’ve been taking it extremely seriously. So much so that I’ve been building a tool to help me optimize and monitor the sites that I build to make sure that I’m making an attempt to offer the best experience to those who visit them. If you’re into performant, accessible and SEO friendly sites, you might like it too! You can check it out at Optimize Toolset.

About

Hi, 👋, I’m Ryan Hefner  and I built this site for me, and you! The goal of this site was to provide an easy way for me to check the stats on my npm packages, both for prioritizing issues and updates, and to give me a little kick in the pants to keep up on stuff.

As I was building it, I realized that I was actually using the tool to build the tool, and figured I might as well put this out there and hopefully others will find it to be a fast and useful way to search and browse npm packages as I have.

If you’re interested in other things I’m working on, follow me on Twitter or check out the open source projects I’ve been publishing on GitHub.

I am also working on a Twitter bot for this site to tweet the most popular, newest, random packages from npm. Please follow that account now and it will start sending out packages soon–ish.

Open Software & Tools

This site wouldn’t be possible without the immense generosity and tireless efforts from the people who make contributions to the world and share their work via open source initiatives. Thank you 🙏

© 2026 – Pkg Stats / Ryan Hefner

@openseadragon-imaging/openseadragon-viewerinputhook

v3.0.1

Published

OpenSeadragon plugin which provides hooks into the viewer input event pipeline.

Downloads

25,354

Readme

OpenSeadragonViewerInputHook

OpenSeadragonViewerInputHook is a plugin for OpenSeadragon 3.0.0+ which provides hooks into the user input event pipeline for providing additional behavior and/or overriding the default behavior.

Usage

[!NOTE] OpenSeadragonViewerInputHook requires OpenSeadragon version 3.0.0+.

The OpenSeadragonViewerInputHook library is bundled in ES and UMD module format separately, and can be obtained the following ways:

Direct Download

npm

npm install @openseadragon-imaging/openseadragon-viewerinputhook

The OpenSeadragonViewerInputHook module can be included using a script tag in HTML (UMD module) or imported as an ES module.

A ViewerInputHook object can be created and attached (if desired) to an OpenSeadragon.Viewer two ways:

  1. Call the addViewerInputHook method on the viewer
  2. Create a new ViewerInputHook object, passing a viewer reference in the options parameter (optional)

Both methods return a new ViewerInputHook object, and both methods take an options parameter where the event handlers to be hooked may be specified (see the 'Details' section below).

Example using UMD module in an HTML script tag

<!-- Load OpenSeadragon dependency first! -->
<script
  defer
  src="/[path_to]/openseadragon.min.js"
></script>
<script
  defer
  src="/[path_to]/openseadragon-viewerinputhook.umd.js"
></script>
<script
  defer
  src="/[path_to]/script.js"
></script>
// script.js Example 1 - Use the Viewer.addViewerInputHook() method to create a ViewerInputHook

// create an OpenSeadragon viewer
const viewer = OpenSeadragon({...});
// add a ViewerInputHook to the viewer
const viewerInputHook = viewer.addViewerInputHook({ hooks: [...] });
// script.js Example 2 - Attach a new ViewerInputHook to an existing OpenSeadragon.Viewer

const viewerInputHook = new ViewerInputHook({ viewer: existingviewer, hooks: [...] });

Example using ES module

npm install openseadragon
npm install @openseadragon-imaging/openseadragon-viewerinputhook
// Example 1 - Use the Viewer.addViewerInputHook() method to create a ViewerInputHook

import OpenSeadragon from 'openseadragon';
import '@openseadragon-imaging/openseadragon-viewerinputhook';

// create an OpenSeadragon viewer
const viewer = OpenSeadragon({...});
// add a ViewerInputHook to the viewer
vconstr viewerInputHook = viewer.addViewerInputHook({
  hooks: [...]
});
// Example 2 - Attach a new ViewerInputHook to an existing OpenSeadragon.Viewer

import OpenSeadragon from 'openseadragon';
import OpenSeadragonViewerInputHook from '@openseadragon-imaging/openseadragon-viewerinputhook';

const viewerInputHook = new OpenSeadragonViewerInputHook({
  viewer: existingviewer,
  hooks: [...]
});

Details

Event handler callbacks are specified in the hooks property (array) of the options object passed when creating a ViewerInputHook object (see example code below). Any number of hooks can be specified.

Each hook specification in the array should have three properties - tracker, handler, and hookHandler.

The tracker property of each hook definition can be a reference to any OpenSeadragon.MouseTracker instance, or one of the pre-defined OpenSeadragon viewer trackers - currently 'viewer' or 'viewer_outer'.

The handler property of each hook definition specifies which MouseTracker handler to hook. Valid values are:

  • 'preProcessEventHandler'
  • 'enterHandler'
  • 'exitHandler' (deprecated)
  • 'leaveHandler'
  • 'overHandler'
  • 'outHandler'
  • 'moveHandler'
  • 'pressHandler'
  • 'releaseHandler'
  • 'nonPrimaryPressHandler'
  • 'nonPrimaryReleaseHandler'
  • 'clickHandler'
  • 'dblClickHandler'
  • 'contextMenuHandler'
  • 'scrollHandler'
  • 'keyDownHandler'
  • 'keyUpHandler'
  • 'keyHandler'
  • 'focusHandler'
  • 'blurHandler'
  • 'dragHandler'
  • 'dragEndHandler'
  • 'pinchHandler'
  • 'stopHandler'

The hookHandler property of each hook definition should be the user-defined event handler callback. All event handler callbacks have the following signature:

// TypeScript type declarations in openseadragon-viewerinputhook.d.ts

OpenSeadragon.EventHandler<T> = (event: T) => void

The ViewerInputHook class inserts your event hook handler methods in front of any existing event handler methods so the attached handler will be called first. Additional ViewerInputHook objects can be added on the same viewer/MouseTracker to create a chain of hook methods, where the last added handler(s) will be called first.

[!NOTE] If multiple ViewerInputHook are attached to the same viewer/MouseTracker, destroy() should be called for each ViewerInputHook in reverse order of attachment!

Your hook event handler methods can control the event handling behavior in one or more of the following ways:

  1. Set event.stopHandlers = true to prevent any more handlers in the event handler chain from being called
  2. Set event.stopBubbling = true to prevent the original DOM event from bubbling up the DOM tree
  3. Set event.preventDefault = true to prevent the viewer's default action in response to the event (currently applies to preProcessEventHandler, keyDownHandler, keyUpHandler, keyHandler, contextMenuHandler, and scrollHandler on the viewer (tracker = 'viewer'))
// Example

var viewer = OpenSeadragon({...});

const viewerInputHook = viewer.addViewerInputHook({
  hooks: [
    {
      tracker: 'viewer',
      handler: 'contextMenuHandler',
      hookHandler: (event) => {
        // Disable context menu on the viewer using ContextMenuMouseTrackerEvent.preventDefault
        event.preventDefault = true;
      },
    },
    {
      tracker: 'viewer',
      handler: 'scrollHandler',
      hookHandler: (event) => {
        // Disable mousewheel zoom on the viewer and let the original mousewheel events bubble
        if (!event.isTouchEvent) {
          event.stopHandlers = true;
        }
      },
    },
    {
      tracker: 'viewer',
      handler: 'clickHandler',
      hookHandler: (event) => {
        // Disable click zoom on the viewer
        event.stopHandlers = true;
      },
    },
  ],
});

TODO

  • jsdoc documentation
  • Provide hooks on reference strip events
  • Provide hooks on navigator events