Important: This documentation covers Yarn 1 (Classic).
For Yarn 2+ docs and migration guide, see yarnpkg.com.

Package detail

timelinejs

NUKnightLab216MPL v2.02.35.6TypeScript support: definitely-typed

A Storytelling Timeline built in JavaScript.

timeline, storytelling, timelinejs, timeline.js, history, googledocs, storify

readme

Table of Contents

TimelineJS

Document history with TimelineJS

There are lots of timeline tools on the web but they are almost all either hard on the eyes or hard to use. Create timelines that are at the same time beautiful and intuitive for users

TimelineJS is great for pulling in media from different sources. Just throw in a link from Twitter, YouTube, Flickr, Vimeo, Google Maps or SoundCloud and TimelineJS will format it to fit perfectly. More media types will be supported in the future.

Creating one is as easy as filling in a Google spreadsheet or as detailed as JSON.

Add it to your site

Using Inline (easiest)

Place the embed code where you want the timeline to show in the <body> of your site. See Config Options for a full list of what you can set in the config.

    <div id="timeline-embed"></div>
    <script type="text/javascript">
        var timeline_config = {
            width:                '100%',
            height:                '600',
            source:                'path_to_json/or_link_to_googlespreadsheet',
            embed_id:            'timeline-embed',                //OPTIONAL USE A DIFFERENT DIV ID FOR EMBED
            start_at_end:         false,                            //OPTIONAL START AT LATEST DATE
            start_at_slide:        '4',                            //OPTIONAL START AT SPECIFIC SLIDE
            start_zoom_adjust:    '3',                            //OPTIONAL TWEAK THE DEFAULT ZOOM LEVEL
            hash_bookmark:        true,                            //OPTIONAL LOCATION BAR HASHES
            font:                'Bevan-PotanoSans',                //OPTIONAL FONT
            debug:                true,                            //OPTIONAL DEBUG TO CONSOLE
            lang:                'fr',                            //OPTIONAL LANGUAGE
            maptype:            'watercolor',                    //OPTIONAL MAP STYLE
            css:                'path_to_css/timeline.css',        //OPTIONAL PATH TO CSS
            js:                    'path_to_js/timeline-min.js'    //OPTIONAL PATH TO JS
        }
    </script>
    <script type="text/javascript" src="http://cdn.knightlab.com/libs/timeline/latest/js/storyjs-embed.js"></script>

Using a method (advanced)

You could also initialize a new timeline using the createStoryJS method after storyjs-embed.js has been loaded

    createStoryJS({
        type:        'timeline',
        width:        '800',
        height:        '600',
        source:        'path_to_json/or_link_to_googlespreadsheet',
        embed_id:    'my-timeline'            // ID of the DIV you want to load the timeline into
    });

Here's a simple example:

    <head>
        <!-- jQuery -->
        <script type="text/javascript" src="http://ajax.googleapis.com/ajax/libs/jquery/1.7.2/jquery.min.js"></script>
        <!-- BEGIN TimelineJS -->
        <script type="text/javascript" src="http://cdn.knightlab.com/libs/timeline/latest/js/storyjs-embed.js"></script>
        <script>
            $(document).ready(function() {
                createStoryJS({
                    type:        'timeline',
                    width:        '800',
                    height:        '600',
                    source:        'path_to_json/or_link_to_googlespreadsheet',
                    embed_id:    'my-timeline'
                });
            });
        </script>
        <!-- END TimelineJS -->
    </head>
    <body>    
        <div id="my-timeline"></div>
    </body>

Loading the files

If you like, you may load TimelineJS from the KnightLab's CDN. The examples above demonstrate how to do this using story-embed.js, which is the simplest way to set up a Timeline of your own.

If for some reason you need more fine-grained control over your timeline, load the javascript and CSS files separately. We recommend that you load them from our CDN.

<!-- always load the CSS -->
<link rel="stylesheet" type="text/css" href="http://cdn.knightlab.com/libs/timeline/latest/css/timeline.css">
<!-- and then one of either -->
<script type="text/javascript" src="http://cdn.knightlab.com/libs/timeline/latest/js/timeline.js"></script>
<!-- or -->
<script type="text/javascript" src="http://cdn.knightlab.com/libs/timeline/latest/js/timeline-min.js"></script>
<!-- but no need for both -->

