diff --git a/src/js/action/draw.js b/src/js/action/draw.js index 38dc6bfa..1295b130 100644 --- a/src/js/action/draw.js +++ b/src/js/action/draw.js @@ -206,15 +206,19 @@ export function draw_metarelation(draw_context, mei_graph, g_elem) { var type = relation_type(g_elem) // Get the targets - we don't differentiate primaries and secondaries in // this drawing style. - var targets = relation_allnodes(mei_graph, g_elem).map( - (e) => document.getElementById(draw_context.id_prefix + get_id(e))) - // TODO should be possible to draw partial metarelations - if (targets.indexOf(null) != -1) { + var targets = relation_allnodes(mei_graph, g_elem).map((e) => { + let he = document.getElementById(draw_context.id_prefix + get_id(e)) + if (!he) return + return he.classList.contains('hidden-reduced') ? null : he + }) + if (!targets[0]) { console.log('Missing relation, not drawing metarelation') return [] } - const isDownward = targets.every(target => target.getAttribute('is-downward') === 'true') + const isDownward = targets.every( + target => target.getAttribute('is-downward') === 'true' + ) // Where are our targets var coords = targets.map(target => { diff --git a/src/js/modules/Score/index.js b/src/js/modules/Score/index.js index e2f9ab25..f1ad00c3 100644 --- a/src/js/modules/Score/index.js +++ b/src/js/modules/Score/index.js @@ -36,7 +36,10 @@ class Score { // Cached members. get flatSelection() { - return this.#cache.remember('flatSelection', () => Object.values(this.selection).flat()) + return this.#cache.remember('flatSelection', + () => this.selection + ? Object.values(this.selection).flat() + : null) } get hasSelection() { @@ -46,7 +49,9 @@ class Score { get selectionType() { return this.#cache.remember('selectionType', () => { return SELECTABLE_TYPES.find(type => { - return this.flatSelection[0]?.classList.contains(type) + return this.flatSelection + ? this.flatSelection[0]?.classList.contains(type) + : null }) ?? null }) } diff --git a/src/js/utils/misc.js b/src/js/utils/misc.js index fb4c1f2e..5406868d 100644 --- a/src/js/utils/misc.js +++ b/src/js/utils/misc.js @@ -373,6 +373,8 @@ export function id_in_svg(draw_context, id) { // that's how it is), then dc.id_prefix to calculate the final id var layer_id = id_in_layer(draw_context.layer, id) var svg_note = document.getElementById(layer_id) + if (svg_note && svg_note.classList.contains('hidden-reduced')) + return null if (draw_context.svg_elem.contains(svg_note)) return layer_id if (layer_id)