|
595 | 595 | : 'Chart settings restored to defaults.\n\nOpen any repo page to see the updated chart.') |
596 | 596 | } |
597 | 597 |
|
| 598 | + function createSelectControl(values, labels, selectedValue, onChange) { |
| 599 | + const select = document.createElement('select') |
| 600 | + values.forEach(value => { |
| 601 | + const option = document.createElement('option') |
| 602 | + option.value = value |
| 603 | + option.textContent = labels[value] |
| 604 | + option.selected = value == selectedValue |
| 605 | + select.append(option) |
| 606 | + }) |
| 607 | + select.onchange = event => onChange(event.target.value) |
| 608 | + return select |
| 609 | + } |
| 610 | + |
598 | 611 | function createHoverSettingsPanel(starHistoryDiv, options = {}) { |
599 | 612 | if (starHistoryDiv.querySelector('#star-history-settings-btn')) return |
600 | | - const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0, |
| 613 | + const isTouchDevice = 'ontouchstart' in window || navigator.maxTouchPoints > 0, |
601 | 614 | alwaysVisible = !!options.alwaysVisible, |
602 | 615 | disableAutoHide = !!options.disableAutoHide, |
603 | 616 | keepPanelOpenOnSave = !!options.keepPanelOpenOnSave |
|
612 | 625 | logscale: !!settings.logscale |
613 | 626 | } |
614 | 627 |
|
615 | | - if (!options.preserveContainerStyles) |
| 628 | + if (!options.preserveContainerStyles) { |
616 | 629 | Object.assign(starHistoryDiv.style, { position: 'relative', overflow: 'visible' }) |
| 630 | + } |
617 | 631 |
|
618 | 632 | const settingsBtn = document.createElement('button') |
619 | 633 | settingsBtn.id = 'star-history-settings-btn' |
|
663 | 677 | row.append(label, controlElem) ; panel.append(row) |
664 | 678 | } |
665 | 679 |
|
666 | | - const typeSelect = document.createElement('select') |
667 | | - for (const value of chartConfig.values.type) { |
668 | | - const option = document.createElement('option') |
669 | | - option.value = value ; option.textContent = chartConfig.labels.type[value] |
670 | | - if (value == settings.type) option.selected = true |
671 | | - typeSelect.append(option) |
672 | | - } |
673 | | - typeSelect.onchange = event => { draftSettings.type = event.target.value } |
| 680 | + const typeSelect = createSelectControl( |
| 681 | + chartConfig.values.type, chartConfig.labels.type, settings.type, |
| 682 | + value => { draftSettings.type = value } |
| 683 | + ) |
674 | 684 | addField('Type', typeSelect) |
675 | 685 |
|
676 | | - const legendSelect = document.createElement('select') |
677 | | - for (const value of chartConfig.values.legend) { |
678 | | - const option = document.createElement('option') |
679 | | - option.value = value ; option.textContent = chartConfig.labels.legend[value] |
680 | | - if (value == settings.legend) option.selected = true |
681 | | - legendSelect.append(option) |
682 | | - } |
683 | | - legendSelect.onchange = event => { draftSettings.legend = event.target.value } |
| 686 | + const legendSelect = createSelectControl( |
| 687 | + chartConfig.values.legend, chartConfig.labels.legend, settings.legend, |
| 688 | + value => { draftSettings.legend = value } |
| 689 | + ) |
684 | 690 | addField('Legend', legendSelect) |
685 | 691 |
|
686 | | - const themeSelect = document.createElement('select') |
687 | | - for (const value of chartConfig.values.theme) { |
688 | | - const option = document.createElement('option') |
689 | | - option.value = value ; option.textContent = chartConfig.labels.theme[value] |
690 | | - if (value == settings.theme) option.selected = true |
691 | | - themeSelect.append(option) |
692 | | - } |
693 | | - themeSelect.onchange = event => { draftSettings.theme = event.target.value } |
| 692 | + const themeSelect = createSelectControl( |
| 693 | + chartConfig.values.theme, chartConfig.labels.theme, settings.theme, |
| 694 | + value => { draftSettings.theme = value } |
| 695 | + ) |
694 | 696 | addField('Theme', themeSelect) |
695 | 697 |
|
696 | 698 | const logscaleToggle = document.createElement('input') |
|
768 | 770 | const togglePanel = event => { |
769 | 771 | event.stopPropagation() |
770 | 772 | const opening = panel.style.display == 'none' |
771 | | - if (!opening) return panel.style.display = 'none' |
| 773 | + if (!opening) { |
| 774 | + panel.style.display = 'none' |
| 775 | + return |
| 776 | + } |
772 | 777 | panel.style.display = 'block' |
773 | 778 | panel.style.visibility = 'hidden' |
774 | 779 | positionPanel() |
|
0 commit comments