JSFiddle - React, Tailwind, and code Playground
by kentaromiura
HTML
<script src="https://rawgit.com/kentaromiura/4531883/raw/954e971e0ce4e87fc1d5dea6444583906ea2b829/Monad.js"></script>
JavaScript
var Query = function(data){
if (data instanceof Monad) {
this.data = data;
}else{
this.data = new Monad(function(){return data});
}
};
Query.learn = function(feature, action){
Query.prototype[feature] = function(){
var me = this;
var params = Array.prototype.slice.call(arguments);
var monad = me.data.bind(function(getdata){
params.unshift(getdata);
return function(){
return action.apply(me, params);
}
});
return new Query(monad);
};
};
var object = {
a:{
b:{
c: 1
}
},
b: {
'foo': 'hello'
}
};
var ValueSymbol = "@@value"
Query.learn('firstChild', function(getdata){
var result = {}
result[ValueSymbol] = null
var object = getdata()
if(object[ValueSymbol]) object = object[ValueSymbol]
for(var x in object){
if(object.hasOwnProperty(x)){
result = {
parent: object,
name: x
}
result[ValueSymbol] = object[x]
return result //optimization
}
}
return result
})
Query.learn('lastChild', function(getdata){
var result = {}
result[ValueSymbol] = null
var object = getdata()
if(object[ValueSymbol]) object = object[ValueSymbol]
for(var x in object){
if(object.hasOwnProperty(x)){
result = {
parent: object,
name: x
}
result[ValueSymbol] = object[x]
}
}
return result
})
Query.learn('childNodes', function(getdata){
var result = {}
var list = result[ValueSymbol] = []
var object = getdata()
if(object[ValueSymbol]) object = object[ValueSymbol]
for(var x in object){
if(object.hasOwnProperty(x)){
list.push(object[x])
}
}
...