| 
									
										
										
										
											2018-02-20 23:24:55 -05:00
										 |  |  | // CodeMirror, copyright (c) by Marijn Haverbeke and others
 | 
					
						
							|  |  |  | // Distributed under an MIT license: http://codemirror.net/LICENSE
 | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  | (function(mod) { | 
					
						
							|  |  |  |   if (typeof exports == "object" && typeof module == "object") // CommonJS
 | 
					
						
							|  |  |  |     mod(require("../../lib/codemirror")); | 
					
						
							|  |  |  |   else if (typeof define == "function" && define.amd) // AMD
 | 
					
						
							|  |  |  |     define(["../../lib/codemirror"], mod); | 
					
						
							|  |  |  |   else // Plain browser env
 | 
					
						
							|  |  |  |     mod(CodeMirror); | 
					
						
							|  |  |  | })(function(CodeMirror) { | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |     "use strict"; | 
					
						
							| 
									
										
										
										
											2018-02-20 23:24:55 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |     async function validatorHtml(text, options) { | 
					
						
							|  |  |  |         const result = /<script[^>]*>([\s\S]+)<\/script>/ig.exec(text); | 
					
						
							| 
									
										
										
										
											2018-02-20 23:24:55 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |         if (result !== null) { | 
					
						
							|  |  |  |             // preceding code is copied over but any (non-newline) character is replaced with space
 | 
					
						
							|  |  |  |             // this will preserve line numbers etc.
 | 
					
						
							|  |  |  |             const prefix = text.substr(0, result.index).replace(/./g, " "); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             const js = prefix + result[1]; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             return await validatorJavaScript(js, options); | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-02-23 20:10:29 -05:00
										 |  |  | 
 | 
					
						
							|  |  |  |         return []; | 
					
						
							|  |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |     async function validatorJavaScript(text, options) { | 
					
						
							| 
									
										
										
										
											2019-05-22 20:53:59 +02:00
										 |  |  |         if (glob.isMobile() | 
					
						
							| 
									
										
										
										
											2019-10-20 12:29:34 +02:00
										 |  |  |             || glob.getActiveTabNote() == null | 
					
						
							|  |  |  |             || glob.getActiveTabNote().mime === 'application/json') { | 
					
						
							| 
									
										
										
										
											2018-03-25 20:18:08 -04:00
										 |  |  |             // eslint doesn't seem to validate pure JSON well
 | 
					
						
							|  |  |  |             return []; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-03-01 22:42:51 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-03-25 20:18:08 -04:00
										 |  |  |         await glob.requireLibrary(glob.ESLINT); | 
					
						
							| 
									
										
										
										
											2018-02-20 23:24:55 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |         if (text.length > 20000) { | 
					
						
							|  |  |  |             console.log("Skipping linting because of large size: ", text.length); | 
					
						
							| 
									
										
										
										
											2018-02-20 23:24:55 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |             return []; | 
					
						
							|  |  |  |         } | 
					
						
							| 
									
										
										
										
											2018-02-20 23:24:55 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |         const errors = new eslint().verify(text, { | 
					
						
							|  |  |  |             root: true, | 
					
						
							|  |  |  |             parserOptions: { | 
					
						
							| 
									
										
										
										
											2020-03-01 10:41:23 +01:00
										 |  |  |                 ecmaVersion: 2019 | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |             }, | 
					
						
							|  |  |  |             extends: ['eslint:recommended', 'airbnb-base'], | 
					
						
							|  |  |  |             env: { | 
					
						
							| 
									
										
										
										
											2020-03-01 10:41:23 +01:00
										 |  |  |                 'browser': true, | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |                 'node': true | 
					
						
							|  |  |  |             }, | 
					
						
							|  |  |  |             rules: { | 
					
						
							|  |  |  |                 'import/no-unresolved': 'off', | 
					
						
							|  |  |  |                 'func-names': 'off', | 
					
						
							| 
									
										
										
										
											2018-02-26 22:55:58 -05:00
										 |  |  |                 'comma-dangle': ['warn'], | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |                 'padded-blocks': 'off', | 
					
						
							|  |  |  |                 'linebreak-style': 'off', | 
					
						
							|  |  |  |                 'class-methods-use-this': 'off', | 
					
						
							| 
									
										
										
										
											2018-02-26 22:55:58 -05:00
										 |  |  |                 'no-unused-vars': ['warn', { vars: 'local', args: 'after-used' }], | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |                 'no-nested-ternary': 'off', | 
					
						
							|  |  |  |                 'no-underscore-dangle': ['error', {'allow': ['_super', '_lookupFactory']}] | 
					
						
							| 
									
										
										
										
											2020-03-01 10:41:23 +01:00
										 |  |  |             }, | 
					
						
							|  |  |  |             globals: { | 
					
						
							|  |  |  |                 "api": "readonly" | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |             } | 
					
						
							|  |  |  |         }); | 
					
						
							| 
									
										
										
										
											2018-02-20 23:24:55 -05:00
										 |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |         const result = []; | 
					
						
							|  |  |  |         if (errors) { | 
					
						
							|  |  |  |             parseErrors(errors, result); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |         return result; | 
					
						
							| 
									
										
										
										
											2018-02-20 23:24:55 -05:00
										 |  |  |     } | 
					
						
							|  |  |  | 
 | 
					
						
							| 
									
										
										
										
											2018-02-24 00:58:11 -05:00
										 |  |  |     CodeMirror.registerHelper("lint", "javascript", validatorJavaScript); | 
					
						
							|  |  |  |     CodeMirror.registerHelper("lint", "html", validatorHtml); | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |     function parseErrors(errors, output) { | 
					
						
							|  |  |  |         for (const error of errors) { | 
					
						
							|  |  |  |             const startLine = error.line - 1; | 
					
						
							|  |  |  |             const endLine = error.endLine !== undefined ? error.endLine - 1 : startLine; | 
					
						
							|  |  |  |             const startCol = error.column - 1; | 
					
						
							|  |  |  |             const endCol = error.endColumn !== undefined ? error.endColumn - 1 : startCol + 1; | 
					
						
							|  |  |  | 
 | 
					
						
							|  |  |  |             output.push({ | 
					
						
							|  |  |  |                 message: error.message, | 
					
						
							|  |  |  |                 severity: error.severity === 1 ? "warning" : "error", | 
					
						
							|  |  |  |                 from: CodeMirror.Pos(startLine, startCol), | 
					
						
							|  |  |  |                 to: CodeMirror.Pos(endLine, endCol) | 
					
						
							|  |  |  |             }); | 
					
						
							|  |  |  |         } | 
					
						
							|  |  |  |     } | 
					
						
							| 
									
										
										
										
											2018-02-20 23:24:55 -05:00
										 |  |  | }); |