Last active
December 1, 2020 15:36
-
-
Save danielthedifficult/b685a869b09ff4e6b236592e60918863 to your computer and use it in GitHub Desktop.
This file contains bidirectional Unicode text that may be interpreted or compiled differently than what appears below. To review, open the file in an editor that reveals hidden Unicode characters.
Learn more about bidirectional Unicode characters
<link href="https://cdn.jsdelivr.net/npm/select2@4.0.6-rc.1/dist/css/select2.min.css" rel="stylesheet" /> | |
<script defer=""> | |
// Variables | |
var APP_ID = "your-appdrag-app-id"; // Your AppDrag APP ID | |
var BLOG_SEARCH_LANGUAGE = "en"; // Lower case, two character ISO code for your blog's language | |
var BLOG_BASE_URL = "https://www.your-appdrag-site.tld/blog/"; // The base URL to your blog | |
var BLOG_SEARCH_CTA = "Vous cherchez un sujet...?"; // What do you want displayed in the search box before the user interacts with it? | |
var SECONDARY_SEARCH_SPACE = "subTitle"; // I used AppDrag's meta subtitle returned in the reults as a match possibility. | |
var BLOG_SEARCH_SELECTOR = '#blog-search'; // This must match the identifier you put on the search box in PageBuilder | |
var select2data = []; | |
//Wait for jquery to load before executing code | |
addEventListener('JqueryLoaded', function(e) { | |
$.getScript("https://cdnjs.cloudflare.com/ajax/libs/select2/4.0.6-rc.1/js/select2.min.js") | |
$.ajax({ | |
url: 'https://api.appdrag.com/api.aspx', | |
dataType: 'json', | |
type: 'POST', | |
data: { | |
command: "BlogArticlesList", | |
appID: APP_ID, | |
lang: BLOG_SEARCH_LANGUAGE, | |
state: 1, | |
pageSize: 500, | |
pageNumber: 1 | |
} | |
}) | |
.then((results) => { | |
try { | |
// Add the CTA to the beginning of the array so it is selected by default as a placeholder... however, without an ID specified it won't trigger the redirect. | |
select2data = results.Table.map(b => { | |
b.text = b.text || b.title; | |
return b; | |
}) | |
$(BLOG_SEARCH_SELECTOR).select2({ | |
data: select2data, | |
matcher: titleAndSubtitle, | |
placeholder: BLOG_SEARCH_CTA | |
}); | |
// Set up action to take place when user selects an element. | |
$(BLOG_SEARCH_SELECTOR).on('select2:select', function(e) { | |
var data = e.params.data; | |
// Build the blog URL | |
data.url = BLOG_BASE_URL + data.id; | |
// OPEN A NEW WINDOW TOWARDS THE BLOG ARTICLE | |
window.open(data.url); | |
}); | |
} catch (e) { | |
console.error(e); | |
} | |
}) | |
}, false); | |
// @titleAndSubtitle | |
// basic search matching technique that matches both the "title" and SECONDARY_SEARCH_SPACE for the user inputed keywords | |
function titleAndSubtitle(params, data) { | |
// If there are no search terms, return all of the data | |
if ($.trim(params.term) === '') { | |
return data; | |
} | |
// Do not display the item if there is no 'text' property | |
if (typeof data.text === 'undefined') { | |
return null; | |
} | |
// `params.term` should be the term that is used for searching | |
// `data.text` is the text that is displayed for the data object | |
//remove accents for matching | |
// Search the title first | |
if (removeDiacritics(data.text).indexOf(removeDiacritics(params.term)) > -1) return data; | |
// Search the secondary search space. If found, label it and return the result. | |
if (data[SECONDARY_SEARCH_SPACE] && removeDiacritics(data[SECONDARY_SEARCH_SPACE]).indexOf(removeDiacritics(params.term)) > -1) { | |
var modifiedData = $.extend({}, data, true); | |
modifiedData.text += " (" + params.term + ")"; | |
// You can return modified objects from here | |
// This includes matching the `children` how you want in nested data sets | |
return modifiedData; | |
} | |
// Return `null` if the term should not be displayed | |
return null; | |
} | |
// @removeDiacritics | |
// REMOVES ALL ACCENTED CHARACTERS, REPLACES THEM WITH STANDARD UNACCENTED ASCII CHARACTERS | |
// ALSO REMOVES ALL SPACES AND PUNCTUATION, CHANGING TO "-" | |
function removeDiacritics(str) { | |
var defaultDiacriticsRemovalMap = [ | |
// {'base':'-', 'letters':/[\?\.\,\!\ \;\:\(\)\|\+\#\$\%\^\&\*\[\]\{\}\<\>]/g}, | |
{ | |
'base': 'A', | |
'letters': /[\u0041\u24B6\uFF21\u00C0\u00C1\u00C2\u1EA6\u1EA4\u1EAA\u1EA8\u00C3\u0100\u0102\u1EB0\u1EAE\u1EB4\u1EB2\u0226\u01E0\u00C4\u01DE\u1EA2\u00C5\u01FA\u01CD\u0200\u0202\u1EA0\u1EAC\u1EB6\u1E00\u0104\u023A\u2C6F]/g | |
}, { | |
'base': 'AA', | |
'letters': /[\uA732]/g | |
}, { | |
'base': 'AE', | |
'letters': /[\u00C6\u01FC\u01E2]/g | |
}, { | |
'base': 'AO', | |
'letters': /[\uA734]/g | |
}, { | |
'base': 'AU', | |
'letters': /[\uA736]/g | |
}, { | |
'base': 'AV', | |
'letters': /[\uA738\uA73A]/g | |
}, { | |
'base': 'AY', | |
'letters': /[\uA73C]/g | |
}, { | |
'base': 'B', | |
'letters': /[\u0042\u24B7\uFF22\u1E02\u1E04\u1E06\u0243\u0182\u0181]/g | |
}, { | |
'base': 'C', | |
'letters': /[\u0043\u24B8\uFF23\u0106\u0108\u010A\u010C\u00C7\u1E08\u0187\u023B\uA73E]/g | |
}, { | |
'base': 'D', | |
'letters': /[\u0044\u24B9\uFF24\u1E0A\u010E\u1E0C\u1E10\u1E12\u1E0E\u0110\u018B\u018A\u0189\uA779]/g | |
}, { | |
'base': 'DZ', | |
'letters': /[\u01F1\u01C4]/g | |
}, { | |
'base': 'Dz', | |
'letters': /[\u01F2\u01C5]/g | |
}, { | |
'base': 'E', | |
'letters': /[\u0045\u24BA\uFF25\u00C8\u00C9\u00CA\u1EC0\u1EBE\u1EC4\u1EC2\u1EBC\u0112\u1E14\u1E16\u0114\u0116\u00CB\u1EBA\u011A\u0204\u0206\u1EB8\u1EC6\u0228\u1E1C\u0118\u1E18\u1E1A\u0190\u018E]/g | |
}, { | |
'base': 'F', | |
'letters': /[\u0046\u24BB\uFF26\u1E1E\u0191\uA77B]/g | |
}, { | |
'base': 'G', | |
'letters': /[\u0047\u24BC\uFF27\u01F4\u011C\u1E20\u011E\u0120\u01E6\u0122\u01E4\u0193\uA7A0\uA77D\uA77E]/g | |
}, { | |
'base': 'H', | |
'letters': /[\u0048\u24BD\uFF28\u0124\u1E22\u1E26\u021E\u1E24\u1E28\u1E2A\u0126\u2C67\u2C75\uA78D]/g | |
}, { | |
'base': 'I', | |
'letters': /[\u0049\u24BE\uFF29\u00CC\u00CD\u00CE\u0128\u012A\u012C\u0130\u00CF\u1E2E\u1EC8\u01CF\u0208\u020A\u1ECA\u012E\u1E2C\u0197]/g | |
}, { | |
'base': 'J', | |
'letters': /[\u004A\u24BF\uFF2A\u0134\u0248]/g | |
}, { | |
'base': 'K', | |
'letters': /[\u004B\u24C0\uFF2B\u1E30\u01E8\u1E32\u0136\u1E34\u0198\u2C69\uA740\uA742\uA744\uA7A2]/g | |
}, { | |
'base': 'L', | |
'letters': /[\u004C\u24C1\uFF2C\u013F\u0139\u013D\u1E36\u1E38\u013B\u1E3C\u1E3A\u0141\u023D\u2C62\u2C60\uA748\uA746\uA780]/g | |
}, { | |
'base': 'LJ', | |
'letters': /[\u01C7]/g | |
}, { | |
'base': 'Lj', | |
'letters': /[\u01C8]/g | |
}, { | |
'base': 'M', | |
'letters': /[\u004D\u24C2\uFF2D\u1E3E\u1E40\u1E42\u2C6E\u019C]/g | |
}, { | |
'base': 'N', | |
'letters': /[\u004E\u24C3\uFF2E\u01F8\u0143\u00D1\u1E44\u0147\u1E46\u0145\u1E4A\u1E48\u0220\u019D\uA790\uA7A4]/g | |
}, { | |
'base': 'NJ', | |
'letters': /[\u01CA]/g | |
}, { | |
'base': 'Nj', | |
'letters': /[\u01CB]/g | |
}, { | |
'base': 'O', | |
'letters': /[\u004F\u24C4\uFF2F\u00D2\u00D3\u00D4\u1ED2\u1ED0\u1ED6\u1ED4\u00D5\u1E4C\u022C\u1E4E\u014C\u1E50\u1E52\u014E\u022E\u0230\u00D6\u022A\u1ECE\u0150\u01D1\u020C\u020E\u01A0\u1EDC\u1EDA\u1EE0\u1EDE\u1EE2\u1ECC\u1ED8\u01EA\u01EC\u00D8\u01FE\u0186\u019F\uA74A\uA74C]/g | |
}, { | |
'base': 'OI', | |
'letters': /[\u01A2]/g | |
}, { | |
'base': 'OO', | |
'letters': /[\uA74E]/g | |
}, { | |
'base': 'OU', | |
'letters': /[\u0222]/g | |
}, { | |
'base': 'P', | |
'letters': /[\u0050\u24C5\uFF30\u1E54\u1E56\u01A4\u2C63\uA750\uA752\uA754]/g | |
}, { | |
'base': 'Q', | |
'letters': /[\u0051\u24C6\uFF31\uA756\uA758\u024A]/g | |
}, { | |
'base': 'R', | |
'letters': /[\u0052\u24C7\uFF32\u0154\u1E58\u0158\u0210\u0212\u1E5A\u1E5C\u0156\u1E5E\u024C\u2C64\uA75A\uA7A6\uA782]/g | |
}, { | |
'base': 'S', | |
'letters': /[\u0053\u24C8\uFF33\u1E9E\u015A\u1E64\u015C\u1E60\u0160\u1E66\u1E62\u1E68\u0218\u015E\u2C7E\uA7A8\uA784]/g | |
}, { | |
'base': 'T', | |
'letters': /[\u0054\u24C9\uFF34\u1E6A\u0164\u1E6C\u021A\u0162\u1E70\u1E6E\u0166\u01AC\u01AE\u023E\uA786]/g | |
}, { | |
'base': 'TZ', | |
'letters': /[\uA728]/g | |
}, { | |
'base': 'U', | |
'letters': /[\u0055\u24CA\uFF35\u00D9\u00DA\u00DB\u0168\u1E78\u016A\u1E7A\u016C\u00DC\u01DB\u01D7\u01D5\u01D9\u1EE6\u016E\u0170\u01D3\u0214\u0216\u01AF\u1EEA\u1EE8\u1EEE\u1EEC\u1EF0\u1EE4\u1E72\u0172\u1E76\u1E74\u0244]/g | |
}, { | |
'base': 'V', | |
'letters': /[\u0056\u24CB\uFF36\u1E7C\u1E7E\u01B2\uA75E\u0245]/g | |
}, { | |
'base': 'VY', | |
'letters': /[\uA760]/g | |
}, { | |
'base': 'W', | |
'letters': /[\u0057\u24CC\uFF37\u1E80\u1E82\u0174\u1E86\u1E84\u1E88\u2C72]/g | |
}, { | |
'base': 'X', | |
'letters': /[\u0058\u24CD\uFF38\u1E8A\u1E8C]/g | |
}, { | |
'base': 'Y', | |
'letters': /[\u0059\u24CE\uFF39\u1EF2\u00DD\u0176\u1EF8\u0232\u1E8E\u0178\u1EF6\u1EF4\u01B3\u024E\u1EFE]/g | |
}, { | |
'base': 'Z', | |
'letters': /[\u005A\u24CF\uFF3A\u0179\u1E90\u017B\u017D\u1E92\u1E94\u01B5\u0224\u2C7F\u2C6B\uA762]/g | |
}, { | |
'base': 'a', | |
'letters': /[\u0061\u24D0\uFF41\u1E9A\u00E0\u00E1\u00E2\u1EA7\u1EA5\u1EAB\u1EA9\u00E3\u0101\u0103\u1EB1\u1EAF\u1EB5\u1EB3\u0227\u01E1\u00E4\u01DF\u1EA3\u00E5\u01FB\u01CE\u0201\u0203\u1EA1\u1EAD\u1EB7\u1E01\u0105\u2C65\u0250]/g | |
}, { | |
'base': 'aa', | |
'letters': /[\uA733]/g | |
}, { | |
'base': 'ae', | |
'letters': /[\u00E6\u01FD\u01E3]/g | |
}, { | |
'base': 'ao', | |
'letters': /[\uA735]/g | |
}, { | |
'base': 'au', | |
'letters': /[\uA737]/g | |
}, { | |
'base': 'av', | |
'letters': /[\uA739\uA73B]/g | |
}, { | |
'base': 'ay', | |
'letters': /[\uA73D]/g | |
}, { | |
'base': 'b', | |
'letters': /[\u0062\u24D1\uFF42\u1E03\u1E05\u1E07\u0180\u0183\u0253]/g | |
}, { | |
'base': 'c', | |
'letters': /[\u0063\u24D2\uFF43\u0107\u0109\u010B\u010D\u00E7\u1E09\u0188\u023C\uA73F\u2184]/g | |
}, { | |
'base': 'd', | |
'letters': /[\u0064\u24D3\uFF44\u1E0B\u010F\u1E0D\u1E11\u1E13\u1E0F\u0111\u018C\u0256\u0257\uA77A]/g | |
}, { | |
'base': 'dz', | |
'letters': /[\u01F3\u01C6]/g | |
}, { | |
'base': 'e', | |
'letters': /[\u0065\u24D4\uFF45\u00E8\u00E9\u00EA\u1EC1\u1EBF\u1EC5\u1EC3\u1EBD\u0113\u1E15\u1E17\u0115\u0117\u00EB\u1EBB\u011B\u0205\u0207\u1EB9\u1EC7\u0229\u1E1D\u0119\u1E19\u1E1B\u0247\u025B\u01DD]/g | |
}, { | |
'base': 'f', | |
'letters': /[\u0066\u24D5\uFF46\u1E1F\u0192\uA77C]/g | |
}, { | |
'base': 'g', | |
'letters': /[\u0067\u24D6\uFF47\u01F5\u011D\u1E21\u011F\u0121\u01E7\u0123\u01E5\u0260\uA7A1\u1D79\uA77F]/g | |
}, { | |
'base': 'h', | |
'letters': /[\u0068\u24D7\uFF48\u0125\u1E23\u1E27\u021F\u1E25\u1E29\u1E2B\u1E96\u0127\u2C68\u2C76\u0265]/g | |
}, { | |
'base': 'hv', | |
'letters': /[\u0195]/g | |
}, { | |
'base': 'i', | |
'letters': /[\u0069\u24D8\uFF49\u00EC\u00ED\u00EE\u0129\u012B\u012D\u00EF\u1E2F\u1EC9\u01D0\u0209\u020B\u1ECB\u012F\u1E2D\u0268\u0131]/g | |
}, { | |
'base': 'j', | |
'letters': /[\u006A\u24D9\uFF4A\u0135\u01F0\u0249]/g | |
}, { | |
'base': 'k', | |
'letters': /[\u006B\u24DA\uFF4B\u1E31\u01E9\u1E33\u0137\u1E35\u0199\u2C6A\uA741\uA743\uA745\uA7A3]/g | |
}, { | |
'base': 'l', | |
'letters': /[\u006C\u24DB\uFF4C\u0140\u013A\u013E\u1E37\u1E39\u013C\u1E3D\u1E3B\u017F\u0142\u019A\u026B\u2C61\uA749\uA781\uA747]/g | |
}, { | |
'base': 'lj', | |
'letters': /[\u01C9]/g | |
}, { | |
'base': 'm', | |
'letters': /[\u006D\u24DC\uFF4D\u1E3F\u1E41\u1E43\u0271\u026F]/g | |
}, { | |
'base': 'n', | |
'letters': /[\u006E\u24DD\uFF4E\u01F9\u0144\u00F1\u1E45\u0148\u1E47\u0146\u1E4B\u1E49\u019E\u0272\u0149\uA791\uA7A5]/g | |
}, { | |
'base': 'nj', | |
'letters': /[\u01CC]/g | |
}, { | |
'base': 'o', | |
'letters': /[\u006F\u24DE\uFF4F\u00F2\u00F3\u00F4\u1ED3\u1ED1\u1ED7\u1ED5\u00F5\u1E4D\u022D\u1E4F\u014D\u1E51\u1E53\u014F\u022F\u0231\u00F6\u022B\u1ECF\u0151\u01D2\u020D\u020F\u01A1\u1EDD\u1EDB\u1EE1\u1EDF\u1EE3\u1ECD\u1ED9\u01EB\u01ED\u00F8\u01FF\u0254\uA74B\uA74D\u0275]/g | |
}, { | |
'base': 'oi', | |
'letters': /[\u01A3]/g | |
}, { | |
'base': 'ou', | |
'letters': /[\u0223]/g | |
}, { | |
'base': 'oo', | |
'letters': /[\uA74F]/g | |
}, { | |
'base': 'p', | |
'letters': /[\u0070\u24DF\uFF50\u1E55\u1E57\u01A5\u1D7D\uA751\uA753\uA755]/g | |
}, { | |
'base': 'q', | |
'letters': /[\u0071\u24E0\uFF51\u024B\uA757\uA759]/g | |
}, { | |
'base': 'r', | |
'letters': /[\u0072\u24E1\uFF52\u0155\u1E59\u0159\u0211\u0213\u1E5B\u1E5D\u0157\u1E5F\u024D\u027D\uA75B\uA7A7\uA783]/g | |
}, { | |
'base': 's', | |
'letters': /[\u0073\u24E2\uFF53\u00DF\u015B\u1E65\u015D\u1E61\u0161\u1E67\u1E63\u1E69\u0219\u015F\u023F\uA7A9\uA785\u1E9B]/g | |
}, { | |
'base': 't', | |
'letters': /[\u0074\u24E3\uFF54\u1E6B\u1E97\u0165\u1E6D\u021B\u0163\u1E71\u1E6F\u0167\u01AD\u0288\u2C66\uA787]/g | |
}, { | |
'base': 'tz', | |
'letters': /[\uA729]/g | |
}, { | |
'base': 'u', | |
'letters': /[\u0075\u24E4\uFF55\u00F9\u00FA\u00FB\u0169\u1E79\u016B\u1E7B\u016D\u00FC\u01DC\u01D8\u01D6\u01DA\u1EE7\u016F\u0171\u01D4\u0215\u0217\u01B0\u1EEB\u1EE9\u1EEF\u1EED\u1EF1\u1EE5\u1E73\u0173\u1E77\u1E75\u0289]/g | |
}, { | |
'base': 'v', | |
'letters': /[\u0076\u24E5\uFF56\u1E7D\u1E7F\u028B\uA75F\u028C]/g | |
}, { | |
'base': 'vy', | |
'letters': /[\uA761]/g | |
}, { | |
'base': 'w', | |
'letters': /[\u0077\u24E6\uFF57\u1E81\u1E83\u0175\u1E87\u1E85\u1E98\u1E89\u2C73]/g | |
}, { | |
'base': 'x', | |
'letters': /[\u0078\u24E7\uFF58\u1E8B\u1E8D]/g | |
}, { | |
'base': 'y', | |
'letters': /[\u0079\u24E8\uFF59\u1EF3\u00FD\u0177\u1EF9\u0233\u1E8F\u00FF\u1EF7\u1E99\u1EF5\u01B4\u024F\u1EFF]/g | |
}, { | |
'base': 'z', | |
'letters': /[\u007A\u24E9\uFF5A\u017A\u1E91\u017C\u017E\u1E93\u1E95\u01B6\u0225\u0240\u2C6C\uA763]/g | |
} | |
]; | |
for (var i = 0; i < defaultDiacriticsRemovalMap.length; i++) { | |
str = str.replace(defaultDiacriticsRemovalMap[i].letters, defaultDiacriticsRemovalMap[i].base); | |
} | |
return str; | |
} | |
</script> |
Sign up for free
to join this conversation on GitHub.
Already have an account?
Sign in to comment