If you need to use the files on an HTTPS server, you can change the beginning of the url from http://cdn.knightlab.com/libs/timeline/ to https://s3.amazonaws.com/cdn.knightlab.com/libs/timeline/

If you need to serve copies of the files from your own server, use the entire contents of the "/build/" directory of our GitHub repository. If you use a local copy of story-embed.js it should automatically load the other Timeline resources from your server.

Config Options

Here are some of the options you can set in the config.

Source

source Should be either the path to the JSON resource to load, or a JavaScript object corresponding to the Timeline model.

Here is an example using a data object:


    var dataObject = {timeline: {headline: "Headline", type: ... }}
    createStoryJS({
        type:        'timeline',
        width:        '800',
        height:        '600',
        source:        dataObject,
        embed_id:    'my-timeline'
    });

If source is a string, we will try to automatically recognize resources that are Twitter searches, Google Spreadsheets or Storify stories. Failing that, we assume the source is either JSON or JSONP. If string matches on .jsonp, we will treat it as JSONP, otherwise, we will append ?callback=onJSONP_Data. See more details below.

Language

lang Localization default is en English Languages available:

  • af Afrikaans
  • ar Arabic
  • hy Armenian
  • eu Basque
  • be Belarusian
  • bg Bulgarian
  • ca Catalan
  • zh-cn Chinese
  • hr Croatian / Hrvatski
  • cz Czech
  • da Danish
  • nl Dutch
  • en English
  • en-24hr English (24-hour time)
  • eo Esperanto
  • et Estonian
  • fo Faroese
  • fa Farsi
  • fi Finnish
  • fr French
  • fy Frisian
  • gl Galician
  • ka Georgian
  • de German / Deutsch
  • el Greek
  • he Hebrew
  • hi Hindi
  • hu Hungarian
  • is Icelandic
  • id Indonesian
  • ga Irish
  • it Italian
  • ja Japanese
  • ko Korean
  • lv Latvian
  • lt Lithuanian
  • lb Luxembourgish
  • ms Malay
  • ne Nepali
  • no Norwegian
  • pl Polish
  • pt Portuguese
  • pt-br Portuguese (Brazilian)
  • ro Romanian
  • rm Romansh
  • ru Russian
  • sr-cy Serbian - Cyrillic
  • sr Serbian - Latin
  • si Sinhalese
  • sk Slovak
  • sl Slovenian
  • es Spanish
  • sv Swedish
  • tl Tagalog
  • ta Tamil
  • zh-tw Taiwanese
  • te Telugu
  • th Thai
  • tr Turkish
  • uk Ukrainian

Help us add more. Grab a copy of a language file and replace it with your language Example language file and find your language's two letter code here

Start at End

start_at_end set to true to start the timeline on the last date. default is false

Start at Slide

start_at_slide You can tell TimelineJS to start at a specific slide number default is 0

Start Zoom Adjust

start_zoom_adjust This will tweak the default zoom level. Equivilent to pressing the zoom in or zoom out button the specified number of times. Negative numbers zoom out. default is 0

Hash Bookmark

hash_bookmark set to true to allow bookmarking slides using the hash tag default is false

Debug

debug Will log events etc to the console. default is false

Map Style Types

Due to recent changes to the Google Maps API, you need a API Key in order to use custom map types. gmap_key: required in order to use maptype

maptype:

  • Stamen Maps

    • toner
    • toner-lines
    • toner-labels
    • watercolor
    • sterrain
  • Google Maps

    • ROADMAP
    • TERRAIN
    • HYBRID
    • SATELLITE
  • OpenStreetMap

    • osm

Font Options

font:

  • AbrilFatface-Average Abril Fatface & Average
  • Arvo-PTSans Arvo & PT Sans
  • Bevan-PotanoSans Bevan & Potano Sans
  • BreeSerif-OpenSans Bree Serif & Open Sans
  • DroidSerif-DroidSans Droid Serif & Droid Sans
  • Georgia-Helvetica Georgia & Helvetica Neue
  • Lekton-Molengo Lekton & Molengo
  • Merriweather-NewsCycle Merriweather & News Cycle
  • NewsCycle-Merriweather News Cycle & Merriweather
  • NixieOne-Ledger Nixie One & Ledger
  • Pacifico-Arimo Pacifico & Arimo
  • PlayfairDisplay-Muli Playfair Display & Muli
  • PoiretOne-Molengo Poiret One & Molengo
  • PTSerif-PTSans PT Serif & PT Sans
  • PT PT Sans & PT Narrow & PT Serif
  • Rancho-Gudea Rancho & Gudea
  • SansitaOne-Kameron Sansita One & Kameron
  • Or make your own

