Skip to content

Commit b5882be

Browse files
committed
Solved issue when instantiating TypingDNA more than once.
1 parent c47e9fa commit b5882be

8 files changed

Lines changed: 765 additions & 1883 deletions

File tree

typingdna.js

Lines changed: 173 additions & 124 deletions
Large diffs are not rendered by default.

versions/typingdna_2.1.js

Lines changed: 44 additions & 40 deletions
Original file line numberDiff line numberDiff line change
@@ -64,6 +64,7 @@ function TypingDNA(maxHistoryLength) {
6464
TypingDNA.prototype.isMobile = function(args) {
6565
return TypingDNA.isMobile.apply(this, arguments);
6666
}
67+
TypingDNA.initialized = true;
6768
TypingDNA.prototype.maxHistoryLength = TypingDNA.maxHistoryLength;
6869
TypingDNA.prototype.defaultHistoryLength = TypingDNA.defaultHistoryLength;
6970
TypingDNA.prototype.maxSeekTime = TypingDNA.maxSeekTime;
@@ -383,49 +384,52 @@ function TypingDNA(maxHistoryLength) {
383384
return historyStackObj;
384385
}
385386
}
386-
}
387387

388-
/**
389-
* Checks the quality of a typing pattern, how well it is revelated, how useful the
390-
* information will be for matching applications. It returns a value between 0 and 1.
391-
* Values over 0.3 are acceptable, however a value over 0.7 shows good pattern strength.
392-
* @param {String} typingPattern The typing pattern string returned by the get() function.
393-
* @return {Number} A real number between 0 and 1. A close to 1 value means a stronger pattern.
394-
* @example var quality = tdna.getQuality(typingPattern);
395-
*/
396-
TypingDNA.getQuality = function(typingPattern) {
397-
var obj = typingPattern.split(",");
398-
for (i = 0; i < obj.length; i++){
399-
obj[i] = Number(obj[i]);
400-
}
401-
var totalEvents = obj[0];
402-
var acc = rec = avgAcc = 0;
403-
var avg = TypingDNA.math.avg(obj);
404-
var revs = obj.slice(11, 55);
405-
for (var i in revs) {
406-
rec += Number(revs[i] > 0);
407-
acc += Number(revs[i] > 4);
408-
avgAcc += Number(revs[i] > avg);
388+
/**
389+
* Checks the quality of a typing pattern, how well it is revelated, how useful the
390+
* information will be for matching applications. It returns a value between 0 and 1.
391+
* Values over 0.3 are acceptable, however a value over 0.7 shows good pattern strength.
392+
* @param {String} typingPattern The typing pattern string returned by the get() function.
393+
* @return {Number} A real number between 0 and 1. A close to 1 value means a stronger pattern.
394+
* @example var quality = tdna.getQuality(typingPattern);
395+
*/
396+
TypingDNA.getQuality = function(typingPattern) {
397+
var obj = typingPattern.split(",");
398+
for (i = 0; i < obj.length; i++){
399+
obj[i] = Number(obj[i]);
400+
}
401+
var totalEvents = obj[0];
402+
var acc = rec = avgAcc = 0;
403+
var avg = TypingDNA.math.avg(obj);
404+
var revs = obj.slice(11, 55);
405+
for (var i in revs) {
406+
rec += Number(revs[i] > 0);
407+
acc += Number(revs[i] > 4);
408+
avgAcc += Number(revs[i] > avg);
409+
}
410+
var tReturn = Math.sqrt(rec * acc * avgAcc) / 80;
411+
return tReturn > 1 ? 1 : tReturn;
409412
}
410-
var tReturn = Math.sqrt(rec * acc * avgAcc) / 80;
411-
return tReturn > 1 ? 1 : tReturn;
412-
}
413413

414-
TypingDNA.getLength = function(typingPattern) {
415-
return Number(typingPattern.split(",")[1]);
416-
}
414+
TypingDNA.getLength = function(typingPattern) {
415+
return Number(typingPattern.split(",")[1]);
416+
}
417417

418-
TypingDNA.isMobile = function() {
419-
var check = 0;
420-
(function(a) {
421-
if (
422-
/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i
423-
.test(a) ||
424-
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i
425-
.test(a.substr(0, 4))) {
426-
check = 1
427-
}
428-
})(navigator.userAgent || navigator.vendor || window.opera);
429-
return check;
418+
TypingDNA.isMobile = function() {
419+
var check = 0;
420+
(function(a) {
421+
if (
422+
/(android|bb\d+|meego).+mobile|avantgo|bada\/|blackberry|blazer|compal|elaine|fennec|hiptop|iemobile|ip(hone|od)|iris|kindle|lge |maemo|midp|mmp|mobile.+firefox|netfront|opera m(ob|in)i|palm( os)?|phone|p(ixi|re)\/|plucker|pocket|psp|series(4|6)0|symbian|treo|up\.(browser|link)|vodafone|wap|windows ce|xda|xiino|android|ipad|playbook|silk/i
423+
.test(a) ||
424+
/1207|6310|6590|3gso|4thp|50[1-6]i|770s|802s|a wa|abac|ac(er|oo|s\-)|ai(ko|rn)|al(av|ca|co)|amoi|an(ex|ny|yw)|aptu|ar(ch|go)|as(te|us)|attw|au(di|\-m|r |s )|avan|be(ck|ll|nq)|bi(lb|rd)|bl(ac|az)|br(e|v)w|bumb|bw\-(n|u)|c55\/|capi|ccwa|cdm\-|cell|chtm|cldc|cmd\-|co(mp|nd)|craw|da(it|ll|ng)|dbte|dc\-s|devi|dica|dmob|do(c|p)o|ds(12|\-d)|el(49|ai)|em(l2|ul)|er(ic|k0)|esl8|ez([4-7]0|os|wa|ze)|fetc|fly(\-|_)|g1 u|g560|gene|gf\-5|g\-mo|go(\.w|od)|gr(ad|un)|haie|hcit|hd\-(m|p|t)|hei\-|hi(pt|ta)|hp( i|ip)|hs\-c|ht(c(\-| |_|a|g|p|s|t)|tp)|hu(aw|tc)|i\-(20|go|ma)|i230|iac( |\-|\/)|ibro|idea|ig01|ikom|im1k|inno|ipaq|iris|ja(t|v)a|jbro|jemu|jigs|kddi|keji|kgt( |\/)|klon|kpt |kwc\-|kyo(c|k)|le(no|xi)|lg( g|\/(k|l|u)|50|54|\-[a-w])|libw|lynx|m1\-w|m3ga|m50\/|ma(te|ui|xo)|mc(01|21|ca)|m\-cr|me(rc|ri)|mi(o8|oa|ts)|mmef|mo(01|02|bi|de|do|t(\-| |o|v)|zz)|mt(50|p1|v )|mwbp|mywa|n10[0-2]|n20[2-3]|n30(0|2)|n50(0|2|5)|n7(0(0|1)|10)|ne((c|m)\-|on|tf|wf|wg|wt)|nok(6|i)|nzph|o2im|op(ti|wv)|oran|owg1|p800|pan(a|d|t)|pdxg|pg(13|\-([1-8]|c))|phil|pire|pl(ay|uc)|pn\-2|po(ck|rt|se)|prox|psio|pt\-g|qa\-a|qc(07|12|21|32|60|\-[2-7]|i\-)|qtek|r380|r600|raks|rim9|ro(ve|zo)|s55\/|sa(ge|ma|mm|ms|ny|va)|sc(01|h\-|oo|p\-)|sdk\/|se(c(\-|0|1)|47|mc|nd|ri)|sgh\-|shar|sie(\-|m)|sk\-0|sl(45|id)|sm(al|ar|b3|it|t5)|so(ft|ny)|sp(01|h\-|v\-|v )|sy(01|mb)|t2(18|50)|t6(00|10|18)|ta(gt|lk)|tcl\-|tdg\-|tel(i|m)|tim\-|t\-mo|to(pl|sh)|ts(70|m\-|m3|m5)|tx\-9|up(\.b|g1|si)|utst|v400|v750|veri|vi(rg|te)|vk(40|5[0-3]|\-v)|vm40|voda|vulc|vx(52|53|60|61|70|80|81|83|85|98)|w3c(\-| )|webc|whit|wi(g |nc|nw)|wmlb|wonu|x700|yas\-|your|zeto|zte\-/i
425+
.test(a.substr(0, 4))) {
426+
check = 1
427+
}
428+
})(navigator.userAgent || navigator.vendor || window.opera);
429+
return check;
430+
}
431+
} else {
432+
// TypingDNA is a static class, currently doesn't support actual multiple instances (Singleton implementation)
433+
return TypingDNA.instance;
430434
}
431435
}

0 commit comments

Comments
 (0)