broken snapshot

pull/1971/head
Richard Harris 7 years ago
parent 48f1a9a1ff
commit d46248030c

@ -604,7 +604,7 @@ export default class ElementWrapper extends Wrapper {
${name}.run(0); ${name}.run(0);
`); `);
block.builders.destroy.addConditional('detach', `if (${name}) ${name}.end();`); block.builders.destroy.addConditional('detach', `if (${name}) console.log('detaching'), ${name}.end();`);
} }
else { else {
@ -622,15 +622,18 @@ export default class ElementWrapper extends Wrapper {
if (outro) { if (outro) {
block.builders.intro.addBlock(deindent` block.builders.intro.addBlock(deindent`
@add_render_callback(() => { @add_render_callback(() => {
if (${introName}) ${introName}.end(); if (!${introName}) ${introName} = @create_in_transition(${this.var}, ${fn}, ${snippet});
${introName} = @create_in_transition(${this.var}, ${fn}, ${snippet}); ${introName}.start();
}); });
`); `);
block.builders.outro.addLine(`if (${introName}) ${introName}.invalidate()`);
} else { } else {
block.builders.intro.addBlock(deindent` block.builders.intro.addBlock(deindent`
if (!${introName}) { if (!${introName}) {
@add_render_callback(() => { @add_render_callback(() => {
${introName} = @create_in_transition(${this.var}, ${fn}, ${snippet}); ${introName} = @create_in_transition(${this.var}, ${fn}, ${snippet});
${introName}.start();
}); });
} }
`); `);

@ -431,6 +431,7 @@ export default class IfBlockWrapper extends Wrapper {
? deindent` ? deindent`
@group_outros(); @group_outros();
@on_outro(() => { @on_outro(() => {
console.log('outros completed');
${name}.d(1); ${name}.d(1);
${name} = null; ${name} = null;
}); });

@ -18,6 +18,7 @@ function wait() {
let outros; let outros;
export function group_outros() { export function group_outros() {
console.log('grouping');
outros = { outros = {
remaining: 0, remaining: 0,
callbacks: [] callbacks: []
@ -25,19 +26,23 @@ export function group_outros() {
} }
export function check_outros() { export function check_outros() {
console.trace(`${outros.remaining} outros remaining`);
if (!outros.remaining) { if (!outros.remaining) {
console.log(outros.callbacks.map(c => c.toString()))
run_all(outros.callbacks); run_all(outros.callbacks);
} }
} }
export function on_outro(callback) { export function on_outro(callback) {
console.log('adding', callback.toString());
outros.callbacks.push(callback); outros.callbacks.push(callback);
} }
export function create_in_transition(node, fn, params) { export function create_in_transition(node, fn, params) {
let config = fn(node, params); let config = fn(node, params);
let running = true; let running = false;
let animation_name; let animation_name;
let task;
function cleanup() { function cleanup() {
if (animation_name) delete_rule(node, animation_name); if (animation_name) delete_rule(node, animation_name);
@ -62,7 +67,10 @@ export function create_in_transition(node, fn, params) {
const start_time = window.performance.now() + delay; const start_time = window.performance.now() + delay;
const end_time = start_time + duration; const end_time = start_time + duration;
loop(now => { if (task) task.abort();
running = true;
task = loop(now => {
if (running) { if (running) {
if (now >= end_time) { if (now >= end_time) {
tick(1, 0); tick(1, 0);
@ -80,14 +88,24 @@ export function create_in_transition(node, fn, params) {
}); });
} }
if (typeof config === 'function') { let started = false;
config = config();
wait().then(go);
} else {
go();
}
return { return {
start() {
if (started) return;
if (typeof config === 'function') {
config = config();
wait().then(go);
} else {
go();
}
},
invalidate() {
started = false;
},
end() { end() {
if (running) { if (running) {
cleanup(); cleanup();
@ -233,6 +251,7 @@ export function create_bidirectional_transition(node, fn, params, intro) {
node.dispatchEvent(new window.CustomEvent(`${running_program.b ? 'intro' : 'outro'}start`)); node.dispatchEvent(new window.CustomEvent(`${running_program.b ? 'intro' : 'outro'}start`));
loop(now => { loop(now => {
console.log({ now, pending_program, running_program });
if (pending_program && now > pending_program.start) { if (pending_program && now > pending_program.start) {
running_program = init(pending_program, duration); running_program = init(pending_program, duration);
pending_program = null; pending_program = null;
@ -263,6 +282,7 @@ export function create_bidirectional_transition(node, fn, params, intro) {
} }
} }
console.log('running program ended');
running_program = null; running_program = null;
} }
@ -280,6 +300,7 @@ export function create_bidirectional_transition(node, fn, params, intro) {
return { return {
run(b) { run(b) {
console.log(`run`, b);
if (typeof config === 'function') { if (typeof config === 'function') {
wait().then(() => { wait().then(() => {
config = config(); config = config();
@ -291,6 +312,7 @@ export function create_bidirectional_transition(node, fn, params, intro) {
}, },
end() { end() {
console.log('end');
clear_animation(); clear_animation();
running_program = pending_program = null; running_program = pending_program = null;
} }

@ -16,11 +16,15 @@ export default {
assert.equal(div.foo, 0.75); assert.equal(div.foo, 0.75);
assert.htmlEqual(div.innerHTML, 'hello everybody!'); assert.htmlEqual(div.innerHTML, 'hello everybody!');
console.group('set visible false');
component.visible = false; component.visible = false;
console.groupEnd();
component.name = 'again'; component.name = 'again';
assert.htmlEqual(div.innerHTML, 'hello everybody!'); assert.htmlEqual(div.innerHTML, 'hello everybody!');
console.group('tick 125');
raf.tick(125); raf.tick(125);
console.groupEnd();
assert.equal(div.foo, 0.25); assert.equal(div.foo, 0.25);
component.visible = true; component.visible = true;

Loading…
Cancel
Save