elliptical-observe-inline
Version:
Dynamic sideways Data Loading for Elliptical
70 lines (52 loc) • 1.6 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", {
value: true
});
exports.default = createParser;
var _elliptical = require('elliptical');
var _processor = require('./processor');
var _processor2 = _interopRequireDefault(_processor);
var _store = require('./store');
var _store2 = _interopRequireDefault(_store);
var _zenObservable = require('zen-observable');
var _zenObservable2 = _interopRequireDefault(_zenObservable);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
/** @jsx createElement */
function createParser(element, otherProcessor) {
var store = (0, _store2.default)();
var currentObserver = void 0;
var currentInput = void 0;
var processor = (0, _processor2.default)(store.register);
var trueProcessor = processor;
if (otherProcessor) {
trueProcessor = (0, _elliptical.combineProcessors)(processor, otherProcessor);
}
var _parse = (0, _elliptical.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 _zenObservable2.default(function (observer) {
currentObserver = observer;
currentInput = input;
traverse();
});
},
parse: function parse(input) {
return _parse(input);
},
store: store
};
}