Skip to content

Commit

Permalink
Fixes to #628 to help it pass typescript's type checking (#634)
Browse files Browse the repository at this point in the history
* My best interpretation of what the typings should look like after merge of #464

* Apply variable name changes as per Juice10 review

Co-authored-by: Justin Halsall <Juice10@users.noreply.github.com>

* fix types

Co-authored-by: Eoghan Murray <eoghan@getthere.ie>
  • Loading branch information
Juice10 and eoghanmurray authored Jul 15, 2021
1 parent 0800f7a commit eb6b336
Show file tree
Hide file tree
Showing 4 changed files with 44 additions and 22 deletions.
36 changes: 23 additions & 13 deletions src/record/mutation.ts
Original file line number Diff line number Diff line change
Expand Up @@ -21,6 +21,7 @@ import {
removedNodeMutation,
addedNodeMutation,
Mirror,
styleAttributeValue,
} from '../types';
import {
isBlocked,
Expand Down Expand Up @@ -449,7 +450,7 @@ export default class MutationBuffer {
break;
}
case 'attributes': {
const target = (m.target as HTMLElement);
const target = m.target as HTMLElement;
let value = (m.target as HTMLElement).getAttribute(m.attributeName!);
if (m.attributeName === 'value') {
value = maskInputValue({
Expand All @@ -475,29 +476,38 @@ export default class MutationBuffer {
}
if (m.attributeName === 'style') {
const old = this.doc.createElement('span');
old.setAttribute('style', m.oldValue);
if (item.attributes['style'] === undefined) {
if (m.oldValue) {
old.setAttribute('style', m.oldValue);
}
if (
item.attributes['style'] === undefined ||
item.attributes['style'] === null
) {
item.attributes['style'] = {};
}
for (let i=0; i<target.style.length; i++) {
const styleObj = item.attributes['style'] as styleAttributeValue;
for (let i = 0; i < target.style.length; i++) {
let pname = target.style[i];
const newValue = target.style.getPropertyValue(pname);
const newPriority = target.style.getPropertyPriority(pname);
if (newValue != old.style.getPropertyValue(pname) ||
newPriority != old.style.getPropertyPriority(pname)) {
if (
newValue != old.style.getPropertyValue(pname) ||
newPriority != old.style.getPropertyPriority(pname)
) {
if (newPriority == '') {
item.attributes['style'][pname] = newValue;
styleObj[pname] = newValue;
} else {
item.attributes['style'][pname] = [newValue, newPriority];
styleObj[pname] = [newValue, newPriority];
}
}
}
for (let i=0; i<old.style.length; i++) {
for (let i = 0; i < old.style.length; i++) {
let pname = old.style[i];
if (target.style.getPropertyValue(pname) === '' ||
!target.style.getPropertyValue(pname) // covering potential non-standard browsers
) {
item.attributes['style'][pname] = false; // delete
if (
target.style.getPropertyValue(pname) === '' ||
!target.style.getPropertyValue(pname) // covering potential non-standard browsers
) {
styleObj[pname] = false; // delete
}
}
} else {
Expand Down
18 changes: 12 additions & 6 deletions src/replay/index.ts
Original file line number Diff line number Diff line change
Expand Up @@ -28,6 +28,8 @@ import {
canvasMutationData,
Mirror,
ElementState,
styleAttributeValue,
styleValueWithPriority,
} from '../types';
import {
createMirror,
Expand Down Expand Up @@ -1323,13 +1325,17 @@ export class Replayer {
}
}
} else if (attributeName === 'style') {
for (var s in value) {
if (value[s] === false) {
((target as Node) as Element).style.removeProperty(s);
} else if (Array.isArray(value[s])) {
((target as Node) as Element).style.setProperty(s, value[s][0], value[s][1]);
let styleValues = (value as styleAttributeValue);
const targetEl = ((target as Node) as HTMLElement);
for (var s in styleValues) {
if (styleValues[s] === false) {
targetEl.style.removeProperty(s);
} else if (styleValues[s] instanceof Array) {
const svp = (styleValues[s] as styleValueWithPriority);
targetEl.style.setProperty(s, svp[0], svp[1]);
} else {
((target as Node) as Element).style.setProperty(s, value[s]);
const svs = (styleValues[s] as string)
targetEl.style.setProperty(s, svs);
}
}
}
Expand Down
4 changes: 3 additions & 1 deletion src/types.ts
Original file line number Diff line number Diff line change
Expand Up @@ -295,9 +295,11 @@ export type textMutation = {
};

export type styleAttributeValue = {
[key:string]: [string, string] | string | false;
[key:string]: styleValueWithPriority | string | false;
};

export type styleValueWithPriority = [string, string];

export type attributeCursor = {
node: Node;
attributes: {
Expand Down
8 changes: 6 additions & 2 deletions typings/types.d.ts
Original file line number Diff line number Diff line change
Expand Up @@ -211,16 +211,20 @@ export declare type textMutation = {
id: number;
value: string | null;
};
export declare type styleAttributeValue = {
[key: string]: styleValueWithPriority | string | false;
};
export declare type styleValueWithPriority = [string, string];
export declare type attributeCursor = {
node: Node;
attributes: {
[key: string]: string | null;
[key: string]: string | styleAttributeValue | null;
};
};
export declare type attributeMutation = {
id: number;
attributes: {
[key: string]: string | null;
[key: string]: string | styleAttributeValue | null;
};
};
export declare type removedNodeMutation = {
Expand Down

0 comments on commit eb6b336

Please sign in to comment.