UNPKG

cs-mpx-dataservice

Version:

MPX Dataservices

105 lines (93 loc) 3.21 kB
/** * 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); } } };