rich-text.js 5.1 KB

123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159
  1. const { template, $, update, close } = require('./base');
  2. exports.template = template;
  3. exports.$ = $;
  4. exports.update = update;
  5. exports.close = close;
  6. const { setHidden, isMultipleInvalid, getName, createRadioGroup, setLabel } = require('../utils/prop');
  7. const fontStyles = ['isBold', 'isItalic', 'isUnderline'];
  8. exports.style = `
  9. ui-tab {
  10. flex: none;
  11. }
  12. .fontStyleParent {
  13. display:flex
  14. }
  15. .fontStyle:nth-child(2) {
  16. margin-left: 5px;
  17. margin-right: 5px;
  18. }
  19. .fontStyle {
  20. height: 20px;
  21. width: 42px;
  22. text-align: center;
  23. line-height: 20px;
  24. border: calc(var(--size-normal-border) * 1px) solid var(--color-default-border-weaker);
  25. border-radius: calc(var(--size-normal-radius) * 1px);
  26. }
  27. .fontStyle.invalid {
  28. background-color: var(--color-default-fill);
  29. }
  30. .fontStyle.select {
  31. background-color: var(--color-info-fill-important);
  32. border-color: var(--color-focus-border-emphasis);
  33. }
  34. .fontStyle.italic {
  35. font-style: italic;
  36. }
  37. .fontStyle.bold {
  38. font-weight: bold;
  39. }
  40. .fontStyle.underline {
  41. text-decoration-line: underline;
  42. }
  43. `;
  44. exports.ready = function() {
  45. this.elements = {
  46. fontFamily: {
  47. update(element, dump) {
  48. setHidden(isMultipleInvalid(dump.useSystemFont) || !dump.useSystemFont.value, element);
  49. },
  50. },
  51. font: {
  52. update(element, dump) {
  53. setHidden(isMultipleInvalid(dump.useSystemFont) || !!dump.useSystemFont.value, element);
  54. },
  55. },
  56. horizontalAlign: {
  57. create(dump) {
  58. const prop = document.createElement('ui-prop');
  59. prop.dump = dump;
  60. const label = document.createElement('ui-label');
  61. label.setAttribute('slot', 'label');
  62. setLabel(dump, label);
  63. const content = createRadioGroup({
  64. enumList: dump.enumList,
  65. tooltip: dump.tooltip,
  66. getIconName: (elName) => {
  67. const iconName = elName.toLocaleLowerCase();
  68. if (iconName === 'center') {
  69. return `align-h-${iconName}`;
  70. }
  71. return `align-${iconName}`;
  72. },
  73. onChange: (event) => {
  74. const value = Number(event.target.value);
  75. if (Number.isFinite(value) && value !== -1) {
  76. dump.value = value;
  77. if (dump.values) {
  78. dump.values.forEach((_, index) => dump.values[index] = dump.value);
  79. }
  80. prop.dispatch('change-dump');
  81. prop.dispatch('confirm-dump');
  82. }
  83. },
  84. });
  85. prop.appendChild(label);
  86. prop.appendChild(content);
  87. return prop;
  88. },
  89. update(element, dump) {
  90. const radioGroup = element.querySelector('ui-radio-group');
  91. if (isMultipleInvalid(dump.horizontalAlign)) {
  92. radioGroup.value = -1;
  93. } else {
  94. radioGroup.value = dump.horizontalAlign.value;
  95. }
  96. },
  97. },
  98. verticalAlign: {
  99. create(dump) {
  100. const prop = document.createElement('ui-prop');
  101. prop.dump = dump;
  102. const label = document.createElement('ui-label');
  103. label.setAttribute('slot', 'label');
  104. setLabel(dump, label);
  105. const content = createRadioGroup({
  106. enumList: dump.enumList,
  107. tooltip: dump.tooltip,
  108. getIconName: (elementName) => {
  109. const iconName = elementName.toLocaleLowerCase();
  110. if (iconName === 'center') {
  111. return `align-v-${iconName}`;
  112. }
  113. return `align-${iconName}`;
  114. },
  115. onChange: (e) => {
  116. const enumVal = Number(e.target.value);
  117. if (!Number.isFinite(enumVal) || enumVal === -1) {
  118. return;
  119. }
  120. dump.value = enumVal;
  121. if (dump.values) {
  122. dump.values.forEach((_, index) => (dump.values[index] = dump.value));
  123. }
  124. prop.dispatch('change-dump');
  125. prop.dispatch('confirm-dump');
  126. },
  127. });
  128. prop.appendChild(label);
  129. prop.appendChild(content);
  130. return prop;
  131. },
  132. update(element, dump) {
  133. const radioGroup = element.querySelector('ui-radio-group');
  134. if (isMultipleInvalid(dump.verticalAlign)) {
  135. radioGroup.value = -1;
  136. } else {
  137. radioGroup.value = dump.verticalAlign.value;
  138. }
  139. },
  140. },
  141. };
  142. };