glance-dom
Version:
Glance DOM library
123 lines (91 loc) • 3.22 kB
JavaScript
;
var _fs = require('fs');
var _fs2 = _interopRequireDefault(_fs);
var _glanceParser = require('glance-parser');
var _glanceParser2 = _interopRequireDefault(_glanceParser);
var _defaultOptions = require('./processor/default-options');
var _defaultOptions2 = _interopRequireDefault(_defaultOptions);
var _version = require('./version');
var _version2 = _interopRequireDefault(_version);
function _interopRequireDefault(obj) { return obj && obj.__esModule ? obj : { default: obj }; }
function CreateGlanceDOM() {
var _this = this;
this.addedExtensions = [];
this.loadGlanceDOM = function () {
var glanceDOMScript = _fs2.default.readFileSync(__dirname + '/../../dist/glance-dom.js', 'utf-8');
return _this.execute(function (script, extensions) {
try {
window.localStorage.setItem('glanceDOM', script);
} catch (e) {}
eval(script);
extensions.forEach(glanceDOM.addExtension);
}, glanceDOMScript, _this.addedExtensions);
};
this.ensureGlanceDOMLoadedAndExecute = function () {
for (var _len = arguments.length, args = Array(_len), _key = 0; _key < _len; _key++) {
args[_key] = arguments[_key];
}
if (!_this.execute) throw Error('Please provide an execute function using setExecute');
var glanceLoaded = _this.execute(function (extensions) {
if (typeof glanceDOM === 'function') return true;
try {
if (!!eval(window.localStorage.getItem('glanceDOM'))) {
extensions.forEach(glanceDOM.addExtension);
return true;
}
} catch (e) {}
return false;
}, _this.addedExtensions);
if (glanceLoaded.then) {
return glanceLoaded.then(function (loaded) {
var promise = loaded ? Promise.resolve() : _this.loadGlanceDOM();
return promise.then(function () {
return _this.execute.apply(_this.execute, args);
});
});
} else {
if (!glanceLoaded) {
_this.loadGlanceDOM();
}
return _this.execute.apply(_this.execute, args);
}
};
this.selector = function (reference) {
var config = arguments.length > 1 && arguments[1] !== undefined ? arguments[1] : {};
return _this.ensureGlanceDOMLoadedAndExecute(function (reference, config) {
return glanceDOM(reference, config);
}, reference, config);
};
this.selector.parser = _glanceParser2.default;
this.selector.defaultOptions = _defaultOptions2.default;
this.selector.setDefaultOptions = function (options) {
return _this.ensureGlanceDOMLoadedAndExecute(function (options) {
return glanceDOM.setDefaultOptions(options);
}, options);
};
this.selector.getConfig = function () {
return _this.ensureGlanceDOMLoadedAndExecute(function () {
return glanceDOM.getConfig();
});
};
this.selector.setExecute = function (execute) {
_this.execute = execute;
};
this.selector.addExtension = function (extension) {
_this.addedExtensions.push(extension);
};
this.selector.addLabel = function (label, value) {
var labels = {};
labels[label] = value;
_this.addedExtensions.push({ labels: labels });
};
Object.defineProperty(this.selector, 'version', {
get: function get() {
return _version2.default;
}
});
return this.selector;
}
var Glance = new CreateGlanceDOM();
Glance.default = Glance;
module.exports = Glance;