scrivito
Version:
Scrivito is a professional, yet easy to use SaaS Enterprise Content Management Service, built for digital agencies and medium to large businesses. It is completely maintenance-free, cost-effective, and has unprecedented performance and security.
62 lines (54 loc) • 1.63 kB
text/typescript
// @rewire
import {
drawImgOnCanvas,
drawOnCanvasContext,
} from 'scrivito_sdk/app_support/decode/draw_img_on_canvas';
import {
clearGetCSSCanvasContext,
getCSSCanvasContext,
hasGetCSSCanvasContext,
} from 'scrivito_sdk/app_support/decode/get_css_canvas_context';
import { decodeOrLoadImg, hasDecodeImg } from './decode/decode_or_load_img';
export interface DecodedBackgroundImage {
decodedBackgroundUrl: string;
clear?: () => void;
}
export async function decodeBackgroundImage(
imageUrl: string
): Promise<DecodedBackgroundImage> {
try {
const img = await decodeOrLoadImg(imageUrl);
if (hasGetCSSCanvasContext()) return webkitCanvas(img);
if (!hasDecodeImg(img)) return drawCanvas(img);
return { decodedBackgroundUrl: `url(${imageUrl})` };
} catch {
return { decodedBackgroundUrl: `url(${imageUrl})` };
}
}
function webkitCanvas(img: HTMLImageElement): DecodedBackgroundImage {
const webkitCanvasIdentifier = `ScrivitoBackgroundImage${nextCounter()}`;
const ctx = getCSSCanvasContext(
'2d',
webkitCanvasIdentifier,
img.width,
img.height
);
drawOnCanvasContext(img, ctx);
return {
decodedBackgroundUrl: `-webkit-canvas(${webkitCanvasIdentifier})`,
clear: () => clearGetCSSCanvasContext(webkitCanvasIdentifier),
};
}
function drawCanvas(img: HTMLImageElement): DecodedBackgroundImage {
drawImgOnCanvas(img);
return { decodedBackgroundUrl: `url(${img.src})` };
}
let counter: number = 0;
function nextCounter(): number {
counter += 1;
return counter;
}
// For test purpose only
export function resetCounter(): void {
counter = 0;
}