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; };