Source: page/page.js

'use strict';

var extend = require('extend');
var View = require('../view/view');
var Component = require('../component/component');
require('./methods').static(module);

/**
 * A Page represents one of the main application pages.
 *
 * @class Page
 * @constructor
 * @param {Page~PageDefinition} definition
 */
function Page(definition) {
    var self = this;
    this.$ = definition;

    if (definition.views) {
        definition.views.forEach(function(viewDefinition) {
            self.$view(viewDefinition);
        });
    }

    if (definition.components) {
        definition.components.forEach(function(componentDefinition) {
            self.$component(componentDefinition);
        });
    }
}

/**
 * Adds a View to a Page
 *
 * @method $view
 * @memberof Page.prototype
 * @param {View~ViewDefinition} definition
 * @return {View}
 */
Page.prototype.$view = function(definition) {
    var name = definition.name;
    var view = new View(definition);
    view.$.parent = this;
    this[name] = view;
    return this[name];
};

/**
 * Adds a Component to the page
 *
 * @method $component
 * @memberof Page.prototype
 * @param  {Component~ComponentDefinition} definition
 * @return {Component}
 */
Page.prototype.$component = function(definition) {
    var name = definition.name;
    this[name] = new Component(definition);
    return this[name];
};

extend(Page.prototype, require('./dsl'));
module.exports = Page;