You cannot select more than 25 topics
Topics must start with a letter or number, can include dashes ('-') and can be up to 35 characters long.
272 lines
6.6 KiB
JavaScript
272 lines
6.6 KiB
JavaScript
9 years ago
|
/// <reference path="../node_modules/monaco-editor-core/monaco.d.ts" />
|
||
|
|
||
|
define([], function() {
|
||
|
|
||
|
var samples = [];
|
||
|
|
||
|
var modesIds = monaco.languages.getLanguages().map(function(language) { return language.id; });
|
||
|
modesIds.sort();
|
||
|
|
||
|
modesIds.forEach(function(modeId) {
|
||
|
samples.push({
|
||
|
name: 'sample - ' + modeId,
|
||
|
mimeType: modeId,
|
||
|
loadText: function() {
|
||
|
return xhr('samples/sample.' + modeId + '.txt').then(function(xhrResponse) {
|
||
|
return xhrResponse.responseText;
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
});
|
||
|
|
||
|
function addXHRSample(name, modelUrl, mimeType, textModifier) {
|
||
|
textModifier = textModifier || function(text) { return text; };
|
||
|
samples.push({
|
||
|
name: name,
|
||
|
mimeType: mimeType,
|
||
|
loadText: function() {
|
||
|
return xhr('samples/' + modelUrl).then(function(xhrResponse) {
|
||
|
return textModifier(xhrResponse.responseText);
|
||
|
});
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function addStringPowerXHRSample(name, modelUrl, mimeType, power) {
|
||
|
addXHRSample(name, modelUrl, mimeType, function(text) {
|
||
|
var result = text;
|
||
|
for (var i = 0; i < power; ++i) {
|
||
|
result += "\n" + result;
|
||
|
}
|
||
|
return result;
|
||
|
});
|
||
|
}
|
||
|
|
||
|
function addSample(name, mimeType, modelText) {
|
||
|
samples.push({
|
||
|
name: name,
|
||
|
mimeType: mimeType,
|
||
|
loadText: function() {
|
||
|
return monaco.Promise.as(modelText);
|
||
|
}
|
||
|
});
|
||
|
}
|
||
|
|
||
|
addXHRSample('Y___FailingJS', 'run-editor-failing-js.txt', 'text/javascript');
|
||
|
addXHRSample('Y___DefaultJS', 'run-editor-sample-js.txt', 'text/javascript');
|
||
|
addStringPowerXHRSample('Y___BigJS', 'run-editor-sample-js.txt', 'text/javascript', 11);
|
||
|
addXHRSample('Y___BigJS_msn', 'run-editor-sample-msn-js.txt', 'text/javascript');
|
||
|
addXHRSample('Y___BigCSS', 'run-editor-sample-big-css.txt', 'text/css');
|
||
|
addStringPowerXHRSample('Y___BigHTML', 'run-editor-sample-html.txt', 'text/html', 10);
|
||
|
addXHRSample('Y___Korean', 'run-editor-korean.txt', 'text/plain');
|
||
|
addXHRSample('Y___BOM.cs', 'run-editor-sample-bom-cs.txt', 'text/x-csharp');
|
||
|
addXHRSample('Z___CR.ps1', 'run-editor-sample-cr-ps1.txt', 'text/x-powershell');
|
||
|
|
||
|
addXHRSample('Z___jquery-min.js', 'run-editor-jquery-min-js.txt', 'text/javascript');
|
||
|
|
||
|
addXHRSample('Z___scrolling-strategy.js', 'run-editor-sample-js.txt', 'text/plain', function(text) {
|
||
|
var lines = text.split('\n');
|
||
|
var newLines = lines.slice(0);
|
||
|
|
||
|
var problemIsAt = 80733 + 5;
|
||
|
while (newLines.length < problemIsAt) {
|
||
|
newLines = newLines.concat(lines);
|
||
|
}
|
||
|
|
||
|
newLines = newLines.slice(0, problemIsAt);
|
||
|
return newLines.join('\n');
|
||
|
});
|
||
|
|
||
|
addSample('Z___special-chars', 'text/plain', [
|
||
|
"// single line \u000D comment", // Carriage return
|
||
|
"// single line \u2028 comment", // Line separator
|
||
|
"// single line \u2029 comment" // Paragraph separator
|
||
|
].join('\n'));
|
||
|
|
||
|
// http://www.cl.cam.ac.uk/~mgk25/ucs/examples/UTF-8-test.txt
|
||
|
addSample('Z___invalid-unicode', 'text/plain', [
|
||
|
'\uFFFE\uFFFF',
|
||
|
'\uD800\uDC00',
|
||
|
'\uD800\uDFFF',
|
||
|
'\uDB7F\uDC00',
|
||
|
'\uDB7F\uDFFF',
|
||
|
'\uDB80\uDC00',
|
||
|
'\uDB80\uDFFF',
|
||
|
'\uDBFF\uDC00',
|
||
|
'\uDBFF\uDFFF'
|
||
|
].join('\n'));
|
||
|
|
||
|
addSample('Z___easy-debug.js', 'text/plain', (function() {
|
||
|
var myValue = "Line1";
|
||
|
for (var i = 2; i < 50; i++) {
|
||
|
myValue += "\nLine" + i;
|
||
|
}
|
||
|
return myValue;
|
||
|
})());
|
||
|
|
||
|
addSample('Z___copy-paste.txt', 'text/plain', (function() {
|
||
|
var i = 0, sampleCopyPasteLine = '';
|
||
|
while (sampleCopyPasteLine.length < 1000) {
|
||
|
i++;
|
||
|
sampleCopyPasteLine += i;
|
||
|
}
|
||
|
var sampleCopyPaste = sampleCopyPasteLine;
|
||
|
for (i = 1; i <= 600; i++) {
|
||
|
sampleCopyPaste += '\n' + sampleCopyPasteLine;
|
||
|
}
|
||
|
return sampleCopyPaste;
|
||
|
})());
|
||
|
|
||
|
addSample('Z___xss', 'text/html', (function() {
|
||
|
var xssRepresentations = [
|
||
|
'<',
|
||
|
'BAD\u2028CHARACTER',
|
||
|
'%3C',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'<',
|
||
|
'\x3c',
|
||
|
'\x3C',
|
||
|
'\u003c',
|
||
|
'\u003C'
|
||
|
];
|
||
|
return xssRepresentations.length + ':\n' + xssRepresentations.join('\n');
|
||
|
})());
|
||
|
|
||
|
addSample('Z___many-links.js', 'text/javascript', (function() {
|
||
|
var result = "bla bla a url: https://microsoft.com some more bla bla";
|
||
|
for (var i = 0; i < 13; ++i) {
|
||
|
result += "\n" + result;
|
||
|
}
|
||
|
return "/*" + result + "\n*/";
|
||
|
})());
|
||
|
|
||
|
addSample('Z___line-separators.js', 'text/javascript', (function() {
|
||
|
return [
|
||
|
"var x = '1'; // And\u2028 here I have a nice comment.",
|
||
|
"",
|
||
|
"var y = x + ' +\u2028 2 = res';",
|
||
|
"",
|
||
|
"y.replace(/re\u2028s/gi, '3');"
|
||
|
].join('\n');
|
||
|
})());
|
||
|
|
||
|
addXHRSample('Z___intellisense.js', 'run-editor-intellisense-js.txt', 'text/javascript');
|
||
|
|
||
|
addSample('Z___recursion attack', 'text/html', (function() {
|
||
|
var arr = [];
|
||
|
for (var i = 0; i < 10000; i++) {
|
||
|
arr.push('\n<script type="text/html">');
|
||
|
}
|
||
|
return arr.length + ':\n' + arr.join('');
|
||
|
})());
|
||
|
|
||
|
addSample('empty', 'text/plain', '');
|
||
|
|
||
|
addXHRSample('Z___dynamic', 'run-editor-sample-dynamic.txt', {
|
||
|
name: 'custom.1.',
|
||
|
tokenizer: {
|
||
|
root: [
|
||
|
[/\[error.*/, "custom-error"],
|
||
|
[/\[notice.*/, "custom-notice"],
|
||
|
[/\[info.*/, "custom-info"],
|
||
|
[/\[[a-zA-Z 0-9:]+\]/, "custom-date"],
|
||
|
],
|
||
|
}
|
||
|
});
|
||
|
|
||
|
addXHRSample('Z___f12___css','run-editor-sample-f12-css.txt','text/css');
|
||
|
|
||
|
return samples;
|
||
|
|
||
|
function xhr(url) {
|
||
|
var req = null;
|
||
|
return new monaco.Promise(function(c,e,p) {
|
||
|
req = new XMLHttpRequest();
|
||
|
req.onreadystatechange = function () {
|
||
|
if (req._canceled) { return; }
|
||
|
|
||
|
if (req.readyState === 4) {
|
||
|
if ((req.status >= 200 && req.status < 300) || req.status === 1223) {
|
||
|
c(req);
|
||
|
} else {
|
||
|
e(req);
|
||
|
}
|
||
|
req.onreadystatechange = function () { };
|
||
|
} else {
|
||
|
p(req);
|
||
|
}
|
||
|
};
|
||
|
|
||
|
req.open("GET", url, true );
|
||
|
req.responseType = "";
|
||
|
|
||
|
req.send(null);
|
||
|
}, function () {
|
||
|
req._canceled = true;
|
||
|
req.abort();
|
||
|
});
|
||
|
}
|
||
|
});
|