/*! * Fuzzy Search for DataTables * SpryMedia Ltd - datatables.net/license MIT license * * Damerau-Levenshtein function courtesy of https://github.com/tad-lispy/node-damerau-levenshtein * BSD 2-Clause License * Copyright (c) 2018, Tadeusz Ĺazurski * All rights reserved. */ import DataTable from 'datatables.net'; import './types'; import fuzzySearch from './fuzzySearch'; DataTable.ext.search.push(function (settings, data, dataIndex) { var initial = settings.oInit.fuzzySearch; if (!initial) { return true; } if (settings.aoData[dataIndex]) { // If fuzzy searching has not been implemented then pass all rows for this function if (settings.aoData[dataIndex]._fuzzySearch !== undefined) { // Read score to set the cell content and sort data var score = settings.aoData[dataIndex]._fuzzySearch.score; if (initial.rankColumn !== undefined) { settings.aoData[dataIndex].anCells[initial.rankColumn].innerHTML = score; // Remove '%' from the end of the score so can sort on a number settings.aoData[dataIndex]._aSortData[initial.rankColumn] = +score.substring(0, score.length - 1); } // Return the value for the pass as decided by the fuzzySearch function return settings.aoData[dataIndex]._fuzzySearch.pass; } else if (initial.rankColumn !== undefined) { settings.aoData[dataIndex].anCells[initial.rankColumn].innerHTML = ''; settings.aoData[dataIndex]._aSortData[initial.rankColumn] = ''; } } return true; }); $(document).on('init.dt', function (e, settings) { var api = new DataTable.Api(settings); var initial = api.init(); var initialFuzzy = initial.fuzzySearch; // If this is not set then fuzzy searching is not enabled on the table so return. if (!initialFuzzy) { return; } if (typeof initialFuzzy === 'object' && initialFuzzy.columns) { initialFuzzy.columns = api.columns(initialFuzzy.columns).indexes().toArray(); } var fromPlugin = false; // Find the input element var input = $('div.dt-search input', api.table().container()); var fontBold = { 'font-weight': '600', 'background-color': 'rgba(255,255,255,0.1)', }; var fontNormal = { 'font-weight': '500', 'background-color': 'transparent', }; var toggleCSS = { border: 'none', background: 'none', 'font-size': '100%', width: '50%', display: 'inline-block', color: 'white', cursor: 'pointer', padding: '0.5em', }; // Only going to set the toggle if it is enabled var toggle, tooltip, exact, fuzzy, label; if (initialFuzzy === true || initialFuzzy.toggleSmart) { toggle = $('') .insertAfter(input) .css({ border: 'none', background: 'none', position: 'relative', right: '33px', top: '0px', cursor: 'pointer', color: '#3b5e99', 'margin-top': '1px', }); exact = $('') .insertAfter(input) .css(toggleCSS) .css(fontBold) .attr('highlighted', 'true'); fuzzy = $('') .insertAfter(input) .css(toggleCSS); input.css({ 'padding-right': '30px', }); $(input.parent()).css('right', '-33px').css('position', 'relative'); label = $('