JSFiddle - React, Tailwind, and code Playground
by gschutz
HTML
<script src="https://cdnjs.cloudflare.com/ajax/libs/lodash.js/3.9.3/lodash.min.js"></script>
JavaScript
(function(exports) {
function mixin(object, source, options) {
for(var methodName in source) {
if (_.isFunction(source[methodName])) {
object.prototype[methodName] = function(method, methodName) {
function mixed() {
var args = [this];
Array.prototype.push.apply(args, arguments);
method.apply(this, args);
// return the current class when mixed
return this;
}
return mixed;
}.call(source, source[methodName], methodName);
} else {
object.prototype[methodName] = source[methodName];
}
}
return object;
}
var ai = {};
function Class(name) {
var classed = {};
name = name.toLowerCase();
var Name = _.capitalize(name);
var NameWrapper = Name + "Wrapper";
ai[name] = 1;
console.log(ai);
eval('function '+Name+'(o){\
o = _.defaults(o || {}, {\
guid: ai[name]\
});\
_.assign(this,o);\
ai[name] += 1;\
}');
eval('function '+NameWrapper+'(value){\
var u = new '+Name+'(value);\
_.assign(this,u);\
this.$wrapped = u;\
}');
eval('function '+name+'(value){\
if (value instanceof '+NameWrapper+')\
return value;\
return new '+NameWrapper+'(value);\
}');
eval(name+'.$data = [];');
eval(name+'.$current = null;');
eval(name+'.$current = $current.bind('+name+');');
eval(name+'.$add = $add.bind('+name+');');
function $current(c) {
if (c) {
eval(name+'.$current = c');
return this;
} else {
return eval(name+'.$current');
}
}
function $add(u) {
eval(name+'.$data.push(u);');
return this;
};
eval('mixin('+name+', '+name+');');
eval(NameWrapper+'.prototype = '+name+'.prototype;');
return eval(name);
}
exports.Class = Class;
}(window));
var user = Class('user');
var guilherme = user({name:...