Timeline Header Rows in React Scheduler
The Timeline views can have additional header rows other than their default date and time header rows. It is possible to show individual header rows for displaying year, month, and week separately using the HeaderRowDirective. This is applicable only on the Timeline views.
Available header row types:
| Header Row | Description | Timeline Views |
|---|---|---|
Year |
Displays year information | All Timeline views |
Month |
Displays month information | All Timeline views |
Week |
Displays week numbers | All Timeline views |
Date |
Displays date information | All Timeline views |
Hour |
Displays hour information | Not applicable for Timeline month view |
Note: The
Hourrow is not applicable for the Timeline month view because the month-level granularity doesn’t require hour-level details.
See how to add and customize header rows in the Timeline views of the React Scheduler in this video:
The example below shows the Scheduler displaying all available header rows in Timeline views.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ScheduleComponent, HeaderRowDirective, HeaderRowsDirective, TimelineViews, Inject, ViewsDirective, ViewDirective } from '@syncfusion/ej2-react-schedule';
import { scheduleData } from './datasource';
const App = () => {
const eventSettings = { dataSource: scheduleData }
return (<ScheduleComponent width='100%' height='550px' selectedDate={new Date(2018, 11, 31)} eventSettings={eventSettings} startHour='09:00' endHour='13:00'>
<HeaderRowsDirective>
<HeaderRowDirective option='Year' />
<HeaderRowDirective option='Month' />
<HeaderRowDirective option='Week' />
<HeaderRowDirective option='Date' />
<HeaderRowDirective option='Hour' />
</HeaderRowsDirective>
<ViewsDirective>
<ViewDirective option='TimelineWeek' />
</ViewsDirective>
<Inject services={[TimelineViews]} />
</ScheduleComponent>);
}
;
const root = ReactDOM.createRoot(document.getElementById('schedule'));
root.render(<App />);import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {
ScheduleComponent, HeaderRowDirective, HeaderRowsDirective, TimelineViews, Inject,
ViewsDirective, ViewDirective
} from '@syncfusion/ej2-react-schedule';
import { scheduleData } from './datasource';
const App = () => {
const eventSettings = { dataSource: scheduleData };
return (<ScheduleComponent width='100%' height='550px' selectedDate={new Date(2018, 11, 31)}
eventSettings={eventSettings} startHour='09:00' endHour='13:00'>
<HeaderRowsDirective>
<HeaderRowDirective option='Year' />
<HeaderRowDirective option='Month' />
<HeaderRowDirective option='Week' />
<HeaderRowDirective option='Date' />
<HeaderRowDirective option='Hour' />
</HeaderRowsDirective>
<ViewsDirective>
<ViewDirective option='TimelineWeek' />
</ViewsDirective>
<Inject services={[TimelineViews]} />
</ScheduleComponent>)
};
const root = ReactDOM.createRoot(document.getElementById('schedule'));
root.render(<App />);<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Schedule</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components" />
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-base/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-buttons/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-calendars/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-dropdowns/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-inputs/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-navigations/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-popups/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-schedule/styles/tailwind3.css" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='schedule'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>Important: Importing
HeaderRowsDirectiveandHeaderRowDirectiveis mandatory in your component file to use the header row functionality. Without these imports, the header rows will not be rendered.
Tip: The order in which you specify the header row types in the
HeaderRowsDirectivearray determines their display order from top to bottom in the Scheduler.
Display year and month rows in Timeline views
To display only the year and month header rows in the Scheduler, specify Year and Month in the HeaderRowDirective. This configuration is useful for high-level views where users need to navigate by year or month without seeing day-level details.
Note: When you specify only
YearandMonthrows, the default date and time header rows are replaced with the custom configuration. This provides a cleaner interface for long-term scheduling views.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ScheduleComponent, HeaderRowDirective, HeaderRowsDirective, TimelineMonth, Inject, ViewsDirective, ViewDirective } from '@syncfusion/ej2-react-schedule';
import { scheduleData } from './datasource';
const App = () => {
const eventSettings = { dataSource: scheduleData }
return (<ScheduleComponent width='100%' height='550px' selectedDate={new Date(2018, 11, 31)} eventSettings={eventSettings}>
<HeaderRowsDirective>
<HeaderRowDirective option='Year' />
<HeaderRowDirective option='Month' />
</HeaderRowsDirective>
<ViewsDirective>
<ViewDirective option='TimelineMonth' interval={24} />
</ViewsDirective>
<Inject services={[TimelineMonth]} />
</ScheduleComponent>);
}
;
const root = ReactDOM.createRoot(document.getElementById('schedule'));
root.render(<App />);import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {
ScheduleComponent, HeaderRowDirective, HeaderRowsDirective, TimelineMonth, Inject,
ViewsDirective, ViewDirective
} from '@syncfusion/ej2-react-schedule';
import { scheduleData } from './datasource';
const App = () => {
const eventSettings = { dataSource: scheduleData }
return (<ScheduleComponent width='100%' height='550px' selectedDate={new Date(2018, 11, 31)}
eventSettings={eventSettings}>
<HeaderRowsDirective>
<HeaderRowDirective option='Year' />
<HeaderRowDirective option='Month' />
</HeaderRowsDirective>
<ViewsDirective>
<ViewDirective option='TimelineMonth' interval={24} />
</ViewsDirective>
<Inject services={[TimelineMonth]} />
</ScheduleComponent>)
};
const root = ReactDOM.createRoot(document.getElementById('schedule'));
root.render(<App />);<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Schedule</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components" />
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-base/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-buttons/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-calendars/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-dropdowns/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-inputs/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-navigations/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-popups/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-schedule/styles/tailwind3.css" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='schedule'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>Display week numbers in Timeline views
The week number can be displayed in a separate header row of the Timeline Scheduler by setting the Week option within HeaderRowDirective. Week numbers follow the ISO 8601 standard, where week 1 is the first week with the majority of days in the new year.
Tip: Week numbers are particularly useful for project management scenarios where tracking progress by week is essential. Combine with month and year rows for a comprehensive timeline view.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ScheduleComponent, HeaderRowDirective, HeaderRowsDirective, TimelineMonth, TimelineViews, Inject, ViewsDirective, ViewDirective } from '@syncfusion/ej2-react-schedule';
import { scheduleData } from './datasource';
const App = () => {
const eventSettings = { dataSource: scheduleData }
return (<ScheduleComponent width='100%' height='550px' selectedDate={new Date(2018, 11, 31)} eventSettings={eventSettings}>
<HeaderRowsDirective>
<HeaderRowDirective option='Week' />
<HeaderRowDirective option='Date' />
<HeaderRowDirective option='Hour' />
</HeaderRowsDirective>
<ViewsDirective>
<ViewDirective option='TimelineMonth' interval={24} />
<ViewDirective option='TimelineWeek' interval={3} />
<ViewDirective option='TimelineDay' interval={4} />
</ViewsDirective>
<Inject services={[TimelineMonth, TimelineViews]} />
</ScheduleComponent>);
}
;
const root = ReactDOM.createRoot(document.getElementById('schedule'));
root.render(<App />);import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {
ScheduleComponent, HeaderRowDirective, HeaderRowsDirective, TimelineMonth, TimelineViews, Inject,
ViewsDirective, ViewDirective
} from '@syncfusion/ej2-react-schedule';
import { scheduleData } from './datasource';
const App = () => {
const eventSettings = { dataSource: scheduleData }
return (<ScheduleComponent width='100%' height='550px' selectedDate={new Date(2018, 11, 31)}
eventSettings={eventSettings}>
<HeaderRowsDirective>
<HeaderRowDirective option='Week' />
<HeaderRowDirective option='Date' />
<HeaderRowDirective option='Hour' />
</HeaderRowsDirective>
<ViewsDirective>
<ViewDirective option='TimelineMonth' interval={24} />
<ViewDirective option='TimelineWeek' interval={3} />
<ViewDirective option='TimelineDay' interval={4} />
</ViewsDirective>
<Inject services={[TimelineMonth, TimelineViews]} />
</ScheduleComponent>)
};
const root = ReactDOM.createRoot(document.getElementById('schedule'));
root.render(<App />);<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Schedule</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components" />
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-base/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-buttons/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-calendars/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-dropdowns/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-inputs/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-navigations/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-popups/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-schedule/styles/tailwind3.css" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='schedule'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>Timeline view displaying dates of a complete year
You can display a full year in a Timeline view by setting the interval to 12 and including the TimelineMonth view in the ViewDirective of Scheduler. This configuration is ideal for annual planning, resource allocation across the year, and long-term scheduling scenarios.
Note: Setting
intervalto 12 divides the Timeline view into 12 equal segments, each representing one month of the year. The Scheduler automatically adjusts the timescale to show 12 months when this configuration is applied.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ScheduleComponent, HeaderRowDirective, HeaderRowsDirective, TimelineMonth, Inject, ViewsDirective, ViewDirective } from '@syncfusion/ej2-react-schedule';
import { eventData } from './datasource';
const App = () => {
const eventSettings = { dataSource: eventData }
return (<ScheduleComponent width='100%' height='550px' selectedDate={new Date(2018, 0, 1)} eventSettings={eventSettings}>
<HeaderRowsDirective>
<HeaderRowDirective option='Month' />
<HeaderRowDirective option='Date' />
</HeaderRowsDirective>
<ViewsDirective>
<ViewDirective option='TimelineMonth' interval={12} />
</ViewsDirective>
<Inject services={[TimelineMonth]} />
</ScheduleComponent>);
}
;
const root = ReactDOM.createRoot(document.getElementById('schedule'));
root.render(<App />);import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {
ScheduleComponent, HeaderRowDirective, HeaderRowsDirective, TimelineMonth, Inject,
ViewsDirective, ViewDirective
} from '@syncfusion/ej2-react-schedule';
import { eventData } from './datasource';
const App = () => {
const eventSettings = { dataSource: eventData }
return (<ScheduleComponent width='100%' height='550px' selectedDate={new Date(2018, 0, 1)}
eventSettings={eventSettings}>
<HeaderRowsDirective>
<HeaderRowDirective option='Month' />
<HeaderRowDirective option='Date' />
</HeaderRowsDirective>
<ViewsDirective>
<ViewDirective option='TimelineMonth' interval={12} />
</ViewsDirective>
<Inject services={[TimelineMonth]} />
</ScheduleComponent>)
};
const root = ReactDOM.createRoot(document.getElementById('schedule'));
root.render(<App />);<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Schedule</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components" />
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-base/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-buttons/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-calendars/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-dropdowns/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-inputs/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-navigations/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-popups/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-schedule/styles/tailwind3.css" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='schedule'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>Customizing header rows with templates
You can customize the text of the header rows and display any images or formatted text on each individual header row using the built-in template option available within the HeaderRowDirective. Templates provide full flexibility to render custom HTML content, including images, icons, badges, and formatted text.
Template customization options:
| Template Element | Use Case |
|---|---|
| Custom text | Display localized or formatted date information |
| Images | Show company logos, event icons, or status indicators |
| HTML content | Add complex layouts with multiple elements |
| Conditional rendering | Display different content based on date or view |
Tip: Use template context properties like
type(header row type),date(current cell date), andview(current view) to create dynamic and context-aware header row content.
import * as React from 'react';
import * as ReactDOM from 'react-dom';
import { ScheduleComponent, getWeekNumber, HeaderRowDirective, HeaderRowsDirective, TimelineMonth, Inject, ViewsDirective, ViewDirective } from '@syncfusion/ej2-react-schedule';
import { scheduleData } from './datasource';
import { Internationalization } from '@syncfusion/ej2-base';
const App = () => {
const eventSettings = { dataSource: scheduleData }
const instance = new Internationalization();
const getYearDetails = (value) => {
return 'Year: ' + instance.formatDate(value.date, { skeleton: 'y' });
}
const getMonthDetails = (value) => {
return 'Month: ' + instance.formatDate(value.date, { skeleton: 'M' });
}
const getWeekDetails = (value) => {
return 'Week ' + getWeekNumber(value.date);
;
}
const yearTemplate = (props) => {
return (<span className="year">{getYearDetails(props)}</span>);
}
const monthTemplate = (props) => {
return (<span className="month">{getMonthDetails(props)}</span>);
}
const weekTemplate = (props) => {
return (<span className="week">{getWeekDetails(props)}</span>);
}
return (<ScheduleComponent width='100%' height='550px' selectedDate={new Date(2018, 0, 1)} eventSettings={eventSettings}>
<HeaderRowsDirective>
<HeaderRowDirective option='Year' template={yearTemplate} />
<HeaderRowDirective option='Month' template={monthTemplate} />
<HeaderRowDirective option='Week' template={weekTemplate} />
<HeaderRowDirective option='Date' />
</HeaderRowsDirective>
<ViewsDirective>
<ViewDirective option='TimelineMonth' />
</ViewsDirective>
<Inject services={[TimelineMonth]} />
</ScheduleComponent>);
}
;
const root = ReactDOM.createRoot(document.getElementById('schedule'));
root.render(<App />);import * as React from 'react';
import * as ReactDOM from 'react-dom';
import {
ScheduleComponent, getWeekNumber, HeaderRowDirective, HeaderRowsDirective, TimelineMonth, Inject,
ViewsDirective, ViewDirective, CellTemplateArgs
} from '@syncfusion/ej2-react-schedule';
import { scheduleData } from './datasource';
import { Internationalization } from '@syncfusion/ej2-base';
const App = () => {
const eventSettings = { dataSource: scheduleData }
const instance: Internationalization = new Internationalization();
const getYearDetails = (value: CellTemplateArgs) => {
return 'Year: ' + instance.formatDate((value as CellTemplateArgs).date, { skeleton: 'y' });
}
const getMonthDetails = (value: CellTemplateArgs) => {
return 'Month: ' + instance.formatDate((value as CellTemplateArgs).date, { skeleton: 'M' });
}
const getWeekDetails = (value: CellTemplateArgs) => {
return 'Week ' + getWeekNumber((value as CellTemplateArgs).date);;
}
const yearTemplate = (props): JSX.Element => {
return (<span className="year">{getYearDetails(props)}</span>);
}
const monthTemplate = (props): JSX.Element => {
return (<span className="month">{getMonthDetails(props)}</span>);
}
const weekTemplate = (props): JSX.Element => {
return (<span className="week">{getWeekDetails(props)}</span>);
}
return (<ScheduleComponent width='100%' height='550px' selectedDate={new Date(2018, 0, 1)}
eventSettings={eventSettings}>
<HeaderRowsDirective>
<HeaderRowDirective option='Year' template={yearTemplate} />
<HeaderRowDirective option='Month' template={monthTemplate} />
<HeaderRowDirective option='Week' template={weekTemplate} />
<HeaderRowDirective option='Date' />
</HeaderRowsDirective>
<ViewsDirective>
<ViewDirective option='TimelineMonth' />
</ViewsDirective>
<Inject services={[TimelineMonth]} />
</ScheduleComponent>)
};
const root = ReactDOM.createRoot(document.getElementById('schedule'));
root.render(<App />);<!DOCTYPE html>
<html lang="en">
<head>
<title>Syncfusion React Schedule</title>
<meta charset="utf-8" />
<meta name="viewport" content="width=device-width, initial-scale=1.0" />
<meta name="description" content="Essential JS 2 for React Components" />
<meta name="author" content="Syncfusion" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-base/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-buttons/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-calendars/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-dropdowns/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-inputs/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-navigations/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-popups/styles/tailwind3.css" rel="stylesheet" />
<link href="https://cdn.syncfusion.com/ej2/34.2.2/ej2-react-schedule/styles/tailwind3.css" rel="stylesheet" />
<link href="https://maxcdn.bootstrapcdn.com/bootstrap/3.3.7/css/bootstrap.min.css" rel="stylesheet" />
<link href="index.css" rel="stylesheet" />
<script src="https://cdnjs.cloudflare.com/ajax/libs/systemjs/0.19.38/system.js"></script>
<script src="systemjs.config.js"></script>
<style>
#loader {
color: #008cff;
height: 40px;
left: 45%;
position: absolute;
top: 45%;
width: 30%;
}
</style>
</head>
<body>
<div id='schedule'>
<div id='loader'>Loading....</div>
</div>
</body>
</html>