forked from forgejo/forgejo
* Cleaning up public/ and documenting js/css libs. This commit mostly addresses #1484 by moving vendor'ed plugins into a vendor/ directory and documenting their upstream source and license in vendor/librejs.html. This also proves gitea is using only open source js/css libraries which helps toward reaching #1524. * Removing unused css file. The version of this file in use is located at: vendor/plugins/highlight/github.css * Cleaned up librejs.html and added javascript header A SafeJS function was added to templates/helper.go to allow keeping comments inside of javascript. A javascript comment was added in the header of templates/base/head.tmpl to mark all non-inline source as free. The librejs.html file was updated to meet the current librejs spec. I have now verified that the librejs plugin detects most of the scripts included in gitea and suspect the non-free detections are the result of a bug in the plugin. I believe this commit is enough to meet the C0.0 requirement of #1534. * Updating SafeJS function per lint suggestion * Added VERSIONS file, per request
This commit is contained in:
parent
64b7068846
commit
a915a09e4f
1339 changed files with 813 additions and 126 deletions
68
public/vendor/plugins/codemirror/mode/smalltalk/index.html
vendored
Normal file
68
public/vendor/plugins/codemirror/mode/smalltalk/index.html
vendored
Normal file
|
@ -0,0 +1,68 @@
|
|||
<!doctype html>
|
||||
|
||||
<title>CodeMirror: Smalltalk mode</title>
|
||||
<meta charset="utf-8"/>
|
||||
<link rel=stylesheet href="../../doc/docs.css">
|
||||
|
||||
<link rel="stylesheet" href="../../lib/codemirror.css">
|
||||
<script src="../../lib/codemirror.js"></script>
|
||||
<script src="../../addon/edit/matchbrackets.js"></script>
|
||||
<script src="smalltalk.js"></script>
|
||||
<style>
|
||||
.CodeMirror {border: 2px solid #dee; border-right-width: 10px;}
|
||||
.CodeMirror-gutter {border: none; background: #dee;}
|
||||
.CodeMirror-gutter pre {color: white; font-weight: bold;}
|
||||
</style>
|
||||
<div id=nav>
|
||||
<a href="http://codemirror.net"><h1>CodeMirror</h1><img id=logo src="../../doc/logo.png"></a>
|
||||
|
||||
<ul>
|
||||
<li><a href="../../index.html">Home</a>
|
||||
<li><a href="../../doc/manual.html">Manual</a>
|
||||
<li><a href="https://github.com/codemirror/codemirror">Code</a>
|
||||
</ul>
|
||||
<ul>
|
||||
<li><a href="../index.html">Language modes</a>
|
||||
<li><a class=active href="#">Smalltalk</a>
|
||||
</ul>
|
||||
</div>
|
||||
|
||||
<article>
|
||||
<h2>Smalltalk mode</h2>
|
||||
<form><textarea id="code" name="code">
|
||||
"
|
||||
This is a test of the Smalltalk code
|
||||
"
|
||||
Seaside.WAComponent subclass: #MyCounter [
|
||||
| count |
|
||||
MyCounter class >> canBeRoot [ ^true ]
|
||||
|
||||
initialize [
|
||||
super initialize.
|
||||
count := 0.
|
||||
]
|
||||
states [ ^{ self } ]
|
||||
renderContentOn: html [
|
||||
html heading: count.
|
||||
html anchor callback: [ count := count + 1 ]; with: '++'.
|
||||
html space.
|
||||
html anchor callback: [ count := count - 1 ]; with: '--'.
|
||||
]
|
||||
]
|
||||
|
||||
MyCounter registerAsApplication: 'mycounter'
|
||||
</textarea></form>
|
||||
|
||||
<script>
|
||||
var editor = CodeMirror.fromTextArea(document.getElementById("code"), {
|
||||
lineNumbers: true,
|
||||
matchBrackets: true,
|
||||
mode: "text/x-stsrc",
|
||||
indentUnit: 4
|
||||
});
|
||||
</script>
|
||||
|
||||
<p>Simple Smalltalk mode.</p>
|
||||
|
||||
<p><strong>MIME types defined:</strong> <code>text/x-stsrc</code>.</p>
|
||||
</article>
|
168
public/vendor/plugins/codemirror/mode/smalltalk/smalltalk.js
vendored
Normal file
168
public/vendor/plugins/codemirror/mode/smalltalk/smalltalk.js
vendored
Normal file
|
@ -0,0 +1,168 @@
|
|||
// 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) {
|
||||
"use strict";
|
||||
|
||||
CodeMirror.defineMode('smalltalk', function(config) {
|
||||
|
||||
var specialChars = /[+\-\/\\*~<>=@%|&?!.,:;^]/;
|
||||
var keywords = /true|false|nil|self|super|thisContext/;
|
||||
|
||||
var Context = function(tokenizer, parent) {
|
||||
this.next = tokenizer;
|
||||
this.parent = parent;
|
||||
};
|
||||
|
||||
var Token = function(name, context, eos) {
|
||||
this.name = name;
|
||||
this.context = context;
|
||||
this.eos = eos;
|
||||
};
|
||||
|
||||
var State = function() {
|
||||
this.context = new Context(next, null);
|
||||
this.expectVariable = true;
|
||||
this.indentation = 0;
|
||||
this.userIndentationDelta = 0;
|
||||
};
|
||||
|
||||
State.prototype.userIndent = function(indentation) {
|
||||
this.userIndentationDelta = indentation > 0 ? (indentation / config.indentUnit - this.indentation) : 0;
|
||||
};
|
||||
|
||||
var next = function(stream, context, state) {
|
||||
var token = new Token(null, context, false);
|
||||
var aChar = stream.next();
|
||||
|
||||
if (aChar === '"') {
|
||||
token = nextComment(stream, new Context(nextComment, context));
|
||||
|
||||
} else if (aChar === '\'') {
|
||||
token = nextString(stream, new Context(nextString, context));
|
||||
|
||||
} else if (aChar === '#') {
|
||||
if (stream.peek() === '\'') {
|
||||
stream.next();
|
||||
token = nextSymbol(stream, new Context(nextSymbol, context));
|
||||
} else {
|
||||
if (stream.eatWhile(/[^\s.{}\[\]()]/))
|
||||
token.name = 'string-2';
|
||||
else
|
||||
token.name = 'meta';
|
||||
}
|
||||
|
||||
} else if (aChar === '$') {
|
||||
if (stream.next() === '<') {
|
||||
stream.eatWhile(/[^\s>]/);
|
||||
stream.next();
|
||||
}
|
||||
token.name = 'string-2';
|
||||
|
||||
} else if (aChar === '|' && state.expectVariable) {
|
||||
token.context = new Context(nextTemporaries, context);
|
||||
|
||||
} else if (/[\[\]{}()]/.test(aChar)) {
|
||||
token.name = 'bracket';
|
||||
token.eos = /[\[{(]/.test(aChar);
|
||||
|
||||
if (aChar === '[') {
|
||||
state.indentation++;
|
||||
} else if (aChar === ']') {
|
||||
state.indentation = Math.max(0, state.indentation - 1);
|
||||
}
|
||||
|
||||
} else if (specialChars.test(aChar)) {
|
||||
stream.eatWhile(specialChars);
|
||||
token.name = 'operator';
|
||||
token.eos = aChar !== ';'; // ; cascaded message expression
|
||||
|
||||
} else if (/\d/.test(aChar)) {
|
||||
stream.eatWhile(/[\w\d]/);
|
||||
token.name = 'number';
|
||||
|
||||
} else if (/[\w_]/.test(aChar)) {
|
||||
stream.eatWhile(/[\w\d_]/);
|
||||
token.name = state.expectVariable ? (keywords.test(stream.current()) ? 'keyword' : 'variable') : null;
|
||||
|
||||
} else {
|
||||
token.eos = state.expectVariable;
|
||||
}
|
||||
|
||||
return token;
|
||||
};
|
||||
|
||||
var nextComment = function(stream, context) {
|
||||
stream.eatWhile(/[^"]/);
|
||||
return new Token('comment', stream.eat('"') ? context.parent : context, true);
|
||||
};
|
||||
|
||||
var nextString = function(stream, context) {
|
||||
stream.eatWhile(/[^']/);
|
||||
return new Token('string', stream.eat('\'') ? context.parent : context, false);
|
||||
};
|
||||
|
||||
var nextSymbol = function(stream, context) {
|
||||
stream.eatWhile(/[^']/);
|
||||
return new Token('string-2', stream.eat('\'') ? context.parent : context, false);
|
||||
};
|
||||
|
||||
var nextTemporaries = function(stream, context) {
|
||||
var token = new Token(null, context, false);
|
||||
var aChar = stream.next();
|
||||
|
||||
if (aChar === '|') {
|
||||
token.context = context.parent;
|
||||
token.eos = true;
|
||||
|
||||
} else {
|
||||
stream.eatWhile(/[^|]/);
|
||||
token.name = 'variable';
|
||||
}
|
||||
|
||||
return token;
|
||||
};
|
||||
|
||||
return {
|
||||
startState: function() {
|
||||
return new State;
|
||||
},
|
||||
|
||||
token: function(stream, state) {
|
||||
state.userIndent(stream.indentation());
|
||||
|
||||
if (stream.eatSpace()) {
|
||||
return null;
|
||||
}
|
||||
|
||||
var token = state.context.next(stream, state.context, state);
|
||||
state.context = token.context;
|
||||
state.expectVariable = token.eos;
|
||||
|
||||
return token.name;
|
||||
},
|
||||
|
||||
blankLine: function(state) {
|
||||
state.userIndent(0);
|
||||
},
|
||||
|
||||
indent: function(state, textAfter) {
|
||||
var i = state.context.next === next && textAfter && textAfter.charAt(0) === ']' ? -1 : state.userIndentationDelta;
|
||||
return (state.indentation + i) * config.indentUnit;
|
||||
},
|
||||
|
||||
electricChars: ']'
|
||||
};
|
||||
|
||||
});
|
||||
|
||||
CodeMirror.defineMIME('text/x-stsrc', {name: 'smalltalk'});
|
||||
|
||||
});
|
Loading…
Add table
Add a link
Reference in a new issue