mirror of
https://github.com/niklasvh/html2canvas.git
synced 2023-08-10 21:13:10 +03:00
fix: safari pseudo element content parsing (#2018)
* fix: await for fonts to be ready in document clone * fix: safari pseudo element content parsing * fix: safari counter-increment / counter-reset
This commit is contained in:
parent
076492042a
commit
3f599103fb
@ -30,25 +30,29 @@ export class CounterState {
|
||||
parse(style: CSSParsedCounterDeclaration): string[] {
|
||||
const counterIncrement = style.counterIncrement;
|
||||
const counterReset = style.counterReset;
|
||||
let canReset = true;
|
||||
|
||||
if (counterIncrement !== null) {
|
||||
counterIncrement.forEach(entry => {
|
||||
const counter = this.counters[entry.counter];
|
||||
if (counter) {
|
||||
if (counter && entry.increment !== 0) {
|
||||
canReset = false;
|
||||
counter[Math.max(0, counter.length - 1)] += entry.increment;
|
||||
}
|
||||
});
|
||||
}
|
||||
|
||||
const counterNames: string[] = [];
|
||||
counterReset.forEach(entry => {
|
||||
let counter = this.counters[entry.counter];
|
||||
counterNames.push(entry.counter);
|
||||
if (!counter) {
|
||||
counter = this.counters[entry.counter] = [];
|
||||
}
|
||||
counter.push(entry.reset);
|
||||
});
|
||||
if (canReset) {
|
||||
counterReset.forEach(entry => {
|
||||
let counter = this.counters[entry.counter];
|
||||
counterNames.push(entry.counter);
|
||||
if (!counter) {
|
||||
counter = this.counters[entry.counter] = [];
|
||||
}
|
||||
counter.push(entry.reset);
|
||||
});
|
||||
}
|
||||
|
||||
return counterNames;
|
||||
}
|
||||
|
@ -71,7 +71,7 @@ export class DocumentCloner {
|
||||
if window url is about:blank, we can assign the url to current by writing onto the document
|
||||
*/
|
||||
|
||||
const iframeLoad = iframeLoader(iframe).then(() => {
|
||||
const iframeLoad = iframeLoader(iframe).then(async () => {
|
||||
this.scrolledElements.forEach(restoreNodeScroll);
|
||||
if (cloneWindow) {
|
||||
cloneWindow.scrollTo(windowSize.left, windowSize.top);
|
||||
@ -91,6 +91,10 @@ export class DocumentCloner {
|
||||
return Promise.reject(`Error finding the ${this.referenceElement.nodeName} in the cloned document`);
|
||||
}
|
||||
|
||||
if (documentClone.fonts && documentClone.fonts.ready) {
|
||||
await documentClone.fonts.ready;
|
||||
}
|
||||
|
||||
if (typeof onclone === 'function') {
|
||||
return Promise.resolve()
|
||||
.then(() => onclone(documentClone))
|
||||
@ -398,7 +402,8 @@ export class DocumentCloner {
|
||||
);
|
||||
break;
|
||||
default:
|
||||
// console.log('ident', token, declaration);
|
||||
// safari doesn't parse string tokens correctly because of lack of quotes
|
||||
anonymousReplacedElement.appendChild(document.createTextNode(token.value));
|
||||
}
|
||||
}
|
||||
});
|
||||
|
4
src/global.d.ts
vendored
4
src/global.d.ts
vendored
@ -7,3 +7,7 @@ interface CSSStyleDeclaration {
|
||||
interface DocumentType extends Node, ChildNode {
|
||||
readonly internalSubset: string | null;
|
||||
}
|
||||
|
||||
interface Document {
|
||||
fonts: any;
|
||||
}
|
||||
|
Loading…
Reference in New Issue
Block a user