(
targetEl: Element,
statesModels: Record<DisplayState, LabelLineModel>,
defaultStyle?: Polyline['style']
)
| 587 | * Create a label line if necessary and set it's style. |
| 588 | */ |
| 589 | export function setLabelLineStyle( |
| 590 | targetEl: Element, |
| 591 | statesModels: Record<DisplayState, LabelLineModel>, |
| 592 | defaultStyle?: Polyline['style'] |
| 593 | ) { |
| 594 | let labelLine = targetEl.getTextGuideLine(); |
| 595 | const label = targetEl.getTextContent(); |
| 596 | if (!label) { |
| 597 | // Not show label line if there is no label. |
| 598 | if (labelLine) { |
| 599 | targetEl.removeTextGuideLine(); |
| 600 | } |
| 601 | return; |
| 602 | } |
| 603 | |
| 604 | const normalModel = statesModels.normal; |
| 605 | const showNormal = normalModel.get('show'); |
| 606 | const labelIgnoreNormal = label.ignore; |
| 607 | |
| 608 | for (let i = 0; i < DISPLAY_STATES.length; i++) { |
| 609 | const stateName = DISPLAY_STATES[i]; |
| 610 | const stateModel = statesModels[stateName]; |
| 611 | const isNormal = stateName === 'normal'; |
| 612 | if (stateModel) { |
| 613 | const stateShow = stateModel.get('show'); |
| 614 | const isLabelIgnored = isNormal |
| 615 | ? labelIgnoreNormal |
| 616 | : retrieve2(label.states[stateName] && label.states[stateName].ignore, labelIgnoreNormal); |
| 617 | if (isLabelIgnored // Not show when label is not shown in this state. |
| 618 | || !retrieve2(stateShow, showNormal) // Use normal state by default if not set. |
| 619 | ) { |
| 620 | const stateObj = isNormal ? labelLine : (labelLine && labelLine.states[stateName]); |
| 621 | if (stateObj) { |
| 622 | stateObj.ignore = true; |
| 623 | } |
| 624 | if (!!labelLine) { |
| 625 | setLabelLineState(labelLine, true, stateName, stateModel); |
| 626 | } |
| 627 | continue; |
| 628 | } |
| 629 | // Create labelLine if not exists |
| 630 | if (!labelLine) { |
| 631 | labelLine = new Polyline(); |
| 632 | targetEl.setTextGuideLine(labelLine); |
| 633 | // Reset state of normal because it's new created. |
| 634 | // NOTE: NORMAL should always been the first! |
| 635 | if (!isNormal && (labelIgnoreNormal || !showNormal)) { |
| 636 | setLabelLineState(labelLine, true, 'normal', statesModels.normal); |
| 637 | } |
| 638 | |
| 639 | // Use same state proxy. |
| 640 | if (targetEl.stateProxy) { |
| 641 | labelLine.stateProxy = targetEl.stateProxy; |
| 642 | } |
| 643 | } |
| 644 | |
| 645 | setLabelLineState(labelLine, false, stateName, stateModel); |
| 646 | } |
no test coverage detected
searching dependent graphs…