forked from cory/tildefriends
		
	CodeMirror 6.
git-svn-id: https://www.unprompted.com/svn/projects/tildefriends/trunk@4767 ed5197a5-7fde-0310-b194-c3ffbd925b24
This commit is contained in:
		
							
								
								
									
										155
									
								
								core/client.js
									
									
									
									
									
								
							
							
						
						
									
										155
									
								
								core/client.js
									
									
									
									
									
								
							| @@ -1,5 +1,6 @@ | |||||||
| import {LitElement, html, css, svg} from '/static/lit/lit-all.min.js'; | import {LitElement, html, css, svg} from '/static/lit/lit-all.min.js'; | ||||||
|  |  | ||||||
|  | let cm6; | ||||||
| let gSocket; | let gSocket; | ||||||
|  |  | ||||||
| let gCurrentFile; | let gCurrentFile; | ||||||
| @@ -201,7 +202,7 @@ class TfFilesElement extends LitElement { | |||||||
| 			let buffer = await file.arrayBuffer(); | 			let buffer = await file.arrayBuffer(); | ||||||
| 			let text = new TextDecoder('latin1').decode(buffer); | 			let text = new TextDecoder('latin1').decode(buffer); | ||||||
| 			gFiles[file.name] = { | 			gFiles[file.name] = { | ||||||
| 				doc: new CodeMirror.Doc(text, guessMode(file.name)), | 				doc: new cm6.EditorState.create({doc: text, extensions: cm6.extensions}), | ||||||
| 				buffer: buffer, | 				buffer: buffer, | ||||||
| 				generation: -1, | 				generation: -1, | ||||||
| 				isNew: true, | 				isNew: true, | ||||||
| @@ -435,7 +436,7 @@ function is_edit_only() { | |||||||
| 	return window.location.search == '?editonly=1' || window.innerWidth < 1024; | 	return window.location.search == '?editonly=1' || window.innerWidth < 1024; | ||||||
| } | } | ||||||
|  |  | ||||||
| function edit() { | async function edit() { | ||||||
| 	if (editing()) { | 	if (editing()) { | ||||||
| 		return; | 		return; | ||||||
| 	} | 	} | ||||||
| @@ -444,33 +445,15 @@ function edit() { | |||||||
| 	document.getElementById("editPane").style.display = 'flex'; | 	document.getElementById("editPane").style.display = 'flex'; | ||||||
| 	document.getElementById('viewPane').style.display =  is_edit_only() ? 'none' : 'flex'; | 	document.getElementById('viewPane').style.display =  is_edit_only() ? 'none' : 'flex'; | ||||||
|  |  | ||||||
| 	ensureLoaded([ | 	try { | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/codemirror.min.js"}}, | 		cm6 = await import('/codemirror/cm6.js'); | ||||||
| 		{tagName: "link", attributes: {rel: "stylesheet", href: "/codemirror/base16-dark.min.css"}}, | 		gEditor = cm6.TildeFriendsEditorView(document.getElementById("editor")); | ||||||
| 		{tagName: "link", attributes: {rel: "stylesheet", href: "/codemirror/matchesonscrollbar.min.css"}}, | 		gEditor.onDocChange = updateFiles; | ||||||
| 		{tagName: "link", attributes: {rel: "stylesheet", href: "/codemirror/dialog.min.css"}}, | 		await load(); | ||||||
| 		{tagName: "link", attributes: {rel: "stylesheet", href: "/codemirror/codemirror.min.css"}}, | 	} catch (error) { | ||||||
| 		{tagName: "link", attributes: {rel: "stylesheet", href: "/codemirror/lint.css"}}, | 		alert(`${error.message}\n\n${error.stack}`); | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/trailingspace.min.js"}}, | 		closeEditor(); | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/dialog.min.js"}}, | 	} | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/search.min.js"}}, |  | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/searchcursor.min.js"}}, |  | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/jump-to-line.min.js"}}, |  | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/matchesonscrollbar.min.js"}}, |  | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/annotatescrollbar.min.js"}}, |  | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/javascript.min.js"}}, |  | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/css.min.js"}}, |  | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/xml.min.js"}}, |  | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/htmlmixed.min.js"}}, |  | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/lint.js"}}, |  | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/jshint.min.js"}}, |  | ||||||
| 		{tagName: "script", attributes: {src: "/codemirror/javascript-lint.min.js"}}, |  | ||||||
| 	], function() { |  | ||||||
| 		load().catch(function(error) { |  | ||||||
| 			alert(error); |  | ||||||
| 			closeEditor(); |  | ||||||
| 		}); |  | ||||||
| 	}); |  | ||||||
| } | } | ||||||
|  |  | ||||||
| function trace() { | function trace() { | ||||||
| @@ -491,73 +474,51 @@ function loadFile(name, id) { | |||||||
| 		} | 		} | ||||||
| 		return response.text(); | 		return response.text(); | ||||||
| 	}).then(function(text) { | 	}).then(function(text) { | ||||||
| 		gFiles[name].doc = new CodeMirror.Doc(text, guessMode(name)); | 		gFiles[name].doc = cm6.EditorState.create({doc: text, extensions: cm6.extensions}); | ||||||
|  | 		gFiles[name].original = gFiles[name].doc.doc.toString(); | ||||||
| 		if (!Object.values(gFiles).some(x => !x.doc)) { | 		if (!Object.values(gFiles).some(x => !x.doc)) { | ||||||
| 			openFile(Object.keys(gFiles).sort()[0]); | 			openFile(Object.keys(gFiles).sort()[0]); | ||||||
| 		} | 		} | ||||||
| 	}); | 	}); | ||||||
| } | } | ||||||
|  |  | ||||||
| function load(path) { | async function load(path) { | ||||||
| 	return fetch((path || url()) + 'view').then(function(response) { | 	let response = await fetch((path || url()) + 'view'); | ||||||
| 		if (!response.ok) { | 	if (!response.ok) { | ||||||
| 			if (response.status == 404) { | 		if (response.status == 404) { | ||||||
| 				return null; | 			return null; | ||||||
| 			} else { | 		} else { | ||||||
| 				throw new Error(response.status + ' ' + response.statusText); | 			throw new Error(response.status + ' ' + response.statusText); | ||||||
| 			} |  | ||||||
| 		} | 		} | ||||||
| 		return response.json(); | 	} | ||||||
| 	}).then(function(json) { | 	let json = await response.json(); | ||||||
| 		if (!gEditor) { | 	gFiles = {}; | ||||||
| 			gEditor = CodeMirror.fromTextArea(document.getElementById("editor"), { | 	let isApp = false; | ||||||
| 				'theme': 'base16-dark', | 	let promises = []; | ||||||
| 				'lineNumbers': true, |  | ||||||
| 				'tabSize': 4, |  | ||||||
| 				'indentUnit': 4, |  | ||||||
| 				'indentWithTabs': true, |  | ||||||
| 				'showTrailingSpace': true, |  | ||||||
| 				'gutters': ['CodeMirror-lint-markers'], |  | ||||||
| 				'mode': {'js': 'javascript'}[(path || url()).split('.').pop()], |  | ||||||
| 				'lint': { |  | ||||||
| 					'options': { |  | ||||||
| 						esversion: 2021, |  | ||||||
| 						varstmt: true, |  | ||||||
| 					}, |  | ||||||
| 				}, |  | ||||||
| 			}); |  | ||||||
| 			gEditor.on('changes', function() { |  | ||||||
| 				updateFiles(); |  | ||||||
| 			}); |  | ||||||
| 		} |  | ||||||
| 		gFiles = {}; |  | ||||||
| 		let isApp = false; |  | ||||||
| 		let promises = []; |  | ||||||
|  |  | ||||||
| 		if (json && json['type'] == 'tildefriends-app') { | 	if (json && json['type'] == 'tildefriends-app') { | ||||||
| 			isApp = true; | 		isApp = true; | ||||||
| 			Object.keys(json['files']).forEach(function(name) { | 		Object.keys(json['files']).forEach(function(name) { | ||||||
| 				gFiles[name] = {}; | 			gFiles[name] = {}; | ||||||
| 				promises.push(loadFile(name, json['files'][name])); | 			promises.push(loadFile(name, json['files'][name])); | ||||||
| 			}); | 		}); | ||||||
| 			if (Object.keys(json['files']).length == 0) { | 		if (Object.keys(json['files']).length == 0) { | ||||||
| 				document.getElementById("editPane").style.display = 'flex'; |  | ||||||
| 			} |  | ||||||
| 			gApp = json; |  | ||||||
| 			gApp.emoji = gApp.emoji || '📦'; |  | ||||||
| 			document.getElementById('icon').innerHTML = gApp.emoji; |  | ||||||
| 		} |  | ||||||
| 		if (!isApp) { |  | ||||||
| 			document.getElementById("editPane").style.display = 'flex'; | 			document.getElementById("editPane").style.display = 'flex'; | ||||||
| 			let text = '// New script.\n'; |  | ||||||
| 			gCurrentFile = 'app.js'; |  | ||||||
| 			gFiles[gCurrentFile] = { |  | ||||||
| 				doc: new CodeMirror.Doc(text, guessMode(gCurrentFile)), |  | ||||||
| 			}; |  | ||||||
| 			openFile(gCurrentFile); |  | ||||||
| 		} | 		} | ||||||
| 		return Promise.all(promises); | 		gApp = json; | ||||||
| 	}); | 		gApp.emoji = gApp.emoji || '📦'; | ||||||
|  | 		document.getElementById('icon').innerHTML = gApp.emoji; | ||||||
|  | 	} | ||||||
|  | 	if (!isApp) { | ||||||
|  | 		document.getElementById("editPane").style.display = 'flex'; | ||||||
|  | 		let text = '// New script.\n'; | ||||||
|  | 		gCurrentFile = 'app.js'; | ||||||
|  | 		gFiles[gCurrentFile] = { | ||||||
|  | 			doc: cm6.EditorState.create({doc: text, extensions: cm6.extensions}), | ||||||
|  | 		}; | ||||||
|  | 		openFile(gCurrentFile); | ||||||
|  | 	} | ||||||
|  | 	return Promise.all(promises); | ||||||
| } | } | ||||||
|  |  | ||||||
| function closeEditor() { | function closeEditor() { | ||||||
| @@ -573,8 +534,8 @@ function explodePath() { | |||||||
| function save(save_to) { | function save(save_to) { | ||||||
| 	document.getElementById("save").disabled = true; | 	document.getElementById("save").disabled = true; | ||||||
| 	if (gCurrentFile) { | 	if (gCurrentFile) { | ||||||
| 		gFiles[gCurrentFile].doc = gEditor.getDoc(); | 		gFiles[gCurrentFile].doc = gEditor.state; | ||||||
| 		if (!gFiles[gCurrentFile].isNew && !gFiles[gCurrentFile].doc.isClean(gFiles[gCurrentFile].doc.changeGeneration())) { | 		if (!gFiles[gCurrentFile].isNew && !gFiles[gCurrentFile].doc.doc.toString() == gFiles[gCurrentFile].original) { | ||||||
| 			delete gFiles[gCurrentFile].buffer; | 			delete gFiles[gCurrentFile].buffer; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -592,7 +553,7 @@ function save(save_to) { | |||||||
| 	let promises = []; | 	let promises = []; | ||||||
| 	for (let name of Object.keys(gFiles)) { | 	for (let name of Object.keys(gFiles)) { | ||||||
| 		let file = gFiles[name]; | 		let file = gFiles[name]; | ||||||
| 		if (!file.isNew && file.doc.isClean(file.generation)) { | 		if (!file.isNew && file.doc.doc.toString() == file.original) { | ||||||
| 			continue; | 			continue; | ||||||
| 		} | 		} | ||||||
|  |  | ||||||
| @@ -603,7 +564,7 @@ function save(save_to) { | |||||||
| 			headers: { | 			headers: { | ||||||
| 				'Content-Type': 'application/binary', | 				'Content-Type': 'application/binary', | ||||||
| 			}, | 			}, | ||||||
| 			body: file.buffer ?? file.doc.getValue(), | 			body: file.buffer ?? file.doc.doc.toString(), | ||||||
| 		}).then(function(response) { | 		}).then(function(response) { | ||||||
| 			if (!response.ok) { | 			if (!response.ok) { | ||||||
| 				throw new Error('Saving "' + name + '": ' + response.status + ' ' + response.statusText); | 				throw new Error('Saving "' + name + '": ' + response.status + ' ' + response.statusText); | ||||||
| @@ -648,7 +609,7 @@ function save(save_to) { | |||||||
| 	}).finally(function() { | 	}).finally(function() { | ||||||
| 		document.getElementById("save").disabled = false; | 		document.getElementById("save").disabled = false; | ||||||
| 		Object.values(gFiles).forEach(function(file) { | 		Object.values(gFiles).forEach(function(file) { | ||||||
| 			file.generation = file.doc.changeGeneration(); | 			file.original = file.doc.doc.toString(); | ||||||
| 		}); | 		}); | ||||||
| 		updateFiles(); | 		updateFiles(); | ||||||
| 	}); | 	}); | ||||||
| @@ -1029,11 +990,13 @@ function connectSocket(path) { | |||||||
| } | } | ||||||
|  |  | ||||||
| function openFile(name) { | function openFile(name) { | ||||||
| 	let newDoc = (name && gFiles[name]) ? gFiles[name].doc : new CodeMirror.Doc("", guessMode(name)); | 	let newDoc = (name && gFiles[name]) ? gFiles[name].doc : cm6.EditorState.create({doc: "", extensions: cm6.extensions}); | ||||||
| 	let oldDoc = gEditor.swapDoc(newDoc); | 	let oldDoc = gEditor.state; | ||||||
|  | 	gEditor.setState(newDoc); | ||||||
|  |  | ||||||
| 	if (gFiles[gCurrentFile]) { | 	if (gFiles[gCurrentFile]) { | ||||||
| 		gFiles[gCurrentFile].doc = oldDoc; | 		gFiles[gCurrentFile].doc = oldDoc; | ||||||
| 		if (!gFiles[gCurrentFile].isNew && gFiles[gCurrentFile].doc.isClean(oldDoc.generation)) { | 		if (!gFiles[gCurrentFile].isNew && gFiles[gCurrentFile].doc.doc.toString() == oldDoc.doc.toString()) { | ||||||
| 			delete gFiles[gCurrentFile].buffer; | 			delete gFiles[gCurrentFile].buffer; | ||||||
| 		} | 		} | ||||||
| 	} | 	} | ||||||
| @@ -1046,7 +1009,7 @@ function updateFiles() { | |||||||
| 	let files = document.getElementsByTagName("tf-files-pane")[0]; | 	let files = document.getElementsByTagName("tf-files-pane")[0]; | ||||||
| 	if (files) { | 	if (files) { | ||||||
| 		files.files = Object.fromEntries(Object.keys(gFiles).map(file => [file, { | 		files.files = Object.fromEntries(Object.keys(gFiles).map(file => [file, { | ||||||
| 			clean: gFiles[file].doc.isClean(gFiles[file].generation), | 			clean: (file == gCurrentFile ? gEditor.state.doc.toString() : gFiles[file].doc.doc.toString()) == gFiles[file].original, | ||||||
| 		}])); | 		}])); | ||||||
| 		files.current = gCurrentFile; | 		files.current = gCurrentFile; | ||||||
| 	} | 	} | ||||||
| @@ -1055,7 +1018,7 @@ function updateFiles() { | |||||||
|  |  | ||||||
| function makeNewFile(name) { | function makeNewFile(name) { | ||||||
| 	gFiles[name] = { | 	gFiles[name] = { | ||||||
| 		doc: new CodeMirror.Doc("", guessMode(name)), | 		doc: cm6.EditorState.create({extensions: cm6.extensions}), | ||||||
| 		generation: -1, | 		generation: -1, | ||||||
| 	}; | 	}; | ||||||
| 	openFile(name); | 	openFile(name); | ||||||
|   | |||||||
| @@ -27,11 +27,7 @@ | |||||||
| 				</div> | 				</div> | ||||||
| 				<div class="hbox" style="height: 100%"> | 				<div class="hbox" style="height: 100%"> | ||||||
| 					<tf-files-pane></tf-files-pane> | 					<tf-files-pane></tf-files-pane> | ||||||
| 					<div id="docPane" style="display: flex; flex: 1 1 50%; flex-flow: column"> | 					<div style="display: flex; flex: 1 1 50%; flex-flow: column" id="editor"></div> | ||||||
| 						<div style="flex: 1 1 50%; position: relative"> |  | ||||||
| 							<textarea id="editor" class="main"></textarea> |  | ||||||
| 						</div> |  | ||||||
| 					</div> |  | ||||||
| 				</div> | 				</div> | ||||||
| 			</div> | 			</div> | ||||||
| 			<div id="viewPane" class="vbox" style="flex: 1 1; overflow: auto"> | 			<div id="viewPane" class="vbox" style="flex: 1 1; overflow: auto"> | ||||||
|   | |||||||
| @@ -64,14 +64,8 @@ a:active { | |||||||
| 	color: #eee8d5; | 	color: #eee8d5; | ||||||
| } | } | ||||||
|  |  | ||||||
| .CodeMirror { | .cm-editor { | ||||||
| 	height: 100%; | 	height: 100%; | ||||||
| 	padding: 0; |  | ||||||
| 	top: 0; |  | ||||||
| 	left: 0; |  | ||||||
| 	right: 0; |  | ||||||
| 	bottom: 0; |  | ||||||
| 	position: absolute; |  | ||||||
| } | } | ||||||
|  |  | ||||||
| .cm-tab { | .cm-tab { | ||||||
|   | |||||||
							
								
								
									
										1
									
								
								deps/codemirror/annotatescrollbar.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/annotatescrollbar.min.js
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| !function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],t):t(CodeMirror)}(function(t){"use strict";function e(t,e){function i(t){clearTimeout(n.doRedraw),n.doRedraw=setTimeout(function(){n.redraw()},t)}this.cm=t,this.options=e,this.buttonHeight=e.scrollButtonHeight||t.getOption("scrollButtonHeight"),this.annotations=[],this.doRedraw=this.doUpdate=null,this.div=t.getWrapperElement().appendChild(document.createElement("div")),this.div.style.cssText="position: absolute; right: 0; top: 0; z-index: 7; pointer-events: none",this.computeScale();var n=this;t.on("refresh",this.resizeHandler=function(){clearTimeout(n.doUpdate),n.doUpdate=setTimeout(function(){n.computeScale()&&i(20)},100)}),t.on("markerAdded",this.resizeHandler),t.on("markerCleared",this.resizeHandler),!1!==e.listenForChanges&&t.on("changes",this.changeHandler=function(){i(250)})}t.defineExtension("annotateScrollbar",function(t){return new e(this,t="string"==typeof t?{className:t}:t)}),t.defineOption("scrollButtonHeight",0),e.prototype.computeScale=function(){var t=this.cm,t=(t.getWrapperElement().clientHeight-t.display.barHeight-2*this.buttonHeight)/t.getScrollerElement().scrollHeight;if(t!=this.hScale)return this.hScale=t,!0},e.prototype.update=function(t){this.annotations=t,this.redraw()},e.prototype.redraw=function(t){!1!==t&&this.computeScale();var n=this.cm,e=this.hScale,i=document.createDocumentFragment(),o=this.annotations,r=n.getOption("lineWrapping"),a=r&&1.5*n.defaultTextHeight(),s=null,h=null;function l(t,e){var i;return s!=t.line&&(s=t.line,h=n.getLineHandle(t.line),(i=n.getLineHandleVisualStart(h))!=h&&(s=n.getLineNumber(i),h=i)),h.widgets&&h.widgets.length||r&&h.height>a?n.charCoords(t,"local")[e?"top":"bottom"]:n.heightAtLine(h,"local")+(e?0:h.height)}var d=n.lastLine();if(n.display.barWidth)for(var c,p=0;p<o.length;p++){var u=o[p];if(!(u.to.line>d)){for(var m,f,g=c||l(u.from,!0)*e,H=l(u.to,!1)*e;p<o.length-1&&!(o[p+1].to.line>d)&&!(H+.9<(c=l(o[p+1].from,!0)*e));)H=l((u=o[++p]).to,!1)*e;H!=g&&(m=Math.max(H-g,3),(f=i.appendChild(document.createElement("div"))).style.cssText="position: absolute; right: 0px; width: "+Math.max(n.display.barWidth-1,2)+"px; top: "+(g+this.buttonHeight)+"px; height: "+m+"px",f.className=this.options.className,u.id&&f.setAttribute("annotation-id",u.id))}}this.div.textContent="",this.div.appendChild(i)},e.prototype.clear=function(){this.cm.off("refresh",this.resizeHandler),this.cm.off("markerAdded",this.resizeHandler),this.cm.off("markerCleared",this.resizeHandler),this.changeHandler&&this.cm.off("changes",this.changeHandler),this.div.parentNode.removeChild(this.div)}}); |  | ||||||
							
								
								
									
										1
									
								
								deps/codemirror/base16-dark.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/base16-dark.min.css
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| .cm-s-base16-dark.CodeMirror{background:#151515;color:#e0e0e0}.cm-s-base16-dark div.CodeMirror-selected{background:#303030}.cm-s-base16-dark .CodeMirror-line::selection,.cm-s-base16-dark .CodeMirror-line>span::selection,.cm-s-base16-dark .CodeMirror-line>span>span::selection{background:rgba(48,48,48,.99)}.cm-s-base16-dark .CodeMirror-line::-moz-selection,.cm-s-base16-dark .CodeMirror-line>span::-moz-selection,.cm-s-base16-dark .CodeMirror-line>span>span::-moz-selection{background:rgba(48,48,48,.99)}.cm-s-base16-dark .CodeMirror-gutters{background:#151515;border-right:0}.cm-s-base16-dark .CodeMirror-guttermarker{color:#ac4142}.cm-s-base16-dark .CodeMirror-guttermarker-subtle{color:#505050}.cm-s-base16-dark .CodeMirror-linenumber{color:#505050}.cm-s-base16-dark .CodeMirror-cursor{border-left:1px solid #b0b0b0}.cm-s-base16-dark.cm-fat-cursor .CodeMirror-cursor{background-color:#8e8d8875!important}.cm-s-base16-dark .cm-animate-fat-cursor{background-color:#8e8d8875!important}.cm-s-base16-dark span.cm-comment{color:#8f5536}.cm-s-base16-dark span.cm-atom{color:#aa759f}.cm-s-base16-dark span.cm-number{color:#aa759f}.cm-s-base16-dark span.cm-attribute,.cm-s-base16-dark span.cm-property{color:#90a959}.cm-s-base16-dark span.cm-keyword{color:#ac4142}.cm-s-base16-dark span.cm-string{color:#f4bf75}.cm-s-base16-dark span.cm-variable{color:#90a959}.cm-s-base16-dark span.cm-variable-2{color:#6a9fb5}.cm-s-base16-dark span.cm-def{color:#d28445}.cm-s-base16-dark span.cm-bracket{color:#e0e0e0}.cm-s-base16-dark span.cm-tag{color:#ac4142}.cm-s-base16-dark span.cm-link{color:#aa759f}.cm-s-base16-dark span.cm-error{background:#ac4142;color:#b0b0b0}.cm-s-base16-dark .CodeMirror-activeline-background{background:#202020}.cm-s-base16-dark .CodeMirror-matchingbracket{text-decoration:underline;color:#fff!important} |  | ||||||
							
								
								
									
										1
									
								
								deps/codemirror/cm6.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/cm6.js
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								deps/codemirror/codemirror.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/codemirror.min.css
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								deps/codemirror/codemirror.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/codemirror.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								deps/codemirror/css.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/css.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								deps/codemirror/dialog.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/dialog.min.css
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| .CodeMirror-dialog{position:absolute;left:0;right:0;background:inherit;z-index:15;padding:.1em .8em;overflow:hidden;color:inherit}.CodeMirror-dialog-top{border-bottom:1px solid #eee;top:0}.CodeMirror-dialog-bottom{border-top:1px solid #eee;bottom:0}.CodeMirror-dialog input{border:none;outline:0;background:0 0;width:20em;color:inherit;font-family:monospace}.CodeMirror-dialog button{font-size:70%} |  | ||||||
							
								
								
									
										1
									
								
								deps/codemirror/dialog.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/dialog.min.js
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| !function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(s){function f(e,o,n){var e=e.getWrapperElement(),t=e.appendChild(document.createElement("div"));return t.className=n?"CodeMirror-dialog CodeMirror-dialog-bottom":"CodeMirror-dialog CodeMirror-dialog-top","string"==typeof o?t.innerHTML=o:t.appendChild(o),s.addClass(e,"dialog-opened"),t}function p(e,o){e.state.currentNotificationClose&&e.state.currentNotificationClose(),e.state.currentNotificationClose=o}s.defineExtension("openDialog",function(e,o,n){n=n||{},p(this,null);var t=f(this,e,n.bottom),i=!1,r=this;function u(e){"string"==typeof e?l.value=e:i||(i=!0,s.rmClass(t.parentNode,"dialog-opened"),t.parentNode.removeChild(t),r.focus(),n.onClose&&n.onClose(t))}var l=t.getElementsByTagName("input")[0];return l?(l.focus(),n.value&&(l.value=n.value,!1!==n.selectValueOnOpen&&l.select()),n.onInput&&s.on(l,"input",function(e){n.onInput(e,l.value,u)}),n.onKeyUp&&s.on(l,"keyup",function(e){n.onKeyUp(e,l.value,u)}),s.on(l,"keydown",function(e){n&&n.onKeyDown&&n.onKeyDown(e,l.value,u)||((27==e.keyCode||!1!==n.closeOnEnter&&13==e.keyCode)&&(l.blur(),s.e_stop(e),u()),13==e.keyCode&&o(l.value,e))}),!1!==n.closeOnBlur&&s.on(t,"focusout",function(e){null!==e.relatedTarget&&u()})):(e=t.getElementsByTagName("button")[0])&&(s.on(e,"click",function(){u(),r.focus()}),!1!==n.closeOnBlur&&s.on(e,"blur",u),e.focus()),u}),s.defineExtension("openConfirm",function(e,o,n){p(this,null);var t=f(this,e,n&&n.bottom),i=t.getElementsByTagName("button"),r=!1,u=this,l=1;function a(){r||(r=!0,s.rmClass(t.parentNode,"dialog-opened"),t.parentNode.removeChild(t),u.focus())}i[0].focus();for(var c=0;c<i.length;++c){var d=i[c];!function(o){s.on(d,"click",function(e){s.e_preventDefault(e),a(),o&&o(u)})}(o[c]),s.on(d,"blur",function(){--l,setTimeout(function(){l<=0&&a()},200)}),s.on(d,"focus",function(){++l})}}),s.defineExtension("openNotification",function(e,o){p(this,r);var n,t=f(this,e,o&&o.bottom),i=!1,e=o&&void 0!==o.duration?o.duration:5e3;function r(){i||(i=!0,clearTimeout(n),s.rmClass(t.parentNode,"dialog-opened"),t.parentNode.removeChild(t))}return s.on(t,"click",function(e){s.e_preventDefault(e),r()}),e&&(n=setTimeout(r,e)),r})}); |  | ||||||
							
								
								
									
										1
									
								
								deps/codemirror/htmlmixed.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/htmlmixed.min.js
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| !function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror"),require("../xml/xml"),require("../javascript/javascript"),require("../css/css")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../xml/xml","../javascript/javascript","../css/css"],t):t(CodeMirror)}(function(m){"use strict";var l={script:[["lang",/(javascript|babel)/i,"javascript"],["type",/^(?:text|application)\/(?:x-)?(?:java|ecma)script$|^module$|^$/i,"javascript"],["type",/./,"text/plain"],[null,null,"javascript"]],style:[["lang",/^css$/i,"css"],["type",/^(text\/)?(x-)?(stylesheet|css)$/i,"css"],["type",/./,"text/plain"],[null,null,"css"]]};var a={};function d(t,e){e=t.match(a[t=e]||(a[t]=new RegExp("\\s+"+t+"\\s*=\\s*('|\")?([^'\"]+)('|\")?\\s*")));return e?/^\s*(.*?)\s*$/.exec(e[2])[1]:""}function g(t,e){return new RegExp((e?"^":"")+"</\\s*"+t+"\\s*>","i")}function o(t,e){for(var a in t)for(var n=e[a]||(e[a]=[]),l=t[a],o=l.length-1;0<=o;o--)n.unshift(l[o])}m.defineMode("htmlmixed",function(i,t){var c=m.getMode(i,{name:"xml",htmlMode:!0,multilineTagIndentFactor:t.multilineTagIndentFactor,multilineTagIndentPastTag:t.multilineTagIndentPastTag,allowMissingTagName:t.allowMissingTagName}),s={},e=t&&t.tags,a=t&&t.scriptTypes;if(o(l,s),e&&o(e,s),a)for(var n=a.length-1;0<=n;n--)s.script.unshift(["type",a[n].matches,a[n].mode]);function u(t,e){var a,o,r,n=c.token(t,e.htmlState),l=/\btag\b/.test(n);return l&&!/[<>\s\/]/.test(t.current())&&(a=e.htmlState.tagName&&e.htmlState.tagName.toLowerCase())&&s.hasOwnProperty(a)?e.inTag=a+" ":e.inTag&&l&&/>$/.test(t.current())?(a=/^([\S]+) (.*)/.exec(e.inTag),e.inTag=null,l=">"==t.current()&&function(t,e){for(var a=0;a<t.length;a++){var n=t[a];if(!n[0]||n[1].test(d(e,n[0])))return n[2]}}(s[a[1]],a[2]),l=m.getMode(i,l),o=g(a[1],!0),r=g(a[1],!1),e.token=function(t,e){return t.match(o,!1)?(e.token=u,e.localState=e.localMode=null):(a=t,n=r,t=e.localMode.token(t,e.localState),e=a.current(),-1<(l=e.search(n))?a.backUp(e.length-l):e.match(/<\/?$/)&&(a.backUp(e.length),a.match(n,!1)||a.match(e)),t);var a,n,l},e.localMode=l,e.localState=m.startState(l,c.indent(e.htmlState,"",""))):e.inTag&&(e.inTag+=t.current(),t.eol()&&(e.inTag+=" ")),n}return{startState:function(){return{token:u,inTag:null,localMode:null,localState:null,htmlState:m.startState(c)}},copyState:function(t){var e;return t.localState&&(e=m.copyState(t.localMode,t.localState)),{token:t.token,inTag:t.inTag,localMode:t.localMode,localState:e,htmlState:m.copyState(c,t.htmlState)}},token:function(t,e){return e.token(t,e)},indent:function(t,e,a){return!t.localMode||/^\s*<\//.test(e)?c.indent(t.htmlState,e,a):t.localMode.indent?t.localMode.indent(t.localState,e,a):m.Pass},innerMode:function(t){return{state:t.localState||t.htmlState,mode:t.localMode||c}}}},"xml","javascript","css"),m.defineMIME("text/html","htmlmixed")}); |  | ||||||
							
								
								
									
										1
									
								
								deps/codemirror/javascript-lint.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/javascript-lint.min.js
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| !function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(a){"use strict";a.registerHelper("lint","javascript",function(e,r){if(!window.JSHINT)return window.console&&window.console.error("Error: window.JSHINT not defined, CodeMirror JavaScript linting cannot run."),[];if(r.indent||(r.indent=1),JSHINT(e,r,r.globals),e=JSHINT.data().errors,r=[],e)for(var n=e,o=r,i=0;i<n.length;i++){var t,d,s,c=n[i];c&&(c.line<=0?window.console&&window.console.warn("Cannot display JSHint error (invalid line "+c.line+")",c):(t=c.character-1,d=1+t,c.evidence&&-1<(s=c.evidence.substring(t).search(/.\b/))&&(d+=s),s={message:c.reason,severity:c.code&&c.code.startsWith("W")?"warning":"error",from:a.Pos(c.line-1,t),to:a.Pos(c.line-1,d)},o.push(s)))}return r})}); |  | ||||||
							
								
								
									
										1
									
								
								deps/codemirror/javascript.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/javascript.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								deps/codemirror/jshint.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/jshint.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								deps/codemirror/jump-to-line.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/jump-to-line.min.js
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| !function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror"),require("../dialog/dialog")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","../dialog/dialog"],e):e(CodeMirror)}(function(e){"use strict";function l(e,o){var r=Number(o);return/^[-+]/.test(o)?e.getCursor().line+r:r-1}e.defineOption("search",{bottom:!1}),e.commands.jumpToLine=function(t){var e,o,r,s,i,n=t.getCursor();i=(i=e=t).phrase("Jump to line:")+' <input type="text" style="width: 10em" class="CodeMirror-search-field"/> <span style="color: #888" class="CodeMirror-search-hint">'+i.phrase("(Use line:column or scroll% syntax)")+"</span>",o=t.phrase("Jump to line:"),r=n.line+1+":"+n.ch,s=function(e){var o,r;e&&((o=/^\s*([\+\-]?\d+)\s*\:\s*(\d+)\s*$/.exec(e))?t.setCursor(l(t,o[1]),Number(o[2])):(o=/^\s*([\+\-]?\d+(\.\d+)?)\%\s*/.exec(e))?(r=Math.round(t.lineCount()*Number(o[1])/100),/^[-+]/.test(o[1])&&(r=n.line+r+1),t.setCursor(r-1,n.ch)):(o=/^\s*\:?\s*([\+\-]?\d+)\s*/.exec(e))&&t.setCursor(l(t,o[1]),n.ch))},e.openDialog?e.openDialog(i,s,{value:r,selectValueOnOpen:!0,bottom:e.options.search.bottom}):s(prompt(o,r))},e.keyMap.default["Alt-G"]="jumpToLine"}); |  | ||||||
							
								
								
									
										80
									
								
								deps/codemirror/lint.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										80
									
								
								deps/codemirror/lint.css
									
									
									
									
										vendored
									
									
								
							| @@ -1,80 +0,0 @@ | |||||||
| /* The lint marker gutter */ |  | ||||||
| .CodeMirror-lint-markers { |  | ||||||
|   width: 16px; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .CodeMirror-lint-tooltip { |  | ||||||
|   background-color: #ffd; |  | ||||||
|   border: 1px solid black; |  | ||||||
|   border-radius: 4px 4px 4px 4px; |  | ||||||
|   color: black; |  | ||||||
|   font-family: monospace; |  | ||||||
|   font-size: 10pt; |  | ||||||
|   overflow: hidden; |  | ||||||
|   padding: 2px 5px; |  | ||||||
|   position: fixed; |  | ||||||
|   white-space: pre; |  | ||||||
|   white-space: pre-wrap; |  | ||||||
|   z-index: 100; |  | ||||||
|   max-width: 600px; |  | ||||||
|   opacity: 0; |  | ||||||
|   transition: opacity .4s; |  | ||||||
|   -moz-transition: opacity .4s; |  | ||||||
|   -webkit-transition: opacity .4s; |  | ||||||
|   -o-transition: opacity .4s; |  | ||||||
|   -ms-transition: opacity .4s; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .CodeMirror-lint-mark { |  | ||||||
|   background-position: left bottom; |  | ||||||
|   background-repeat: repeat-x; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .CodeMirror-lint-mark-warning { |  | ||||||
|   background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJFhQXEbhTg7YAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAMklEQVQI12NkgIIvJ3QXMjAwdDN+OaEbysDA4MPAwNDNwMCwiOHLCd1zX07o6kBVGQEAKBANtobskNMAAAAASUVORK5CYII="); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .CodeMirror-lint-mark-error { |  | ||||||
|   background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAQAAAADCAYAAAC09K7GAAAAAXNSR0IArs4c6QAAAAZiS0dEAP8A/wD/oL2nkwAAAAlwSFlzAAALEwAACxMBAJqcGAAAAAd0SU1FB9sJDw4cOCW1/KIAAAAZdEVYdENvbW1lbnQAQ3JlYXRlZCB3aXRoIEdJTVBXgQ4XAAAAHElEQVQI12NggIL/DAz/GdA5/xkY/qPKMDAwAADLZwf5rvm+LQAAAABJRU5ErkJggg=="); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .CodeMirror-lint-marker { |  | ||||||
|   background-position: center center; |  | ||||||
|   background-repeat: no-repeat; |  | ||||||
|   cursor: pointer; |  | ||||||
|   display: inline-block; |  | ||||||
|   height: 16px; |  | ||||||
|   width: 16px; |  | ||||||
|   vertical-align: middle; |  | ||||||
|   position: relative; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .CodeMirror-lint-message { |  | ||||||
|   padding-left: 18px; |  | ||||||
|   background-position: top left; |  | ||||||
|   background-repeat: no-repeat; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .CodeMirror-lint-marker-warning, .CodeMirror-lint-message-warning { |  | ||||||
|   background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAANlBMVEX/uwDvrwD/uwD/uwD/uwD/uwD/uwD/uwD/uwD6twD/uwAAAADurwD2tQD7uAD+ugAAAAD/uwDhmeTRAAAADHRSTlMJ8mN1EYcbmiixgACm7WbuAAAAVklEQVR42n3PUQqAIBBFUU1LLc3u/jdbOJoW1P08DA9Gba8+YWJ6gNJoNYIBzAA2chBth5kLmG9YUoG0NHAUwFXwO9LuBQL1giCQb8gC9Oro2vp5rncCIY8L8uEx5ZkAAAAASUVORK5CYII="); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .CodeMirror-lint-marker-error, .CodeMirror-lint-message-error { |  | ||||||
|   background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQCAMAAAAoLQ9TAAAAHlBMVEW7AAC7AACxAAC7AAC7AAAAAAC4AAC5AAD///+7AAAUdclpAAAABnRSTlMXnORSiwCK0ZKSAAAATUlEQVR42mWPOQ7AQAgDuQLx/z8csYRmPRIFIwRGnosRrpamvkKi0FTIiMASR3hhKW+hAN6/tIWhu9PDWiTGNEkTtIOucA5Oyr9ckPgAWm0GPBog6v4AAAAASUVORK5CYII="); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .CodeMirror-lint-marker-multiple { |  | ||||||
|   background-image: url("data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAAAcAAAAHCAMAAADzjKfhAAAACVBMVEUAAAAAAAC/v7914kyHAAAAAXRSTlMAQObYZgAAACNJREFUeNo1ioEJAAAIwmz/H90iFFSGJgFMe3gaLZ0od+9/AQZ0ADosbYraAAAAAElFTkSuQmCC"); |  | ||||||
|   background-repeat: no-repeat; |  | ||||||
|   background-position: right bottom; |  | ||||||
|   width: 100%; height: 100%; |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .CodeMirror-lint-line-error { |  | ||||||
|   background-color: rgba(183, 76, 81, 0.08); |  | ||||||
| } |  | ||||||
|  |  | ||||||
| .CodeMirror-lint-line-warning { |  | ||||||
|   background-color: rgba(255, 211, 0, 0.1); |  | ||||||
| } |  | ||||||
|  |  | ||||||
							
								
								
									
										292
									
								
								deps/codemirror/lint.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										292
									
								
								deps/codemirror/lint.js
									
									
									
									
										vendored
									
									
								
							| @@ -1,292 +0,0 @@ | |||||||
| // CodeMirror, copyright (c) by Marijn Haverbeke and others |  | ||||||
| // Distributed under an MIT license: https://codemirror.net/5/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) { |  | ||||||
|   "use strict"; |  | ||||||
|   var GUTTER_ID = "CodeMirror-lint-markers"; |  | ||||||
|   var LINT_LINE_ID = "CodeMirror-lint-line-"; |  | ||||||
|  |  | ||||||
|   function showTooltip(cm, e, content) { |  | ||||||
|     var tt = document.createElement("div"); |  | ||||||
|     tt.className = "CodeMirror-lint-tooltip cm-s-" + cm.options.theme; |  | ||||||
|     tt.appendChild(content.cloneNode(true)); |  | ||||||
|     if (cm.state.lint.options.selfContain) |  | ||||||
|       cm.getWrapperElement().appendChild(tt); |  | ||||||
|     else |  | ||||||
|       document.body.appendChild(tt); |  | ||||||
|  |  | ||||||
|     function position(e) { |  | ||||||
|       if (!tt.parentNode) return CodeMirror.off(document, "mousemove", position); |  | ||||||
|       tt.style.top = Math.max(0, e.clientY - tt.offsetHeight - 5) + "px"; |  | ||||||
|       tt.style.left = (e.clientX + 5) + "px"; |  | ||||||
|     } |  | ||||||
|     CodeMirror.on(document, "mousemove", position); |  | ||||||
|     position(e); |  | ||||||
|     if (tt.style.opacity != null) tt.style.opacity = 1; |  | ||||||
|     return tt; |  | ||||||
|   } |  | ||||||
|   function rm(elt) { |  | ||||||
|     if (elt.parentNode) elt.parentNode.removeChild(elt); |  | ||||||
|   } |  | ||||||
|   function hideTooltip(tt) { |  | ||||||
|     if (!tt.parentNode) return; |  | ||||||
|     if (tt.style.opacity == null) rm(tt); |  | ||||||
|     tt.style.opacity = 0; |  | ||||||
|     setTimeout(function() { rm(tt); }, 600); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function showTooltipFor(cm, e, content, node) { |  | ||||||
|     var tooltip = showTooltip(cm, e, content); |  | ||||||
|     function hide() { |  | ||||||
|       CodeMirror.off(node, "mouseout", hide); |  | ||||||
|       if (tooltip) { hideTooltip(tooltip); tooltip = null; } |  | ||||||
|     } |  | ||||||
|     var poll = setInterval(function() { |  | ||||||
|       if (tooltip) for (var n = node;; n = n.parentNode) { |  | ||||||
|         if (n && n.nodeType == 11) n = n.host; |  | ||||||
|         if (n == document.body) return; |  | ||||||
|         if (!n) { hide(); break; } |  | ||||||
|       } |  | ||||||
|       if (!tooltip) return clearInterval(poll); |  | ||||||
|     }, 400); |  | ||||||
|     CodeMirror.on(node, "mouseout", hide); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function LintState(cm, conf, hasGutter) { |  | ||||||
|     this.marked = []; |  | ||||||
|     if (conf instanceof Function) conf = {getAnnotations: conf}; |  | ||||||
|     if (!conf || conf === true) conf = {}; |  | ||||||
|     this.options = {}; |  | ||||||
|     this.linterOptions = conf.options || {}; |  | ||||||
|     for (var prop in defaults) this.options[prop] = defaults[prop]; |  | ||||||
|     for (var prop in conf) { |  | ||||||
|       if (defaults.hasOwnProperty(prop)) { |  | ||||||
|         if (conf[prop] != null) this.options[prop] = conf[prop]; |  | ||||||
|       } else if (!conf.options) { |  | ||||||
|         this.linterOptions[prop] = conf[prop]; |  | ||||||
|       } |  | ||||||
|     } |  | ||||||
|     this.timeout = null; |  | ||||||
|     this.hasGutter = hasGutter; |  | ||||||
|     this.onMouseOver = function(e) { onMouseOver(cm, e); }; |  | ||||||
|     this.waitingFor = 0 |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   var defaults = { |  | ||||||
|     highlightLines: false, |  | ||||||
|     tooltips: true, |  | ||||||
|     delay: 500, |  | ||||||
|     lintOnChange: true, |  | ||||||
|     getAnnotations: null, |  | ||||||
|     async: false, |  | ||||||
|     selfContain: null, |  | ||||||
|     formatAnnotation: null, |  | ||||||
|     onUpdateLinting: null |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function clearMarks(cm) { |  | ||||||
|     var state = cm.state.lint; |  | ||||||
|     if (state.hasGutter) cm.clearGutter(GUTTER_ID); |  | ||||||
|     if (state.options.highlightLines) clearErrorLines(cm); |  | ||||||
|     for (var i = 0; i < state.marked.length; ++i) |  | ||||||
|       state.marked[i].clear(); |  | ||||||
|     state.marked.length = 0; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function clearErrorLines(cm) { |  | ||||||
|     cm.eachLine(function(line) { |  | ||||||
|       var has = line.wrapClass && /\bCodeMirror-lint-line-\w+\b/.exec(line.wrapClass); |  | ||||||
|       if (has) cm.removeLineClass(line, "wrap", has[0]); |  | ||||||
|     }) |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function makeMarker(cm, labels, severity, multiple, tooltips) { |  | ||||||
|     var marker = document.createElement("div"), inner = marker; |  | ||||||
|     marker.className = "CodeMirror-lint-marker CodeMirror-lint-marker-" + severity; |  | ||||||
|     if (multiple) { |  | ||||||
|       inner = marker.appendChild(document.createElement("div")); |  | ||||||
|       inner.className = "CodeMirror-lint-marker CodeMirror-lint-marker-multiple"; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (tooltips != false) CodeMirror.on(inner, "mouseover", function(e) { |  | ||||||
|       showTooltipFor(cm, e, labels, inner); |  | ||||||
|     }); |  | ||||||
|  |  | ||||||
|     return marker; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function getMaxSeverity(a, b) { |  | ||||||
|     if (a == "error") return a; |  | ||||||
|     else return b; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function groupByLine(annotations) { |  | ||||||
|     var lines = []; |  | ||||||
|     for (var i = 0; i < annotations.length; ++i) { |  | ||||||
|       var ann = annotations[i], line = ann.from.line; |  | ||||||
|       (lines[line] || (lines[line] = [])).push(ann); |  | ||||||
|     } |  | ||||||
|     return lines; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function annotationTooltip(ann) { |  | ||||||
|     var severity = ann.severity; |  | ||||||
|     if (!severity) severity = "error"; |  | ||||||
|     var tip = document.createElement("div"); |  | ||||||
|     tip.className = "CodeMirror-lint-message CodeMirror-lint-message-" + severity; |  | ||||||
|     if (typeof ann.messageHTML != 'undefined') { |  | ||||||
|       tip.innerHTML = ann.messageHTML; |  | ||||||
|     } else { |  | ||||||
|       tip.appendChild(document.createTextNode(ann.message)); |  | ||||||
|     } |  | ||||||
|     return tip; |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function lintAsync(cm, getAnnotations) { |  | ||||||
|     var state = cm.state.lint |  | ||||||
|     var id = ++state.waitingFor |  | ||||||
|     function abort() { |  | ||||||
|       id = -1 |  | ||||||
|       cm.off("change", abort) |  | ||||||
|     } |  | ||||||
|     cm.on("change", abort) |  | ||||||
|     getAnnotations(cm.getValue(), function(annotations, arg2) { |  | ||||||
|       cm.off("change", abort) |  | ||||||
|       if (state.waitingFor != id) return |  | ||||||
|       if (arg2 && annotations instanceof CodeMirror) annotations = arg2 |  | ||||||
|       cm.operation(function() {updateLinting(cm, annotations)}) |  | ||||||
|     }, state.linterOptions, cm); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function startLinting(cm) { |  | ||||||
|     var state = cm.state.lint; |  | ||||||
|     if (!state) return; |  | ||||||
|     var options = state.options; |  | ||||||
|     /* |  | ||||||
|      * Passing rules in `options` property prevents JSHint (and other linters) from complaining |  | ||||||
|      * about unrecognized rules like `onUpdateLinting`, `delay`, `lintOnChange`, etc. |  | ||||||
|      */ |  | ||||||
|     var getAnnotations = options.getAnnotations || cm.getHelper(CodeMirror.Pos(0, 0), "lint"); |  | ||||||
|     if (!getAnnotations) return; |  | ||||||
|     if (options.async || getAnnotations.async) { |  | ||||||
|       lintAsync(cm, getAnnotations) |  | ||||||
|     } else { |  | ||||||
|       var annotations = getAnnotations(cm.getValue(), state.linterOptions, cm); |  | ||||||
|       if (!annotations) return; |  | ||||||
|       if (annotations.then) annotations.then(function(issues) { |  | ||||||
|         cm.operation(function() {updateLinting(cm, issues)}) |  | ||||||
|       }); |  | ||||||
|       else cm.operation(function() {updateLinting(cm, annotations)}) |  | ||||||
|     } |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function updateLinting(cm, annotationsNotSorted) { |  | ||||||
|     var state = cm.state.lint; |  | ||||||
|     if (!state) return; |  | ||||||
|     var options = state.options; |  | ||||||
|     clearMarks(cm); |  | ||||||
|  |  | ||||||
|     var annotations = groupByLine(annotationsNotSorted); |  | ||||||
|  |  | ||||||
|     for (var line = 0; line < annotations.length; ++line) { |  | ||||||
|       var anns = annotations[line]; |  | ||||||
|       if (!anns) continue; |  | ||||||
|  |  | ||||||
|       // filter out duplicate messages |  | ||||||
|       var message = []; |  | ||||||
|       anns = anns.filter(function(item) { return message.indexOf(item.message) > -1 ? false : message.push(item.message) }); |  | ||||||
|  |  | ||||||
|       var maxSeverity = null; |  | ||||||
|       var tipLabel = state.hasGutter && document.createDocumentFragment(); |  | ||||||
|  |  | ||||||
|       for (var i = 0; i < anns.length; ++i) { |  | ||||||
|         var ann = anns[i]; |  | ||||||
|         var severity = ann.severity; |  | ||||||
|         if (!severity) severity = "error"; |  | ||||||
|         maxSeverity = getMaxSeverity(maxSeverity, severity); |  | ||||||
|  |  | ||||||
|         if (options.formatAnnotation) ann = options.formatAnnotation(ann); |  | ||||||
|         if (state.hasGutter) tipLabel.appendChild(annotationTooltip(ann)); |  | ||||||
|  |  | ||||||
|         if (ann.to) state.marked.push(cm.markText(ann.from, ann.to, { |  | ||||||
|           className: "CodeMirror-lint-mark CodeMirror-lint-mark-" + severity, |  | ||||||
|           __annotation: ann |  | ||||||
|         })); |  | ||||||
|       } |  | ||||||
|       // use original annotations[line] to show multiple messages |  | ||||||
|       if (state.hasGutter) |  | ||||||
|         cm.setGutterMarker(line, GUTTER_ID, makeMarker(cm, tipLabel, maxSeverity, annotations[line].length > 1, |  | ||||||
|                                                        options.tooltips)); |  | ||||||
|  |  | ||||||
|       if (options.highlightLines) |  | ||||||
|         cm.addLineClass(line, "wrap", LINT_LINE_ID + maxSeverity); |  | ||||||
|     } |  | ||||||
|     if (options.onUpdateLinting) options.onUpdateLinting(annotationsNotSorted, annotations, cm); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function onChange(cm) { |  | ||||||
|     var state = cm.state.lint; |  | ||||||
|     if (!state) return; |  | ||||||
|     clearTimeout(state.timeout); |  | ||||||
|     state.timeout = setTimeout(function(){startLinting(cm);}, state.options.delay); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function popupTooltips(cm, annotations, e) { |  | ||||||
|     var target = e.target || e.srcElement; |  | ||||||
|     var tooltip = document.createDocumentFragment(); |  | ||||||
|     for (var i = 0; i < annotations.length; i++) { |  | ||||||
|       var ann = annotations[i]; |  | ||||||
|       tooltip.appendChild(annotationTooltip(ann)); |  | ||||||
|     } |  | ||||||
|     showTooltipFor(cm, e, tooltip, target); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   function onMouseOver(cm, e) { |  | ||||||
|     var target = e.target || e.srcElement; |  | ||||||
|     if (!/\bCodeMirror-lint-mark-/.test(target.className)) return; |  | ||||||
|     var box = target.getBoundingClientRect(), x = (box.left + box.right) / 2, y = (box.top + box.bottom) / 2; |  | ||||||
|     var spans = cm.findMarksAt(cm.coordsChar({left: x, top: y}, "client")); |  | ||||||
|  |  | ||||||
|     var annotations = []; |  | ||||||
|     for (var i = 0; i < spans.length; ++i) { |  | ||||||
|       var ann = spans[i].__annotation; |  | ||||||
|       if (ann) annotations.push(ann); |  | ||||||
|     } |  | ||||||
|     if (annotations.length) popupTooltips(cm, annotations, e); |  | ||||||
|   } |  | ||||||
|  |  | ||||||
|   CodeMirror.defineOption("lint", false, function(cm, val, old) { |  | ||||||
|     if (old && old != CodeMirror.Init) { |  | ||||||
|       clearMarks(cm); |  | ||||||
|       if (cm.state.lint.options.lintOnChange !== false) |  | ||||||
|         cm.off("change", onChange); |  | ||||||
|       CodeMirror.off(cm.getWrapperElement(), "mouseover", cm.state.lint.onMouseOver); |  | ||||||
|       clearTimeout(cm.state.lint.timeout); |  | ||||||
|       delete cm.state.lint; |  | ||||||
|     } |  | ||||||
|  |  | ||||||
|     if (val) { |  | ||||||
|       var gutters = cm.getOption("gutters"), hasLintGutter = false; |  | ||||||
|       for (var i = 0; i < gutters.length; ++i) if (gutters[i] == GUTTER_ID) hasLintGutter = true; |  | ||||||
|       var state = cm.state.lint = new LintState(cm, val, hasLintGutter); |  | ||||||
|       if (state.options.lintOnChange) |  | ||||||
|         cm.on("change", onChange); |  | ||||||
|       if (state.options.tooltips != false && state.options.tooltips != "gutter") |  | ||||||
|         CodeMirror.on(cm.getWrapperElement(), "mouseover", state.onMouseOver); |  | ||||||
|  |  | ||||||
|       startLinting(cm); |  | ||||||
|     } |  | ||||||
|   }); |  | ||||||
|  |  | ||||||
|   CodeMirror.defineExtension("performLint", function() { |  | ||||||
|     startLinting(this); |  | ||||||
|   }); |  | ||||||
| }); |  | ||||||
|  |  | ||||||
							
								
								
									
										1
									
								
								deps/codemirror/matchesonscrollbar.min.css
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/matchesonscrollbar.min.css
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| .CodeMirror-search-match{background:gold;border-top:1px solid orange;border-bottom:1px solid orange;-moz-box-sizing:border-box;box-sizing:border-box;opacity:.5} |  | ||||||
							
								
								
									
										1
									
								
								deps/codemirror/matchesonscrollbar.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/matchesonscrollbar.min.js
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| !function(t){"object"==typeof exports&&"object"==typeof module?t(require("../../lib/codemirror"),require("./searchcursor"),require("../scroll/annotatescrollbar")):"function"==typeof define&&define.amd?define(["../../lib/codemirror","./searchcursor","../scroll/annotatescrollbar"],t):t(CodeMirror)}(function(h){"use strict";function o(t,e,i,o){this.cm=t;var n,s={listenForChanges:!1};for(n in this.options=o)s[n]=o[n];s.className||(s.className="CodeMirror-search-match"),this.annotation=t.annotateScrollbar(s),this.query=e,this.caseFold=i,this.gap={from:t.firstLine(),to:t.lastLine()+1},this.matches=[],this.update=null,this.findMatches(),this.annotation.update(this.matches);var a=this;t.on("change",this.changeHandler=function(t,e){a.onChange(e)})}h.defineExtension("showMatchesOnScrollbar",function(t,e,i){return new o(this,t,e,i=(i="string"==typeof i?{className:i}:i)||{})});function c(t,e,i){return t<=e?t:Math.max(e,t+i)}o.prototype.findMatches=function(){if(this.gap){for(var t=0;t<this.matches.length;t++){if((e=this.matches[t]).from.line>=this.gap.to)break;e.to.line>=this.gap.from&&this.matches.splice(t--,1)}for(var e,i=this.cm.getSearchCursor(this.query,h.Pos(this.gap.from,0),{caseFold:this.caseFold,multiline:this.options.multiline}),o=this.options&&this.options.maxMatches||1e3;i.findNext();){if((e={from:i.from(),to:i.to()}).from.line>=this.gap.to)break;if(this.matches.splice(t++,0,e),this.matches.length>o)break}this.gap=null}},o.prototype.onChange=function(t){var e=t.from.line,i=h.changeEnd(t).line,o=i-t.to.line;if(this.gap?(this.gap.from=Math.min(c(this.gap.from,e,o),t.from.line),this.gap.to=Math.max(c(this.gap.to,e,o),t.from.line)):this.gap={from:t.from.line,to:i+1},o)for(var n=0;n<this.matches.length;n++){var s=this.matches[n],a=c(s.from.line,e,o),a=(a!=s.from.line&&(s.from=h.Pos(a,s.from.ch)),c(s.to.line,e,o));a!=s.to.line&&(s.to=h.Pos(a,s.to.ch))}clearTimeout(this.update);var r=this;this.update=setTimeout(function(){r.updateAfterChange()},250)},o.prototype.updateAfterChange=function(){this.findMatches(),this.annotation.update(this.matches)},o.prototype.clear=function(){this.cm.off("change",this.changeHandler),this.annotation.clear()}}); |  | ||||||
							
								
								
									
										1
									
								
								deps/codemirror/search.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/search.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								deps/codemirror/searchcursor.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/searchcursor.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										1
									
								
								deps/codemirror/trailingspace.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/trailingspace.min.js
									
									
									
									
										vendored
									
									
								
							| @@ -1 +0,0 @@ | |||||||
| !function(e){"object"==typeof exports&&"object"==typeof module?e(require("../../lib/codemirror")):"function"==typeof define&&define.amd?define(["../../lib/codemirror"],e):e(CodeMirror)}(function(o){o.defineOption("showTrailingSpace",!1,function(e,i,n){(n=n==o.Init?!1:n)&&!i?e.removeOverlay("trailingspace"):!n&&i&&e.addOverlay({token:function(e){for(var i=e.string.length,n=i;n&&/\s/.test(e.string.charAt(n-1));--n);return n>e.pos?(e.pos=n,null):(e.pos=i,"trailingspace")},name:"trailingspace"})})}); |  | ||||||
							
								
								
									
										22
									
								
								deps/codemirror/update.sh
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										22
									
								
								deps/codemirror/update.sh
									
									
									
									
										vendored
									
									
								
							| @@ -1,22 +0,0 @@ | |||||||
| LINKS=" |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/addon/dialog/dialog.min.css |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/addon/dialog/dialog.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/addon/edit/trailingspace.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/addon/lint/javascript-lint.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/addon/scroll/annotatescrollbar.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/addon/search/matchesonscrollbar.min.css |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/addon/search/matchesonscrollbar.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/addon/search/search.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/addon/search/searchcursor.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/codemirror.min.css |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/codemirror.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/mode/css/css.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/mode/htmlmixed/htmlmixed.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/mode/javascript/javascript.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/mode/xml/xml.min.js |  | ||||||
| 	https://cdnjs.cloudflare.com/ajax/libs/codemirror/5.65.16/theme/base16-dark.min.css |  | ||||||
| " |  | ||||||
|  |  | ||||||
| for link in $LINKS; do |  | ||||||
| 	wget $link -O `basename $link` |  | ||||||
| done |  | ||||||
							
								
								
									
										1
									
								
								deps/codemirror/xml.min.js
									
									
									
									
										vendored
									
									
								
							
							
						
						
									
										1
									
								
								deps/codemirror/xml.min.js
									
									
									
									
										vendored
									
									
								
							
										
											
												File diff suppressed because one or more lines are too long
											
										
									
								
							
							
								
								
									
										66
									
								
								deps/codemirror_src/editor.mjs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										66
									
								
								deps/codemirror_src/editor.mjs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,66 @@ | |||||||
|  | import {EditorState} from "@codemirror/state" | ||||||
|  | import {EditorView} from '@codemirror/view'; | ||||||
|  | import {javascript} from "@codemirror/lang-javascript" | ||||||
|  | import {html} from "@codemirror/lang-html" | ||||||
|  | import {css} from "@codemirror/lang-css" | ||||||
|  | import {search} from "@codemirror/search" | ||||||
|  | import {oneDark} from "@codemirror/theme-one-dark" | ||||||
|  | import {lineNumbers, highlightActiveLineGutter, highlightSpecialChars, drawSelection, dropCursor, rectangularSelection, crosshairCursor, highlightActiveLine, keymap} from '@codemirror/view'; | ||||||
|  | import {foldGutter, indentOnInput, syntaxHighlighting, defaultHighlightStyle, bracketMatching, foldKeymap} from '@codemirror/language'; | ||||||
|  | import {history, defaultKeymap, historyKeymap} from '@codemirror/commands'; | ||||||
|  | import {highlightSelectionMatches, searchKeymap} from '@codemirror/search'; | ||||||
|  | import {autocompletion, closeBracketsKeymap, completionKeymap} from '@codemirror/autocomplete'; | ||||||
|  | import {lintKeymap} from '@codemirror/lint'; | ||||||
|  |  | ||||||
|  | let updateListenerExtension = EditorView.updateListener.of((update) => { | ||||||
|  | 	if (update.docChanged && update.view.onDocChange) { | ||||||
|  | 		update.view.onDocChange(); | ||||||
|  | 	} | ||||||
|  | }); | ||||||
|  |  | ||||||
|  | const extensions = [ | ||||||
|  | 	lineNumbers(), | ||||||
|  | 	highlightActiveLineGutter(), | ||||||
|  | 	highlightSpecialChars(), | ||||||
|  | 	history(), | ||||||
|  | 	foldGutter(), | ||||||
|  | 	drawSelection(), | ||||||
|  | 	dropCursor(), | ||||||
|  | 	EditorState.allowMultipleSelections.of(true), | ||||||
|  | 	indentOnInput(), | ||||||
|  | 	syntaxHighlighting(defaultHighlightStyle, { fallback: true }), | ||||||
|  | 	bracketMatching(), | ||||||
|  | 	autocompletion(), | ||||||
|  | 	rectangularSelection(), | ||||||
|  | 	crosshairCursor(), | ||||||
|  | 	highlightActiveLine(), | ||||||
|  | 	highlightSelectionMatches(), | ||||||
|  | 	keymap.of([ | ||||||
|  | 		...defaultKeymap, | ||||||
|  | 		...searchKeymap, | ||||||
|  | 		...historyKeymap, | ||||||
|  | 		...foldKeymap, | ||||||
|  | 		...completionKeymap, | ||||||
|  | 		...lintKeymap | ||||||
|  | 	]), | ||||||
|  | 	javascript(), | ||||||
|  | 	html(), | ||||||
|  | 	css(), | ||||||
|  | 	search(), | ||||||
|  | 	oneDark, | ||||||
|  | 	updateListenerExtension, | ||||||
|  | ]; | ||||||
|  |  | ||||||
|  | function TildeFriendsEditorView(parent) { | ||||||
|  | 	return new EditorView({ | ||||||
|  | 		extensions: extensions, | ||||||
|  | 		parent: parent, | ||||||
|  | 	}); | ||||||
|  | }; | ||||||
|  |  | ||||||
|  | export { | ||||||
|  | 	TildeFriendsEditorView, | ||||||
|  | 	EditorState, | ||||||
|  | 	EditorView, | ||||||
|  | 	extensions, | ||||||
|  | }; | ||||||
							
								
								
									
										15
									
								
								deps/codemirror_src/package.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										15
									
								
								deps/codemirror_src/package.json
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,15 @@ | |||||||
|  | { | ||||||
|  |   "dependencies": { | ||||||
|  |     "@codemirror/lang-css": "^6.2.1", | ||||||
|  |     "@codemirror/lang-html": "^6.4.7", | ||||||
|  |     "@codemirror/lang-javascript": "^6.2.1", | ||||||
|  |     "@codemirror/lang-json": "^6.0.1", | ||||||
|  |     "@codemirror/theme-one-dark": "^6.1.2", | ||||||
|  |     "@rollup/plugin-node-resolve": "^15.2.3", | ||||||
|  |     "codemirror": "^6.0.1", | ||||||
|  |     "rollup": "^4.9.5" | ||||||
|  |   }, | ||||||
|  |   "devDependencies": { | ||||||
|  |     "@rollup/plugin-terser": "^0.4.4" | ||||||
|  |   } | ||||||
|  | } | ||||||
							
								
								
									
										12
									
								
								deps/codemirror_src/rollup.config.mjs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							
							
						
						
									
										12
									
								
								deps/codemirror_src/rollup.config.mjs
									
									
									
									
										vendored
									
									
										Normal file
									
								
							| @@ -0,0 +1,12 @@ | |||||||
|  | import {nodeResolve} from "@rollup/plugin-node-resolve" | ||||||
|  | import terser from '@rollup/plugin-terser'; | ||||||
|  | export default { | ||||||
|  |   input: "./editor.mjs", | ||||||
|  |   output: { | ||||||
|  |     file: "../codemirror/cm6.js", | ||||||
|  |     format: "es", | ||||||
|  |     plugins: [terser()], | ||||||
|  |   }, | ||||||
|  |   plugins: [nodeResolve()] | ||||||
|  | } | ||||||
|  |  | ||||||
		Reference in New Issue
	
	Block a user