1 /**
  2  * @fileoverview A class representing the controller of
  3  * the model-view-controller.
  4  */
  5 
  6 goog.provide('xrx.controller');
  7 
  8 
  9 goog.require('xrx.update');
 10 
 11 
 12 
 13 xrx.controller = function() {};
 14 
 15 
 16 
 17 /**
 18  * 
 19  */
 20 xrx.controller.update = function(control, update) {
 21   var node = control.getNode();
 22   var stream = new xrx.stream(xrx.model.getComponent(node.instance()).xml());
 23   var token = node.token();
 24 
 25   var diff = xrx.update.notTag(stream, token, update);
 26   xrx.model.getComponent(node.instance()).xml(stream.xml());
 27   xrx.controller.valueUpdate(control, diff, update);
 28 };
 29 
 30 
 31 
 32 /**
 33  * Handles a value update.
 34  */
 35 xrx.controller.valueUpdate = function(control, diff, update) {
 36   var node = control.getNode();
 37   var offset = node.token().offset();
 38 
 39   // Recalculate the Model:
 40   //   Update the offset of each bind's node which appears
 41   //   after the updated node's offset (in document order) 
 42   for (var c in xrx.model.getComponents()) {
 43     var component = xrx.model.getComponent(c);
 44     if (component instanceof xrx.bind) {
 45 
 46       var o = component.node.offset();
 47       if (o > offset) {
 48         var token = component.node.token();
 49         token.offset(o += diff);
 50       }
 51     }
 52   }
 53 
 54   // Refresh the View:
 55   //   Update the value of each control bound to the same node
 56   //   as the updated node, but not the updated node itself
 57   for (var c in xrx.view.getComponents()) {
 58     var contr = xrx.view.getComponent(c);
 59     if (contr.getNode().sameAs(node) && c != control.getId()) {
 60       contr.setValue(update, true);
 61     } else if (control.getNode().label().isDescendantOf(contr.getNode().label()) && c != control.getId() ) {
 62       contr.refresh();
 63     }
 64   }
 65 };
 66 
 67 
 68 
 69 /**
 70  * Handles a structural update.
 71  */
 72 xrx.controller.structuralUpdate = function() {
 73   
 74 };
 75 
 76 
 77 
 78