| 123456789101112131415161718192021222324252627282930313233343536373839404142434445464748495051525354555657585960616263646566676869707172737475767778798081828384858687888990919293949596979899100101102103104105106107108109110111112113114115116117118119120121122123124125126127128129130131132133134135136137138139140141142143144145146147148149150151152153154155156157158159160161162163164165166167168169170171172173174175176177178179180181182183184185186187188189190191192193194195196197198199200201202203204205206207208 |
- const { setTooltip, setHidden, isMultipleInvalid, createRadioGroup, setLabel } = require('../utils/prop');
- const { template, $, update, close } = require('./base');
- const fontStyles = ['isBold', 'isItalic', 'isUnderline'];
- exports.template = template;
- exports.$ = $;
- exports.update = update;
- exports.close = close;
- exports.style = /* css */`
- ui-tab {
- flex: none;
- }
- .fontStyleParent {
- display:flex
- }
- .fontStyle:nth-child(2) {
- margin-left: 5px;
- margin-right: 5px;
- }
- .fontStyle {
- height: 20px;
- width: 42px;
- text-align: center;
- line-height: 20px;
- border: calc(var(--size-normal-border) * 1px) solid var(--color-default-border-weaker);
- border-radius: calc(var(--size-normal-radius) * 1px);
- }
- .fontStyle.invalid {
- background-color: var(--color-default-fill);
- }
- .fontStyle.select {
- background-color: var(--color-info-fill-important);
- border-color: var(--color-focus-border-emphasis);
- }
- .fontStyle.italic {
- font-style: italic;
- }
- .fontStyle.bold {
- font-weight: bold;
- }
- .fontStyle.underline {
- text-decoration-line: underline;
- }
- `;
- exports.ready = function() {
- this.elements = {
- horizontalAlign: {
- create(dump) {
- const prop = document.createElement('ui-prop');
- prop.dump = dump;
- const label = document.createElement('ui-label');
- label.setAttribute('slot', 'label');
- setLabel(dump, label);
- const content = createRadioGroup({
- enumList: dump.enumList,
- tooltip: dump.tooltip,
- getIconName: (elName) => {
- const iconName = elName.toLocaleLowerCase();
- if (iconName === 'center') {
- return `align-h-${iconName}`;
- }
- return `align-${iconName}`;
- },
- onChange: (event) => {
- const value = Number(event.target.value);
- if (Number.isFinite(value) && value !== -1) {
- dump.value = value;
- if (dump.values) {
- dump.values.forEach((_, index) => dump.values[index] = dump.value);
- }
- prop.dispatch('change-dump');
- prop.dispatch('confirm-dump');
- }
- },
- });
- prop.appendChild(label);
- prop.appendChild(content);
- return prop;
- },
- update(element, dump) {
- const radioGroup = element.querySelector('ui-radio-group');
- if (isMultipleInvalid(dump.horizontalAlign)) {
- radioGroup.value = -1;
- } else {
- radioGroup.value = dump.horizontalAlign.value;
- }
- },
- },
- verticalAlign: {
- create(dump) {
- const prop = document.createElement('ui-prop');
- prop.dump = dump;
- const label = document.createElement('ui-label');
- label.setAttribute('slot', 'label');
- setLabel(dump, label);
- const content = createRadioGroup({
- enumList: dump.enumList,
- tooltip: dump.tooltip,
- getIconName: (elementName) => {
- const iconName = elementName.toLocaleLowerCase();
- if (iconName === 'center') {
- return `align-v-${iconName}`;
- }
- return `align-${iconName}`;
- },
- onChange: (e) => {
- const enumVal = Number(e.target.value);
- if (!Number.isFinite(enumVal) || enumVal === -1) {
- return;
- }
- dump.value = enumVal;
- if (dump.values) {
- dump.values.forEach((_, index) => (dump.values[index] = dump.value));
- }
- prop.dispatch('change-dump');
- prop.dispatch('confirm-dump');
- },
- });
- prop.appendChild(label);
- prop.appendChild(content);
- return prop;
- },
- update(element, dump) {
- const radioGroup = element.querySelector('ui-radio-group');
- if (isMultipleInvalid(dump.verticalAlign)) {
- radioGroup.value = -1;
- } else {
- radioGroup.value = dump.verticalAlign.value;
- }
- },
- },
- isBold: {
- create() {
- const prop = document.createElement('ui-prop');
- const label = document.createElement('ui-label');
- label.setAttribute('slot', 'label');
- label.value = 'i18n:ENGINE.components.label.font_style';
- label.setAttribute('tooltip', 'i18n:ENGINE.components.label.font_style_tooltip');
- prop.appendChild(label);
- const content = document.createElement('div');
- content.setAttribute('slot', 'content');
- content.classList.add('fontStyleParent');
- const styleDisplayNames = ['B', 'I', 'U'];
- const styleClassNames = ['bold', 'italic', 'underline'];
- for (let index = 0; index < fontStyles.length; index++) {
- const style = fontStyles[index];
- const label = document.createElement('ui-label');
- label.innerHTML = styleDisplayNames[index];
- label.setAttribute('key', style);
- setTooltip(this.dump.value[style], label);
- label.classList.add('fontStyle', styleClassNames[index]);
- label.addEventListener('click', () => {
- prop.dump = this.dump.value[style];
- prop.dump.value = !prop.dump.value;
- if (prop.dump.values) {
- prop.dump.values.forEach((_, index) => prop.dump.values[index] = prop.dump.value);
- }
- prop.dispatch('change-dump');
- prop.dispatch('confirm-dump');
- this.dump.value[style].value ? label.classList.add('select') : label.classList.remove('select');
- });
- content.appendChild(label);
- }
- prop.appendChild(content);
- return prop;
- },
- update(element, dump) {
- const parent = element.querySelector('[slot="content"]');
- for (let index = 0; index < fontStyles.length; index++) {
- const div = parent.querySelector(`[key="${fontStyles[index]}"]`);
- const key = fontStyles[index];
- if (div) {
- const multipleInvalid = isMultipleInvalid(this.dump.value[key]);
- if (multipleInvalid) {
- div.classList.remove('select');
- div.classList.add('invalid');
- } else {
- div.classList.remove('invalid');
- this.dump.value[key].value ? div.classList.add('select') : div.classList.remove('select');
- }
- }
- }
- },
- },
- isItalic: {
- update(element, dump) {
- setHidden(true, element);
- },
- },
- isUnderline: {
- update(element, dump) {
- setHidden(true, element);
- },
- },
- };
- };
|