@wordpress/editor
Version:
Enhanced block editor for WordPress posts.
8 lines (7 loc) • 3.1 kB
Source Map (JSON)
{
"version": 3,
"sources": ["../../src/utils/search-templates.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 */\nfunction 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 template and a specific search term.\n *\n * @param {Object} template Template to rank\n * @param {string} searchValue Search term\n *\n * @return {number} A template search rank\n */\nfunction getTemplateSearchRank( template, searchValue ) {\n\tconst normalizedSearchValue = normalizeSearchInput( searchValue );\n\tconst normalizedTitle = normalizeSearchInput( template.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 template 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 a template list given a search term.\n *\n * @param {Array} templates Item list\n * @param {string} searchValue Search input.\n *\n * @return {Array} Filtered template list.\n */\nexport function searchTemplates( templates = [], searchValue = '' ) {\n\tif ( ! searchValue ) {\n\t\treturn templates;\n\t}\n\n\tconst rankedTemplates = templates\n\t\t.map( ( template ) => {\n\t\t\treturn [ template, getTemplateSearchRank( template, searchValue ) ];\n\t\t} )\n\t\t.filter( ( [ , rank ] ) => rank > 0 );\n\n\trankedTemplates.sort( ( [ , rank1 ], [ , rank2 ] ) => rank2 - rank1 );\n\treturn rankedTemplates.map( ( [ template ] ) => template );\n}\n"],
"mappings": ";;;;;;;;;;;;;;;;;;;;;;;;;;;;;;AAAA;AAAA;AAAA;AAAA;AAAA;AAGA,4BAA0B;AAS1B,SAAS,qBAAsB,QAAQ,IAAK;AAE3C,cAAQ,sBAAAA,SAAe,KAAM;AAG7B,UAAQ,MAAM,KAAK,EAAE,YAAY;AAEjC,SAAO;AACR;AAUA,SAAS,sBAAuB,UAAU,aAAc;AACvD,QAAM,wBAAwB,qBAAsB,WAAY;AAChE,QAAM,kBAAkB,qBAAsB,SAAS,KAAM;AAE7D,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,gBAAiB,YAAY,CAAC,GAAG,cAAc,IAAK;AACnE,MAAK,CAAE,aAAc;AACpB,WAAO;AAAA,EACR;AAEA,QAAM,kBAAkB,UACtB,IAAK,CAAE,aAAc;AACrB,WAAO,CAAE,UAAU,sBAAuB,UAAU,WAAY,CAAE;AAAA,EACnE,CAAE,EACD,OAAQ,CAAE,CAAE,EAAE,IAAK,MAAO,OAAO,CAAE;AAErC,kBAAgB,KAAM,CAAE,CAAE,EAAE,KAAM,GAAG,CAAE,EAAE,KAAM,MAAO,QAAQ,KAAM;AACpE,SAAO,gBAAgB,IAAK,CAAE,CAAE,QAAS,MAAO,QAAS;AAC1D;",
"names": ["removeAccents"]
}