From 90d5b48845661ce99a204354f93fbbbc7a19f100 Mon Sep 17 00:00:00 2001 From: Albin Larsson Date: Tue, 15 May 2018 04:23:27 +0200 Subject: Add async method to utils for loading/checking images --- src/js/utils.js | 15 +++++++++++++++ 1 file changed, 15 insertions(+) (limited to 'src/js/utils.js') diff --git a/src/js/utils.js b/src/js/utils.js index ebfb9c96..0cd332dd 100644 --- a/src/js/utils.js +++ b/src/js/utils.js @@ -119,6 +119,21 @@ const utils = { }); }, + // Load image avoiding xhr/fetch CORS issues + // Server status can't be obtained this way unfortunately, so this uses "naturalWidth" to determine if the image has loaded. + // By default it checks if it is at least 1px, but you can add a second argument to change this. + loadImage(src, minWidth = 1) { + return new Promise((resolve, reject) => { + const image = new Image(); + const handler = () => { + delete image.onload; + delete image.onerror; + (image.naturalWidth >= minWidth ? resolve : reject)(image); + }; + Object.assign(image, {onload: handler, onerror: handler, src}); + }); + }, + // Load an external script loadScript(url) { return new Promise((resolve, reject) => { -- cgit v1.2.3 From 4db6bf7a2e2256c20c885a536fadd4a5f4433469 Mon Sep 17 00:00:00 2001 From: Albin Larsson Date: Wed, 9 May 2018 22:08:09 +0200 Subject: Make utils.toggleClass() compatible with Element.classList.toggle (rename toggle argument to 'force' and make it optional) --- src/js/utils.js | 14 ++++++++------ 1 file changed, 8 insertions(+), 6 deletions(-) (limited to 'src/js/utils.js') diff --git a/src/js/utils.js b/src/js/utils.js index 5c4934a1..0a1c8fcc 100644 --- a/src/js/utils.js +++ b/src/js/utils.js @@ -390,14 +390,16 @@ const utils = { } }, - // Toggle class on an element - toggleClass(element, className, toggle) { + // Mirror Element.classList.toggle, with IE compatibility for "force" argument + toggleClass(element, className, force) { if (utils.is.element(element)) { - const contains = element.classList.contains(className); - - element.classList[toggle ? 'add' : 'remove'](className); + let method = 'toggle'; + if (typeof force !== 'undefined') { + method = force ? 'add' : 'remove'; + } - return (toggle && !contains) || (!toggle && contains); + element.classList[method](className); + return element.classList.contains(className); } return null; -- cgit v1.2.3