From 588b6aaa81696eef00cebaf14270d76d87056280 Mon Sep 17 00:00:00 2001 From: Michiel Renty Date: Wed, 11 Nov 2015 16:40:11 +0100 Subject: [PATCH 01/13] Added support for HTML5 and ARIA --- auto-complete.js | 8 ++++++-- 1 file changed, 6 insertions(+), 2 deletions(-) diff --git a/auto-complete.js b/auto-complete.js index 385cc99..14dc7e2 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -39,7 +39,7 @@ var autoComplete = (function(){ // escape special characters search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi"); - return '
' + item.replace(re, "$1") + '
'; + return ''; }, onSelect: function(e, term, item){} }; @@ -49,10 +49,14 @@ var autoComplete = (function(){ var elems = typeof o.selector == 'object' ? [o.selector] : document.querySelectorAll(o.selector); for (var i=0; i Date: Wed, 11 Nov 2015 16:53:46 +0100 Subject: [PATCH 02/13] Added support for ARIA-activedescendant --- auto-complete.js | 20 +++++++++++++++++--- 1 file changed, 17 insertions(+), 3 deletions(-) diff --git a/auto-complete.js b/auto-complete.js index 14dc7e2..c569868 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -49,10 +49,16 @@ var autoComplete = (function(){ var elems = typeof o.selector == 'object' ? [o.selector] : document.querySelectorAll(o.selector); for (var i=0; i Date: Wed, 11 Nov 2015 17:05:54 +0100 Subject: [PATCH 03/13] Updated minified version --- auto-complete.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auto-complete.min.js b/auto-complete.min.js index 0c963ad..7399959 100644 --- a/auto-complete.min.js +++ b/auto-complete.min.js @@ -1,3 +1,3 @@ // JavaScript autoComplete v1.0.3 // https://github.com/Pixabay/JavaScript-autoComplete -var autoComplete=function(){function e(e){function t(e,t){return e.classList?e.classList.contains(t):new RegExp("\\b"+t+"\\b").test(e.className)}function o(e,t,o){e.attachEvent?e.attachEvent("on"+t,o):e.addEventListener(t,o)}function s(e,t,o){e.detachEvent?e.detachEvent("on"+t,o):e.removeEventListener(t,o)}function n(e,s,n,l){o(l||document,s,function(o){for(var s,l=o.target||o.srcElement;l&&!(s=t(l,e));)l=l.parentElement;s&&n.call(l,o)})}if(document.querySelector){var l={selector:0,source:0,minChars:3,delay:150,cache:1,menuClass:"",renderItem:function(e,t){t=t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");var o=new RegExp("("+t.split(" ").join("|")+")","gi");return'
'+e.replace(o,"$1")+"
"},onSelect:function(e,t,o){}};for(var c in e)e.hasOwnProperty(c)&&(l[c]=e[c]);for(var a="object"==typeof l.selector?[l.selector]:document.querySelectorAll(l.selector),u=0;u0?i.sc.scrollTop=n+i.sc.suggestionHeight+s-i.sc.maxHeight:0>n&&(i.sc.scrollTop=n+s)}else i.sc.scrollTop=0},o(window,"resize",i.updateSC),document.body.appendChild(i.sc),n("autocomplete-suggestion","mouseleave",function(e){var t=i.sc.querySelector(".autocomplete-suggestion.selected");t&&setTimeout(function(){t.className=t.className.replace("selected","")},20)},i.sc),n("autocomplete-suggestion","mouseover",function(e){var t=i.sc.querySelector(".autocomplete-suggestion.selected");t&&(t.className=t.className.replace("selected","")),this.className+=" selected"},i.sc),n("autocomplete-suggestion","mousedown",function(e){if(t(this,"autocomplete-suggestion")){var o=this.getAttribute("data-val");i.value=o,l.onSelect(e,o,this),i.sc.style.display="none"}},i.sc),i.blurHandler=function(){try{var e=document.querySelector(".autocomplete-suggestions:hover")}catch(t){var e=0}e?i!==document.activeElement&&setTimeout(function(){i.focus()},20):(i.last_val=i.value,i.sc.style.display="none",setTimeout(function(){i.sc.style.display="none"},350))},o(i,"blur",i.blurHandler);var r=function(e){var t=i.value;if(i.cache[t]=e,e.length&&t.length>=l.minChars){for(var o="",s=0;st||t>40)&&13!=t&&27!=t){var o=i.value;if(o.length>=l.minChars){if(o!=i.last_val){if(i.last_val=o,clearTimeout(i.timer),l.cache){if(o in i.cache)return void r(i.cache[o]);for(var s=1;s'+e.replace(s,"$1")+""},onSelect:function(){}};for(var c in e)e.hasOwnProperty(c)&&(n[c]=e[c]);for(var l="object"==typeof n.selector?[n.selector]:document.querySelectorAll(n.selector),i=0;i0?r.sc.scrollTop=a+r.sc.suggestionHeight+o-r.sc.maxHeight:0>a&&(r.sc.scrollTop=a+o)}else r.sc.scrollTop=0},s(window,"resize",r.updateSC),document.body.appendChild(r.sc),a("autocomplete-suggestion","mouseleave",function(){var e=r.sc.querySelector(".autocomplete-suggestion.selected");e&&setTimeout(function(){e.className=e.className.replace("selected",""),r.removeAttribute("aria-activedescendant")},20)},r.sc),a("autocomplete-suggestion","mouseover",function(){var e=r.sc.querySelector(".autocomplete-suggestion.selected");e&&(e.className=e.className.replace("selected","")),this.id=Math.random().toString(36).substring(7),r.setAttribute("aria-activedescendant",this.id),this.className+=" selected"},r.sc),a("autocomplete-suggestion","mousedown",function(e){if(t(this,"autocomplete-suggestion")){var s=this.getAttribute("data-val");r.value=s,n.onSelect(e,s,this),r.sc.style.display="none"}},r.sc),r.blurHandler=function(){try{var e=document.querySelector(".autocomplete-suggestions:hover")}catch(t){var e=0}e?r!==document.activeElement&&setTimeout(function(){r.focus()},20):(r.last_val=r.value,r.sc.style.display="none",setTimeout(function(){r.sc.style.display="none"},350))},s(r,"blur",r.blurHandler);var d=function(e){var t=r.value;if(r.cache[t]=e,e.length&&t.length>=n.minChars){for(var s="",o=0;ot||t>40)&&13!=t&&27!=t){var s=r.value;if(s.length>=n.minChars){if(s!=r.last_val){if(r.last_val=s,clearTimeout(r.timer),n.cache){if(s in r.cache)return void d(r.cache[s]);for(var o=1;o Date: Wed, 11 Nov 2015 17:12:31 +0100 Subject: [PATCH 04/13] Added support for browsers that don't know HTML5 elements --- auto-complete.js | 9 ++++++++- 1 file changed, 8 insertions(+), 1 deletion(-) diff --git a/auto-complete.js b/auto-complete.js index c569868..dc0b39f 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -39,7 +39,14 @@ var autoComplete = (function(){ // escape special characters search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi"); - return ''; + var option = document.createElement('option'); + + option.className = "autocomplete-suggestion"; + option.setAttribute('role', 'option'); + option.setAttribute('data-val', item); + option.innerHTML = item.replace(re, "$1"); + + return option; }, onSelect: function(e, term, item){} }; From 7fa78b847aeb2eae59dd529fdf57ece9d5a1fb37 Mon Sep 17 00:00:00 2001 From: Michiel Renty Date: Wed, 11 Nov 2015 17:13:20 +0100 Subject: [PATCH 05/13] Updated minified version --- auto-complete.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auto-complete.min.js b/auto-complete.min.js index 7399959..e08136b 100644 --- a/auto-complete.min.js +++ b/auto-complete.min.js @@ -1,3 +1,3 @@ // JavaScript autoComplete v1.0.3 // https://github.com/Pixabay/JavaScript-autoComplete -var autoComplete=function(){function e(e){function t(e,t){return e.classList?e.classList.contains(t):new RegExp("\\b"+t+"\\b").test(e.className)}function s(e,t,s){e.attachEvent?e.attachEvent("on"+t,s):e.addEventListener(t,s)}function o(e,t,s){e.detachEvent?e.detachEvent("on"+t,s):e.removeEventListener(t,s)}function a(e,o,a,n){s(n||document,o,function(s){for(var o,n=s.target||s.srcElement;n&&!(o=t(n,e));)n=n.parentElement;o&&a.call(n,s)})}if(document.querySelector){var n={selector:0,source:0,minChars:3,delay:150,cache:1,menuClass:"",renderItem:function(e,t){t=t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");var s=new RegExp("("+t.split(" ").join("|")+")","gi");return'"},onSelect:function(){}};for(var c in e)e.hasOwnProperty(c)&&(n[c]=e[c]);for(var l="object"==typeof n.selector?[n.selector]:document.querySelectorAll(n.selector),i=0;i0?r.sc.scrollTop=a+r.sc.suggestionHeight+o-r.sc.maxHeight:0>a&&(r.sc.scrollTop=a+o)}else r.sc.scrollTop=0},s(window,"resize",r.updateSC),document.body.appendChild(r.sc),a("autocomplete-suggestion","mouseleave",function(){var e=r.sc.querySelector(".autocomplete-suggestion.selected");e&&setTimeout(function(){e.className=e.className.replace("selected",""),r.removeAttribute("aria-activedescendant")},20)},r.sc),a("autocomplete-suggestion","mouseover",function(){var e=r.sc.querySelector(".autocomplete-suggestion.selected");e&&(e.className=e.className.replace("selected","")),this.id=Math.random().toString(36).substring(7),r.setAttribute("aria-activedescendant",this.id),this.className+=" selected"},r.sc),a("autocomplete-suggestion","mousedown",function(e){if(t(this,"autocomplete-suggestion")){var s=this.getAttribute("data-val");r.value=s,n.onSelect(e,s,this),r.sc.style.display="none"}},r.sc),r.blurHandler=function(){try{var e=document.querySelector(".autocomplete-suggestions:hover")}catch(t){var e=0}e?r!==document.activeElement&&setTimeout(function(){r.focus()},20):(r.last_val=r.value,r.sc.style.display="none",setTimeout(function(){r.sc.style.display="none"},350))},s(r,"blur",r.blurHandler);var d=function(e){var t=r.value;if(r.cache[t]=e,e.length&&t.length>=n.minChars){for(var s="",o=0;ot||t>40)&&13!=t&&27!=t){var s=r.value;if(s.length>=n.minChars){if(s!=r.last_val){if(r.last_val=s,clearTimeout(r.timer),n.cache){if(s in r.cache)return void d(r.cache[s]);for(var o=1;o$1"),o},onSelect:function(){}};for(var c in e)e.hasOwnProperty(c)&&(n[c]=e[c]);for(var l="object"==typeof n.selector?[n.selector]:document.querySelectorAll(n.selector),i=0;i0?r.sc.scrollTop=a+r.sc.suggestionHeight+o-r.sc.maxHeight:0>a&&(r.sc.scrollTop=a+o)}else r.sc.scrollTop=0},s(window,"resize",r.updateSC),document.body.appendChild(r.sc),a("autocomplete-suggestion","mouseleave",function(){var e=r.sc.querySelector(".autocomplete-suggestion.selected");e&&setTimeout(function(){e.className=e.className.replace("selected",""),r.removeAttribute("aria-activedescendant")},20)},r.sc),a("autocomplete-suggestion","mouseover",function(){var e=r.sc.querySelector(".autocomplete-suggestion.selected");e&&(e.className=e.className.replace("selected","")),this.id=Math.random().toString(36).substring(7),r.setAttribute("aria-activedescendant",this.id),this.className+=" selected"},r.sc),a("autocomplete-suggestion","mousedown",function(e){if(t(this,"autocomplete-suggestion")){var s=this.getAttribute("data-val");r.value=s,n.onSelect(e,s,this),r.sc.style.display="none"}},r.sc),r.blurHandler=function(){try{var e=document.querySelector(".autocomplete-suggestions:hover")}catch(t){var e=0}e?r!==document.activeElement&&setTimeout(function(){r.focus()},20):(r.last_val=r.value,r.sc.style.display="none",setTimeout(function(){r.sc.style.display="none"},350))},s(r,"blur",r.blurHandler);var d=function(e){var t=r.value;if(r.cache[t]=e,e.length&&t.length>=n.minChars){for(var s="",o=0;ot||t>40)&&13!=t&&27!=t){var s=r.value;if(s.length>=n.minChars){if(s!=r.last_val){if(r.last_val=s,clearTimeout(r.timer),n.cache){if(s in r.cache)return void d(r.cache[s]);for(var o=1;o Date: Wed, 11 Nov 2015 18:09:14 +0100 Subject: [PATCH 06/13] Optimized performance --- auto-complete.js | 8 +++----- 1 file changed, 3 insertions(+), 5 deletions(-) diff --git a/auto-complete.js b/auto-complete.js index dc0b39f..013dc08 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -40,13 +40,14 @@ var autoComplete = (function(){ search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi"); var option = document.createElement('option'); - + + option.id = Math.random().toString(36).substring(7); option.className = "autocomplete-suggestion"; option.setAttribute('role', 'option'); option.setAttribute('data-val', item); option.innerHTML = item.replace(re, "$1"); - return option; + return option.outerHTML; }, onSelect: function(e, term, item){} }; @@ -109,7 +110,6 @@ var autoComplete = (function(){ live('autocomplete-suggestion', 'mouseover', function(e){ var sel = that.sc.querySelector('.autocomplete-suggestion.selected'); if (sel) sel.className = sel.className.replace('selected', ''); - this.id = Math.random().toString(36).substring(7); that.setAttribute('aria-activedescendant', this.id); this.className += ' selected'; }, that.sc); @@ -153,7 +153,6 @@ var autoComplete = (function(){ var next, sel = that.sc.querySelector('.autocomplete-suggestion.selected'); if (!sel) { next = (key == 40) ? that.sc.querySelector('.autocomplete-suggestion') : that.sc.childNodes[that.sc.childNodes.length - 1]; // first : last - next.id = Math.random().toString(36).substring(7); next.className += ' selected'; that.value = next.getAttribute('data-val'); that.setAttribute('aria-activedescendant', next.id); @@ -161,7 +160,6 @@ var autoComplete = (function(){ next = (key == 40) ? sel.nextSibling : sel.previousSibling; if (next) { sel.className = sel.className.replace('selected', ''); - next.id = Math.random().toString(36).substring(7); next.className += ' selected'; that.value = next.getAttribute('data-val'); that.setAttribute('aria-activedescendant', next.id); From 09b00c269ddc2d2badbb1630e0b6678dcabbac41 Mon Sep 17 00:00:00 2001 From: Michiel Renty Date: Wed, 11 Nov 2015 18:18:11 +0100 Subject: [PATCH 07/13] Remove attribute when redundant --- auto-complete.js | 6 ++++-- 1 file changed, 4 insertions(+), 2 deletions(-) diff --git a/auto-complete.js b/auto-complete.js index 013dc08..a47d9df 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -144,6 +144,7 @@ var autoComplete = (function(){ } else that.sc.style.display = 'none'; + that.removeAttribute('aria-activedescendant'); } that.keydownHandler = function(e){ @@ -221,12 +222,13 @@ var autoComplete = (function(){ removeEvent(that, 'focus', that.focusHandler); removeEvent(that, 'keydown', that.keydownHandler); removeEvent(that, 'keyup', that.keyupHandler); + that.removeAttribute('aria-activedescendant'); if (that.autocompleteAttr) that.setAttribute('autocomplete', that.autocompleteAttr); else that.removeAttribute('autocomplete'); - document.body.removeChild(that.sc); - that = null; + document.body.removeChild(that.sc); + that = null; } }; } From fcfc2b971a2ceb4d5a63032156e7b85aec10b00b Mon Sep 17 00:00:00 2001 From: Michiel Renty Date: Wed, 11 Nov 2015 18:29:26 +0100 Subject: [PATCH 08/13] Updated minified version --- auto-complete.min.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/auto-complete.min.js b/auto-complete.min.js index e08136b..e6eb0a1 100644 --- a/auto-complete.min.js +++ b/auto-complete.min.js @@ -1,3 +1,3 @@ // JavaScript autoComplete v1.0.3 // https://github.com/Pixabay/JavaScript-autoComplete -var autoComplete=function(){function e(e){function t(e,t){return e.classList?e.classList.contains(t):new RegExp("\\b"+t+"\\b").test(e.className)}function s(e,t,s){e.attachEvent?e.attachEvent("on"+t,s):e.addEventListener(t,s)}function o(e,t,s){e.detachEvent?e.detachEvent("on"+t,s):e.removeEventListener(t,s)}function a(e,o,a,n){s(n||document,o,function(s){for(var o,n=s.target||s.srcElement;n&&!(o=t(n,e));)n=n.parentElement;o&&a.call(n,s)})}if(document.querySelector){var n={selector:0,source:0,minChars:3,delay:150,cache:1,menuClass:"",renderItem:function(e,t){t=t.replace(/[-\/\\^$*+?.()|[\]{}]/g,"\\$&");var s=new RegExp("("+t.split(" ").join("|")+")","gi"),o=document.createElement("option");return o.className="autocomplete-suggestion",o.setAttribute("role","option"),o.setAttribute("data-val",e),o.innerHTML=e.replace(s,"$1"),o},onSelect:function(){}};for(var c in e)e.hasOwnProperty(c)&&(n[c]=e[c]);for(var l="object"==typeof n.selector?[n.selector]:document.querySelectorAll(n.selector),i=0;i0?r.sc.scrollTop=a+r.sc.suggestionHeight+o-r.sc.maxHeight:0>a&&(r.sc.scrollTop=a+o)}else r.sc.scrollTop=0},s(window,"resize",r.updateSC),document.body.appendChild(r.sc),a("autocomplete-suggestion","mouseleave",function(){var e=r.sc.querySelector(".autocomplete-suggestion.selected");e&&setTimeout(function(){e.className=e.className.replace("selected",""),r.removeAttribute("aria-activedescendant")},20)},r.sc),a("autocomplete-suggestion","mouseover",function(){var e=r.sc.querySelector(".autocomplete-suggestion.selected");e&&(e.className=e.className.replace("selected","")),this.id=Math.random().toString(36).substring(7),r.setAttribute("aria-activedescendant",this.id),this.className+=" selected"},r.sc),a("autocomplete-suggestion","mousedown",function(e){if(t(this,"autocomplete-suggestion")){var s=this.getAttribute("data-val");r.value=s,n.onSelect(e,s,this),r.sc.style.display="none"}},r.sc),r.blurHandler=function(){try{var e=document.querySelector(".autocomplete-suggestions:hover")}catch(t){var e=0}e?r!==document.activeElement&&setTimeout(function(){r.focus()},20):(r.last_val=r.value,r.sc.style.display="none",setTimeout(function(){r.sc.style.display="none"},350))},s(r,"blur",r.blurHandler);var d=function(e){var t=r.value;if(r.cache[t]=e,e.length&&t.length>=n.minChars){for(var s="",o=0;ot||t>40)&&13!=t&&27!=t){var s=r.value;if(s.length>=n.minChars){if(s!=r.last_val){if(r.last_val=s,clearTimeout(r.timer),n.cache){if(s in r.cache)return void d(r.cache[s]);for(var o=1;o$1"),a.outerHTML},onSelect:function(){}};for(var c in e)e.hasOwnProperty(c)&&(n[c]=e[c]);for(var l="object"==typeof n.selector?[n.selector]:document.querySelectorAll(n.selector),i=0;i0?r.sc.scrollTop=o+r.sc.suggestionHeight+a-r.sc.maxHeight:0>o&&(r.sc.scrollTop=o+a)}else r.sc.scrollTop=0},s(window,"resize",r.updateSC),document.body.appendChild(r.sc),o("autocomplete-suggestion","mouseleave",function(){var e=r.sc.querySelector(".autocomplete-suggestion.selected");e&&setTimeout(function(){e.className=e.className.replace("selected",""),r.removeAttribute("aria-activedescendant")},20)},r.sc),o("autocomplete-suggestion","mouseover",function(){var e=r.sc.querySelector(".autocomplete-suggestion.selected");e&&(e.className=e.className.replace("selected","")),r.setAttribute("aria-activedescendant",this.id),this.className+=" selected"},r.sc),o("autocomplete-suggestion","mousedown",function(e){if(t(this,"autocomplete-suggestion")){var s=this.getAttribute("data-val");r.value=s,n.onSelect(e,s,this),r.sc.style.display="none"}},r.sc),r.blurHandler=function(){try{var e=document.querySelector(".autocomplete-suggestions:hover")}catch(t){var e=0}e?r!==document.activeElement&&setTimeout(function(){r.focus()},20):(r.last_val=r.value,r.sc.style.display="none",setTimeout(function(){r.sc.style.display="none"},350))},s(r,"blur",r.blurHandler);var d=function(e){var t=r.value;if(r.cache[t]=e,e.length&&t.length>=n.minChars){for(var s="",a=0;at||t>40)&&13!=t&&27!=t){var s=r.value;if(s.length>=n.minChars){if(s!=r.last_val){if(r.last_val=s,clearTimeout(r.timer),n.cache){if(s in r.cache)return void d(r.cache[s]);for(var a=1;a Date: Thu, 12 Nov 2015 11:24:08 +0100 Subject: [PATCH 09/13] Removed redundant role --- auto-complete.js | 1 - 1 file changed, 1 deletion(-) diff --git a/auto-complete.js b/auto-complete.js index a47d9df..00d52d8 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -43,7 +43,6 @@ var autoComplete = (function(){ option.id = Math.random().toString(36).substring(7); option.className = "autocomplete-suggestion"; - option.setAttribute('role', 'option'); option.setAttribute('data-val', item); option.innerHTML = item.replace(re, "$1"); From 82470eb32532171cd2f23b29bd9a29c4bd85a52e Mon Sep 17 00:00:00 2001 From: Michiel Renty Date: Thu, 12 Nov 2015 11:55:16 +0100 Subject: [PATCH 10/13] Reverted commit --- auto-complete.js | 4 ++-- 1 file changed, 2 insertions(+), 2 deletions(-) diff --git a/auto-complete.js b/auto-complete.js index 00d52d8..9d1fd94 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -226,8 +226,8 @@ var autoComplete = (function(){ that.setAttribute('autocomplete', that.autocompleteAttr); else that.removeAttribute('autocomplete'); - document.body.removeChild(that.sc); - that = null; + document.body.removeChild(that.sc); + that = null; } }; } From 570bfa193611645ee12ef195f000f0dc41c9ffd0 Mon Sep 17 00:00:00 2001 From: Michiel Renty Date: Thu, 12 Nov 2015 14:46:18 +0100 Subject: [PATCH 11/13] Added package.json --- package.json | 47 +++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 47 insertions(+) create mode 100644 package.json diff --git a/package.json b/package.json new file mode 100644 index 0000000..47e30cd --- /dev/null +++ b/package.json @@ -0,0 +1,47 @@ +{ + "name": "javascript-auto-complete", + "version": "1.0.4", + "description": "An extremely lightweight vanilla JavaScript completion suggester.", + "homepage": "https://github.com/SchipholRedesign/JavaScript-autoComplete", + "main": "auto-complete.js", + "scripts": { + "test": "echo \"Error: no test specified\" && exit 1" + }, + "repository": { + "type": "git", + "url": "https://github.com/SchipholRedesign/JavaScript-autoComplete.git" + }, + "authors": [{ + "name": "Simon Steinberger", + "email": "simon@pixabay.com", + "url": "https://pixabay.com/users/Simon/" + }], + "contributors": [{ + "name" : "Michiel Renty", + "email" : "michiel@mrenty.com", + "url" : "http://mrenty.com/" + }], + "keywords": [ + "autocomplete", + "autosuggest", + "autosuggester", + "suggest", + "suggester", + "completer", + "select", + "dropdown", + "ajax" + ], + "licenses": [{ + "type": "MIT", + "url": "http://www.opensource.org/licenses/mit-license.php" + }], + "bugs": { + "url": "https://github.com/SchipholRedesign/JavaScript-autoComplete/issues" + }, + "ignore": [ + "bower.json", + "demo.html", + "readme.md" + ] +} \ No newline at end of file From 7933bec33b5b1c82374429e4f5d6d5fee8522cd1 Mon Sep 17 00:00:00 2001 From: Michiel Renty Date: Thu, 12 Nov 2015 14:46:29 +0100 Subject: [PATCH 12/13] Updated readme --- readme.md | 5 +++++ 1 file changed, 5 insertions(+) diff --git a/readme.md b/readme.md index e8bdde9..6245d8f 100644 --- a/readme.md +++ b/readme.md @@ -17,11 +17,16 @@ https://goodies.pixabay.com/javascript/auto-complete/demo.html * Lightweight: 5.4 kB of JavaScript - less than 2.4 kB gzipped * Fully flexible data source +* Fully accessible * Smart caching, delay and minimum character settings * Callbacks ## Changelog +### Version 1.0.4 - 2015/11/11 + +* Added ARIA support + ### Version 1.0.3 - 2015/11/02 * Fixed #2: Unspecified error on IE 10. From 7f77adf515624eed5a74bb56da398c8ed9d759f1 Mon Sep 17 00:00:00 2001 From: Michiel Renty Date: Thu, 12 Nov 2015 19:37:46 +0100 Subject: [PATCH 13/13] Removed datalist element but added the replacing aria attributes --- auto-complete.js | 5 +++-- 1 file changed, 3 insertions(+), 2 deletions(-) diff --git a/auto-complete.js b/auto-complete.js index 9d1fd94..86b95ab 100644 --- a/auto-complete.js +++ b/auto-complete.js @@ -39,10 +39,11 @@ var autoComplete = (function(){ // escape special characters search = search.replace(/[-\/\\^$*+?.()|[\]{}]/g, '\\$&'); var re = new RegExp("(" + search.split(' ').join('|') + ")", "gi"); - var option = document.createElement('option'); + var option = document.createElement('div'); option.id = Math.random().toString(36).substring(7); option.className = "autocomplete-suggestion"; + option.setAttribute('role', 'option'); option.setAttribute('data-val', item); option.innerHTML = item.replace(re, "$1"); @@ -64,7 +65,7 @@ var autoComplete = (function(){ that.setAttribute('aria-owns', autocompleteID); // create suggestions container "sc" - that.sc = document.createElement('datalist'); + that.sc = document.createElement('div'); that.sc.id = autocompleteID; that.sc.className = 'autocomplete-suggestions '+o.menuClass; that.sc.setAttribute('role', 'listbox');