More changelog
parent
3c875c4ac9
commit
088301bfb9
|
@ -2,6 +2,8 @@
|
|||
|
||||
## [0.8.0]
|
||||
- This release has been brewing for a while and comes with quite a number of important changes.
|
||||
- There many bugfixes and speed/memory usage improvements.
|
||||
- Now shipping TypeScript v2.1.5 in `monaco-typescript` (JS and TS language support).
|
||||
|
||||
### No longer supporting IE9 and IE10
|
||||
- we have not made the editor fail on purpose in these browsers, but we have removed IE9/IE10 targeted workarounds from our codebase;
|
||||
|
|
|
@ -0,0 +1,326 @@
|
|||
<!DOCTYPE html>
|
||||
<html>
|
||||
<head>
|
||||
<meta http-equiv="X-UA-Compatible" content="IE=edge" />
|
||||
<meta http-equiv="Content-Type" content="text/html;charset=utf-8" />
|
||||
<link rel="stylesheet" href="https://code.jquery.com/qunit/qunit-2.0.1.css">
|
||||
</head>
|
||||
<body>
|
||||
|
||||
<script src="../metadata.js"></script>
|
||||
<script src="dev-setup.js"></script>
|
||||
<script src="tokenization.js"></script>
|
||||
<script src="https://code.jquery.com/qunit/qunit-2.0.1.js"></script>
|
||||
<script>
|
||||
var GENERATE_TOKENS = false;
|
||||
var LIMIT_TO_TEST = null;//'sample - xml';
|
||||
loadEditor(function() {
|
||||
let lazyModules = [
|
||||
'vs/basic-languages/src/bat',
|
||||
'vs/basic-languages/src/coffee',
|
||||
'vs/basic-languages/src/cpp',
|
||||
'vs/basic-languages/src/csharp',
|
||||
'vs/basic-languages/src/dockerfile',
|
||||
'vs/basic-languages/src/fsharp',
|
||||
'vs/basic-languages/src/go',
|
||||
'vs/basic-languages/src/handlebars',
|
||||
'vs/basic-languages/src/html',
|
||||
'vs/basic-languages/src/ini',
|
||||
'vs/basic-languages/src/jade',
|
||||
'vs/basic-languages/src/java',
|
||||
'vs/basic-languages/src/lua',
|
||||
'vs/basic-languages/src/markdown',
|
||||
'vs/basic-languages/src/objective-c',
|
||||
'vs/basic-languages/src/postiats',
|
||||
'vs/basic-languages/src/php',
|
||||
'vs/basic-languages/src/powershell',
|
||||
'vs/basic-languages/src/python',
|
||||
'vs/basic-languages/src/r',
|
||||
'vs/basic-languages/src/razor',
|
||||
'vs/basic-languages/src/ruby',
|
||||
'vs/basic-languages/src/swift',
|
||||
'vs/basic-languages/src/sql',
|
||||
'vs/basic-languages/src/vb',
|
||||
'vs/basic-languages/src/xml',
|
||||
'vs/basic-languages/src/less',
|
||||
'vs/basic-languages/src/scss',
|
||||
'vs/basic-languages/src/css',
|
||||
'vs/basic-languages/src/yaml',
|
||||
|
||||
'vs/language/typescript/src/mode',
|
||||
'vs/language/css/cssMode',
|
||||
'vs/language/json/jsonMode',
|
||||
'vs/language/html/htmlMode'
|
||||
];
|
||||
|
||||
console.log('editor loaded');
|
||||
|
||||
require(lazyModules, function() {
|
||||
console.log('all lazy code loaded');
|
||||
|
||||
function resolveSample(sample) {
|
||||
return sample.loadText().then(function(txt) {
|
||||
return {
|
||||
name: sample.name,
|
||||
language: sample.mimeType,
|
||||
text: txt
|
||||
};
|
||||
});
|
||||
}
|
||||
|
||||
require(['./samples'], function(SAMPLES) {
|
||||
monaco.Promise.join(
|
||||
SAMPLES.map(resolveSample)
|
||||
).then(function(samples) {
|
||||
renderSamples(samples);
|
||||
});
|
||||
});
|
||||
});
|
||||
});
|
||||
|
||||
function renderSamples(samples) {
|
||||
samples = samples.filter(function(sample) {
|
||||
if (typeof sample.language !== 'string') {
|
||||
return false;
|
||||
}
|
||||
if (sample.language === 'plaintext' || sample.language === 'text/plain') {
|
||||
return false;
|
||||
}
|
||||
// return sample.name === 'sample - css';
|
||||
return /sample/.test(sample.name);
|
||||
});
|
||||
samples.sort(function(a,b) {
|
||||
if (a.language === b.language) {
|
||||
if (a.text < b.text) {
|
||||
return -1;
|
||||
}
|
||||
if (a.text > b.text) {
|
||||
return 1;
|
||||
}
|
||||
return 0;
|
||||
}
|
||||
if (a.language < b.language) {
|
||||
return -1;
|
||||
}
|
||||
return 1;
|
||||
});
|
||||
samples.forEach(renderSample);
|
||||
generateTests();
|
||||
}
|
||||
|
||||
var TEST_CASES = [];
|
||||
|
||||
function renderSample(sample, index) {
|
||||
console.log('TEST #' + index + ': ' + sample.name);
|
||||
|
||||
if (LIMIT_TO_TEST && sample.name !== LIMIT_TO_TEST) {
|
||||
TEST_CASES.push({ name: sample.name });
|
||||
return;
|
||||
}
|
||||
|
||||
var testCase = {
|
||||
name: sample.name,
|
||||
// text: sample.text,
|
||||
language: sample.language,
|
||||
result: {
|
||||
vs: extractColors(sample, 'vs'),
|
||||
vs_dark: extractColors(sample, 'vs-dark'),
|
||||
hc_black: extractColors(sample, 'hc-black'),
|
||||
}
|
||||
};
|
||||
|
||||
TEST_CASES.push(testCase);
|
||||
}
|
||||
|
||||
function extractColors(sample, theme) {
|
||||
var out = document.createElement('pre');
|
||||
var txt = document.createTextNode(sample.text);
|
||||
out.appendChild(txt);
|
||||
document.body.appendChild(out);
|
||||
monaco.editor.colorizeElement(out, {
|
||||
theme: theme,
|
||||
mimeType: sample.language
|
||||
});
|
||||
|
||||
if (GENERATE_TOKENS) {
|
||||
var tokens = monaco.editor.tokenize(sample.text || '', sample.language);
|
||||
}
|
||||
|
||||
// console.log(out);
|
||||
|
||||
var lineElement = out.firstElementChild;
|
||||
var allResult = [];
|
||||
while (lineElement) {
|
||||
// console.log(lineElement);
|
||||
var pieces = lineElement.children;
|
||||
var result = [];
|
||||
|
||||
if (GENERATE_TOKENS) {
|
||||
var lineTokens = tokens.shift();
|
||||
if (lineTokens.length > 0) {
|
||||
for (var i = 0; i < lineTokens.length - 1; i++) {
|
||||
lineTokens[i].length = lineTokens[i + 1].offset - lineTokens[i].offset;
|
||||
}
|
||||
lineTokens[lineTokens.length - 1].length = 1000000;
|
||||
}
|
||||
}
|
||||
for (var i = 0; i < pieces.length; i++) {
|
||||
var piece = pieces[i];
|
||||
|
||||
// console.log(piece);
|
||||
|
||||
var text = piece.innerText;
|
||||
|
||||
var r = window.getComputedStyle(piece);
|
||||
var color = rgbToHex(r.color);
|
||||
|
||||
// var isWhitespace = /^\s+$/.test(text);
|
||||
|
||||
// var partTokens = undefined;
|
||||
|
||||
if (GENERATE_TOKENS) {
|
||||
let partTokens = [];
|
||||
let partText = text;
|
||||
while (lineTokens.length > 0 && partText.length > 0) {
|
||||
let t = lineTokens.shift();
|
||||
partTokens.push(t);
|
||||
partText = partText.substr(t.length);
|
||||
}
|
||||
|
||||
result.push({
|
||||
text: text,
|
||||
color: color,
|
||||
tokens: partTokens
|
||||
});
|
||||
} else {
|
||||
result.push({
|
||||
text: text,
|
||||
color: color,
|
||||
});
|
||||
}
|
||||
|
||||
}
|
||||
allResult.push(result);
|
||||
|
||||
lineElement = lineElement.nextElementSibling.nextElementSibling;
|
||||
}
|
||||
|
||||
// console.log(JSON.stringify(allResult));
|
||||
|
||||
out.parentNode.removeChild(out);
|
||||
|
||||
return allResult;
|
||||
}
|
||||
|
||||
var rgbCache = {};
|
||||
function rgbToHex(rgb) {
|
||||
if (!rgbCache[rgb]) {
|
||||
var m = rgb.match(/rgb\((\d+), (\d+), (\d+)\)/);
|
||||
var r = parseInt(m[1], 10);
|
||||
var g = parseInt(m[2], 10);
|
||||
var b = parseInt(m[3], 10);
|
||||
var r = '#' + to2Hex(r) + to2Hex(g) + to2Hex(b);
|
||||
rgbCache[rgb] = r;
|
||||
}
|
||||
return rgbCache[rgb];
|
||||
}
|
||||
|
||||
function to2Hex(n) {
|
||||
var r = n.toString(16);
|
||||
if (r.length === 1) {
|
||||
return '0' + r;
|
||||
}
|
||||
return r;
|
||||
}
|
||||
|
||||
function generateTests() {
|
||||
// var ta = document.createElement('textarea');
|
||||
// ta.value = JSON.stringify(TEST_CASES, null, '\t');
|
||||
// ta.style.display = 'fixed';
|
||||
// ta.style.top = '0';
|
||||
// ta.style.left = '0';
|
||||
// document.body.appendChild(ta);
|
||||
// ta.select();
|
||||
// return;
|
||||
|
||||
for (var i = 0, len = TEST_CASES.length; i < len; i++) {
|
||||
if (LIMIT_TO_TEST && TEST_CASES[i].name !== LIMIT_TO_TEST) {
|
||||
|
||||
// if (TEST_CASES[i].name !== 'sample - html') {
|
||||
continue;
|
||||
}
|
||||
generateTest(TEST_CASES[i], EXPECTED[i]);
|
||||
}
|
||||
|
||||
QUnit.start();
|
||||
}
|
||||
|
||||
function mergeEqualColors(source) {
|
||||
// return source;
|
||||
|
||||
let result = [];
|
||||
for (let i = 0; i < source.length; i++) {
|
||||
let color = source[i].color;
|
||||
let text = source[i].text;
|
||||
if (result.length > 0 && result[result.length - 1].color === color) {
|
||||
result[result.length - 1].text += text;
|
||||
} else {
|
||||
result.push({
|
||||
color: color,
|
||||
text: text
|
||||
});
|
||||
}
|
||||
}
|
||||
return result;
|
||||
}
|
||||
|
||||
function generateTest(actual, expected) {
|
||||
['vs', 'vs_dark', 'hc_black'].forEach(function(theme) {
|
||||
// if (actual.name !== 'sample - bat') {
|
||||
// return;
|
||||
// }
|
||||
QUnit.test(actual.name + ' ' + theme, function(assert) {
|
||||
var _actual = actual.result[theme];
|
||||
var _expected = expected.result[theme];
|
||||
|
||||
for (var i = 0; i < _actual.length; i++) {
|
||||
var lineActual = mergeEqualColors(_actual[i]);
|
||||
// .slice(0);
|
||||
// for (var j = 1; j < lineActual.length; j++) {
|
||||
// if (lineActual[j-1].color === lineActual[j].color) {
|
||||
// lineActual[j-1] = {
|
||||
// color: lineActual[j-1].color,
|
||||
// text: lineActual[j-1].text + lineActual[j].text
|
||||
// };
|
||||
// lineActual.splice(j, 1);
|
||||
// j--;
|
||||
// }
|
||||
// }
|
||||
|
||||
var lineExpected = mergeEqualColors(_expected[i]);
|
||||
// .slice(0);
|
||||
// for (var j = 1; j < lineExpected.length; j++) {
|
||||
// if (lineExpected[j-1].color === lineExpected[j].color) {
|
||||
// lineExpected[j-1] = {
|
||||
// color: lineExpected[j-1].color,
|
||||
// text: lineExpected[j-1].text + lineExpected[j].text
|
||||
// };
|
||||
// // lineExpected[j-1].text += lineExpected[j].text;
|
||||
// lineExpected.splice(j, 1);
|
||||
// j--;
|
||||
// }
|
||||
// }
|
||||
|
||||
assert.deepEqual(lineActual, lineExpected, 'Line #' + (i+1));
|
||||
}
|
||||
});
|
||||
});
|
||||
}
|
||||
|
||||
QUnit.config.autostart = false;
|
||||
|
||||
</script>
|
||||
<div id="qunit"></div>
|
||||
<div id="qunit-fixture"></div>
|
||||
</body>
|
||||
</html>
|
File diff suppressed because it is too large
Load Diff
Loading…
Reference in New Issue