elliptical-observe-inline
Version:
Dynamic sideways Data Loading for Elliptical
52 lines (43 loc) • 1.2 kB
JavaScript
/** @jsx createElement */
import { createElement, compile, combineProcessors } from 'elliptical';
import createProcessor from './processor';
import createStore from './store';
import Observable from 'zen-observable';
export default function createParser(element, otherProcessor) {
var store = createStore();
var currentObserver = void 0;
var currentInput = void 0;
var processor = createProcessor(store.register);
var trueProcessor = processor;
if (otherProcessor) {
trueProcessor = combineProcessors(processor, otherProcessor);
}
var _parse = compile(element, trueProcessor);
function traverse() {
var outputs = _parse(currentInput);
currentObserver.next(outputs);
}
store.data.subscribe({
next: function next() {
if (currentObserver) {
traverse();
}
}
});
return {
watch: function watch(input) {
if (currentObserver) {
currentObserver.complete();
}
return new Observable(function (observer) {
currentObserver = observer;
currentInput = input;
traverse();
});
},
parse: function parse(input) {
return _parse(input);
},
store: store
};
}