blob: a2367753bdc7653b5bb2e14eea8c3f28a720794c [file] [log] [blame]
class PageWithHeading extends Page {
constructor(name, toolbar)
{
super(name);
this._heading = null;
this._parentPage = null;
this._toolbar = toolbar;
}
open(state)
{
console.assert(this.heading());
this.heading().setToolbar(this._toolbar);
super.open(state);
}
setParentPage(page) { this._parentPage = page; }
belongsTo(page) { return this == page || this._parentPage == page; }
setHeading(heading) { this._heading = heading; }
// FIXME: We shouldn't rely on the page hierarchy to find the heading.
heading() { return this._heading || this._parentPage.heading(); }
toolbar() { return this._toolbar; }
title() { return this.name(); }
pageTitle() { return this.title() + ' - ' + this.heading().title(); }
render()
{
console.assert(this.heading());
if (document.body.firstChild != this.heading().element())
document.body.insertBefore(this.heading().element(), document.body.firstChild);
super.render();
this.heading().enqueueToRender();
}
static htmlTemplate()
{
return `<section class="page-with-heading"></section>`;
}
}