cs-mpx-dataservice
Version:
MPX Dataservices
105 lines (93 loc) • 3.21 kB
JavaScript
/**
* Created by paul.rangel on 6/10/15.
*/
var q = require("q");
var uid =require('muid');
var R = require("ramda");
var GenerateError = require("./GenerateError");
var _config = {
path : "./swf/FlashPostingBridge.swf",
name : "FlashPostingBridge"
}, _flash;
var _getTemplate = function() {
var t = "" +
"<object id=\"{{ bridgeName }}\" name=\"{{ bridgeName }}\" type=\"application/x-shockwave-flash\" data=\"{{ bridgePath }}\" width=\"1\" height=\"1\">" +
"<param name=\"movie\" value=\"{{ bridgePath }}\"/>" +
"<param name=\"allowscriptaccess\" value=\"always\"/>" +
"</object>";
return t;
};
var _addFlashObject = function() {
var d = document.createElement("div");
d.id = "tpFlashPostingBridge";
var t = _getTemplate();
t = t.replace(/{{ bridgePath }}/gi, _config.path);
t = t.replace(/{{ bridgeName }}/gi, _config.name);
d.innerHTML = t;
document.querySelector("body").appendChild(d);
};
var _post = function(url, body, contentType, isPost) {
var deferred = q.defer();
var random_name = _config.name+"_"+uid(25);
window[random_name+"_success"] = function(data) {
if(data.isException) {
deferred.reject(GenerateError(data, url));
} else {
deferred.resolve(data);
}
_cleanWindowFunctions(random_name);
};
window[random_name+"_fail"] = function(msg) {
deferred.reject(msg);
_cleanWindowFunctions(random_name);
};
// NOTE we should convert body object to a string here since AS3 borks it
if(R.is(Object,body)) {
body = JSON.stringify(body);
}
if(_flash)
_flash.post(url, body, random_name+"_success", random_name+"_fail", contentType, true);
else
deferred.reject("Flash is not initialized");
return deferred.promise;
};
var _cleanWindowFunctions = function(random_name) {
delete window[random_name+"_success"];
delete window[random_name+"_fail"];
};
var _init = function() {
var traceFunctionName = uid(20)+"_trace";
_flash.setLogCallback(traceFunctionName);
window[traceFunctionName] = function(msg) {
'console' in window && console.log("%c trace: %o","background-color: salmon;",msg);
};
};
module.exports = {
init : function(config) {
var deferred = q.defer();
_config = R.merge(_config, config);
_addFlashObject();
window.tpFlashPostingBridgeReady = function() {
var flashNameToQuery = _config.name;
if(_config.name.search(/^\.|#/) == -1)
flashNameToQuery = "#"+flashNameToQuery
_flash = document.querySelector(flashNameToQuery);
_init();
deferred.resolve();
};
return deferred.promise;
},
post : function(url, body, contentType) {
contentType = contentType || "text/json";
return _post(url, body, contentType, true);
},
put : function(url, body, contentType) {
contentType = contentType || "text/json";
return _post(url, body, contentType, false);
},
log : function(message) {
if(_flash) {
_flash.callLog(message);
}
}
};