Font Combination Preview:

Font Combination Preview

File Formats

JSON:

JSON is the native data format for TimelineJS.

Remember, JSON is picky. A misplaced comma or quotation mark can prevent the timeline from loading properly.

Here is the full model:


{
    "timeline":
    {
        "headline":"The Main Timeline Headline Goes here",
        "type":"default",
        "text":"<p>Intro body text goes here, some HTML is ok</p>",
        "asset": {
            "media":"http://yourdomain_or_socialmedialink_goes_here.jpg",
            "credit":"Credit Name Goes Here",
            "caption":"Caption text goes here"
        },
        "date": [
            {
                "startDate":"2011,12,10,07,02,10",
                "endDate":"2011,12,11,08,11",
                "headline":"Headline Goes Here",
                "text":"<p>Body text goes here, some HTML is OK</p>",
                "tag":"This is Optional",
                "classname":"optionaluniqueclassnamecanbeaddedhere",
                "asset": {
                    "media":"http://twitter.com/ArjunaSoriano/status/164181156147900416",
                    "thumbnail":"optional-32x32px.jpg",
                    "credit":"Credit Name Goes Here",
                    "caption":"Caption text goes here"
                }
            }
        ],
        "era": [
            {
                "startDate":"2011,12,10",
                "endDate":"2011,12,11",
                "headline":"Headline Goes Here",
                "text":"<p>Body text goes here, some HTML is OK</p>",
                "tag":"This is Optional"
            }

        ]
    }
}

JSONP :

Timeline can use a variation of JSONP to allow you to easily load data across different domains.

To allow this to happen, the file must end with the extension .jsonp

Here is the full model:

storyjs_jsonp_data = {
    "timeline":
    {
        "headline":"The Main Timeline Headline Goes here",
        "type":"default",
        "text":"<p>Intro body text goes here, some HTML is ok</p>",
        "asset": {
            "media":"http://yourdomain_or_socialmedialink_goes_here.jpg",
            "credit":"Credit Name Goes Here",
            "caption":"Caption text goes here"
        },
        "date": [
            {
                "startDate":"2011,12,10",
                "endDate":"2011,12,11",
                "headline":"Headline Goes Here",
                "text":"<p>Body text goes here, some HTML is OK</p>",
                "tag":"This is Optional",
                "classname":"optionaluniqueclassnamecanbeaddedhere",
                "asset": {
                    "media":"http://twitter.com/ArjunaSoriano/status/164181156147900416",
                    "thumbnail":"optional-32x32px.jpg",
                    "credit":"Credit Name Goes Here",
                    "caption":"Caption text goes here"
                }
            }
        ],
        "era": [
            {
                "startDate":"2011,12,10",
                "endDate":"2011,12,11",
                "headline":"Headline Goes Here",
                "tag":"This is Optional"
            }

        ]

    }
}

Google Docs:

If you don’t want to mess with JSON, fire up Google Docs and build your timeline in a spreadsheet. It’s as simple as dropping a date, text, and links into the appropriate columns in TimelineJS’s template.

You can find the template here: TimelineJS Google Spreadsheet Template

There are only a couple things you need to know in order to create a timeline using Google Docs:

  1. Make the spreadsheet public:
    Google Docs are automatically set to private but the spreadsheet must be public.

    Click the blue “Share” button on the top right-hand corner. In the “Share settings” window, you’ll see the private setting of the spreadsheet: click “Change...”. In the Visibility options window, choose “Public on the Web” and save.

  2. Publish to the Web
    Under the File menu, select “Publish to the Web.”

    In the next window, check the box next to “Automatically republish when changes are made.” Uncheck all other boxes. Click “start publishing.” This will give you the URL to embed in your HTML file.

  3. Copy/paste the Web URL into your TimelineJS HTML file
    After you publish the spreadsheet, Google Docs will generate a link to the file. Copy the link for the Web Page option (as opposed to PDF, HTML, XLS, etc.), then paste it into the timeline’s HTML file (see Add it to your site )

