asterisk.js 1.4 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566
  1. // Some files are text-like and can be tried to display
  2. // such as .atlas
  3. const textLike = ['.atlas'];
  4. const { extname } = require('path');
  5. const { TextLikeRead } = require('../utils/text-like-read.js');
  6. exports.template = /* html */`
  7. <section class="asset-asterisk">
  8. </section>`;
  9. exports.$ = {
  10. container: '.asset-asterisk',
  11. };
  12. exports.style = /* css */`
  13. .asset-asterisk {
  14. flex: 1;
  15. display: flex;
  16. flex-direction: column;
  17. /* it is necessary */
  18. height: 0px;
  19. }
  20. .asset-asterisk > ui-code {
  21. flex: 1;
  22. }
  23. `;
  24. exports.methods = {
  25. renderText() {
  26. this.textLikeRead.read(this.asset.file).then(text => {
  27. const code = document.createElement('ui-code');
  28. code.setAttribute('language', 'xml');
  29. code.textContent = text;
  30. this.$.container.innerHTML = '';
  31. this.$.container.appendChild(code);
  32. });
  33. },
  34. };
  35. exports.ready = function() {
  36. this.textLikeRead = new TextLikeRead();
  37. };
  38. exports.update = function(assetList, metaList) {
  39. this.assetList = assetList;
  40. this.metaList = metaList;
  41. this.meta = metaList[0];
  42. this.asset = assetList[0];
  43. let display = 'none';
  44. if (assetList.length === 1) {
  45. display = 'flex';
  46. }
  47. this.$.container.style.display = display;
  48. if (display === 'none') {
  49. return;
  50. }
  51. const isTextLike = textLike.includes(extname(this.asset.name));
  52. if (isTextLike) {
  53. this.renderText();
  54. }
  55. };