From c62d8189e5d03f68eae1c1fa4458944dd5523fe1 Mon Sep 17 00:00:00 2001 From: Kayla Glick <12898988+kayla-glick@users.noreply.github.com> Date: Tue, 27 Feb 2024 20:32:05 -0500 Subject: [PATCH] fix dps histogram + port over EP display changes (#4227) --- .../components/detailed_results/timeline.tsx | 40 +- ui/core/components/gear_picker.tsx | 51 +- ui/scss/core/components/_gear_picker.scss | 451 +++++++++--------- .../detailed_results/_timeline.scss | 2 + ui/scss/sims/raid/_blessings_picker.scss | 3 +- 5 files changed, 284 insertions(+), 263 deletions(-) diff --git a/ui/core/components/detailed_results/timeline.tsx b/ui/core/components/detailed_results/timeline.tsx index 866cd4292e..a78babc3e0 100644 --- a/ui/core/components/detailed_results/timeline.tsx +++ b/ui/core/components/detailed_results/timeline.tsx @@ -112,7 +112,6 @@ export class Timeline extends ResultComponent { title: { text: 'Time (s)', }, - type: 'datetime', }, noData: { text: 'Waiting for data...', @@ -174,16 +173,12 @@ export class Timeline extends ResultComponent { series: [], colors: [], xaxis: { - min: this.toDatetime(0).getTime(), - max: this.toDatetime(duration).getTime(), - type: 'datetime', + min: 0, + max: duration, tickAmount: 10, decimalsInFloat: 1, labels: { show: true, - formatter: (defaultValue: string, timestamp: number) => { - return (timestamp / 1000).toFixed(1); - }, }, title: { text: 'Time (s)', @@ -195,12 +190,15 @@ export class Timeline extends ResultComponent { beforeResetZoom: () => { return { xaxis: { - min: this.toDatetime(0), - max: this.toDatetime(duration), + min: 0, + max: duration, }, }; }, }, + toolbar: { + show: false, + }, }, }; @@ -337,7 +335,7 @@ export class Timeline extends ResultComponent { // Returns a function for drawing the tooltip, or null if no series was added. private addDpsSeries(unit: UnitMetrics, options: any, colorOverride: string): { maxDps: number, tooltipHandler: TooltipHandler } { - const dpsLogs = unit.dpsLogs; + const dpsLogs = unit.dpsLogs.filter(log => log.timestamp >= 0); options.colors.push(colorOverride || dpsColor); options.series.push({ @@ -345,7 +343,7 @@ export class Timeline extends ResultComponent { type: 'line', data: dpsLogs.map(log => { return { - x: this.toDatetime(log.timestamp), + x: log.timestamp, y: log.dps, }; }), @@ -362,7 +360,7 @@ export class Timeline extends ResultComponent { // Returns a function for drawing the tooltip, or null if no series was added. private addManaSeries(unit: UnitMetrics, options: any): TooltipHandler | null { - const manaLogs = unit.groupedResourceLogs[ResourceType.ResourceTypeMana]; + const manaLogs = unit.groupedResourceLogs[ResourceType.ResourceTypeMana].filter(log => log.timestamp >= 0); if (manaLogs.length == 0) { return null; } @@ -374,7 +372,7 @@ export class Timeline extends ResultComponent { type: 'line', data: manaLogs.map(log => { return { - x: this.toDatetime(log.timestamp), + x: log.timestamp, y: log.valueAfter, }; }), @@ -422,9 +420,9 @@ export class Timeline extends ResultComponent { options.series.push({ name: 'Threat', type: 'line', - data: unit.threatLogs.map(log => { + data: unit.threatLogs.filter(log => log.timestamp >= 0).map(log => { return { - x: this.toDatetime(log.timestamp), + x: log.timestamp, y: log.threatAfter, }; }), @@ -454,14 +452,14 @@ export class Timeline extends ResultComponent { position: 'back', xaxis: mcdAuraLogs.map((log, i) => { return { - x: this.toDatetime(log.gainedAt).getTime(), - x2: this.toDatetime(log.fadedAt).getTime(), + x: log.gainedAt, + x2: log.fadedAt, fillColor: mcdAuraColors[i], }; }), points: mcdLogs.map((log, i) => { return { - x: this.toDatetime(log.timestamp).getTime(), + x: log.timestamp, y: 0, image: { path: log.actionId!.iconUrl, @@ -1039,7 +1037,7 @@ export class Timeline extends ResultComponent {
  • {log.actionId && log.actionId.iconUrl && } {log.actionId && {log.actionId.name}} - {value} + {htmlDecode(value)}
  • ); } @@ -1082,10 +1080,6 @@ export class Timeline extends ResultComponent { this.updatePlot(); }, 300); } - - private toDatetime(timestamp: number): Date { - return new Date(timestamp * 1000); - } } const MELEE_ACTION_CATEGORY = 1; diff --git a/ui/core/components/gear_picker.tsx b/ui/core/components/gear_picker.tsx index c61deb3ba3..0019807f59 100644 --- a/ui/core/components/gear_picker.tsx +++ b/ui/core/components/gear_picker.tsx @@ -122,7 +122,7 @@ export class ItemRenderer extends Component { readonly socketsContainerElem: HTMLElement; constructor(parent: HTMLElement, player: Player) { - super(parent, 'item-renderer-root'); + super(parent, 'item-picker-root'); this.player = player; let iconElem = ref(); @@ -825,9 +825,10 @@ export class ItemList {
    - -
      @@ -980,7 +982,9 @@ export class ItemList { epDeltaElem.textContent = ''; if (itemData.item) { const listItemEP = this.computeEP(itemData.item); - formatDeltaTextElem(epDeltaElem, newEP, listItemEP, 0); + if (newEP != listItemEP) { + formatDeltaTextElem(epDeltaElem, newEP, listItemEP, 0); + } } } }); @@ -1067,7 +1071,7 @@ export class ItemList { } public hideOrShowEPValues() { - const labels = this.tabContent.getElementsByClassName("ep-delta-label") + const labels = this.tabContent.getElementsByClassName("ep-label") const container = this.tabContent.getElementsByClassName("selector-modal-list") const show = this.player.sim.getShowEPValues(); const display = show ? "" : "none" @@ -1088,14 +1092,15 @@ export class ItemList { const itemData = item.data; const itemEP = this.computeEP(itemData.item); - const equipedItem = this.equippedToItemFn(this.gearData.getEquippedItem()); - const equipdItemId = equipedItem ? (this.label == 'Enchants' ? (equipedItem as unknown as Enchant).effectId : (equipedItem as unknown as Item | Gem).id) : 0; + const equippedItem = this.equippedToItemFn(this.gearData.getEquippedItem()); + const equippedItemID = equippedItem ? (this.label == 'Enchants' ? (equippedItem as unknown as Enchant).effectId : (equippedItem as unknown as Item).id) : 0; + const equippedItemEP = equippedItem ? this.computeEP(equippedItem) : 0 const nameElem = ref(); const anchorElem = ref(); const iconElem = ref(); const listItemElem = ( -
    • +
    • ); } + const favoriteElem = ref(); listItemElem.appendChild( -
      - itemData.item && formatDeltaTextElem(e, equipedItem ? this.computeEP(equipedItem) : 0, itemEP, 0)}> +
      +
      - ); + ) anchorElem.value!.addEventListener('click', (event: Event) => { event.preventDefault(); diff --git a/ui/scss/core/components/_gear_picker.scss b/ui/scss/core/components/_gear_picker.scss index f6f24ec911..2924c405a2 100644 --- a/ui/scss/core/components/_gear_picker.scss +++ b/ui/scss/core/components/_gear_picker.scss @@ -2,188 +2,185 @@ @import "./filters_menu"; -.gear-picker-root { - margin-bottom: var(--container-padding); - display: flex; - flex-wrap: wrap; - - .gear-picker-left, - .gear-picker-right { - width: 50%; - } - - .item-picker-root { - display: flex; - - &:not(:last-child) { - margin-bottom: $block-spacer; - } - - .item-renderer-root { - width: 100%; - display: flex; - } - - .item-picker-icon { - @include wowhead-background-icon; - width: 4rem; - height: 4rem; - border: $border-default; - } - } - - .gear-picker-left { - .item-picker-root { - // Add space to separate weapon categories - &:nth-child(6) { - margin-bottom: var(--container-padding); - } - - .item-renderer-root { - flex-direction: row; - text-align: left; - } - } - } +$source-cell-width: 16rem; +$ep-cell-width: 4rem; +$favorite-cell-width: 2rem; - .gear-picker-right { - .item-renderer-root { - flex-direction: row-reverse; - text-align: right; - } - } +.gear-picker-root { + display: flex; + flex-wrap: wrap; + width: 100%; + + .gear-picker-left, + .gear-picker-right { + width: 50%; + } + + .item-picker-root { + display: flex; + + &:not(:last-child) { + margin-bottom: $block-spacer; + } + + .item-picker-icon { + @include wowhead-background-icon; + width: 4rem; + height: 4rem; + border: $border-default; + } + } + + .gear-picker-left { + .item-picker-root { + flex-direction: row; + text-align: left; + + // Add space to separate weapon categories + &:nth-child(6) { + margin-bottom: map.get($spacers, 5); + } + } + } + + .gear-picker-right { + .item-picker-root { + flex-direction: row-reverse; + text-align: right; + } + } } .item-picker-sockets-container { - @include vertical-bottom; - @include horizontal-center; - width: 100%; - display: flex; - justify-content: center; + @include vertical-bottom; + @include horizontal-center; + width: 100%; + display: flex; + justify-content: center; } .selector-modal { - .modal-header { - padding-bottom: 0; - - .selector-modal-tabs { - border-bottom: 0; - - .selector-modal-tab-gem { - height: 100%; - padding: 0; - padding: calc(var(--bs-nav-link-padding-y) / 2) calc(var(--bs-nav-link-padding-x) / 2); - margin-left: calc(var(--bs-nav-link-padding-x) / 2); - margin-right: calc(var(--bs-nav-link-padding-x) / -2); - display: flex; - align-items: center; - opacity: .7; - transition: opacity .15s ease-in-out; - - &:hover, &.active { - opacity: 1; - } - - .gem-socket-container { - --gem-width: 2rem; - } - } - } - } + .modal-header { + padding-bottom: 0; + + .selector-modal-tabs { + border-bottom: 0; + + .selector-modal-tab-gem { + height: 100%; + padding: 0; + padding: calc(var(--bs-nav-link-padding-y) / 2) calc(var(--bs-nav-link-padding-x) / 2); + margin-left: calc(var(--bs-nav-link-padding-x) / 2); + margin-right: calc(var(--bs-nav-link-padding-x) / -2); + display: flex; + align-items: center; + opacity: .7; + transition: opacity .15s ease-in-out; + + &:hover, &.active { + opacity: 1; + } + + .gem-socket-container { + --gem-width: 2rem; + } + } + } + } } @include media-breakpoint-down(md) { - .gear-picker-root { - flex-direction: column; - - .gear-picker-left, - .gear-picker-right { - width: 100%; - margin-right: 0; - } - } + .gear-picker-root { + flex-direction: column; + + .gear-picker-left, + .gear-picker-right { + width: 100%; + margin-right: 0; + } + } } .item-picker-labels-container { - padding: map-get($spacers, 2); - flex: 1; - - .item-picker-name { - color: white; - font-size: map-get($font-sizes, 6); - letter-spacing: normal; - } - - .item-picker-enchant { - color: $item-quality-uncommon; - font-size: $content-font-size; - letter-spacing: normal; - } + padding: map-get($spacers, 2); + flex: 1; + + .item-picker-name { + color: white; + font-size: map-get($font-sizes, 6); + letter-spacing: normal; + } + + .item-picker-enchant { + color: $item-quality-uncommon; + font-size: $content-font-size; + letter-spacing: normal; + } } @include media-breakpoint-down(xl) { - .gear-picker-root { - .gear-picker-left { - .item-picker-root { - // Increase the spacing to help separate the weapons/bonus item slots - &:nth-child(6) { - margin-bottom: calc(var(--container-padding) * 2); - } - } - } - } + .gear-picker-root { + .gear-picker-left { + .item-picker-root { + // Increase the spacing to help separate the weapons/bonus item slots + &:nth-child(6) { + margin-bottom: calc(var(--container-padding) * 2); + } + } + } + } } @include media-breakpoint-down(md) { - .gear-picker-root { - .gear-picker-left { - .item-picker-root { - // Increase the spacing to help separate the weapons/bonus item slots - &:last-child { - margin-bottom: calc(var(--container-padding) * 2); - } - } - } - } + .gear-picker-root { + .gear-picker-left { + .item-picker-root { + // Increase the spacing to help separate the weapons/bonus item slots + &:last-child { + margin-bottom: calc(var(--container-padding) * 2); + } + } + } + } } .item-picker-labels-container { - padding: map-get($spacers, 2); - flex: 1; - - .item-picker-name { - color: white; - font-size: map-get($font-sizes, 6); - letter-spacing: normal; - } - - .item-picker-enchant { - color: $item-quality-uncommon; - font-size: $content-font-size; - letter-spacing: normal; - } + padding: map-get($spacers, 2); + flex: 1; + + .item-picker-name { + color: white; + font-size: map-get($font-sizes, 6); + letter-spacing: normal; + } + + .item-picker-enchant { + color: $item-quality-uncommon; + font-size: $content-font-size; + letter-spacing: normal; + } } .selector-modal-tab-content { - .selector-modal-tab-pane { - padding: 0; - - .selector-modal-filters { - margin-bottom: map-get($spacers, 3); - display: flex; - align-items: center; - - &> *:not(:last-child) { - margin-right: map-get($spacers, 2); - } - - input, select { - padding-top: $btn-padding-y; - padding-bottom: $btn-padding-y; - font-size: $btn-font-size; - } - } - } + .selector-modal-tab-pane { + padding: 0; + + .selector-modal-filters { + margin-bottom: map.get($spacers, 4); + display: flex; + align-items: center; + + &> *:not(:last-child) { + margin-right: map-get($spacers, 2); + } + + input, select { + padding-top: $btn-padding-y; + padding-bottom: $btn-padding-y; + font-size: $btn-font-size; + } + } + } } .selector-modal-search { @@ -194,7 +191,7 @@ min-width: 7rem; .phase-selector { - margin-bottom: 0; + margin-bottom: 0; } } @@ -203,29 +200,52 @@ } .selector-modal-list-labels { - margin-bottom: map-get($spacers, 2); - font-size: 1.125rem; - - .ep-delta-label { - display: flex; - align-items: center; - float: right; - } + display: flex; + padding-right: map-get($spacers, 2); + margin-right: map-get($spacers, 3); + margin-bottom: map-get($spacers, 2); + font-size: 1.125rem; + + label { + font-weight: normal; + } + + .item-label { + flex: 1; + } + + .source-label { + width: $source-cell-width; + margin-left: map-get($spacers, 3); + } + + .ep-label { + width: $ep-cell-width; + margin-left: map-get($spacers, 3); + display: flex; + align-items: center; + float: right; + } + + .favorite-label { + width: $favorite-cell-width; + margin-left: map-get($spacers, 3); + } } .selector-modal-list { - width: 100%; - max-height: 70vh; + width: 100%; + max-height: 65vh; overflow-y: auto; overflow-x: hidden; - padding: 0; - margin-bottom: 0; - - &.hide-ep { - .selector-modal-list-item-ep { - display:none; - } - } + padding: 0; + margin-bottom: 0; + + &.hide-ep { + .selector-modal-list-item-ep { + display:none; + } + } } // TODO: Move all of these to a shared file, as they're used in other places too @@ -236,58 +256,58 @@ background-color: #111218; &:nth-child(2n) { - background: $table-row-even-bg; + background: $table-row-even-bg; } &:nth-child(2n+1) { - background: $table-row-odd-bg; + background: $table-row-odd-bg; } &:hover { - background: #333; + background: #333; } &.active { - .selector-modal-list-item-icon { - outline: 2px solid $success; - } + .selector-modal-list-item-icon { + outline: 2px solid $success; + } } .selector-modal-list-item-link { - display: flex; - align-items: center; + display: flex; + align-items: center; } - + .selector-modal-list-label-cell { - flex: 1; - display: flex; - align-items: center; + flex: 1; + display: flex; + align-items: center; } .selector-modal-list-item-icon { - @include wowhead-background-icon; - width: 3rem; - height: 3rem; - border: $border-default; + @include wowhead-background-icon; + width: 3rem; + height: 3rem; + border: $border-default; } - + .selector-modal-list-item-name { - font-size: 1.125rem; - margin-left: map-get($spacers, 3); - letter-spacing: normal; - font-weight: normal; - cursor: pointer; + font-size: 1.125rem; + margin-left: map-get($spacers, 3); + letter-spacing: normal; + font-weight: normal; + cursor: pointer; } } .selector-modal-list-item-source-container { margin-left: map-get($spacers, 3); - width: 12rem; + width: $source-cell-width; } .selector-modal-list-item-favorite { margin-left: map-get($spacers, 3); - color: yellow; + color: $brand; } .selector-modal-list-item-favorite:hover { @@ -297,26 +317,31 @@ } .selector-modal-list-item-ep { + width: $ep-cell-width; + margin-left: map-get($spacers, 3); display: flex; - font-size: 1rem; - font-weight: 800; -} - -.selector-modal-list-item-ep > span { - min-width: 3rem; - display: inline-block; - color: white; - text-align: right; -} + align-items: center; + + &> span { + display: inline-block; + color: white; + text-align: right; + } + + .selector-modal-list-item-ep-delta { + margin-left: map-get($spacers, 1); + font-size: .8rem; + } + } .heroic-label { margin-left: map-get($spacers, 1); - color: $item-quality-uncommon; + color: $item-quality-uncommon; } @include media-breakpoint-down(lg) { .item-picker-icon { - width: 3rem; - height: 3rem; + width: 3rem; + height: 3rem; } } diff --git a/ui/scss/core/components/detailed_results/_timeline.scss b/ui/scss/core/components/detailed_results/_timeline.scss index b2456884d2..ef57095ad6 100644 --- a/ui/scss/core/components/detailed_results/_timeline.scss +++ b/ui/scss/core/components/detailed_results/_timeline.scss @@ -68,6 +68,8 @@ $threat-color: #b56d07; .timeline-tooltip { text-align: start; + background: $tooltip-bg; + padding: $tooltip-padding-y $tooltip-padding-x; } .timeline-tooltip-header { diff --git a/ui/scss/sims/raid/_blessings_picker.scss b/ui/scss/sims/raid/_blessings_picker.scss index 873a3f2afc..cc6e0ce33f 100644 --- a/ui/scss/sims/raid/_blessings_picker.scss +++ b/ui/scss/sims/raid/_blessings_picker.scss @@ -13,8 +13,7 @@ margin-right: $block-spacer * 2; .blessings-spec-icon { - width: $icon-size-md; - height: $icon-size-md; + @extend .icon-md; } }