sample.js 1.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748
  1. monaco.languages.register({ id: 'mySpecialLanguage' });
  2. monaco.languages.registerHoverProvider('mySpecialLanguage', {
  3. provideHover: function (model, position) {
  4. return xhr('../playground.html').then(function (res) {
  5. return {
  6. range: new monaco.Range(1, 1, model.getLineCount(), model.getLineMaxColumn(model.getLineCount())),
  7. contents: [
  8. { value: '**SOURCE**' },
  9. { value: '```html\n' + res.responseText.substring(0, 200) + '\n```' }
  10. ]
  11. }
  12. });
  13. }
  14. });
  15. monaco.editor.create(document.getElementById("container"), {
  16. value: '\n\nHover over this text',
  17. language: 'mySpecialLanguage'
  18. });
  19. function xhr(url) {
  20. var req = null;
  21. return new Promise(function (c, e) {
  22. req = new XMLHttpRequest();
  23. req.onreadystatechange = function () {
  24. if (req._canceled) { return; }
  25. if (req.readyState === 4) {
  26. if ((req.status >= 200 && req.status < 300) || req.status === 1223) {
  27. c(req);
  28. } else {
  29. e(req);
  30. }
  31. req.onreadystatechange = function () { };
  32. }
  33. };
  34. req.open("GET", url, true);
  35. req.responseType = "";
  36. req.send(null);
  37. }, function () {
  38. req._canceled = true;
  39. req.abort();
  40. });
  41. }