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

@sjaakp/dateline

v2.0.5

Published

Interactive widget for date-related data

Downloads

52

Readme

Dateline 2.0

Dateline is a widget for date-related data. You can create interactive timelines, which can be dragged by mouse, touch or keyboard, and displays events. The movements of two or more timelines ('bands') are synchronized. Clicking on or tapping an event displays more information or redirects you to another page.

A demo of Dateline is here.

See it in action at Moordatlas.nl (Dutch). At Weltliteratur is another nice example.

Here is Dateline's GitHub page.

Installing

Install Dateline with npm:

npm i @sjaakp/dateline

You can also manually install Dateline by downloading the source in ZIP-format.

Dependencies

Version 2.0 of Dateline has absolutely no dependencies. There is no need to load jQuery or other libraries (though it won't hurt).

Usage

  • Link to /dist/dateline.css in the <head> part of the page.
  • Create a <div> with an id.
  • Load /dist/dateline.js at the end of the <body> part.
  • Call the dateline() method.

A minimum HTML page with a Dateline would look something like this:

<html>
<head>
    <link href="/dist/dateline.css" rel="stylesheet">
</head>
<body>

	<div id="dl"></div>

	<script src="/dist/dateline.js"></script>

	<script>
		dateline("dl", /* options */);
	</script>
</body>
</html>

CDN

Dateline is available on the unpkg Content Delivery Network, so you don't have to host the dateline files on your own server. In this case, the minimum HTML page looks like this:

<html>
<head>
    <link href="//unpkg.com/@sjaakp/dateline/dist/dateline.css" rel="stylesheet">
</head>
<body>

	<div id="dl"></div>

	<script src="//unpkg.com/@sjaakp/dateline/dist/dateline.js"></script>

	<script>
		dateline("dl", /* options */);
	</script>
</body>
</html>

Bands

At this point, Dateline displays one empty band, because there are no bands defined. This is done by setting the option bands, like so:

dateline('dl', {
	bands: [
		{
        	size: '60%',
        	scale: Dateline.MONTH,
        	interval: 60
		},
		{
        	size: '40%',
        	scale: Dateline.YEAR,
        	interval: 80,
			layout: 'overview'
		}
	],
	/* more options... */
	});

bands is an array of objects, each representing a timeline, with the following properties:

interval

The length of a scale division in pixels.

scale

The scale division of the band. It can have one of the following values:

  • Dateline.MILLISECOND
  • Dateline.SECOND
  • Dateline.MINUTE
  • Dateline.HOUR
  • Dateline.DAY
  • Dateline.WEEK
  • Dateline.MONTH
  • Dateline.YEAR
  • Dateline.DECADE
  • Dateline.CENTURY
  • Dateline.MILLENNIUM

(Yes, Dateline's range is truly astonishing: from milliseconds to millennia.)

size

The height of the band as a CSS height-property. Pixels work, but percentages are probably easier. Take care that the band sizes add up to something sensible (like 100%).

layout

Optional. Can be one two values:

  • "normal" (or undefined): events are displayed with icons and text, and are clickable. This is the default value.
  • "overview": events are displayed in a compact ribbon, and are not clickable.

In most cases, you will want to have one normal band at the top, with several overview bands below it.

multiple

Optional. This value determines which scale divisions are displayed. If it is 2, every other division is displayed. Default value is 1, meaning that every division is displayed.

Events

Note that we're not talking about JavaScript events here!

Events are objects which are placed on Dateline's timelines. They are defined in Dateline's property events, like so:

dateline('dl', {
	bands: [ /* several band definitions... */ ],
	events: [
		{id: "49", start: "2009-07-22", text: "Windows 7 released"},
		{id: "55", start: "1997-09-15", text: "Domain google.com registered"}),
		/* more events... */
	],
	/* more options... */
});

Events have the following properties:

id

A unique identifier, probably (but not necessarily) a number.

start

The point in time the event takes place. This can be a JavaScript Date object or a string that is recognized by Date.parse().

text

The text (or actually, the HTML code) displayed on the timeline.

class

Optional. The HTML-class(es) set to the event when it's displayed in normal layout.

Duration events

Apart from the normal, instant events, Dateline also supports duration events. They have all the properties of normal events, plus the following:

stop

The point in time the event is over.

post_start

Optional. Indicates a degree of uncertainty in start.

pre_stop

Optional. Indicates a degree of uncertainty in stop.

Like start, these three properties can be a JavaScript Date object or a string that is recognized by Date.parse().

In any case, start < post_start < pre_stop < stop.

Cursor

Dateline's timelines are anchored at one point in time, called the cursor. By means of the option cursor the starting value can be set. Like the event time options, cursor can be a JavaScript Date object or a string that is recognized by Date.parse().

Dateline remembers the cursor value between visits to the page, as long as they are in one browser session. If you don't like this behavior, set the rememberCursor option to false.

Other options

Dateline has the following general options:

begin, end

Optional. The limits between where Dateline can be dragged. These options can be null, meaning no limit, or a JavaScript Date object or a string that is recognized by Date.parse(). Default: null.

size

Optional. The CSS height of Dateline. Default is "320px".

url

Optional. The url Dateline uses when an event is clicked or tapped. The url is concatenated with the value of the id property of the clicked event.

If false (default), clicking or tapping an event has no effect.

redirect

Optional. boolean.

  • true: Dateline redirects the browser to the location set by url.
  • false: an Ajax call is made to url. Dateline displays the returned HTML in a pop up 'bubble' near the event.

Default is false.

Property

cursor

Dateline's property cursor can be read or set at any time. It is a JavaScript Date object. It can be set by a Data object, or by an string that is recognized by Date.parse().

Method

find(id)

Tries to find the event with the given id property value and, if found, moves the timeline(s) to it. Return: a plain JavaScript Object with the event data, undefined if not found.

JavaScript event

datelinechange

This JavaScript event is issued whenever the cursor value is changed. The current value is sent in the detail property of the event data as a JavaScript Date object.

One way to intercept the datelinechange event would be (using jQuery):

document.addEventListener('datelinechange', e => {
        $('#somewhere').text(e.detail.toString());
    }
);

Iconizing events with Font Awesome

Normally, Dateline's events are displayed as a big dot. They can also be displayed as an icon from Font Awesome. Just make sure that Fot Awesome is loaded and set the class property of the event to something like "fas fa-xxx".

For instance, this is the way to display an event with the 'fa-anchor' icon in Font Awesome's solid style:

var _dl = dateline('dl', {
	bands: [ /* several band definitions... */ ],
	events: [
		{id: "42", start: "2009-07-22", class: "fas fa-anchor", text: "Anchor example"},
		/* more events... */
	],
	/* more options... */
	});

Icons are not displayed with duration events.

Colorizing events

By setting the class property of an event to "col-xxx", the big dot or the icon is colored. Icon classes and color classes can be combined. Available are all CSS3 named colors. They can be found in the file src/_colors.scss.

So this displays the event with a tomato red icon:

var _dl = dateline('dl', {
	bands: [ /* several band definitions... */ ],
	events: [
		{id: "42", start: ..., class: "fas fa-pizza-slice col-tomato", text: "Pizza invented"},
		/* more events... */
	],
	/* more options... */
	});

If you're using Font Awesome Duotone you can use a "col2-xxx" class to set the secondary color likewise.

Dark mode

Adding the class d-dark to initial <div> lets Dateline appear with light colored text on dark background colors.

Overflow

If there are really many events, Dateline may not be able to display them all. Whenever this occurs, is notified in the browser's console window.

Available colors

These colors are available to form the "col-xxx" and "col2-xxx" classes. Of course, some of them will be of limited use, because they will be almost invisible against Dateline's background.

  • aliceblue
  • antiquewhite
  • aqua, cyan
  • aquamarine
  • azure
  • beige
  • bisque
  • black
  • blanchedalmond
  • blue
  • blueviolet
  • brown
  • burlywood
  • cadetblue
  • chartreuse
  • chocolate
  • coral
  • cornflowerblue
  • cornsilk
  • crimson
  • darkblue
  • darkcyan
  • darkgoldenrod
  • darkgray, darkgrey
  • darkgreen
  • darkkhaki
  • darkmagenta
  • darkolivegreen
  • darkorange
  • darkorchid
  • darkred
  • darksalmon
  • darkseagreen
  • darkslateblue
  • darkslategray, darkslategrey
  • darkturquoise
  • darkviolet
  • deeppink
  • deepskyblue
  • dimgray, dimgrey
  • dodgerblue
  • firebrick
  • floralwhite
  • forestgreen
  • fuchsia, magenta
  • gainsboro
  • ghostwhite
  • gold
  • goldenrod
  • gray, grey
  • green
  • greenyellow
  • honeydew
  • hotpink
  • indianred
  • indigo
  • ivory
  • khaki
  • lavender
  • lavenderblush
  • lawngreen
  • lemonchiffon
  • lightblue
  • lightcoral
  • lightcyan
  • lightgoldenrodyellow
  • lightgray, lightgrey
  • lightgreen
  • lightpink
  • lightsalmon
  • lightseagreen
  • lightskyblue
  • lightslategray, lightslategrey
  • lightsteelblue
  • lightyellow
  • lime
  • limegreen
  • linen
  • maroon
  • mediumaquamarine
  • mediumblue
  • mediumorchid
  • mediumpurple
  • mediumseagreen
  • mediumslateblue
  • mediumspringgreen
  • mediumturquoise
  • mediumvioletred
  • midnightblue
  • mintcream
  • mistyrose
  • moccasin
  • navajowhite
  • navy
  • oldlace
  • olive
  • olivedrab
  • orange
  • orangered
  • orchid
  • palegoldenrod
  • palegreen
  • paleturquoise
  • palevioletred
  • papayawhip
  • peachpuff
  • peru
  • pink
  • plum
  • powderblue
  • purple
  • red
  • rosybrown
  • royalblue
  • saddlebrown
  • salmon
  • sandybrown
  • seagreen
  • seashell
  • sienna
  • silver
  • skyblue
  • slateblue
  • slategray, slategrey
  • snow
  • springgreen
  • steelblue
  • tan
  • teal
  • thistle
  • tomato
  • turquoise
  • violet
  • wheat
  • white
  • whitesmoke
  • yellow
  • yellowgreen