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 🙏

© 2024 – Pkg Stats / Ryan Hefner

@webhandle/event-notification-panel

v1.0.0

Published

A panel to display notifications to users on the screen. It's got the basic options you'd need including message types, auto-disappearing mesages, user based removal of messages, progress of ongoing processes, and user cancelation of ongoing processes.

Downloads

2

Readme

Webhandle Event Notification Panel

A panel to display notifications to users on the screen. It's got the basic options you'd need including message types, auto-disappearing mesages, user based removal of messages, progress of ongoing processes, and user cancelation of ongoing processes.

Install

npm install @webhandle/event-notification-panel

Usage

As part of an application

HTML placement

<div id="event-notifications"></div>

To include the styles

@import "../node_modules/@webhandle/event-notification-panel/less/components.less";

or

@import "../node_modules/@webhandle/event-notification-panel/public/css/event-notification-panel.css";

In the client side js bundle:

import {setup} from '@webhandle/event-notification-panel'
// or
// const setup = require('@webhandle/event-notification-panel').setup
let panel = setup({
	notificationHolder: '#event-notifications' /* Optional. The selector of the element to which the
												  panel should be added. */
})
panel.addNotification({
	model: {
		status: 'success',
		headline: 'message 1'
	}
})

Options

Panel Options

You can pass options to EventNotificationPanel which modify how the underlying View component work. However, there are no creation options specific to the panel.

Options are available for the addNotification method.

let eventView = panel.addNotification({
	model: notification /* the data to notify */
	, ttl: 2000 /* The time in milliseconds before the notification is automatically removed */
	, closed: true /* Determines whether the notification details are initially shown. Default is true */
})

Notification options

The notification itself has some required data elements and many optional. Ideally you'd use client-js/notification.mjs but that's not required.

let eventView = panel.addNotification({
	model: {
		status: 'success' /* Required. Should be one of 'success', 'info', 'error', 'warning', 'waiting', or 'performing'.
							 Values 'waiting' and 'performing' are special in that they indicate a notification which should
							 NOT be automatically removed, even if a time to live (ttl) is specified. These types
							 indicate either an event where the code isn't able to offer information on when it will 
							 be complete (waiting), or an event where a progress bar should be shown to update the
							 user about progress (performing). */
		, headline: "Copy complete" 	/* Required. The main message to show the user */
		, message: "Copied file /a/b/c"	/* Optional. A detailed message which the user may or may not see. */
		, progressComplete: 0			/* Optional. An integer from 0 to 100 which indicates how much progress has been
										   made on this task. Update this value to change how much progress is shown
										   on the bar. The panel is told to update the html by triggering an event.*/
		, cancelable: true				/* Optional. If true, the event will show a cancel button which will allow the
										   user to cancel this task. */
	}
})

Events

Events are available from the EventNotificationView object returned by the addNotification method.

let eventView = panel.addNotification({
	model: {
		status: 'performing'
		, headline: "Copying file"
		, cancelable: true
	}
})

let emitter = eventView.notification

The notification object is a browser EventTarget extended with the on and emit methods familiar from Node's EventEmitter class.

To indcate that the panel should update based on changed information in the model:

emitter.emit('modelUpdate')

There are lifecycle events that code can listner for. All of the events have the pattern:

emitter.on('eventName', function(eventNotificationViewObject) {
	// User's code
})

Emitted Events

  • initialize: The view's initialize method is being run
  • nodeAdd: The view's root node is added to the DOM. This is an important internal event for calculating ttl.
  • render: When the view is rendered
  • expandMessage: The user has chosen to expand the notification to see the details
  • cancel: The user has asked to cancel the operation
  • startRemove: The panel has started visual effects to indicate that the event is being removed.
  • remove: When the view's root element is being removed from the DOM. This does NOT delete the DOM fragment.

Usage as a dynamically loaded component

This can also be used just by itself without being built into an application. This is not my primary current use case, so I'm putting the documentation farther down so as not to crowd out the meat at the top, but it works perfectly.

On the server side

If you're using webhandle you can set everything up like:

const webhandle = require('webhandle')
import('@webhandle/event-notification-panel').then(mod => {
	mod.default(webhandle)
})

Otherwise what you'll need to do is make the content from the module in @webhandle/event-notification-panel/public available to the browser via the server. For this example that content is available at /@webhandle/event-notification-panel/resources

HTML placement

<div id="event-notifications"></div>

Styles

<link href="/@webhandle/event-notification-panel/resources/css/event-notification-panel.css" rel="stylesheet">

Client side js

<script type="module">
	import {setup} from '/@webhandle/event-notification-panel/resources/js/event-notification-panel.js'
	let panel = setup()
	panel.addNotification({
		model: {
			status: 'success',
			headline: 'message 1'
		}
	})
</script>