// ========================================================================== // Project: SproutCore - JavaScript Application Framework // Copyright: ©2006-2011 Strobe Inc. and contributors. // Portions ©2008-2011 Apple Inc. All rights reserved. // License: Licensed under MIT license (see license.js) // ==========================================================================

/**

@class SC.Page

A Page object is used to store a set of views that can be lazily configured
as needed.  The page object works by overloading the get() method.  The
first time you try to get the page

@extends SC.Object

*/ SC.Page = SC.Object.extend( /** @scope SC.Page.prototype */ {

/**
  When you create a page, you can set it's "owner" property to an
  object outside the page definition. This allows views in the page
  to use the owner object as a target, (as well as other objects
  accessible through the owner object). E.g.

      myButton: SC.ButtonView.design({
        title: 'Click me',
        target: SC.outlet('page.owner'),
        action: 'buttonClicked'
      })

  Usually, you'll set 'owner' to the object defined in core.js.
*/
owner: null,

get: function(key) {
  var value = this[key] ;
  if (value && value.isClass) {
    this[key] = value = value.create({ page: this }) ;
    return value ;
  } else return sc_super();
},

/**
  Returns the named property unless the property is a view that has not yet
  been configured.  In that case it will return undefined.  You can use this
  method to safely get a view without waking it up.
*/
getIfConfigured: function(key) {
  var ret = this[key] ;
  return (ret && ret.isViewClass) ? null : this.get(key);
},

/**
  Applies a localization to every view builder defined on the page.  You must call this before you construct a view to apply the localization.
*/
loc: function(locs) {
  var view, key;
  for(key in locs) {
    if (!locs.hasOwnProperty(key)) continue ;
    view = this[key] ;
    if (!view || !view.isViewClass) continue ;
    view.loc(locs[key]);
  }
  return this ;
}

//needsDesigner: YES,

//inDesignMode: YES

}) ;

// .….….….….….….….….….….….….….….. // SUPPORT FOR LOADING PAGE DESIGNS //

/** Calling design() on a page is the same as calling create() */ SC.Page.design = SC.Page.create ;

/** Calling localization returns passed attrs. */ SC.Page.localization = function(attrs) { return attrs; };