sample.js 1.2 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657
  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(
  7. 1,
  8. 1,
  9. model.getLineCount(),
  10. model.getLineMaxColumn(model.getLineCount())
  11. ),
  12. contents: [
  13. { value: '**SOURCE**' },
  14. { value: '```html\n' + res.responseText.substring(0, 200) + '\n```' }
  15. ]
  16. };
  17. });
  18. }
  19. });
  20. monaco.editor.create(document.getElementById('container'), {
  21. value: '\n\nHover over this text',
  22. language: 'mySpecialLanguage'
  23. });
  24. function xhr(url) {
  25. var req = null;
  26. return new Promise(
  27. function (c, e) {
  28. req = new XMLHttpRequest();
  29. req.onreadystatechange = function () {
  30. if (req._canceled) {
  31. return;
  32. }
  33. if (req.readyState === 4) {
  34. if ((req.status >= 200 && req.status < 300) || req.status === 1223) {
  35. c(req);
  36. } else {
  37. e(req);
  38. }
  39. req.onreadystatechange = function () {};
  40. }
  41. };
  42. req.open('GET', url, true);
  43. req.responseType = '';
  44. req.send(null);
  45. },
  46. function () {
  47. req._canceled = true;
  48. req.abort();
  49. }
  50. );
  51. }