| @@ -1,5 +1,15 @@ | ||
| 1 | 1 | /** |
| 2 | + * WordPress dependencies. | |
| 3 | + */ | |
| 4 | +import { applyFilters } from '@wordpress/hooks'; | |
| 5 | + | |
| 6 | +/** | |
| 7 | + * External dependencies. | |
| 8 | + */ | |
| 9 | +import { v4 as uuidv4 } from 'uuid'; | |
| 10 | + | |
| 11 | +/** | |
| 2 | 12 | * Simple throttling function for waiting a set amount of time after the last keypress |
| 3 | 13 | * So we don't overload the server with too many requests at once |
| 4 | 14 | * |
| 5 | 15 | * @param {Function} fn - function to be debounced |
| @@ -36,9 +46,12 @@ | ||
| 36 | 46 | * @param {string} replacement replace value to use |
| 37 | 47 | * @returns {string} replaced string |
| 38 | 48 | */ |
| 39 | 49 | export const replaceGlobally = (string, term, replacement) => { |
| 40 | - return string.replace(new RegExp(escapeRegExp(term), 'g'), replacement); | |
| 50 | + return string.replace( | |
| 51 | + new RegExp(escapeRegExp(term), 'g'), | |
| 52 | + JSON.stringify(replacement).slice(1, -1), // Escapes especial chars and remove quotes added by JSON.stringify | |
| 53 | + ); | |
| 41 | 54 | }; |
| 42 | 55 | |
| 43 | 56 | /** |
| 44 | 57 | * Escapes double quotes for specific data-attr |
| @@ -153,5 +166,26 @@ | ||
| 153 | 166 | } |
| 154 | 167 | |
| 155 | 168 | // DOMContentLoaded has not fired yet, delay callback until then. |
| 156 | 169 | document.addEventListener('DOMContentLoaded', callback); |
| 170 | +}; | |
| 171 | + | |
| 172 | +/** | |
| 173 | + * Generate a Request ID for autosuggest | |
| 174 | + * | |
| 175 | + * @param {string} requestIdBase - base for request ID generation | |
| 176 | + * @returns {string} Request ID | |
| 177 | + */ | |
| 178 | +export const generateRequestId = (requestIdBase) => { | |
| 179 | + const uuid = uuidv4().replaceAll('-', ''); | |
| 180 | + | |
| 181 | + /** | |
| 182 | + * Filter the request ID used for an autosuggest request. | |
| 183 | + * | |
| 184 | + * @filter ep.Autosuggest.requestId | |
| 185 | + * @since 4.5.0 | |
| 186 | + * | |
| 187 | + * @param {string} requestId The Request ID. | |
| 188 | + * @returns {string} New Request ID. | |
| 189 | + */ | |
| 190 | + return applyFilters('ep.requestId', requestIdBase + uuid); | |
| 157 | 191 | }; |