added support for Object.observe in supported browsers
This commit is contained in:
@@ -61,6 +61,10 @@
|
||||
return _results;
|
||||
};
|
||||
|
||||
Operation.prototype.deleteAllListeners = function() {
|
||||
return this.event_listeners = [];
|
||||
};
|
||||
|
||||
Operation.prototype.callEvent = function() {
|
||||
return this.forwardEvent.apply(this, [this].concat(__slice.call(arguments)));
|
||||
};
|
||||
@@ -97,7 +101,8 @@
|
||||
};
|
||||
|
||||
Operation.prototype.cleanup = function() {
|
||||
return HB.removeOperation(this);
|
||||
HB.removeOperation(this);
|
||||
return this.deleteAllListeners();
|
||||
};
|
||||
|
||||
Operation.prototype.setParent = function(parent) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -87,25 +87,74 @@
|
||||
};
|
||||
|
||||
JsonType.prototype.toJson = function() {
|
||||
var json, name, o, val;
|
||||
val = this.val();
|
||||
json = {};
|
||||
for (name in val) {
|
||||
o = val[name];
|
||||
if (o === null) {
|
||||
json[name] = o;
|
||||
} else if (o.constructor === {}.constructor) {
|
||||
json[name] = this.val(name).toJson();
|
||||
} else if (o instanceof types.Operation) {
|
||||
while (o instanceof types.Operation) {
|
||||
o = o.val();
|
||||
var json, name, o, that, val;
|
||||
if ((this.bound_json == null) || (Object.observe == null) || true) {
|
||||
val = this.val();
|
||||
json = {};
|
||||
for (name in val) {
|
||||
o = val[name];
|
||||
if (o === null) {
|
||||
json[name] = o;
|
||||
} else if (o.constructor === {}.constructor) {
|
||||
json[name] = this.val(name).toJson();
|
||||
} else if (o instanceof types.Operation) {
|
||||
while (o instanceof types.Operation) {
|
||||
o = o.val();
|
||||
}
|
||||
json[name] = o;
|
||||
} else {
|
||||
json[name] = o;
|
||||
}
|
||||
json[name] = o;
|
||||
} else {
|
||||
json[name] = o;
|
||||
}
|
||||
this.bound_json = json;
|
||||
if ((Object.observe != null) && false) {
|
||||
that = this;
|
||||
Object.observe(this.bound_json, function(events) {
|
||||
var event, _i, _len, _results;
|
||||
_results = [];
|
||||
for (_i = 0, _len = events.length; _i < _len; _i++) {
|
||||
event = events[_i];
|
||||
if (event.type === "add" || (event.type = "update")) {
|
||||
_results.push(that.val(event.name, event.object[event.name]));
|
||||
} else {
|
||||
_results.push(void 0);
|
||||
}
|
||||
}
|
||||
return _results;
|
||||
});
|
||||
that.on('change', function(event_name, property_name, op) {
|
||||
var notifier, oldVal;
|
||||
if (this === that) {
|
||||
notifier = Object.getNotifier(that.bound_json);
|
||||
oldVal = that.bound_json[property_name];
|
||||
if (oldVal != null) {
|
||||
notifier.performChange('update', function() {
|
||||
return that.bound_json[property_name] = that.val(property_name);
|
||||
}, that.bound_json);
|
||||
return notifier.notify({
|
||||
object: that.bound_json,
|
||||
type: 'update',
|
||||
name: property_name,
|
||||
oldValue: oldVal,
|
||||
changed_by: op.creator
|
||||
});
|
||||
} else {
|
||||
notifier.performChange('add', function() {
|
||||
return that.bound_json[property_name] = that.val(property_name);
|
||||
}, that.bound_json);
|
||||
return notifier.notify({
|
||||
object: that.bound_json,
|
||||
type: 'add',
|
||||
name: property_name,
|
||||
oldValue: oldVal,
|
||||
changed_by: op.creator
|
||||
});
|
||||
}
|
||||
}
|
||||
});
|
||||
}
|
||||
}
|
||||
return json;
|
||||
return this.bound_json;
|
||||
};
|
||||
|
||||
JsonType.prototype.setReplaceManager = function(replace_manager) {
|
||||
|
||||
File diff suppressed because one or more lines are too long
@@ -255,7 +255,7 @@
|
||||
}
|
||||
});
|
||||
addPropertyListener = function(event, op) {
|
||||
repl_manager.deleteListener('addProperty', addPropertyListener);
|
||||
repl_manager.deleteListener('insert', addPropertyListener);
|
||||
return repl_manager.parent.callEvent('addProperty', property_name, op);
|
||||
};
|
||||
this.on('insert', addPropertyListener);
|
||||
@@ -318,6 +318,9 @@
|
||||
|
||||
Replaceable.prototype.applyDelete = function() {
|
||||
if (this.content != null) {
|
||||
if (this.next_cl.type !== "Delimiter") {
|
||||
this.content.deleteAllListeners();
|
||||
}
|
||||
this.content.applyDelete();
|
||||
this.content.dontSync();
|
||||
}
|
||||
|
||||
File diff suppressed because one or more lines are too long
Reference in New Issue
Block a user