Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension


Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
2 changes: 2 additions & 0 deletions .gitignore
Original file line number Diff line number Diff line change
Expand Up @@ -2,3 +2,5 @@
/promises_tests
/main.js
/tmp
/.idea
test/tests.js
1 change: 1 addition & 0 deletions CHANGELOG.md
Original file line number Diff line number Diff line change
@@ -1,2 +1,3 @@

# Master
Initial commit
17 changes: 16 additions & 1 deletion Gruntfile.js
Original file line number Diff line number Diff line change
Expand Up @@ -78,6 +78,20 @@ module.exports = function(grunt) {
'uglify:browserNoVersion'
]);

this.registerTask('coffeeTests',[
'clean:tests',
'build',
'coffeeify:tests',
'watch:coffeeTests'

]);
this.registerTask('phantomTests',[
'clean:tests',
'build',
'coffeeify:tests',
'mocha_phantomjs:phantom'

]);
// Custom YUIDoc task
this.registerTask('docs', ['yuidoc']);

Expand All @@ -90,7 +104,8 @@ module.exports = function(grunt) {
grunt.loadNpmTasks('grunt-mocha-test');
grunt.loadNpmTasks('grunt-contrib-yuidoc');
grunt.loadNpmTasks('grunt-release-it');

grunt.loadNpmTasks('grunt-contrib-coffeeify');
grunt.loadNpmTasks('grunt-include-source');
// Merge config into emberConfig, overwriting existing settings
grunt.initConfig(config);
};
21 changes: 21 additions & 0 deletions bower.json
Original file line number Diff line number Diff line change
@@ -0,0 +1,21 @@
{
"name": "ember-share",
"description": "Integrate ShareDB 1.00 with Ember",
"main": "dist/ember-share.js",
"authors": [
"Oren Griffin <oren.griffin@gmail.com>"
],
"license": "MIT",
"keywords": [
"ShareDB",
"ShareJS"
],
"homepage": "https://github.com/Optibus/ember-share",
"ignore": [
"**/.*",
"node_modules",
"bower_components",
"test",
"tests"
]
}
31 changes: 7 additions & 24 deletions dist/commonjs/ember-share.js
Original file line number Diff line number Diff line change
@@ -1,33 +1,16 @@
"use strict";
var ShareTextMixin = require("ember-share/mixins/share-text")["default"];
var ShareProxy = require("ember-share/models/share-proxy")["default"];
var ShareArray = require("ember-share/models/share-array")["default"];
var ShareProxy = require("ember-share/models/model")["default"];
var Store = require("ember-share/store")["default"];
var Utils = require("ember-share/utils")["default"];
var attrFunc = require("ember-share/attr")["default"];
var belongsTo = require("ember-share/belongs-to")["default"];

Ember.onLoad('Ember.Application', function(Application) {
Application.initializer({
name: 'ember-share',
initialize : function(container, application){
application.register('store:main', application.Store || StoreStore);
container.lookup('store:main');
}
});
Application.initializer({
name: 'injectStore',
before : 'ember-share',
initialize : function(container, application) {
application.register('model:share-proxy',ShareProxy);
application.register('model:share-array',ShareArray);
application.inject('controller', 'store', 'store:main');
application.inject('route', 'store', 'store:main');
}
});
});

var attr = attrFunc('_sdbProps')

exports.ShareTextMixin = ShareTextMixin;
exports.ShareProxy = ShareProxy;
exports.ShareArray = ShareArray;
exports.belongsTo = belongsTo;
exports.Store = Store;
exports.Utils = Utils;
exports.Utils = Utils;
exports.attr = attr;
60 changes: 60 additions & 0 deletions dist/commonjs/ember-share/attr.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,60 @@
"use strict";
var sillyFunction = function (value) {return value};

exports["default"] = function(sdbProps) {
return function() {
var options,
type;
options = {};
type = null;
_.forEach(arguments, function(arg) {
if (_.isPlainObject(arg)) {
return options = arg;
} else {
if (_.isString(arg)) {
return type = arg.charAt(0).toUpperCase() + arg.slice(1);
}
}
});
if (type != null && window[type] != null) {
var transfromToType = function (value) {
var newValue = new window[type](value)
if (type == 'Date')
return newValue
else
return newValue.valueOf()
};
} else {
var transfromToType = sillyFunction
}

return Ember.computed({
get: function(k) {
this.get(sdbProps, true).addObject(k);
// return this.get(k, true);
var isSpecielKey = _.includes([
'_isSDB',
'_sdbProps',
'_subProps',
'doc',
'_prefix',
'content',
'_idx',
'_root'
], k);

if (isSpecielKey || this._fullPath == null)
return transfromToType(this._get(k, true))
else
return transfromToType(this._get(this._fullPath(k)))

},
set: function(k, v, isFromServer) {
// return this._super(p, oi)
var path = (k == null) ? this.get('_prefix') : ((k == '_idx' || !this._fullPath) ? k : this._fullPath(k));
return this._set(path, v)

}
});
}
}
48 changes: 48 additions & 0 deletions dist/commonjs/ember-share/belongs-to.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,48 @@
"use strict";
exports["default"] = function(DS, modelName) {
// var options, type;
// options = {};
// type = null;
// _.forEach(arguments, function(arg) {
// if (_.isPlainObject(arg)) {
// return options = arg;
// } else {
// if (_.isString(arg)) {
// return type = null;
// }
// }
// });
var store = this.originalStore;
return Ember.computed({
get: function(k) {
var ref;

return store.findRecord(modelName, this.get(ref = "doc.data." + k));
// return != null ? ref : Ember.get(options, 'defaultValue'));
},
set: function(p, oi, isFromServer) {
return oi;
}
});
}


