Giter Site home page Giter Site logo

albejr / ngx-timeline Goto Github PK

View Code? Open in Web Editor NEW
7.0 1.0 3.0 1.93 MB

Component for rendering timelines from the your data.

Home Page: https://stackblitz.com/edit/ngx-timeline-albe

TypeScript 43.86% HTML 9.81% SCSS 46.34%
angular timeline component json

ngx-timeline's Introduction

Albe Timeline 1.7.0

Albe Timeline is a simple yet highly customizable component that helps you render a responsive horizontal (or vertical) timeline from JSON data. The data will be automatically grouped by year and the events will be sorted by date.

  • Content HTML highly manipulable.
  • Styles for the template are easily customizable.
  • Simplifies the aspects of internationalization, displaying dates and alternatives texts in a local format.

Version history:

Library Angular
Lastet 18.0.1
1.6.0 17.3.0
1.5.0 16.0.0
1.4.1 15.2.6
1.3.0 14.2.0
1.2.11 11.2.4
1.2.0 10.1.2
1.1.0 8.0.0

Use license

The component is open source and released for free commercial use at no cost. Donations are welcome.

Installation

$ npm install ngx-timeline-albe

How to use

Import the module

import { NgxTimelineAlbeModule } from 'ngx-timeline-albe';

@NgModule({
    imports: [ NgxTimelineAlbeModule ],
    ...
})
export class AppModule {}

Template

<ngx-timeline [itens]="data"></ngx-timeline>
  • Instance with options:
<ngx-timeline [itens]="data" 
    [formatDate]="'dd MMMM'" 
    [sortDesc]="true"
    [showMenu]="true" 
    [showGroup]="true" 
    [theme]="'basic'">
</ngx-timeline>

Component

import { TimelineItem } from 'ngx-timeline-albe';
  //The Json object is also accepted in string format.
  data: Array<TimelineItem> | String;
ngOnInit() {

    //Object type
    this.data = [
      {
        datetime: new Date('2020-03-29 23:59:59'),
        header: 'Sample of header',
        body: [
          {
            tag: 'h1',
            content: "Lorem ipsum"
          },
          {
            tag: 'p',
            content: 'Lorem ipsum dolor sit amet, nisl lorem, wisi egestas orci tempus class massa.'
          }],
        footer: 'Sample of footer. See <a href=\"https://github.com/Albejr/ngx-timeline\" target=\"_blank\">more details</a>'
      }
    ];

    //OR Json format
    this.data = `[{
      "datetime": "2020-03-29 23:59:59",
      "header": "Sample of header",
      "body": [{
          "tag": "h1",
          "content": "Lorem ipsum"
        },
        {
          "tag": "p",
          "content": "Lorem ipsum dolor sit amet, nisl lorem, wisi egestas orci tempus class massa."
        }
      ],
      "footer": "Sample of footer. See <a href='https://github.com/Albejr/jquery-albe-timeline' target='_blank'>more details</a>"
    }]`;
  }

Options

Name Type Default Description
[itens] required Array<TimelineItem> or String Json [ ] List of itens to be displayed.
[showGroup] optional Boolean true Sets the visibility of the annual grouper.
[showMenu] optional Boolean true Sets the anchor menu visibility for annual groupings (depends on 'showGroup').
[sortDesc] optional Boolean true Defines ordering of items, true: Descendente, false: Ascendente.
[formatDate] optional String 'dd MMMM' Sets the date display format:
  • 'dd MMMM'
  • 'dd/MM/yyyy HH:mm:ss'
  • 'MM/dd/yyyy'
  • 'yyyy/MM/dd'
[language] optional String 'pt-BR' Specifies manually the display language of texts (i18n), if the token LocaleID is not configured.
[theme] optional String 'basic' Defines the style:
  • 'basic'
  • 'horizontal'
  • 'minimalist'
  • 'mobile'
  • 'vertical'

TimelineItem Type

Name Type Description
datetime required Date
icon optional string
header optional string
body required Array<ItemBody>
footer optional string

ItemBody Type

