"use strict"; (function codenautasModuleDefinition(root, name, factory) { /* global define */ /* istanbul ignore next */ if(typeof root.globalModuleName !== 'string'){ root.globalModuleName = name; } /* istanbul ignore next */ if(typeof exports === 'object' && typeof module === 'object'){ module.exports = factory(); }else if(typeof define === 'function' && define.amd){ define(factory); }else if(typeof exports === 'object'){ exports[root.globalModuleName] = factory(); }else{ root[root.globalModuleName] = factory(); } root.globalModuleName = null; })(/*jshint -W040 */this, 'AjaxBestPromise', function() { /*jshint +W040 */ /*jshint -W004 */ var AjaxBestPromise = {}; /*jshint +W004 */ function newXMLHttpRequest_OrSomethingLikeThis(){ /*jshint -W117 */ var ajax; /* istanbul ignore else*/ // only old browsers if(window.XMLHttpRequest){ ajax = new XMLHttpRequest(); }else{ try { ajax = new ActiveXObject("Msxml2.XMLHTTP"); } catch(e) { ajax = new ActiveXObject("Microsoft.XMLHTTP"); } } return ajax; /*jshint +W117 */ } /* global Promise */ AjaxBestPromise.createMethodFunction=function(method){ return function(params){ var registeredHeadersConsumer = false; var promiseForReturn = function(chunkConsumer, progressHooks){ return new Promise(function(resolve,reject){ var ajax = newXMLHttpRequest_OrSomethingLikeThis(); var receivePart; progressHooks.forEach(function(f){ ajax.upload.addEventListener('progress',f); }); if(params.uploading){ ajax.upload.addEventListener('progress',params.uploading); } var headerFun = function(){ if (ajax.readyState == 2 && registeredHeadersConsumer) { var headers = {} ajax.getAllResponseHeaders().split(/\r?\n/).forEach(function(line){ var list = line.split(':'); headers[list[0].toLowerCase()] = list.slice(1).join(':').trimLeft(); }) registeredHeadersConsumer(headers); registeredHeadersConsumer = false; } } if(chunkConsumer){ var initialPos=0; var endPos=0; receivePart=function(isLastPart){ /* istanbul ignore else*/ // wired cases. I not know how to emulate that try{ if(endPos(isLastPart?0:1)){ lineConsumer(slices.shift(),slices.shift(),!slices.length); } remain=slices.shift(); },this.progressHooks); }, onChunk:function(chunkConsumer){ return promiseForReturn(chunkConsumer,this.progressHooks); }, onHeaders:function(headersConsumer){ registeredHeadersConsumer = headersConsumer; delete intermediateObject.onHeaders; return intermediateObject; }, then:function(resolve,reject){ return promiseForReturn(null,this.progressHooks).then(resolve,reject); }, 'catch':function(reject){ return promiseForReturn(null,this.progressHooks)["catch"](reject); } }; return intermediateObject; }; }; AjaxBestPromise.post=AjaxBestPromise.createMethodFunction('POST'); AjaxBestPromise.get=AjaxBestPromise.createMethodFunction('GET'); AjaxBestPromise.put=AjaxBestPromise.createMethodFunction('PUT'); AjaxBestPromise.patch=AjaxBestPromise.createMethodFunction('PATCH'); AjaxBestPromise.delete=AjaxBestPromise.createMethodFunction('DELETE'); AjaxBestPromise.options=AjaxBestPromise.createMethodFunction('OPTIONS'); AjaxBestPromise.head=AjaxBestPromise.createMethodFunction('HEAD'); AjaxBestPromise.connect=AjaxBestPromise.createMethodFunction('CONNECT'); AjaxBestPromise.trace=AjaxBestPromise.createMethodFunction('TRACE'); AjaxBestPromise.fromElements=function fromElements(listOfElementsOrIds,addParam,base){ var actual=base; if(typeof actual==="undefined"){ actual={}; } addParam=addParam||function(actual,name,value){ actual[name]=value; return actual; }; listOfElementsOrIds.forEach(function(elementOrId){ var element; if(typeof elementOrId == 'string'){ /*jshint -W117 */ element=document.getElementById(elementOrId); /*jshint +W117 */ }else{ element=elementOrId; } /*jshint -W117 */ if(!element || !(element instanceof Element)){ throw new Error('AjaxBestPromise.fromElements must receive a list of elements'); } /*jshint +W117 */ var value; if('value' in element){ value=element.value; }else{ /* istanbul ignore else*/ // only old IE if('textContent' in element){ value=element.textContent; }else{ value=element.innerText; } } actual=addParam(actual,element.id,value); }); return actual; }; AjaxBestPromise.completePath=function completePath(listOfElementsOrIds){ return AjaxBestPromise.fromElements(listOfElementsOrIds,function(actual,name,value){ return (!actual?'':actual+'/')+encodeURI(value); },''); }; return AjaxBestPromise; });