baasic-sdk-javascript
Version:
JavaScript SDK provides core functionality for building web and mobile applications on [Baasic](http://www.baasic.com/).
91 lines (90 loc) • 3.88 kB
JavaScript
;
Object.defineProperty(exports, "__esModule", { value: true });
var tslib_1 = require("tslib");
var common_1 = require("../../common");
var contracts_1 = require("../contracts");
var inversify_1 = require("inversify");
var utility = new common_1.Utility();
var BrowserEventHandler = /** @class */ (function () {
function BrowserEventHandler(storageHandler, application) {
this.storageHandler = storageHandler;
this.application = application;
this.messageBusKey = 'baasic-message-bus-' + this.application.getApiKey();
var jQueryLoaded = window.jQuery;
if (jQueryLoaded) {
this.triggerEvent = function (eventName, data) {
var event = utility.extend($.Event(eventName), data);
$(document).trigger(event);
};
}
else if (CustomEvent && typeof CustomEvent === 'function') {
this.triggerEvent = function (eventName, data) {
var event = utility.extend(new CustomEvent(eventName, { bubbles: true }), data);
document.dispatchEvent(event);
};
}
else if (document.createEvent) {
this.triggerEvent = function (eventName, data) {
var event = utility.extend(document.createEvent('CustomEvent'), data);
event.initEvent(eventName, true, true);
document.dispatchEvent(event);
};
}
else {
this.triggerEvent = function (eventName, data) {
var doc = document;
var event = utility.extend(doc.createEventObject(), data);
event.eventType = eventName;
doc.fireEvent('on' + event.eventType, event);
};
}
if (jQueryLoaded) {
this.addEvent = function (eventName, func) { return $(window).on(eventName, func); };
}
else if (window.addEventListener) {
this.addEvent = function (eventName, func) { return window.addEventListener(eventName, func, false); };
}
else if (window.attachEvent) {
this.addEvent = function (eventName, func) { return window.attachEvent('on' + eventName, func); };
}
else {
this.addEvent = function (eventName, func) { return window['on' + eventName] = func; };
}
this.initEventing();
}
BrowserEventHandler.prototype.pushMessage = function (message, args) {
this.storageHandler.remove(this.messageBusKey);
this.storageHandler.set(this.messageBusKey, {
message: message,
args: args
});
};
BrowserEventHandler.prototype.initEventing = function () {
var self = this;
this.addEvent('storage', function (e) {
e = e || event;
if (e.originalEvent) {
e = e.originalEvent;
}
if (e.key === self.messageBusKey) {
var value = e.newValue;
if (value && value !== '') {
var data = JSON.parse(value);
if (typeof data === 'string') {
data = JSON.parse(data);
}
self.triggerEvent(data.message.type, utility.extend(data.args, { app: self.application }));
}
}
});
};
BrowserEventHandler = tslib_1.__decorate([
inversify_1.injectable(),
tslib_1.__param(0, inversify_1.inject(contracts_1.TYPES.IStorageHandler)),
tslib_1.__param(1, inversify_1.inject(contracts_1.TYPES.IBaasicApp)),
tslib_1.__metadata("design:paramtypes", [Object, Object])
], BrowserEventHandler);
return BrowserEventHandler;
}());
exports.BrowserEventHandler = BrowserEventHandler;
;