// attr: ->
// options = {}; type = null
// _.forEach arguments, (arg) ->
// if _.isPlainObject(arg)
// options = arg
// else
// if _.isString arg
// type = null
//
// Ember.computed
// get: (k) ->
// @get "doc.data.#{k}" ? Ember.get(options, 'defaultValue')
// set: (p, oi, isFromServer) ->
// if type?
// oi = window[type.toUpperCase type] oi
// od = @get p
// p = p.split '.'
// @get('doc').submitOp [{p,od,oi}]
// oi
143 changes: 143 additions & 0 deletions dist/commonjs/ember-share/models/base.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,143 @@
"use strict";
var UseSubsMixin = require("./use-subs-mixin")["default"];
var SubMixin = require("./sub-mixin")["default"];
var SDBSubArray = require("./sub-array")["default"];
var subs = require("./subs-handler")["default"];
var Utils = require("./utils")["default"];

var toJson = function(obj) {
return (obj == null)
? void 0
: JSON.parse(JSON.stringify(obj));
};

var getPlainObject = function (value) {
if (value != null && !((typeof value == 'string') || (typeof value == 'number')))
if (typeof value.toJson == 'function')
return value.toJson()
else
return toJson(value)
else {
return value
}
}

//
// ShareDb Base Class
//
// Root and all subs (currently not arrays) inherit from base.
//
//

var GetterSettersMixin = Ember.Mixin.create({

_get: function(k, selfCall) {
var firstValue = _.first(k.split('.'));

if (k != '_sdbProps' && _.includes(this.get('_sdbProps'), firstValue)) {
var content = this.get("doc.data." + k);
return this.useSubs(content, k)
} else {
return this.get(k);
}
},

_set: function(path, oi) {
var firstValue = _.first(path.split('.'));
var self = this;

if (Ember.get(this, '_prefix') == null)
this.get(firstValue);

if (path != '_sdbProps' && _.includes(this.get('_sdbProps'), firstValue)) {
var od = getPlainObject(this._get(path));
oi = getPlainObject(oi);
var p = path.split('.');
var utils = Utils(this);
utils.removeChildren(path, true);
var op = {
p: p,
od: od,
oi: oi
};

if (od == null)
delete op.od;

if (op.oi != op.od) {
this.get('doc').submitOp([op], function(err) {
self.get('_root', true).trigger('submitted', err);
});
}

return this.useSubs(oi,path);
} else {
return this.set(path, oi, true)

}
}

});
var SDBBase = Ember.Object.extend(Ember.Evented, GetterSettersMixin, {

_isSDB: true,

notifyProperties: function notifyProperties(props) {
var self = this;
_.forEach(props, function(prop) {
self.notifyPropertyChange(prop)
})
return this
},

notifyDidProperties: function notifyDidProperties(props) {
var self = this;
_.forEach(props, function(prop) {
self.propertyDidChange(prop)
})
return this
},

notifyWillProperties: function notifyWillProperties(props) {
var self = this;
_.forEach(props, function(prop) {
self.propertyWillChange(prop)
})
return this
},

deleteProperty: function deleteProperty(k) {
var doc = this.get('doc');
var p = k.split('.');
var od = getPlainObject(this.get(k));
doc.submitOp([
{
p: p,
od: od
}
]);
},

setProperties: function setProperties(obj) {
var sdbProps = this.get('_sdbProps');
var self = this;
var SDBpropsFromObj = _.filter(_.keys(obj), function(key) {
self.get(key);
return _.includes(sdbProps, key)
});
var nonSDB = _.reject(_.keys(obj), function(key) {
return _.includes(sdbProps, key)
});
this._super(_.pick(obj, nonSDB));
_.forEach(SDBpropsFromObj, function(key) {
self.set(key, obj[key])
});
},

});

SDBBase = SDBBase.extend(UseSubsMixin);
subs.object = SDBBase.extend(SubMixin);
subs.array = SDBSubArray(SubMixin, GetterSettersMixin).extend(UseSubsMixin);

exports["default"] = SDBBase
Loading