UNPKG

dynatrace-cordova-outsystems-plugin

Version:

This plugin gives you the ability to use the Dynatrace instrumentation in your hybrid application (Cordova, Ionic, ..). It uses the Mobile Agent, the JavaScript Agent and the Javascript Bridge. The Mobile Agent will give you all device specific values con

137 lines (114 loc) 3.93 kB
(function() { 'use strict'; var collator; try { collator = (typeof Intl !== "undefined" && typeof Intl.Collator !== "undefined") ? Intl.Collator("generic", { sensitivity: "base" }) : null; } catch (err){ console.log("Collator could not be initialized and wouldn't be used"); } // arrays to re-use var prevRow = [], str2Char = []; /** * Based on the algorithm at http://en.wikipedia.org/wiki/Levenshtein_distance. */ var Levenshtein = { /** * Calculate levenshtein distance of the two strings. * * @param str1 String the first string. * @param str2 String the second string. * @param [options] Additional options. * @param [options.useCollator] Use `Intl.Collator` for locale-sensitive string comparison. * @return Integer the levenshtein distance (0 and above). */ get: function(str1, str2, options) { var useCollator = (options && collator && options.useCollator); var str1Len = str1.length, str2Len = str2.length; // base cases if (str1Len === 0) return str2Len; if (str2Len === 0) return str1Len; // two rows var curCol, nextCol, i, j, tmp; // initialise previous row for (i=0; i<str2Len; ++i) { prevRow[i] = i; str2Char[i] = str2.charCodeAt(i); } prevRow[str2Len] = str2Len; var strCmp; if (useCollator) { // calculate current row distance from previous row using collator for (i = 0; i < str1Len; ++i) { nextCol = i + 1; for (j = 0; j < str2Len; ++j) { curCol = nextCol; // substution strCmp = 0 === collator.compare(str1.charAt(i), String.fromCharCode(str2Char[j])); nextCol = prevRow[j] + (strCmp ? 0 : 1); // insertion tmp = curCol + 1; if (nextCol > tmp) { nextCol = tmp; } // deletion tmp = prevRow[j + 1] + 1; if (nextCol > tmp) { nextCol = tmp; } // copy current col value into previous (in preparation for next iteration) prevRow[j] = curCol; } // copy last col value into previous (in preparation for next iteration) prevRow[j] = nextCol; } } else { // calculate current row distance from previous row without collator for (i = 0; i < str1Len; ++i) { nextCol = i + 1; for (j = 0; j < str2Len; ++j) { curCol = nextCol; // substution strCmp = str1.charCodeAt(i) === str2Char[j]; nextCol = prevRow[j] + (strCmp ? 0 : 1); // insertion tmp = curCol + 1; if (nextCol > tmp) { nextCol = tmp; } // deletion tmp = prevRow[j + 1] + 1; if (nextCol > tmp) { nextCol = tmp; } // copy current col value into previous (in preparation for next iteration) prevRow[j] = curCol; } // copy last col value into previous (in preparation for next iteration) prevRow[j] = nextCol; } } return nextCol; } }; // amd if (typeof define !== "undefined" && define !== null && define.amd) { define(function() { return Levenshtein; }); } // commonjs else if (typeof module !== "undefined" && module !== null && typeof exports !== "undefined" && module.exports === exports) { module.exports = Levenshtein; } // web worker else if (typeof self !== "undefined" && typeof self.postMessage === 'function' && typeof self.importScripts === 'function') { self.Levenshtein = Levenshtein; } // browser main thread else if (typeof window !== "undefined" && window !== null) { window.Levenshtein = Levenshtein; } }());