From e700d2792a04840f8308c7fc1c7cfd0559553d55 Mon Sep 17 00:00:00 2001 From: Stan Jagiello Date: Thu, 6 Sep 2018 17:33:25 +0200 Subject: [PATCH 1/2] Add POST 'application/json' body support --- src/autocomplete.ts | 18 +++++++++++++++++- 1 file changed, 17 insertions(+), 1 deletion(-) diff --git a/src/autocomplete.ts b/src/autocomplete.ts index 4d146ed..70c8f88 100644 --- a/src/autocomplete.ts +++ b/src/autocomplete.ts @@ -662,7 +662,23 @@ class AutoComplete { } params.Request = request; - params.Request.send(params._QueryArg() + "=" + params._Pre()); + + var contentTypeHeader; + for (var k in params.HttpHeaders) { + if (k.match(/^content-type$/i)) { + contentTypeHeader = params.HttpHeaders[k]; + break; + } + } + if (params.HttpMethod.match(/^POST$/i) && contentTypeHeader.match(/^application\/json$/i)) { + var body = {}; + body[params._QueryArg()] = params._Pre(); + var jsonBody = JSON.stringify(body); + params.Request.send(jsonBody); + } else { + params.Request.send(params._QueryArg() + '=' + params._Pre()); + } + } } From 8fac9ae0d44e33f08a1fb58674da3f0020a16f94 Mon Sep 17 00:00:00 2001 From: Stan Jagiello Date: Tue, 9 Oct 2018 14:16:08 +0200 Subject: [PATCH 2/2] rebuild dist --- dist/autocomplete.js | 17 ++++++++++++++++- dist/autocomplete.min.js | 2 +- 2 files changed, 17 insertions(+), 2 deletions(-) diff --git a/dist/autocomplete.js b/dist/autocomplete.js index 42a4c96..ac9b005 100644 --- a/dist/autocomplete.js +++ b/dist/autocomplete.js @@ -153,7 +153,22 @@ var AutoComplete = /** @class */ (function () { params.Request.abort(); } params.Request = request; - params.Request.send(params._QueryArg() + "=" + params._Pre()); + var contentTypeHeader; + for (var k in params.HttpHeaders) { + if (k.match(/^content-type$/i)) { + contentTypeHeader = params.HttpHeaders[k]; + break; + } + } + if (params.HttpMethod.match(/^POST$/i) && contentTypeHeader.match(/^application\/json$/i)) { + var body = {}; + body[params._QueryArg()] = params._Pre(); + var jsonBody = JSON.stringify(body); + params.Request.send(jsonBody); + } + else { + params.Request.send(params._QueryArg() + '=' + params._Pre()); + } } }; AutoComplete.prototype.cache = function (params, callback, callbackErr) { diff --git a/dist/autocomplete.min.js b/dist/autocomplete.min.js index f1c941b..9a23c4d 100644 --- a/dist/autocomplete.min.js +++ b/dist/autocomplete.min.js @@ -9,6 +9,6 @@ */ (function(f){if(typeof exports==="object"&&typeof module!=="undefined"){module.exports=f()}else if(typeof define==="function"&&define.amd){define([],f)}else{var g;if(typeof window!=="undefined"){g=window}else if(typeof global!=="undefined"){g=global}else if(typeof self!=="undefined"){g=self}else{g=this}g.AutoComplete = f()}})(function(){var define,module,exports;return (function(){function r(e,n,t){function o(i,f){if(!n[i]){if(!e[i]){var c="function"==typeof require&&require;if(!f&&c)return c(i,!0);if(u)return u(i,!0);var a=new Error("Cannot find module '"+i+"'");throw a.code="MODULE_NOT_FOUND",a}var p=n[i]={exports:{}};e[i][0].call(p.exports,function(r){var n=e[i][1][r];return o(n||r)},p,p.exports,r,e,n,t)}return n[i].exports}for(var u="function"==typeof require&&require,i=0;i=e.From&&o.keyCode<=e.To?!e.Not:e.Not))};for(var i in t.prototype.getEventsByType(e,n)){var s=t.merge({Operator:ConditionOperator.AND},e.KeyboardMappings[i]),a=ConditionOperator.AND==s.Operator;s.Conditions.forEach(r),!0===a&&s.Callback.call(e,o)}},t.prototype.makeRequest=function(t,e,n){var o=Object.getOwnPropertyNames(t.HttpHeaders),r=new XMLHttpRequest,i=t._HttpMethod(),s=t._Url(),a=t._Pre(),u=encodeURIComponent(t._QueryArg())+"="+encodeURIComponent(a);i.match(/^GET$/i)&&(-1!==s.indexOf("?")?s+="&"+u:s+="?"+u),r.open(i,s,!0);for(var l=o.length-1;l>=0;l--)r.setRequestHeader(o[l],t.HttpHeaders[o[l]]);return r.onreadystatechange=function(){4==r.readyState&&200==r.status?(t.$Cache[a]=r.response,e(r.response)):r.status>=400&&n()},r},t.prototype.ajax=function(e,n,o){void 0===o&&(o=!0),e.$AjaxTimer&&window.clearTimeout(e.$AjaxTimer),!0===o?e.$AjaxTimer=window.setTimeout(t.prototype.ajax.bind(null,e,n,!1),e.Delay):(e.Request&&e.Request.abort(),e.Request=n,e.Request.send(e._QueryArg()+"="+e._Pre()))},t.prototype.cache=function(e,n,o){var r=e._Cache(e._Pre());if(void 0===r){var i=t.prototype.makeRequest(e,n,o);t.prototype.ajax(e,i)}else n(r)},t.prototype.destroy=function(t){for(var e in t.$Listeners)t.Input.removeEventListener(e,t.$Listeners[e]);t.DOMResults.parentNode.removeChild(t.DOMResults)},t.merge=function(){for(var t,e={},n=0;n"+t+""}},HttpHeaders:{"Content-type":"application/x-www-form-urlencoded"},Limit:0,MinChars:0,HttpMethod:"GET",QueryArg:"q",Url:null,KeyboardMappings:{Enter:{Conditions:[{Is:13,Not:!1}],Callback:function(t){if(-1!=this.DOMResults.getAttribute("class").indexOf("open")){var e=this.DOMResults.querySelector("li.active");null!==e&&(t.preventDefault(),this._Select(e),this.DOMResults.setAttribute("class","autocomplete"))}},Operator:ConditionOperator.AND,Event:EventType.KEYDOWN},KeyUpAndDown_down:{Conditions:[{Is:38,Not:!1},{Is:40,Not:!1}],Callback:function(t){t.preventDefault()},Operator:ConditionOperator.OR,Event:EventType.KEYDOWN},KeyUpAndDown_up:{Conditions:[{Is:38,Not:!1},{Is:40,Not:!1}],Callback:function(t){t.preventDefault();var e=this.DOMResults.querySelector("li:first-child:not(.locked)"),n=this.DOMResults.querySelector("li:last-child:not(.locked)"),o=this.DOMResults.querySelector("li.active");if(o){var r=Array.prototype.indexOf.call(o.parentNode.children,o),i=r+(t.keyCode-39),s=this.DOMResults.getElementsByTagName("li").length;i<0?i=s-1:i>=s&&(i=0),o.classList.remove("active"),o.parentElement.children.item(i).classList.add("active")}else n&&38==t.keyCode?n.classList.add("active"):e&&e.classList.add("active")},Operator:ConditionOperator.OR,Event:EventType.KEYUP},AlphaNum:{Conditions:[{Is:13,Not:!0},{From:35,To:40,Not:!0}],Callback:function(){var e=this.Input.getAttribute("data-autocomplete-old-value"),n=this._Pre();""!==n&&n.length>=this._MinChars()?(e&&n==e||this.DOMResults.setAttribute("class","autocomplete open"),t.prototype.cache(this,function(t){this._Render(this._Post(t)),this._Open()}.bind(this),this._Error)):this._Close()},Operator:ConditionOperator.AND,Event:EventType.KEYUP}},DOMResults:null,Request:null,Input:null,_EmptyMessage:function(){return this.Input.hasAttribute("data-autocomplete-empty-message")?this.Input.getAttribute("data-autocomplete-empty-message"):!1!==this.EmptyMessage?this.EmptyMessage:""},_Limit:function(){var t=this.Input.getAttribute("data-autocomplete-limit");return isNaN(t)||null===t?this.Limit:parseInt(t,10)},_MinChars:function(){var t=this.Input.getAttribute("data-autocomplete-minchars");return isNaN(t)||null===t?this.MinChars:parseInt(t,10)},_Highlight:function(t){return t.replace(this.Highlight.getRegex(this._Pre()),this.Highlight.transform)},_HttpMethod:function(){return this.Input.hasAttribute("data-autocomplete-method")?this.Input.getAttribute("data-autocomplete-method"):this.HttpMethod},_QueryArg:function(){return this.Input.hasAttribute("data-autocomplete-param-name")?this.Input.getAttribute("data-autocomplete-param-name"):this.QueryArg},_Url:function(){return this.Input.hasAttribute("data-autocomplete")?this.Input.getAttribute("data-autocomplete"):this.Url},_Blur:function(t){if(void 0===t&&(t=!1),t)this._Close();else{var e=this;setTimeout(function(){e._Blur(!0)},150)}},_Cache:function(t){return this.$Cache[t]},_Focus:function(){var t=this.Input.getAttribute("data-autocomplete-old-value");(!t||this.Input.value!=t)&&this._MinChars()<=this.Input.value.length&&this.DOMResults.setAttribute("class","autocomplete open")},_Open:function(){var t=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(e){"locked"!=e.getAttribute("class")&&(e.onclick=function(){t._Select(e)})})},_Close:function(){this.DOMResults.setAttribute("class","autocomplete")},_Position:function(){this.DOMResults.setAttribute("class","autocomplete"),this.DOMResults.setAttribute("style","top:"+(this.Input.offsetTop+this.Input.offsetHeight)+"px;left:"+this.Input.offsetLeft+"px;width:"+this.Input.clientWidth+"px;")},_Render:function(t){var e;e="string"==typeof t?this._RenderRaw(t):this._RenderResponseItems(t),this.DOMResults.hasChildNodes()&&this.DOMResults.removeChild(this.DOMResults.childNodes[0]),this.DOMResults.appendChild(e)},_RenderResponseItems:function(t){var e=document.createElement("ul"),n=document.createElement("li"),o=this._Limit();o<0?t=t.reverse():0===o&&(o=t.length);for(var r=0;r0)this.DOMResults.innerHTML=t;else{var o=this._EmptyMessage();""!==o&&(n.innerHTML=o,n.setAttribute("class","locked"),e.appendChild(n))}return e},_Post:function(t){try{var e=[],n=JSON.parse(t);if(0===Object.keys(n).length)return"";if(Array.isArray(n))for(var o=0;o=e.From&&r.keyCode<=e.To?!e.Not:e.Not))};for(var i in t.prototype.getEventsByType(e,n)){var s=t.merge({Operator:ConditionOperator.AND},e.KeyboardMappings[i]),a=ConditionOperator.AND==s.Operator;s.Conditions.forEach(o),!0===a&&s.Callback.call(e,r)}},t.prototype.makeRequest=function(t,e,n){var r=Object.getOwnPropertyNames(t.HttpHeaders),o=new XMLHttpRequest,i=t._HttpMethod(),s=t._Url(),a=t._Pre(),u=encodeURIComponent(t._QueryArg())+"="+encodeURIComponent(a);i.match(/^GET$/i)&&(-1!==s.indexOf("?")?s+="&"+u:s+="?"+u),o.open(i,s,!0);for(var l=r.length-1;l>=0;l--)o.setRequestHeader(r[l],t.HttpHeaders[r[l]]);return o.onreadystatechange=function(){4==o.readyState&&200==o.status?(t.$Cache[a]=o.response,e(o.response)):o.status>=400&&n()},o},t.prototype.ajax=function(e,n,r){if(void 0===r&&(r=!0),e.$AjaxTimer&&window.clearTimeout(e.$AjaxTimer),!0===r)e.$AjaxTimer=window.setTimeout(t.prototype.ajax.bind(null,e,n,!1),e.Delay);else{e.Request&&e.Request.abort(),e.Request=n;var o;for(var i in e.HttpHeaders)if(i.match(/^content-type$/i)){o=e.HttpHeaders[i];break}if(e.HttpMethod.match(/^POST$/i)&&o.match(/^application\/json$/i)){var s={};s[e._QueryArg()]=e._Pre();var a=JSON.stringify(s);e.Request.send(a)}else e.Request.send(e._QueryArg()+"="+e._Pre())}},t.prototype.cache=function(e,n,r){var o=e._Cache(e._Pre());if(void 0===o){var i=t.prototype.makeRequest(e,n,r);t.prototype.ajax(e,i)}else n(o)},t.prototype.destroy=function(t){for(var e in t.$Listeners)t.Input.removeEventListener(e,t.$Listeners[e]);t.DOMResults.parentNode.removeChild(t.DOMResults)},t.merge=function(){for(var t,e={},n=0;n"+t+""}},HttpHeaders:{"Content-type":"application/x-www-form-urlencoded"},Limit:0,MinChars:0,HttpMethod:"GET",QueryArg:"q",Url:null,KeyboardMappings:{Enter:{Conditions:[{Is:13,Not:!1}],Callback:function(t){if(-1!=this.DOMResults.getAttribute("class").indexOf("open")){var e=this.DOMResults.querySelector("li.active");null!==e&&(t.preventDefault(),this._Select(e),this.DOMResults.setAttribute("class","autocomplete"))}},Operator:ConditionOperator.AND,Event:EventType.KEYDOWN},KeyUpAndDown_down:{Conditions:[{Is:38,Not:!1},{Is:40,Not:!1}],Callback:function(t){t.preventDefault()},Operator:ConditionOperator.OR,Event:EventType.KEYDOWN},KeyUpAndDown_up:{Conditions:[{Is:38,Not:!1},{Is:40,Not:!1}],Callback:function(t){t.preventDefault();var e=this.DOMResults.querySelector("li:first-child:not(.locked)"),n=this.DOMResults.querySelector("li:last-child:not(.locked)"),r=this.DOMResults.querySelector("li.active");if(r){var o=Array.prototype.indexOf.call(r.parentNode.children,r),i=o+(t.keyCode-39),s=this.DOMResults.getElementsByTagName("li").length;i<0?i=s-1:i>=s&&(i=0),r.classList.remove("active"),r.parentElement.children.item(i).classList.add("active")}else n&&38==t.keyCode?n.classList.add("active"):e&&e.classList.add("active")},Operator:ConditionOperator.OR,Event:EventType.KEYUP},AlphaNum:{Conditions:[{Is:13,Not:!0},{From:35,To:40,Not:!0}],Callback:function(){var e=this.Input.getAttribute("data-autocomplete-old-value"),n=this._Pre();""!==n&&n.length>=this._MinChars()?(e&&n==e||this.DOMResults.setAttribute("class","autocomplete open"),t.prototype.cache(this,function(t){this._Render(this._Post(t)),this._Open()}.bind(this),this._Error)):this._Close()},Operator:ConditionOperator.AND,Event:EventType.KEYUP}},DOMResults:null,Request:null,Input:null,_EmptyMessage:function(){return this.Input.hasAttribute("data-autocomplete-empty-message")?this.Input.getAttribute("data-autocomplete-empty-message"):!1!==this.EmptyMessage?this.EmptyMessage:""},_Limit:function(){var t=this.Input.getAttribute("data-autocomplete-limit");return isNaN(t)||null===t?this.Limit:parseInt(t,10)},_MinChars:function(){var t=this.Input.getAttribute("data-autocomplete-minchars");return isNaN(t)||null===t?this.MinChars:parseInt(t,10)},_Highlight:function(t){return t.replace(this.Highlight.getRegex(this._Pre()),this.Highlight.transform)},_HttpMethod:function(){return this.Input.hasAttribute("data-autocomplete-method")?this.Input.getAttribute("data-autocomplete-method"):this.HttpMethod},_QueryArg:function(){return this.Input.hasAttribute("data-autocomplete-param-name")?this.Input.getAttribute("data-autocomplete-param-name"):this.QueryArg},_Url:function(){return this.Input.hasAttribute("data-autocomplete")?this.Input.getAttribute("data-autocomplete"):this.Url},_Blur:function(t){if(void 0===t&&(t=!1),t)this._Close();else{var e=this;setTimeout(function(){e._Blur(!0)},150)}},_Cache:function(t){return this.$Cache[t]},_Focus:function(){var t=this.Input.getAttribute("data-autocomplete-old-value");(!t||this.Input.value!=t)&&this._MinChars()<=this.Input.value.length&&this.DOMResults.setAttribute("class","autocomplete open")},_Open:function(){var t=this;Array.prototype.forEach.call(this.DOMResults.getElementsByTagName("li"),function(e){"locked"!=e.getAttribute("class")&&(e.onclick=function(){t._Select(e)})})},_Close:function(){this.DOMResults.setAttribute("class","autocomplete")},_Position:function(){this.DOMResults.setAttribute("class","autocomplete"),this.DOMResults.setAttribute("style","top:"+(this.Input.offsetTop+this.Input.offsetHeight)+"px;left:"+this.Input.offsetLeft+"px;width:"+this.Input.clientWidth+"px;")},_Render:function(t){var e;e="string"==typeof t?this._RenderRaw(t):this._RenderResponseItems(t),this.DOMResults.hasChildNodes()&&this.DOMResults.removeChild(this.DOMResults.childNodes[0]),this.DOMResults.appendChild(e)},_RenderResponseItems:function(t){var e=document.createElement("ul"),n=document.createElement("li"),r=this._Limit();r<0?t=t.reverse():0===r&&(r=t.length);for(var o=0;o0)this.DOMResults.innerHTML=t;else{var r=this._EmptyMessage();""!==r&&(n.innerHTML=r,n.setAttribute("class","locked"),e.appendChild(n))}return e},_Post:function(t){try{var e=[],n=JSON.parse(t);if(0===Object.keys(n).length)return"";if(Array.isArray(n))for(var r=0;r