blob: 64dc34ff25cdee1f04f0f73c0c2d3c8f2924da71 [file] [log] [blame]
var mercury = require('mercury');
var insertCss = require('insert-css');
var AttributeHook = require('../../lib/mercury/attribute-hook');
var sidebar = require('../sidebar/index');
var mainContent = require('../main-content/index');
var css = require('./index.css');
var h = mercury.h;
module.exports = create;
module.exports.render = render;
/*
* Page level layout of the application
*/
function create() {
var state = mercury.struct({
/*
* Whether the sidebar drawer is visible
* @type {boolean}
*/
sidebarOpened: mercury.value(false),
/*
* Title text to display in the toolbar
* @type {string}
*/
title: mercury.value('')
});
var events = mercury.input([
'openSidebar',
'closeSidebar'
]);
wireUpEvents(state, events);
return {
state: state,
events: events
};
}
function render(state, events) {
insertCss(css);
var panelAttributes = {
// Keep the drawer collapsed for any width size
'responsiveWidth': new AttributeHook('10000px'),
// If drawer is open, clicking anywhere should close it
'ev-click': (state.viewport.sidebarOpened ?
mercury.event(events.viewport.closeSidebar) : null),
'selected': new AttributeHook(state.viewport.sidebarOpened ?
'drawer' : 'main')
};
return h('core-drawer-panel.panel', panelAttributes, [
h('core-header-panel.drawer', {
'drawer': new AttributeHook(true)
}, [
renderSideToolbar(state, events),
sidebar.render(state, events)
]),
h('core-header-panel.main', {
'main': new AttributeHook(true)
}, [
renderMainToolbar(state, events),
mainContent.render(state, events)
])
]);
}
function renderSideToolbar(state, events) {
return h('core-toolbar.toolbar', [
h('h1.title', 'Namespace Browser')
]);
}
function renderMainToolbar(state, events) {
return h('core-toolbar.toolbar', [
h('paper-icon-button.drawer-toggle', {
'id': 'drawerToggle',
'icon': new AttributeHook('menu'),
'ev-click': mercury.event(events.viewport.openSidebar)
}),
h('h2.title', state.viewport.title),
mainContent.renderHeader(state,events)
]);
}
// Wire up events that we know how to handle
function wireUpEvents(state, events) {
events.openSidebar(function() {
state.sidebarOpened.set(true);
});
events.closeSidebar(function() {
state.sidebarOpened.set(false);
});
}