pull/16197/head
Rich Harris 4 months ago
commit 54e720b02b

@ -51,9 +51,6 @@ export function if_block(node, fn, elseif = false) {
/** @type {DocumentFragment | null} */ /** @type {DocumentFragment | null} */
var offscreen_fragment = null; var offscreen_fragment = null;
/** @type {Effect | null} */
var pending_effect = null;
function commit() { function commit() {
if (offscreen_fragment !== null) { if (offscreen_fragment !== null) {
// remove the anchor // remove the anchor
@ -63,23 +60,15 @@ export function if_block(node, fn, elseif = false) {
offscreen_fragment = null; offscreen_fragment = null;
} }
if (pending_effect) { var active = condition ? consequent_effect : alternate_effect;
if (condition) { var inactive = condition ? alternate_effect : consequent_effect;
consequent_effect = pending_effect;
} else {
alternate_effect = pending_effect;
}
}
var current_effect = condition ? consequent_effect : alternate_effect; if (active) {
var previous_effect = condition ? alternate_effect : consequent_effect; resume_effect(active);
if (current_effect !== null) {
resume_effect(current_effect);
} }
if (previous_effect !== null) { if (inactive) {
pause_effect(previous_effect, () => { pause_effect(inactive, () => {
if (condition) { if (condition) {
alternate_effect = null; alternate_effect = null;
} else { } else {
@ -87,8 +76,6 @@ export function if_block(node, fn, elseif = false) {
} }
}); });
} }
pending_effect = null;
} }
const update_branch = ( const update_branch = (
@ -122,24 +109,20 @@ export function if_block(node, fn, elseif = false) {
offscreen_fragment.append((target = create_text())); offscreen_fragment.append((target = create_text()));
} }
var batch = /** @type {Batch} */ (current_batch); if (condition) {
consequent_effect ??= fn && branch(() => fn(target));
// TODO need to do this for other block types } else {
if (pending_effect) { alternate_effect ??= fn && branch(() => fn(target));
// batch.skipped_effects.add(pending_effect);
// pending_effect = null;
}
if (condition ? !consequent_effect : !alternate_effect) {
pending_effect = fn && branch(() => fn(target));
} }
if (defer) { if (defer) {
const skipped = condition ? alternate_effect : consequent_effect; var batch = /** @type {Batch} */ (current_batch);
if (skipped !== null) {
// TODO need to do this for other kinds of blocks var active = condition ? consequent_effect : alternate_effect;
batch.skipped_effects.add(skipped); var inactive = condition ? alternate_effect : consequent_effect;
}
if (active) batch.skipped_effects.delete(active);
if (inactive) batch.skipped_effects.add(inactive);
batch.add_callback(commit); batch.add_callback(commit);
} else { } else {

Loading…
Cancel
Save