Skip to content

Instantly share code, notes, and snippets.

@sillero
Last active August 29, 2015 14:15
Show Gist options
  • Save sillero/677401b2c1f4235494af to your computer and use it in GitHub Desktop.
Save sillero/677401b2c1f4235494af to your computer and use it in GitHub Desktop.
Experimental use case of "Awesomplete extensions" using UMD
// global notation
// <script src="awesomplete.js"></script>
// <script src="awesomplete-email.js"></script>
// <script src="awesomplete-select.js"></script>
Awesomplete.init();



// commonjs/middleware notation
var awesompleteAsync = require('./awesomplete-async');
var awesompleteEmail = require('./awesomplete-email');
var awesompleteSelect = require('./awesomplete-select');

Awesomplete
    .use(awesompleteAsync())
    .use(awesompleteEmail)
    .use(awesompleteSelect)
    .init();
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(function () {
return (root.returnExportsGlobal = factory());
});
} else if (typeof exports === 'object') {
module.exports = factory();
} else {
root.returnExportsGlobal = factory(root.Awesomplete);
}
}(this, function (Awesomplete) {
if (Awesomplete) { awesompleteExtension(); }
return awesompleteExtension;
function awesompleteExtension(ajaxMethod) {
return function(Awesomplete){
var __evaluate = Awesomplete.prototype.evaluate;
// you can use a custom one (Promise compatible) or the default ajax method
// custom ex. Awesomplete.use(awesompleteAsync(jQuery.ajax));
// default ex. Awesomplete.use(awesompleteAsync());
Awesomplete.prototype.ajax = ajaxMethod || function(){
//maybe use https://github.com/pyrsmk/qwest ?
}
Awesomplete.prototype.set = function(key, value){
if (typeof value === 'undefined') return this[key];
this[key] = value;
if (key === 'list') {
__evaluate();
}
return this;
}
Awesomplete.prototype.get = function(){ return this[key] };
Awesomplete.prototype.evaluate = function(){
var self = this;
if (this.ajaxOptions) {
this.ajaxRequest.stop();
this.ajaxRequest = this.ajax(this.ajaxOptions)
.then(function(list){
self.set('list', list);
}, function(){
self.ajaxFailed();
});
}
};
}
};
}));
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(function () {
return (root.returnExportsGlobal = factory());
});
} else if (typeof exports === 'object') {
module.exports = factory();
} else {
root.returnExportsGlobal = factory(root.Awesomplete);
}
}(this, function (Awesomplete) {
if (Awesomplete) { awesompleteExtension(); }
return awesompleteExtension;
function awesompleteExtension(Awesomplete) {
Awesomplete.extend({
type: "email"
list: [
/* Default domains included */
"aol.com", "att.net", "comcast.net", "facebook.com", "gmail.com", "gmx.com", "googlemail.com",
"google.com", "hotmail.com", "hotmail.co.uk", "mac.com", "me.com", "mail.com", "msn.com",
"live.com", "sbcglobal.net", "verizon.net", "yahoo.com", "yahoo.co.uk",
/* Other global domains */
"email.com", "games.com" /* AOL */, "gmx.net", "hush.com", "hushmail.com", "inbox.com",
"lavabit.com", "love.com" /* AOL */, "pobox.com", "rocketmail.com" /* Yahoo */,
"safe-mail.net", "wow.com" /* AOL */, "ygm.com" /* AOL */, "ymail.com" /* Yahoo */, "zoho.com", "fastmail.fm",
/* United States ISP domains */
"bellsouth.net", "charter.net", "cox.net", "earthlink.net", "juno.com",
/* British ISP domains */
"btinternet.com", "virginmedia.com", "blueyonder.co.uk", "freeserve.co.uk", "live.co.uk",
"ntlworld.com", "o2.co.uk", "orange.net", "sky.com", "talktalk.co.uk", "tiscali.co.uk",
"virgin.net", "wanadoo.co.uk", "bt.com",
/* Domains used in Asia */
"sina.com", "qq.com", "naver.com", "hanmail.net", "daum.net", "nate.com", "yahoo.co.jp", "yahoo.co.kr", "yahoo.co.id", "yahoo.co.in", "yahoo.com.sg", "yahoo.com.ph",
/* French ISP domains */
"hotmail.fr", "live.fr", "laposte.net", "yahoo.fr", "wanadoo.fr", "orange.fr", "gmx.fr", "sfr.fr", "neuf.fr", "free.fr",
/* German ISP domains */
"gmx.de", "hotmail.de", "live.de", "online.de", "t-online.de" /* T-Mobile */, "web.de", "yahoo.de",
/* Russian ISP domains */
"mail.ru", "rambler.ru", "yandex.ru",
/* Belgian ISP domains */
"hotmail.be", "live.be", "skynet.be", "voo.be", "tvcablenet.be",
/* Argentinian ISP domains */
"hotmail.com.ar", "live.com.ar", "yahoo.com.ar", "fibertel.com.ar", "speedy.com.ar", "arnet.com.ar",
/* Domains used in Mexico */
"hotmail.com", "gmail.com", "yahoo.com.mx", "live.com.mx", "yahoo.com", "hotmail.es", "live.com", "hotmail.com.mx", "prodigy.net.mx", "msn.com"
],
item: function(text, input){
var newText = input.slice(0, input.indexOf("@")) + text;
return this.$.create("li", {
innerHTML: newText.replace(RegExp(input.trim(), "gi"), "<mark>$&</mark>"),
"aria-selected": "false"
});
},
filter: function(text, input){
var atPosition = input.indexOf("@");
var inputIsEmail = !!~atPosition && (input.length > atPosition + this.minChars);
if (!inputIsEmail) return false;
var domain = input.slice(input.indexOf("@") + 1);
var textMatchWithInput = RegExp("^" + domain.trim(), "i").test(text);
return (inputIsEmail && textMatchWithInput);
}
});
};
}));
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(function () {
return (root.returnExportsGlobal = factory());
});
} else if (typeof exports === 'object') {
module.exports = factory();
} else {
root.returnExportsGlobal = factory(root.Awesomplete);
}
}(this, function (Awesomplete) {
if (Awesomplete) { awesompleteExtension(); }
return awesompleteExtension;
function awesompleteExtension(Awesomplete){
Awesomplete.extend({
type: 'select',
beforeInit: function(){
var awesomplete = this.
var select = awesomplete.element;
var options = awesomplete.toArray(select.options);
var items = options.map(function(option){
return option.innerText;
});
var input = awesomplete.$.create('input');
select.parentElement.insertBefore(input, select);
select.setAttribute('hidden', '');
if (select.selectedIndex > -1){
input.value = options[select.selectedIndex].text;
}
var button = awesomplete.$.create('button', {innerText: '\u25BC'});
input.parentElement.insertAfter(button, input);
awesomplete.$.bind(button, {
'click': function(){
awesomplete.evaluate('');
}
});
awesomplete.$.bind(input, {
'awesomplete-selectcomplete': function(){
var selectedItems = options.filter(function(elem){
return elem.text === input.value
});
if(selectedItems.length > 0){
select.value = selectedItems[0].value;
}
}
});
}
});
};
}));
(function (root, factory) {
if (typeof define === 'function' && define.amd) {
define(function () {
return (root.returnExportsGlobal = factory());
});
} else if (typeof exports === 'object') {
module.exports = factory();
} else {
root.returnExportsGlobal = factory(root.Awesomplete);
}
}(this, function (Awesomplete) {
if (Awesomplete) { awesompleteExtension(); }
return awesompleteExtension;
function awesompleteExtension(Awesomplete){
// .....
// your extension code goes here
// .....
}
}));
Sign up for free to join this conversation on GitHub. Already have an account? Sign in to comment