Name Type Description
tag required string
content required string
attr optional TagAttribute

TagAttribute Type

Name Type Description
href optional string
target optional string
title optional string
src optional string
width optional string
cssclass optional string

Html Structure

We'll have a similar result:

<ngx-timeline>
    <div id="timeline-albe" class="clasic">
        <section>
            <header class="group">2020</header>
            <div class="item">
                <div class="badge">
                    <span>29/03</span>
                </div>
                <article>
                    <header>Sample of header</header>
                    <div class="body">
                        <span>2017-03-29 23:59:59</span>
                        <h1>Lorem ipsum</h1>
                        <p>Lorem ipsum dolor sit amet, nisl lorem, wisi egestas orci tempus class massa.</p>
                    </div>
                    <footer>Sample of footer.</footer>
                </article>
                <div class="badge last">
                </div>
            </div>
        </section>
    </div>
<ngx-timeline>

Styling guide

There are several classes that help you to create your custom styles app.component.css

:host ::ng-deep #timeline-albe.minimalist {
  color: inherit;
  font-size: inherit;
  width: inherit;
  margin: 10px;
}

Notes

  • The datetime element must meet the ISO 8601 standard in year-month-day format "yyyy-MM-dd" or "yyyy-MM-dd HH:mm:ss"

Demo App

Follow these instructions to run the demo:

  1. Clone the repository to your local machine
  2. From the project folder, run npm i to install all required dependencies
  3. Run ng b ngx-timeline-albe to build in dist folder.
  4. Run ng s to serve the project from a live-updating server.
  5. Go to localhost:4200 to see the demo site

To do

  • If 'json' (string) is passed, convert to 'object'.
  • Displays default message.
  • Insert animation.
  • Sort items by date.
  • Multiple languages.
  • Multiple styles.
  • Document CSS customization.
  • Document 'json' or 'object'.

Inspired on the plug-in: https://github.com/Albejr/jquery-albe-timeline

ngx-timeline's People

Contributors

albejr avatar dependabot[bot] avatar

Stargazers

 avatar  avatar  avatar  avatar  avatar  avatar  avatar

Watchers

 avatar

ngx-timeline's Issues

Tagattribute not recognised

I'm submitting a ...

  • bug report
  • feature request
  • proposal

What is the expected behavior?

Tried to use the CSS customisation for each TimelineObject but it doesn't work

Current behavior:

None of the CSS classes are added

Error Message:

"body": [{
          "tag": "h1",
          "content": "Lorem ipsum",
          "attr": {"cssclass": "className"}
        }

Steps to reproduce:

Which versions of package?

1.x

Other information:

Screenshots:

Recommend Projects

  • React photo React

    A declarative, efficient, and flexible JavaScript library for building user interfaces.

  • Vue.js photo Vue.js

    ๐Ÿ–– Vue.js is a progressive, incrementally-adoptable JavaScript framework for building UI on the web.

  • Typescript photo Typescript

    TypeScript is a superset of JavaScript that compiles to clean JavaScript output.

  • TensorFlow photo TensorFlow

    An Open Source Machine Learning Framework for Everyone

  • Django photo Django

    The Web framework for perfectionists with deadlines.

  • D3 photo D3

    Bring data to life with SVG, Canvas and HTML. ๐Ÿ“Š๐Ÿ“ˆ๐ŸŽ‰

Recommend Topics

  • javascript

    JavaScript (JS) is a lightweight interpreted programming language with first-class functions.

  • web

    Some thing interesting about web. New door for the world.

  • server

    A server is a program made to process requests and deliver data to clients.

  • Machine learning

    Machine learning is a way of modeling and interpreting data that allows a piece of software to respond intelligently.

  • Game

    Some thing interesting about game, make everyone happy.

Recommend Org

  • Facebook photo Facebook

    We are working to build community through open source technology. NB: members must have two-factor auth.

  • Microsoft photo Microsoft

    Open source projects and samples from Microsoft.

  • Google photo Google

    Google โค๏ธ Open Source for everyone.

  • D3 photo D3

    Data-Driven Documents codes.