# Navigator (Monthly Event Calendar) | DayPilot Pro for JavaScript Demo

> Read more about integrating the [date navigator](https://doc.daypilot.org/month/navigator/) [doc.daypilot.org].

## Links

- Canonical HTML: /demo/month/navigator.html
- Source HTML folder: /demo/month/
- Catalog root: /demo/
- Catalog: /demo/llms.txt

## Source

### Inline demo script 1

```javascript
const nav = new DayPilot.Navigator("nav", {
            showMonths: 3,
            selectMode: "month",
            onTimeRangeSelected: (args) => {
                dp.update({
                    startDate: args.start
                });
                app.elements.label.innerHTML = args.start.toString("MMMM yyyy");
            }
        });
        nav.init();


        const dp = new DayPilot.Month("dp", {
            startDate: DayPilot.Date.today(),
            onTimeRangeSelected: async (args) => {
                const {result} = await DayPilot.Modal.prompt("New event name:", "Event");
                dp.clearSelection();
                if (!result) return;
                dp.events.add({
                    start: args.start,
                    end: args.end,
                    id: DayPilot.guid(),
                    text: result
                });
                dp.message("Created");
            }
        });
        dp.init();


        const app = {
            elements: {
                label: document.getElementById('label'),
                previous: document.getElementById('previous'),
                next: document.getElementById('next')
            },
            init: function () {
                this.addEventHandlers();
                this.loadEventData();
                this.elements.label.innerHTML = DayPilot.Date.today().toString("MMMM yyyy");
            },
            loadEventData() {
                const events = [];
                let start = DayPilot.Date.today().firstDayOfMonth();
                for (let i = 0; i < 15; i++) {
                    const add = Math.floor(Math.random() * 2);
                    // const add = 1;
                    start = start.addDays(add);
                    if (start.getDayOfWeek() === 6) {
                        start = start.addDays(2);
                    }
                    if (start.getDayOfWeek() === 0) {
                        start = start.addDays(1);
                    }

                    events.push({
                        start: start,
                        end: start.addDays(1),
                        id: DayPilot.guid(),
                        barColor: app.barColor(i),
                        text: "Event " + (i + 1)
                    });
                }
                dp.update({events});
            },
            barColor(i) {
                const colors = ["#6FA8DC", "#93C47D", "#FFD966", "#E06666"];
                return colors[i % 4];
            },
            addEventHandlers() {
                this.elements.previous.addEventListener('click', () => {
                    nav.select(nav.selectionStart.addMonths(-1));
                });
                this.elements.next.addEventListener('click', () => {
                    nav.select(nav.selectionStart.addMonths(1));
                });
            }
        };
        app.init();
```

