Feedback.js 2.7 KB

1234567891011121314151617181920212223242526272829303132333435363738394041424344454647484950515253545556575859606162636465666768697071727374757677787980818283848586
  1. 'use strict';
  2. var Options = require('./Options.js');
  3. var feedback = require('./matcher/bruteforce/feedback.js');
  4. var feedback$1 = require('./matcher/date/feedback.js');
  5. var feedback$2 = require('./matcher/dictionary/feedback.js');
  6. var feedback$3 = require('./matcher/regex/feedback.js');
  7. var feedback$4 = require('./matcher/repeat/feedback.js');
  8. var feedback$5 = require('./matcher/sequence/feedback.js');
  9. var feedback$6 = require('./matcher/spatial/feedback.js');
  10. const defaultFeedback = {
  11. warning: '',
  12. suggestions: []
  13. };
  14. /*
  15. * -------------------------------------------------------------------------------
  16. * Generate feedback ---------------------------------------------------------------
  17. * -------------------------------------------------------------------------------
  18. */
  19. class Feedback {
  20. constructor() {
  21. this.matchers = {
  22. bruteforce: feedback,
  23. date: feedback$1,
  24. dictionary: feedback$2,
  25. regex: feedback$3,
  26. repeat: feedback$4,
  27. sequence: feedback$5,
  28. spatial: feedback$6
  29. };
  30. this.defaultFeedback = {
  31. warning: '',
  32. suggestions: []
  33. };
  34. this.setDefaultSuggestions();
  35. }
  36. setDefaultSuggestions() {
  37. this.defaultFeedback.suggestions.push(Options.default.translations.suggestions.useWords, Options.default.translations.suggestions.noNeed);
  38. }
  39. getFeedback(score, sequence) {
  40. if (sequence.length === 0) {
  41. return this.defaultFeedback;
  42. }
  43. if (score > 2) {
  44. return defaultFeedback;
  45. }
  46. const extraFeedback = Options.default.translations.suggestions.anotherWord;
  47. const longestMatch = this.getLongestMatch(sequence);
  48. let feedback = this.getMatchFeedback(longestMatch, sequence.length === 1);
  49. if (feedback !== null && feedback !== undefined) {
  50. feedback.suggestions.unshift(extraFeedback);
  51. if (feedback.warning == null) {
  52. feedback.warning = '';
  53. }
  54. } else {
  55. feedback = {
  56. warning: '',
  57. suggestions: [extraFeedback]
  58. };
  59. }
  60. return feedback;
  61. }
  62. getLongestMatch(sequence) {
  63. let longestMatch = sequence[0];
  64. const slicedSequence = sequence.slice(1);
  65. slicedSequence.forEach(match => {
  66. if (match.token.length > longestMatch.token.length) {
  67. longestMatch = match;
  68. }
  69. });
  70. return longestMatch;
  71. }
  72. getMatchFeedback(match, isSoleMatch) {
  73. if (this.matchers[match.pattern]) {
  74. return this.matchers[match.pattern](match, isSoleMatch);
  75. }
  76. if (Options.default.matchers[match.pattern] && 'feedback' in Options.default.matchers[match.pattern]) {
  77. return Options.default.matchers[match.pattern].feedback(match, isSoleMatch);
  78. }
  79. return defaultFeedback;
  80. }
  81. }
  82. module.exports = Feedback;
  83. //# sourceMappingURL=Feedback.js.map