159 lines
5.3 KiB
JavaScript
159 lines
5.3 KiB
JavaScript
var text_ops_uninitialized,
|
|
__extends = function(child, parent) { for (var key in parent) { if (__hasProp.call(parent, key)) child[key] = parent[key]; } function ctor() { this.constructor = child; } ctor.prototype = parent.prototype; child.prototype = new ctor(); child.__super__ = parent.prototype; return child; },
|
|
__hasProp = {}.hasOwnProperty;
|
|
|
|
text_ops_uninitialized = require("./Text");
|
|
|
|
module.exports = function() {
|
|
var ops, text_ops;
|
|
text_ops = text_ops_uninitialized();
|
|
ops = text_ops.operations;
|
|
ops.Object = (function(_super) {
|
|
__extends(Object, _super);
|
|
|
|
function Object() {
|
|
return Object.__super__.constructor.apply(this, arguments);
|
|
}
|
|
|
|
Object.prototype.type = "Object";
|
|
|
|
Object.prototype.applyDelete = function() {
|
|
return Object.__super__.applyDelete.call(this);
|
|
};
|
|
|
|
Object.prototype.cleanup = function() {
|
|
return Object.__super__.cleanup.call(this);
|
|
};
|
|
|
|
Object.prototype.toJson = function(transform_to_value) {
|
|
var json, name, o, that, val;
|
|
if (transform_to_value == null) {
|
|
transform_to_value = false;
|
|
}
|
|
if ((this.bound_json == null) || (Object.observe == null) || true) {
|
|
val = this.val();
|
|
json = {};
|
|
for (name in val) {
|
|
o = val[name];
|
|
if (o instanceof ops.Object) {
|
|
json[name] = o.toJson(transform_to_value);
|
|
} else if (o instanceof ops.ListManager) {
|
|
json[name] = o.toJson(transform_to_value);
|
|
} else if (transform_to_value && o instanceof ops.Operation) {
|
|
json[name] = o.val();
|
|
} else {
|
|
json[name] = o;
|
|
}
|
|
}
|
|
this.bound_json = json;
|
|
if (Object.observe != null) {
|
|
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.changedBy == null) && (event.type === "add" || (event.type = "update"))) {
|
|
_results.push(that.val(event.name, event.object[event.name]));
|
|
} else {
|
|
_results.push(void 0);
|
|
}
|
|
}
|
|
return _results;
|
|
});
|
|
this.observe(function(events) {
|
|
var event, notifier, oldVal, _i, _len, _results;
|
|
_results = [];
|
|
for (_i = 0, _len = events.length; _i < _len; _i++) {
|
|
event = events[_i];
|
|
if (event.created_ !== this.HB.getUserId()) {
|
|
notifier = Object.getNotifier(that.bound_json);
|
|
oldVal = that.bound_json[event.name];
|
|
if (oldVal != null) {
|
|
notifier.performChange('update', function() {
|
|
return that.bound_json[event.name] = that.val(event.name);
|
|
}, that.bound_json);
|
|
_results.push(notifier.notify({
|
|
object: that.bound_json,
|
|
type: 'update',
|
|
name: event.name,
|
|
oldValue: oldVal,
|
|
changedBy: event.changedBy
|
|
}));
|
|
} else {
|
|
notifier.performChange('add', function() {
|
|
return that.bound_json[event.name] = that.val(event.name);
|
|
}, that.bound_json);
|
|
_results.push(notifier.notify({
|
|
object: that.bound_json,
|
|
type: 'add',
|
|
name: event.name,
|
|
oldValue: oldVal,
|
|
changedBy: event.changedBy
|
|
}));
|
|
}
|
|
} else {
|
|
_results.push(void 0);
|
|
}
|
|
}
|
|
return _results;
|
|
});
|
|
}
|
|
}
|
|
return this.bound_json;
|
|
};
|
|
|
|
Object.prototype.val = function(name, content) {
|
|
var args, i, o, type, _i, _ref;
|
|
if ((name != null) && arguments.length > 1) {
|
|
if ((content != null) && (content.constructor != null)) {
|
|
type = ops[content.constructor.name];
|
|
if ((type != null) && (type.create != null)) {
|
|
args = [];
|
|
for (i = _i = 1, _ref = arguments.length; 1 <= _ref ? _i < _ref : _i > _ref; i = 1 <= _ref ? ++_i : --_i) {
|
|
args.push(arguments[i]);
|
|
}
|
|
o = type.create.apply(null, args);
|
|
return Object.__super__.val.call(this, name, o);
|
|
} else {
|
|
throw new Error("The " + content.constructor.name + "-type is not (yet) supported in Y.");
|
|
}
|
|
} else {
|
|
return Object.__super__.val.call(this, name, content);
|
|
}
|
|
} else {
|
|
return Object.__super__.val.call(this, name);
|
|
}
|
|
};
|
|
|
|
Object.prototype._encode = function() {
|
|
return {
|
|
'type': this.type,
|
|
'uid': this.getUid()
|
|
};
|
|
};
|
|
|
|
return Object;
|
|
|
|
})(ops.MapManager);
|
|
ops.Object.parse = function(json) {
|
|
var uid;
|
|
uid = json['uid'];
|
|
return new this(uid);
|
|
};
|
|
ops.Object.create = function(content, mutable) {
|
|
var json, n, o;
|
|
json = new ops.Object().execute();
|
|
for (n in content) {
|
|
o = content[n];
|
|
json.val(n, o, mutable);
|
|
}
|
|
return json;
|
|
};
|
|
ops.Number = {};
|
|
ops.Number.create = function(content) {
|
|
return content;
|
|
};
|
|
return text_ops;
|
|
};
|