label-atlas.js 5.0 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. 'use strict';
  2. const { updateElementReadonly, updateElementInvalid } = require('../utils/assets');
  3. exports.template = /* html */`
  4. <section class="asset-label-atlas">
  5. <div class="content">
  6. <ui-prop ui="asset">
  7. <ui-label slot="label"
  8. tooltip="i18n:ENGINE.assets.label-atlas.SpriteFrameTip"
  9. value="i18n:ENGINE.assets.label-atlas.SpriteFrame"
  10. ></ui-label>
  11. <ui-asset slot="content" id="spriteFrame" droppable="cc.SpriteFrame"></ui-asset>
  12. </ui-prop>
  13. <ui-prop>
  14. <ui-label slot="label"
  15. tooltip="i18n:ENGINE.assets.label-atlas.ItemWidthTip"
  16. value="i18n:ENGINE.assets.label-atlas.ItemWidth"
  17. ></ui-label>
  18. <ui-num-input slot="content" id="itemWidth"
  19. preci="0"
  20. step="1"
  21. min="0"
  22. ></ui-num-input>
  23. </ui-prop>
  24. <ui-prop>
  25. <ui-label slot="label"
  26. tooltip="i18n:ENGINE.assets.label-atlas.ItemHeightTip"
  27. value="i18n:ENGINE.assets.label-atlas.ItemHeight"
  28. ></ui-label>
  29. <ui-num-input slot="content" id="itemHeight"
  30. preci="0"
  31. step="1"
  32. min="0"
  33. ></ui-num-input>
  34. </ui-prop>
  35. <ui-prop>
  36. <ui-label slot="label"
  37. tooltip="i18n:ENGINE.assets.label-atlas.StartCharTip"
  38. value="i18n:ENGINE.assets.label-atlas.StartChar"
  39. ></ui-label>
  40. <ui-input slot="content" id="startChar"></ui-input>
  41. </ui-prop>
  42. <ui-prop>
  43. <ui-label slot="label"
  44. tooltip="i18n:ENGINE.assets.label-atlas.FontSizeTip"
  45. value="i18n:ENGINE.assets.label-atlas.FontSize"
  46. ></ui-label>
  47. <ui-input slot="content" id="fontSize" disabled></ui-input>
  48. </ui-prop>
  49. </div>
  50. </section>
  51. `;
  52. exports.style = /* css */`
  53. .asset-label-atlas {
  54. padding-right: 4px;
  55. }
  56. `;
  57. exports.$ = {
  58. spriteFrame: '#spriteFrame',
  59. itemWidth: '#itemWidth',
  60. itemHeight: '#itemHeight',
  61. startChar: '#startChar',
  62. fontSize: '#fontSize',
  63. };
  64. const Elements = {
  65. spriteFrame: {
  66. ready() {
  67. this.$.spriteFrame.addEventListener('confirm', (event) => {
  68. this.change.call(this, 'spriteFrameUuid', event);
  69. this.dispatch('snapshot');
  70. });
  71. },
  72. update() {
  73. this.$.spriteFrame.value = this.meta.userData.spriteFrameUuid;
  74. updateElementInvalid.call(this, this.$.spriteFrame, 'spriteFrameUuid');
  75. updateElementReadonly.call(this, this.$.spriteFrame);
  76. },
  77. },
  78. itemWidth: {
  79. ready() {
  80. this.$.itemWidth.addEventListener('change', this.change.bind(this, 'itemWidth'));
  81. this.$.itemWidth.addEventListener('confirm', () => {
  82. this.dispatch('snapshot');
  83. });
  84. },
  85. update() {
  86. this.$.itemWidth.value = this.meta.userData.itemWidth;
  87. updateElementInvalid.call(this, this.$.itemWidth, 'itemWidth');
  88. updateElementReadonly.call(this, this.$.itemWidth);
  89. },
  90. },
  91. itemHeight: {
  92. ready() {
  93. this.$.itemHeight.addEventListener('change', this.change.bind(this, 'itemHeight'));
  94. this.$.itemHeight.addEventListener('confirm', () => {
  95. this.dispatch('snapshot');
  96. });
  97. },
  98. update() {
  99. this.$.itemHeight.value = this.meta.userData.itemHeight;
  100. updateElementInvalid.call(this, this.$.itemHeight, 'itemHeight');
  101. updateElementReadonly.call(this, this.$.itemHeight);
  102. },
  103. },
  104. startChar: {
  105. ready() {
  106. this.$.startChar.addEventListener('change', this.change.bind(this, 'startChar'));
  107. this.$.startChar.addEventListener('confirm', () => {
  108. this.dispatch('snapshot');
  109. });
  110. },
  111. update() {
  112. this.$.startChar.value = this.meta.userData.startChar;
  113. updateElementInvalid.call(this, this.$.startChar, 'startChar');
  114. updateElementReadonly.call(this, this.$.startChar);
  115. },
  116. },
  117. fontSize: {
  118. update() {
  119. this.$.fontSize.value = this.meta.userData.fontSize;
  120. updateElementReadonly.call(this, this.$.fontSize, 'fontSize');
  121. },
  122. },
  123. };
  124. exports.methods = {
  125. change(key, event) {
  126. this.metaList.forEach((meta) => {
  127. meta.userData[key] = event.target.value;
  128. });
  129. this.dispatch('change');
  130. },
  131. };
  132. exports.ready = function() {
  133. for (const key in Elements) {
  134. if (Elements[key].ready) {
  135. Elements[key].ready.call(this);
  136. }
  137. }
  138. };
  139. exports.update = function(assetList, metaList) {
  140. this.metaList = metaList;
  141. this.assetList = assetList;
  142. this.meta = metaList[0];
  143. this.asset = assetList[0];
  144. for (const key in Elements) {
  145. if (Elements[key].update) {
  146. Elements[key].update.call(this);
  147. }
  148. }
  149. };