Storify:

Support for Storify is still in its early stages. It works though. Just paste a link to the storify story as the source.

Media

Included in the zip file is a kitchen sink example. This timeline shows how to incorporate the different media types from different services like Twitter, YouTube, Flickr, Instagram, TwitPic, Wikipedia, Dailymotion, SoundCloud and Vimeo.

Just copy and paste the address of the media from the browser bar into the media parameter. TimelineJS will auto-magically pull in the media via their api and format it.

Best practices

Tips and tricks to best utilize TimelineJS

  1. Keep it light - don’t get bogged down by text or other elements
  2. Pick stories that have a strong chronological narrative. It does not work well for stories that need to jump around in the timeline.
  3. Include events that build up to major occurrences, not just the major events.
  4. Don't overwhelm the user. A timeline with hundreds of events is probably not the best use of the format.

License

This Source Code Form is subject to the terms of the Mozilla Public License, v. 2.0. If a copy of the MPL was not distributed with this file, You can obtain one at http://mozilla.org/MPL/2.0/.

changelog

2.35.6 (2015-03-25)

Restore original animation/easing (revert pull #681)

2.35.5 (2015-02-26)

672,679,681,683 a series of presentation/performance tweaks from @acdha

Fix auto-linking regression

2.35.4 (2015-02-17)

Fix Stamen map tile URL bug

2.35.3 (2015-02-17)

673 Update Taiwanese locale

689 Update Thai locale

693 Update Polish locale

705 Frisian localization

722 Support 'youtubeTheme' config option

732 Updated German Translations

733 Move "Swipe to Navigate" to I18N. Now we need translations for 55 languages!

744 Hindi localization

745 Update Icelandic date formats

749 Irish localization

762 Belarusian localization

2.35.2 (2014-11-24)

fix half-width bug on small displays

2.35.1 (2014-11-19)

719 whackamole with JS dates

2.35.0 (2014-11-19)

718 Issue with dates in 1970 in GMT/BST time zones

2.34.1

710 fix regression from #706 re IE https

709 retina image for loading.gif (even though we don't use it)

2.34.0

Remove HTTPS URL rewriting for older IE. don't do analytics on https Check to make sure that every slide has a start date, so that people get a clear warning if the spreadsheet header has been changed. fix jquery version check, again. (should accept jquery 2, although TimelineJS has not been tested with jquery 2) cf. #551 Update ko.js translation file Update fa.js

2.33.1

Fix bug in handling maps.google URLs Update zh-cn localization file.

2.33.0

638 (WIP) better handle new-format Google Maps URLs

597 parse new-format Google Spreadsheet URLs correctly

(no ticket) Support "W" as date format token for "week" based on existing getWeek add on to Date.prototype

632 Accept *.bmp as image URL in media field

631 Add bower file

589 remove unused code that refers to non-existent modules

526 fix jQuery version check so 1.10.x > 1.9.x

529 fix untagify to remove closing tags as well

567 be more permissive about iframe markup

512 fix Dark.css theme even though themes are generally not supported

520 treat Streetview API urls as images, not maps

536 fix typo in README.md

623 set maxheight on soundcloud embeds

624 'crush' pngs

625 deal with nutty MSIE user agent strings

2.32.0

Stop YouTube players when slide changes Better method for determining embed path root Check for iframe and blockquote media before other url tests Add languages: 'hr' (Croatian), 'uk' (Ukrainian) minor fixes to language files for 'fi' (Finnish) 'sl' (Slovenian)

2.31.0

Add languages: 'ro' (Romanian), 'th' (Thai) minor fixes to language files for 'es' (Spanish) 'fa' (Farsi), 'hu' (Hungarian), 'no' (Norwegian) add OpenStreetMap as a map option ('osm') Support '.svg' as an image media type support custom thumbnails when no media is specified clearer warning about "compatibility mode" to IE users.

2.30.0

Fix language code for 'zh-cn' (Chinese) add 'fa' (Farsi) Move 'remove' function from Array.prototype to a util method to avoid adverse affects on other JS code.

2.26.2

  • Start a CHANGELOG
  • Change embed HTML to dynamically set the embed path, to support use over https