1 /**
  2  * @fileoverview The XRX++ main class.
  3  */
  4 
  5 goog.provide('xrx');
  6 
  7 goog.require('goog.dom');
  8 goog.require('xrx.func');
  9 goog.require('xrx.bind');
 10 goog.require('xrx.console');
 11 goog.require('xrx.input');
 12 goog.require('xrx.instance');
 13 goog.require('xrx.model');
 14 goog.require('xrx.output');
 15 goog.require('xrx.richxml');
 16 goog.require('xrx.textarea');
 17 goog.require('xrx.view');
 18 
 19 
 20 xrx.install_ = function(className) {
 21   var element = goog.dom.getElementsByClass(className);
 22 
 23   var classFromClassName_ = function(obj, arr) {
 24     var next = obj[arr.shift()];
 25 
 26     return arr.length > 0 ? classFromClassName_(next, arr) : next;
 27   }
 28 
 29   var classFromClassName = function(className) {
 30     var arr = className.split('-');
 31 
 32     return classFromClassName_(window, arr);
 33   }
 34 
 35   for(var i = 0, len = element.length; i < len; i++) {
 36     var e = element[i];
 37     var cmpClass = classFromClassName(className);
 38 
 39     if (!cmpClass) throw Error('Implementation of class <' + 
 40         className + '> could not be found.');
 41 
 42     var cmp = new cmpClass(e);
 43 
 44     if (cmp instanceof xrx.model) {
 45       xrx.model.addComponent(cmp.getId(), cmp);
 46     } else if (cmp instanceof xrx.view) {
 47       xrx.view.addComponent(cmp.getId(), cmp);
 48     } else {
 49       throw Error('Components must either inherit ' + 
 50           'class xrx.view or class xrx.model');
 51     }
 52   }
 53   
 54 };
 55 
 56 
 57 
 58 xrx.install = function() {
 59 
 60   for(var i = 0, len = xrx.model.classes.length; i < len; i++) {
 61     xrx.install_(xrx.model.classes[i]);
 62   }
 63 
 64   for(var i = 0, len = xrx.view.classes.length; i < len; i++) {
 65     xrx.install_(xrx.view.classes[i]);
 66   }
 67 };
 68