{"version":3,"file":"proofreader-Dk8VK1Mi.js","sources":["../../../client/node_modules/sbd/lib/sanitize-html-browser.js","../../../client/node_modules/sbd/lib/stringHelper.js","../../../client/node_modules/sbd/lib/Match.js","../../../client/node_modules/sbd/lib/tokenizer.js","../../../client/app/bundles/Proofreader/clientRegistration.js"],"sourcesContent":["\r\nmodule.exports = function sanitizeHtml(text, opts) {\r\n // Strip HTML from Text using browser HTML parser\r\n if ((typeof text == 'string' || text instanceof String) && typeof document !== \"undefined\") {\r\n var $div = document.createElement(\"DIV\");\r\n $div.innerHTML = text;\r\n text = ($div.textContent || '').trim();\r\n }\r\n //DOM Object\r\n else if (typeof text === 'object' && text.textContent) {\r\n text = (text.textContent || '').trim();\r\n }\r\n\r\n return text;\r\n};\r\n","\r\nexports.endsWithChar = function ends_with_char(word, c) {\r\n if (c.length > 1) {\r\n return c.indexOf(word.slice(-1)) > -1;\r\n }\r\n\r\n return word.slice(-1) === c;\r\n};\r\n\r\nexports.endsWith = function ends_with(word, end) {\r\n return word.slice(word.length - end.length) === end;\r\n};","var abbreviations;\r\n\r\nvar englishAbbreviations = [\r\n \"al\",\r\n \"adj\",\r\n \"assn\",\r\n \"Ave\",\r\n \"BSc\", \"MSc\",\r\n \"Cell\",\r\n \"Ch\",\r\n \"Co\",\r\n \"cc\",\r\n \"Corp\",\r\n \"Dem\",\r\n \"Dept\",\r\n \"ed\",\r\n \"eg\",\r\n \"Eq\",\r\n \"Eqs\",\r\n \"est\",\r\n \"est\",\r\n \"etc\",\r\n \"Ex\",\r\n \"ext\", // + number?\r\n \"Fig\",\r\n \"fig\",\r\n \"Figs\",\r\n \"figs\",\r\n \"i.e\",\r\n \"ie\",\r\n \"Inc\",\r\n \"inc\",\r\n \"Jan\",\"Feb\",\"Mar\",\"Apr\",\"Jun\",\"Jul\",\"Aug\",\"Sep\",\"Sept\",\"Oct\",\"Nov\",\"Dec\",\r\n \"jr\",\r\n \"mi\",\r\n \"Miss\", \"Mrs\", \"Mr\", \"Ms\",\r\n \"Mol\",\r\n \"mt\",\r\n \"mts\",\r\n \"no\",\r\n \"Nos\",\r\n \"PhD\", \"MD\", \"BA\", \"MA\", \"MM\",\r\n \"pl\",\r\n \"pop\",\r\n \"pp\",\r\n \"Prof\", \"Dr\",\r\n \"pt\",\r\n \"Ref\",\r\n \"Refs\",\r\n \"Rep\",\r\n \"repr\",\r\n \"rev\",\r\n \"Sec\",\r\n \"Secs\",\r\n \"Sgt\", \"Col\", \"Gen\", \"Rep\", \"Sen\",'Gov', \"Lt\", \"Maj\", \"Capt\",\"St\",\r\n \"Sr\", \"sr\", \"Jr\", \"jr\", \"Rev\",\r\n \"Sun\",\"Mon\",\"Tu\",\"Tue\",\"Tues\",\"Wed\",\"Th\",\"Thu\",\"Thur\",\"Thurs\",\"Fri\",\"Sat\",\r\n \"trans\",\r\n \"Univ\",\r\n \"Viz\",\r\n \"Vol\",\r\n \"vs\",\r\n \"v\",\r\n];\r\n\r\nexports.setAbbreviations = function(abbr) {\r\n if (abbr) {\r\n abbreviations = abbr;\r\n } else {\r\n abbreviations = englishAbbreviations;\r\n }\r\n}\r\n\r\nvar isCapitalized = exports.isCapitalized = function(str) {\r\n return /^[A-Z][a-z].*/.test(str) || isNumber(str);\r\n}\r\n\r\n// Start with opening quotes or capitalized letter\r\nexports.isSentenceStarter = function(str) {\r\n return isCapitalized(str) || /``|\"|'/.test(str.substring(0,2));\r\n}\r\n\r\nexports.isCommonAbbreviation = function(str) {\r\n var noSymbols = str.replace(/[-'`~!@#$%^&*()_|+=?;:'\",.<>\\{\\}\\[\\]\\\\\\/]/gi, \"\");\r\n\r\n return ~abbreviations.indexOf(noSymbols);\r\n}\r\n\r\n// This is going towards too much rule based\r\nexports.isTimeAbbreviation = function(word, next) {\r\n if (word === \"a.m.\" || word === \"p.m.\") {\r\n var tmp = next.replace(/\\W+/g, '').slice(-3).toLowerCase();\r\n\r\n if (tmp === \"day\") {\r\n return true;\r\n }\r\n }\r\n\r\n return false;\r\n}\r\n\r\nexports.isDottedAbbreviation = function(word) {\r\n var matches = word.replace(/[\\(\\)\\[\\]\\{\\}]/g, '').match(/(.\\.)*/);\r\n return matches && matches[0].length > 0;\r\n}\r\n\r\n// TODO look for next words, if multiple are capitalized,\r\n// then it's probably not a sentence ending\r\nexports.isCustomAbbreviation = function(str) {\r\n if (str.length <= 3) {\r\n return true;\r\n }\r\n\r\n return isCapitalized(str);\r\n}\r\n\r\n// Uses current word count in sentence and next few words to check if it is\r\n// more likely an abbreviation + name or new sentence.\r\nexports.isNameAbbreviation = function(wordCount, words) {\r\n if (words.length > 0) {\r\n if (wordCount < 5 && words[0].length < 6 && isCapitalized(words[0])) {\r\n return true;\r\n }\r\n\r\n var capitalized = words.filter(function(str) {\r\n return /[A-Z]/.test(str.charAt(0));\r\n });\r\n\r\n return capitalized.length >= 3;\r\n }\r\n\r\n return false;\r\n}\r\n\r\nvar isNumber = exports.isNumber = function(str, dotPos) {\r\n if (dotPos) {\r\n str = str.slice(dotPos-1, dotPos+2);\r\n }\r\n\r\n return !isNaN(str);\r\n};\r\n\r\n// Phone number matching\r\n// http://stackoverflow.com/a/123666/951517\r\nexports.isPhoneNr = function(str) {\r\n return str.match(/^(?:(?:\\+?1\\s*(?:[.-]\\s*)?)?(?:\\(\\s*([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9])\\s*\\)|([2-9]1[02-9]|[2-9][02-8]1|[2-9][02-8][02-9]))\\s*(?:[.-]\\s*)?)?([2-9]1[02-9]|[2-9][02-9]1|[2-9][02-9]{2})\\s*(?:[.-]\\s*)?([0-9]{4})(?:\\s*(?:#|x\\.?|ext\\.?|extension)\\s*(\\d+))?$/);\r\n};\r\n\r\n// Match urls / emails\r\n// http://stackoverflow.com/a/3809435/951517\r\nexports.isURL = function(str) {\r\n return str.match(/[-a-zA-Z0-9@:%._\\+~#=]{2,256}\\.[a-z]{2,6}\\b([-a-zA-Z0-9@:%_\\+.~#?&//=]*)/);\r\n};\r\n\r\n// Starting a new sentence if beginning with capital letter\r\n// Exception: The word is enclosed in brackets\r\nexports.isConcatenated = function(word) {\r\n var i = 0;\r\n\r\n if ((i = word.indexOf(\".\")) > -1 ||\r\n (i = word.indexOf(\"!\")) > -1 ||\r\n (i = word.indexOf(\"?\")) > -1)\r\n {\r\n var c = word.charAt(i + 1);\r\n\r\n // Check if the next word starts with a letter\r\n if (c.match(/[a-zA-Z].*/)) {\r\n return [word.slice(0, i), word.slice(i+1)];\r\n }\r\n }\r\n\r\n return false;\r\n};\r\n\r\nexports.isBoundaryChar = function(word) {\r\n return word === \".\" ||\r\n word === \"!\" ||\r\n word === \"?\";\r\n};\r\n","/*jshint node:true, laxcomma:true */\r\n\r\nvar sanitizeHtml = require(\"sanitize-html\");\r\n\r\nvar stringHelper = require(\"./stringHelper\");\r\nvar Match = require(\"./Match\");\r\n\r\nvar newline_placeholder = \" @~@ \";\r\nvar newline_placeholder_t = newline_placeholder.trim();\r\n\r\n\r\nvar whiteSpaceCheck = new RegExp(\"\\\\S\", \"\");\r\nvar addNewLineBoundaries = new RegExp(\"\\\\n+|[-#=_+*]{4,}\", \"g\");\r\nvar splitIntoWords = new RegExp(\"\\\\S+|\\\\n\", \"g\");\r\n\r\n\r\n// Split the entry into sentences.\r\nexports.sentences = function(text, user_options) {\r\n if (!text || typeof text !== \"string\" || !text.length) {\r\n return [];\r\n }\r\n\r\n if (!whiteSpaceCheck.test(text)) {\r\n // whitespace-only string has no sentences\r\n return [];\r\n }\r\n\r\n var options = {\r\n \"newline_boundaries\" : false,\r\n \"html_boundaries\" : false,\r\n \"html_boundaries_tags\": [\"p\",\"div\",\"ul\",\"ol\"],\r\n \"sanitize\" : false,\r\n \"allowed_tags\" : false,\r\n \"preserve_whitespace\" : false,\r\n \"abbreviations\" : null\r\n };\r\n\r\n if (typeof user_options === \"boolean\") {\r\n // Deprecated quick option\r\n options.newline_boundaries = true;\r\n }\r\n else {\r\n // Extend options\r\n for (var k in user_options) {\r\n options[k] = user_options[k];\r\n }\r\n }\r\n\r\n Match.setAbbreviations(options.abbreviations);\r\n\r\n if (options.newline_boundaries) {\r\n text = text.replace(addNewLineBoundaries, newline_placeholder);\r\n }\r\n\r\n if (options.html_boundaries) {\r\n var html_boundaries_regexp = \"(
|<\\\\/(\" + options.html_boundaries_tags.join(\"|\") + \")>)\";\r\n var re = new RegExp(html_boundaries_regexp, \"g\");\r\n text = text.replace(re, \"$1\" + newline_placeholder);\r\n }\r\n\r\n if (options.sanitize || options.allowed_tags) {\r\n if (! options.allowed_tags) {\r\n options.allowed_tags = [\"\"];\r\n }\r\n\r\n text = sanitizeHtml(text, { \"allowedTags\" : options.allowed_tags });\r\n }\r\n\r\n\r\n // Split the text into words\r\n var words;\r\n var tokens;\r\n\r\n // Split the text into words\r\n if (options.preserve_whitespace) {\r\n //
tags are the odd man out, as whitespace is allowed inside the tag\r\n tokens = text.split(/(
|\\S+|\\n+)/);\r\n\r\n // every other token is a word\r\n words = tokens.filter(function (token, ii) {\r\n return ii % 2;\r\n });\r\n }\r\n else {\r\n // - see http://blog.tompawlak.org/split-string-into-tokens-javascript\r\n words = text.trim().match(splitIntoWords);\r\n }\r\n\r\n\r\n var wordCount = 0;\r\n var index = 0;\r\n var temp = [];\r\n var sentences = [];\r\n var current = [];\r\n\r\n // If given text is only whitespace (or nothing of \\S+)\r\n if (!words || !words.length) {\r\n return [];\r\n }\r\n\r\n for (var i=0, L=words.length; i < L; i++) {\r\n wordCount++;\r\n\r\n // Add the word to current sentence\r\n current.push(words[i]);\r\n\r\n // Sub-sentences, reset counter\r\n if (~words[i].indexOf(\",\")) {\r\n wordCount = 0;\r\n }\r\n\r\n if (Match.isBoundaryChar(words[i]) || stringHelper.endsWithChar(words[i], \"?!\") || words[i] === newline_placeholder_t) {\r\n if ((options.newline_boundaries || options.html_boundaries) && words[i] === newline_placeholder_t) {\r\n current.pop();\r\n }\r\n\r\n sentences.push(current);\r\n\r\n wordCount = 0;\r\n current = [];\r\n\r\n continue;\r\n }\r\n\r\n\r\n if (stringHelper.endsWithChar(words[i], \"\\\"\") || stringHelper.endsWithChar(words[i], \"”\")) {\r\n words[i] = words[i].slice(0, -1);\r\n }\r\n\r\n // A dot might indicate the end sentences\r\n // Exception: The next sentence starts with a word (non abbreviation)\r\n // that has a capital letter.\r\n if (stringHelper.endsWithChar(words[i], \".\")) {\r\n // Check if there is a next word\r\n // This probably needs to be improved with machine learning\r\n if (i+1 < L) {\r\n // Single character abbr.\r\n if (words[i].length === 2 && isNaN(words[i].charAt(0))) {\r\n continue;\r\n }\r\n\r\n // Common abbr. that often do not end sentences\r\n if (Match.isCommonAbbreviation(words[i])) {\r\n continue;\r\n }\r\n\r\n // Next word starts with capital word, but current sentence is\r\n // quite short\r\n if (Match.isSentenceStarter(words[i+1])) {\r\n if (Match.isTimeAbbreviation(words[i], words[i+1])) {\r\n continue;\r\n }\r\n\r\n // Dealing with names at the start of sentences\r\n if (Match.isNameAbbreviation(wordCount, words.slice(i, 6))) {\r\n continue;\r\n }\r\n\r\n if (Match.isNumber(words[i+1])) {\r\n if (Match.isCustomAbbreviation(words[i])) {\r\n continue;\r\n }\r\n }\r\n }\r\n else {\r\n // Skip ellipsis\r\n if (stringHelper.endsWith(words[i], \"..\")) {\r\n continue;\r\n }\r\n\r\n //// Skip abbreviations\r\n // Short words + dot or a dot after each letter\r\n if (Match.isDottedAbbreviation(words[i])) {\r\n continue;\r\n }\r\n\r\n if (Match.isNameAbbreviation(wordCount, words.slice(i, 5))) {\r\n continue;\r\n }\r\n }\r\n }\r\n\r\n sentences.push(current);\r\n current = [];\r\n wordCount = 0;\r\n\r\n continue;\r\n }\r\n\r\n // Check if the word has a dot in it\r\n if ((index = words[i].indexOf(\".\")) > -1) {\r\n if (Match.isNumber(words[i], index)) {\r\n continue;\r\n }\r\n\r\n // Custom dotted abbreviations (like K.L.M or I.C.T)\r\n if (Match.isDottedAbbreviation(words[i])) {\r\n continue;\r\n }\r\n\r\n // Skip urls / emails and the like\r\n if (Match.isURL(words[i]) || Match.isPhoneNr(words[i])) {\r\n continue;\r\n }\r\n }\r\n\r\n if (temp = Match.isConcatenated(words[i])) {\r\n current.pop();\r\n current.push(temp[0]);\r\n sentences.push(current);\r\n\r\n current = [];\r\n wordCount = 0;\r\n current.push(temp[1]);\r\n }\r\n }\r\n\r\n if (current.length) {\r\n sentences.push(current);\r\n }\r\n\r\n\r\n // Clear \"empty\" sentences\r\n sentences = sentences.filter(function(s) {\r\n return s.length > 0;\r\n });\r\n\r\n var result = sentences.slice(1).reduce(function (out, sentence) {\r\n var lastSentence = out[out.length - 1];\r\n\r\n // Single words, could be \"enumeration lists\"\r\n if (lastSentence.length === 1 && /^.{1,2}[.]$/.test(lastSentence[0])) {\r\n // Check if there is a next sentence\r\n // It should not be another list item\r\n if (!/[.]/.test(sentence[0])) {\r\n out.pop()\r\n out.push(lastSentence.concat(sentence));\r\n return out;\r\n }\r\n }\r\n\r\n out.push(sentence);\r\n\r\n return out;\r\n }, [ sentences[0] ]);\r\n\r\n // join tokens back together\r\n return result.map(function (sentence, ii) {\r\n if (options.preserve_whitespace && !options.newline_boundaries && !options.html_boundaries) {\r\n // tokens looks like so: [leading-space token, non-space token, space\r\n // token, non-space token, space token... ]. In other words, the first\r\n // item is the leading space (or the empty string), and the rest of\r\n // the tokens are [non-space, space] token pairs.\r\n var tokenCount = sentence.length * 2;\r\n\r\n if (ii === 0) {\r\n tokenCount += 1;\r\n }\r\n\r\n return tokens.splice(0, tokenCount).join(\"\");\r\n }\r\n\r\n return sentence.join(\" \");\r\n });\r\n};\r\n","import ReactOnRails from 'react-on-rails';\nimport App from './App.tsx';\n\nReactOnRails.register({ App, });\n"],"names":["sanitizeHtmlBrowser","text","opts","$div","stringHelper","word","c","end","abbreviations","englishAbbreviations","Match","abbr","isCapitalized","str","isNumber","noSymbols","next","tmp","matches","wordCount","words","capitalized","dotPos","i","sanitizeHtml","require$$0","require$$1","require$$2","newline_placeholder","newline_placeholder_t","whiteSpaceCheck","addNewLineBoundaries","splitIntoWords","sentences","user_options","options","k","html_boundaries_regexp","re","tokens","token","ii","index","temp","current","L","s","result","out","sentence","lastSentence","tokenCount","ReactOnRails","App"],"mappings":"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","x_google_ignoreList":[0,1,2,3]}