You can add custom icons and action buttons to the Scheduler row headers using active areas. This demo shows an icon on hover that opens an edit dialog on click. Read more about the
row header active areas.
Agent-readable demo data
- Title
- Row Header Active Areas (JavaScript Scheduler) | DayPilot Lite for JavaScript Demo
- Tree
- DayPilot JavaScript Demo
- Catalog root
- Lite
- Description
- You can add custom icons and action buttons to the Scheduler row headers using active areas. This demo shows an icon on hover that opens an edit dialog on click. Read more about the row header active areas.
Inline demo script 1
const dp = new DayPilot.Scheduler("dp", {
startDate: "2026-01-01",
days: 365,
scale: "Day",
timeHeaders: [
{groupBy: "Month", format: "MMM yyyy"},
{groupBy: "Cell", format: "d"}
],
treeEnabled: true,
resources: [
{name: "Room 1", id: "A"},
{name: "Room 2", id: "B"},
{name: "Room 3", id: "C"},
{name: "Room 4", id: "D"},
{name: "Person 1", id: "E"},
{name: "Person 2", id: "F"},
{name: "Person 3", id: "G"},
{name: "Person 4", id: "H"},
{name: "Tool 1", id: "I"},
{name: "Tool 2", id: "J"},
{name: "Tool 3", id: "K"},
{name: "Tool 4", id: "L"}
],
onTimeRangeSelected: args => {
const name = prompt("New event name:", `Event${args.start}`);
dp.clearSelection();
if (!name) return;
dp.events.add({
start: args.start,
end: args.end,
id: DayPilot.guid(),
resource: args.resource,
text: name
});
},
onBeforeRowHeaderRender: args => {
args.row.areas = [
{
right: 5,
top: "calc(50% - 8px)",
width: 20,
height: 20,
visibility: "Hover",
symbol: "../icons/daypilot.svg#edit",
backColor: "#fff",
padding: 2,
borderRadius: "50%",
borderColor: "#999999",
style: "cursor:pointer",
onClick: async args => {
const row = args.source;
const modal = await DayPilot.Modal.prompt("New name:", row.name);
if (!modal.canceled) {
row.data.name = modal.result;
dp.rows.update(row);
}
}
},
];
},
});
dp.init();
dp.scrollTo("2026-03-25");