Source: prefab/manager.js

define(['jqueryify', 'jquery', 'root'], function($ify, $, root) {
  'use strict';
  
  /**
   * @exports lyria/prefab/manager
   * @requires jqueryify
   * @requires jquery
   * @requires root 
   */
  
  var PrefabManager = {};

  PrefabManager.prefabs = {};
  PrefabManager.viewport = null;
  PrefabManager.className = 'prefab';
  PrefabManager.parent = null;

  var createElement = function(type) {
    return function(options, data) {
      var name = options.name;
      // Allow target to be an alias for parent
      var parent = options.parent || options.target;
      
      // TODO: Streamline the way of passing data to scenes and prefabs
      data = data || options.data || {};
      
      if (options.wrap == null) {
        options.wrap = true;
      }
      
      // TODO: Wrap typically wraps the content - this is default behavior right now
      var wrap = options.wrap;
      
      if (parent == null) {
        parent = ((PrefabManager.viewport) ? PrefabManager.viewport.$element :
        void 0) || 'body';
      }
      
      var prefab = null;
      
      var elementId = name;
      
      if (elementId) {
        if (elementId.indexOf('.') >= 0) {
          elementId = elementId.replace(/\./g, '--');
        }
        
        if (elementId.indexOf('/') >= 0) {
          elementId = elementId.replace(/\//g, '--');
        }
        
        if (elementId.indexOf('#') >= 0) {
          elementId = elementId.replace(/#/g, '--');
        }
      }
      
      var prefabId = PrefabManager.className + '-' + elementId + '-' + Date.now();
      
      data.id = prefabId;
      
      if (!PrefabManager.prefabs[name]) {
        throw new Error('No valid prefab called ' + name + ' found.');
      } else {
        prefab = PrefabManager.prefabs[name](data);
      }

      var $parent = $ify(parent);

      if ($parent) {
        if ($('#' + prefab.name).length === 0) {
          $parent[type]($(root.document.createElement('div')).attr('id', prefabId).attr('class', PrefabManager.className));
        }
        
        prefab.parent = PrefabManager;

        if (!prefab.isAsync) {
          prefab.trigger('added', function() {
            prefab.trigger('active');
          });
        }
      }
    };
  };

  PrefabManager.append = function() {
    createElement('append').apply(this, arguments);
  };

  PrefabManager.prepend = function() {
    createElement('prepend').apply(this, arguments);
  };
  
  PrefabManager.insert = function() {
    createElement('html').apply(this, arguments);
  };

  return PrefabManager;
});
DocStrap Copyright © 2012-2013 The contributors to the JSDoc3 and DocStrap projects.
Documentation generated by JSDoc 3.2.2 on Sun Jan 26 2014 20:12:44 GMT+0100 (MEZ) using the DocStrap template.