Implement proper src equality checking

Use imports
pull/6449/head
Altan Birler 5 years ago
parent dae7599d2e
commit 1f2460dd6e

@ -132,7 +132,7 @@ export default class AttributeWrapper extends BaseAttributeWrapper {
`); `);
} else if (this.is_src) { } else if (this.is_src) {
block.chunks.hydrate.push( block.chunks.hydrate.push(
b`if (new URL(${element.var}.src, location).href !== (new URL(${init}, location)).href) ${method}(${element.var}, "${name}", ${this.last});` b`if (!@src_url_equal(${element.var}.src, ${init})) ${method}(${element.var}, "${name}", ${this.last});`
); );
updater = b`${method}(${element.var}, "${name}", ${should_cache ? this.last : value});`; updater = b`${method}(${element.var}, "${name}", ${should_cache ? this.last : value});`;
} else if (property_name) { } else if (property_name) {
@ -193,7 +193,7 @@ export default class AttributeWrapper extends BaseAttributeWrapper {
if (should_cache) { if (should_cache) {
condition = this.is_src condition = this.is_src
? x`${condition} && (new URL(${element.var}.src, location).href !== (new URL((${last} = ${value}), location)).href)` ? x`${condition} && (!@src_url_equal(${element.var}.src, (${last} = ${value})))`
: x`${condition} && (${last} !== (${last} = ${value}))`; : x`${condition} && (${last} !== (${last} = ${value}))`;
} }

@ -40,6 +40,10 @@ export function safe_not_equal(a, b) {
return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function'); return a != a ? b == b : a !== b || ((a && typeof a === 'object') || typeof a === 'function');
} }
export function src_url_equal(a, b) {
return new URL(a, window.location.origin).href === (new URL(b, window.location.origin)).href;
}
export function not_equal(a, b) { export function not_equal(a, b) {
return a != a ? b == b : a !== b; return a != a ? b == b : a !== b;
} }

@ -11,7 +11,8 @@ import {
insert, insert,
noop, noop,
safe_not_equal, safe_not_equal,
space space,
src_url_equal
} from "svelte/internal"; } from "svelte/internal";
function create_fragment(ctx) { function create_fragment(ctx) {
@ -35,7 +36,7 @@ function create_fragment(ctx) {
this.h(); this.h();
}, },
h() { h() {
if (new URL(img.src, location).href !== new URL(img_src_value = "donuts.jpg", location).href) attr(img, "src", img_src_value); if (!src_url_equal(img.src, img_src_value = "donuts.jpg")) attr(img, "src", img_src_value);
attr(img, "alt", "donuts"); attr(img, "alt", "donuts");
}, },
m(target, anchor) { m(target, anchor) {

@ -10,7 +10,8 @@ import {
insert, insert,
noop, noop,
safe_not_equal, safe_not_equal,
space space,
src_url_equal
} from "svelte/internal"; } from "svelte/internal";
function create_fragment(ctx) { function create_fragment(ctx) {
@ -35,9 +36,9 @@ function create_fragment(ctx) {
}, },
h() { h() {
attr(img0, "alt", "potato"); attr(img0, "alt", "potato");
if (new URL(img0.src, location).href !== new URL(img0_src_value = /*url*/ ctx[0], location).href) attr(img0, "src", img0_src_value); if (!src_url_equal(img0.src, img0_src_value = /*url*/ ctx[0])) attr(img0, "src", img0_src_value);
attr(img1, "alt", "potato"); attr(img1, "alt", "potato");
if (new URL(img1.src, location).href !== new URL(img1_src_value = "" + (/*slug*/ ctx[1] + ".jpg"), location).href) attr(img1, "src", img1_src_value); if (!src_url_equal(img1.src, img1_src_value = "" + (/*slug*/ ctx[1] + ".jpg"))) attr(img1, "src", img1_src_value);
}, },
m(target, anchor) { m(target, anchor) {
insert(target, img0, anchor); insert(target, img0, anchor);
@ -45,11 +46,11 @@ function create_fragment(ctx) {
insert(target, img1, anchor); insert(target, img1, anchor);
}, },
p(ctx, [dirty]) { p(ctx, [dirty]) {
if (dirty & /*url*/ 1 && new URL(img0.src, location).href !== new URL(img0_src_value = /*url*/ ctx[0], location).href) { if (dirty & /*url*/ 1 && !src_url_equal(img0.src, img0_src_value = /*url*/ ctx[0])) {
attr(img0, "src", img0_src_value); attr(img0, "src", img0_src_value);
} }
if (dirty & /*slug*/ 2 && new URL(img1.src, location).href !== new URL(img1_src_value = "" + (/*slug*/ ctx[1] + ".jpg"), location).href) { if (dirty & /*slug*/ 2 && !src_url_equal(img1.src, img1_src_value = "" + (/*slug*/ ctx[1] + ".jpg"))) {
attr(img1, "src", img1_src_value); attr(img1, "src", img1_src_value);
} }
}, },

Loading…
Cancel
Save