@wordpress/block-library
Version:
Block library for the WordPress editor.
8 lines (7 loc) • 3.09 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/utils/search-patterns.js"],
"sourcesContent": ["/**\n * External dependencies\n */\nimport removeAccents from 'remove-accents';\n\n/**\n * Sanitizes the search input string.\n *\n * @param {string} input The search input to normalize.\n *\n * @return {string} The normalized search input.\n */\nexport function normalizeSearchInput( input = '' ) {\n\t// Disregard diacritics.\n\tinput = removeAccents( input );\n\n\t// Trim & Lowercase.\n\tinput = input.trim().toLowerCase();\n\n\treturn input;\n}\n\n/**\n * Get the search rank for a given pattern and a specific search term.\n *\n * @param {Object} pattern Pattern to rank\n * @param {string} searchValue Search term\n * @return {number} A pattern search rank\n */\nexport function getPatternSearchRank( pattern, searchValue ) {\n\tconst normalizedSearchValue = normalizeSearchInput( searchValue );\n\tconst normalizedTitle = normalizeSearchInput( pattern.title );\n\n\tlet rank = 0;\n\n\tif ( normalizedSearchValue === normalizedTitle ) {\n\t\trank += 30;\n\t} else if ( normalizedTitle.startsWith( normalizedSearchValue ) ) {\n\t\trank += 20;\n\t} else {\n\t\tconst searchTerms = normalizedSearchValue.split( ' ' );\n\t\tconst hasMatchedTerms = searchTerms.every( ( searchTerm ) =>\n\t\t\tnormalizedTitle.includes( searchTerm )\n\t\t);\n\n\t\t// Prefer pattern with every search word in the title.\n\t\tif ( hasMatchedTerms ) {\n\t\t\trank += 10;\n\t\t}\n\t}\n\n\treturn rank;\n}\n\n/**\n * Filters an pattern list given a search term.\n *\n * @param {Array} patterns Item list\n * @param {string} searchValue Search input.\n *\n * @return {Array} Filtered pattern list.\n */\nexport function searchPatterns( patterns = [], searchValue = '' ) {\n\tif ( ! searchValue ) {\n\t\treturn patterns;\n\t}\n\n\tconst rankedPatterns = patterns\n\t\t.map( ( pattern ) => {\n\t\t\treturn [ pattern, getPatternSearchRank( pattern, searchValue ) ];\n\t\t} )\n\t\t.filter( ( [ , rank ] ) => rank > 0 );\n\n\trankedPatterns.sort( ( [ , rank1 ], [ , rank2 ] ) => rank2 - rank1 );\n\treturn rankedPatterns.map( ( [ pattern ] ) => pattern );\n}\n"],
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,4BAA0B;AASnB,SAAS,qBAAsB,QAAQ,IAAK;AAElD,cAAQ,sBAAAA,SAAe,KAAM;AAG7B,UAAQ,MAAM,KAAK,EAAE,YAAY;AAEjC,SAAO;AACR;AASO,SAAS,qBAAsB,SAAS,aAAc;AAC5D,QAAM,wBAAwB,qBAAsB,WAAY;AAChE,QAAM,kBAAkB,qBAAsB,QAAQ,KAAM;AAE5D,MAAI,OAAO;AAEX,MAAK,0BAA0B,iBAAkB;AAChD,YAAQ;AAAA,EACT,WAAY,gBAAgB,WAAY,qBAAsB,GAAI;AACjE,YAAQ;AAAA,EACT,OAAO;AACN,UAAM,cAAc,sBAAsB,MAAO,GAAI;AACrD,UAAM,kBAAkB,YAAY;AAAA,MAAO,CAAE,eAC5C,gBAAgB,SAAU,UAAW;AAAA,IACtC;AAGA,QAAK,iBAAkB;AACtB,cAAQ;AAAA,IACT;AAAA,EACD;AAEA,SAAO;AACR;AAUO,SAAS,eAAgB,WAAW,CAAC,GAAG,cAAc,IAAK;AACjE,MAAK,CAAE,aAAc;AACpB,WAAO;AAAA,EACR;AAEA,QAAM,iBAAiB,SACrB,IAAK,CAAE,YAAa;AACpB,WAAO,CAAE,SAAS,qBAAsB,SAAS,WAAY,CAAE;AAAA,EAChE,CAAE,EACD,OAAQ,CAAE,CAAE,EAAE,IAAK,MAAO,OAAO,CAAE;AAErC,iBAAe,KAAM,CAAE,CAAE,EAAE,KAAM,GAAG,CAAE,EAAE,KAAM,MAAO,QAAQ,KAAM;AACnE,SAAO,eAAe,IAAK,CAAE,CAAE,OAAQ,MAAO,OAAQ;AACvD;",
"names": ["removeAccents"]
}