Skip to content

Commit 4ec7fd6

Browse files
palemieuxBen Roberts
andauthored
Refactor and protect for..in loops (#209)
Co-authored-by: Ben Roberts <[email protected]>
1 parent ebeb24b commit 4ec7fd6

File tree

5 files changed

+90
-49
lines changed

5 files changed

+90
-49
lines changed

src/main/js/doc.js

Lines changed: 29 additions & 14 deletions
Original file line numberDiff line numberDiff line change
@@ -100,6 +100,8 @@
100100

101101
for (var sid in estack[0].styles) {
102102

103+
if (! estack[0].styles.hasOwnProperty(sid)) continue;
104+
103105
mergeChainedStyles(estack[0], estack[0].styles[sid], errorHandler);
104106

105107
}
@@ -362,6 +364,8 @@
362364
ini.initFromNode(node, errorHandler);
363365

364366
for (var qn in ini.styleAttrs) {
367+
368+
if (! ini.styleAttrs.hasOwnProperty(qn)) continue;
365369

366370
doc.head.styling.initials[qn] = ini.styleAttrs[qn];
367371

@@ -608,9 +612,10 @@
608612

609613
for (var i in doc.head.layout.regions) {
610614

611-
hasRegions = true;
612-
613-
break;
615+
if (doc.head.layout.regions.hasOwnProperty(i)) {
616+
hasRegions = true;
617+
break;
618+
}
614619

615620
}
616621

@@ -628,6 +633,8 @@
628633

629634
for (var region_i in doc.head.layout.regions) {
630635

636+
if (! doc.head.layout.regions.hasOwnProperty(region_i)) continue;
637+
631638
resolveTiming(doc, doc.head.layout.regions[region_i], null, null);
632639

633640
}
@@ -713,21 +720,25 @@
713720

714721
var s = null;
715722

716-
for (var set_i in element.sets) {
723+
if ("sets" in element) {
724+
725+
for (var set_i = 0; set_i < element.sets.length; set_i++) {
717726

718-
resolveTiming(doc, element.sets[set_i], s, element);
727+
resolveTiming(doc, element.sets[set_i], s, element);
719728

720-
if (element.timeContainer === "seq") {
729+
if (element.timeContainer === "seq") {
721730

722-
implicit_end = element.sets[set_i].end;
731+
implicit_end = element.sets[set_i].end;
723732

724-
} else {
733+
} else {
725734

726-
implicit_end = Math.max(implicit_end, element.sets[set_i].end);
735+
implicit_end = Math.max(implicit_end, element.sets[set_i].end);
727736

728-
}
737+
}
729738

730-
s = element.sets[set_i];
739+
s = element.sets[set_i];
740+
741+
}
731742

732743
}
733744

@@ -749,9 +760,9 @@
749760

750761
}
751762

752-
} else {
753-
754-
for (var content_i in element.contents) {
763+
} else if ("contents" in element) {
764+
765+
for (var content_i = 0; content_i < element.contents.length; content_i++) {
755766

756767
resolveTiming(doc, element.contents[content_i], s, element);
757768

@@ -1270,6 +1281,8 @@
12701281

12711282
for (var qname in styles) {
12721283

1284+
if (! styles.hasOwnProperty(qname)) continue;
1285+
12731286
if (this.qname) {
12741287

12751288
reportError(errorHandler, "More than one style specified on set");
@@ -1748,6 +1761,8 @@
17481761

17491762
for (var sname in from_styles) {
17501763

1764+
if (! from_styles.hasOwnProperty(sname)) continue;
1765+
17511766
if (sname in into_styles)
17521767
continue;
17531768

src/main/js/html.js

Lines changed: 20 additions & 10 deletions
Original file line numberDiff line numberDiff line change
@@ -138,9 +138,13 @@
138138

139139
element.appendChild(rootcontainer);
140140

141-
for (var i in isd.contents) {
141+
if ("contents" in isd) {
142142

143-
processElement(context, rootcontainer, isd.contents[i], isd);
143+
for (var i = 0; i < isd.contents.length; i++) {
144+
145+
processElement(context, rootcontainer, isd.contents[i], isd);
146+
147+
}
144148

145149
}
146150

@@ -297,7 +301,7 @@
297301

298302
/* tranform TTML styles to CSS styles */
299303

300-
for (var i in STYLING_MAP_DEFS) {
304+
for (var i = 0; i < STYLING_MAP_DEFS.length; i++) {
301305

302306
var sm = STYLING_MAP_DEFS[i];
303307

@@ -447,9 +451,13 @@
447451

448452
/* process the children of the ISD element */
449453

450-
for (var k in isd_element.contents) {
454+
if ("contents" in isd_element) {
455+
456+
for (var k = 0; k < isd_element.contents.length; k++) {
451457

452-
processElement(context, proc_e, isd_element.contents[k], isd_element);
458+
processElement(context, proc_e, isd_element.contents[k], isd_element);
459+
460+
}
453461

454462
}
455463

@@ -681,7 +689,9 @@
681689

682690
function applyLinePadding(lineList, lp, context) {
683691

684-
for (var i in lineList) {
692+
if (lineList === null) return;
693+
694+
for (var i = 0; i < lineList.length; i++) {
685695

686696
var l = lineList[i].elements.length;
687697

@@ -927,7 +937,7 @@
927937

928938
/* copy specified style properties from the sibling ruby container */
929939

930-
for(var k = 0; k < sib.style.length; k++) {
940+
for (var k = 0; k < sib.style.length; k++) {
931941

932942
ruby.style.setProperty(sib.style.item(k), sib.style.getPropertyValue(sib.style.item(k)));
933943

@@ -1379,7 +1389,7 @@
13791389

13801390
/* per IMSC1 */
13811391

1382-
for (var i in attr) {
1392+
for (var i = 0; i < attr.length; i++) {
13831393

13841394
if (attr[i] === "monospaceSerif") {
13851395

@@ -1673,7 +1683,7 @@
16731683

16741684
if (attr !== "none") {
16751685

1676-
for (var i in attr) {
1686+
for (var i = 0; i < attr.length; i++) {
16771687

16781688

16791689
s.push(attr[i].x_off.toUsedLength(context.w, context.h) + "px " +
@@ -1805,7 +1815,7 @@
18051815

18061816
var STYLMAP_BY_QNAME = {};
18071817

1808-
for (var i in STYLING_MAP_DEFS) {
1818+
for (var i = 0; i < STYLING_MAP_DEFS.length; i++) {
18091819

18101820
STYLMAP_BY_QNAME[STYLING_MAP_DEFS[i].qname] = STYLING_MAP_DEFS[i];
18111821
}

src/main/js/isd.js

Lines changed: 31 additions & 15 deletions
Original file line numberDiff line numberDiff line change
@@ -197,13 +197,15 @@
197197

198198
/* apply set (animation) styling */
199199

200-
for (var i in elem.sets) {
200+
if ("sets" in elem) {
201+
for (var i = 0; i < elem.sets.length; i++) {
201202

202-
if (offset < elem.sets[i].begin || offset >= elem.sets[i].end)
203-
continue;
203+
if (offset < elem.sets[i].begin || offset >= elem.sets[i].end)
204+
continue;
204205

205-
isd_element.styleAttrs[elem.sets[i].qname] = elem.sets[i].value;
206+
isd_element.styleAttrs[elem.sets[i].qname] = elem.sets[i].value;
206207

208+
}
207209
}
208210

209211
/*
@@ -215,6 +217,8 @@
215217

216218
for (var qname in isd_element.styleAttrs) {
217219

220+
if (! isd_element.styleAttrs.hasOwnProperty(qname)) continue;
221+
218222
spec_attr[qname] = true;
219223

220224
/* special rule for tts:writingMode (section 7.29.1 of XSL)
@@ -245,7 +249,7 @@
245249

246250
if (parent !== null) {
247251

248-
for (var j in imscStyles.all) {
252+
for (var j = 0; j < imscStyles.all.length; j++) {
249253

250254
var sa = imscStyles.all[j];
251255

@@ -344,8 +348,8 @@
344348

345349
/* initial value styling */
346350

347-
for (var k in imscStyles.all) {
348-
351+
for (var k = 0; k < imscStyles.all.length; k++) {
352+
349353
var ivs = imscStyles.all[k];
350354

351355
/* skip if value is already specified */
@@ -401,8 +405,8 @@
401405
/* compute styles (only for non-inherited styles) */
402406
/* TODO: get rid of spec_attr */
403407

404-
for (var z in imscStyles.all) {
405-
408+
for (var z = 0; z < imscStyles.all.length; z++) {
409+
406410
var cs = imscStyles.all[z];
407411

408412
if (!(cs.qname in spec_attr)) continue;
@@ -447,7 +451,7 @@
447451

448452
/* process contents of the element */
449453

450-
var contents;
454+
var contents = null;
451455

452456
if (parent === null) {
453457

@@ -473,7 +477,7 @@
473477

474478
}
475479

476-
for (var x in contents) {
480+
for (var x = 0; contents !== null && x < contents.length; x++) {
477481

478482
var c = isdProcessContentElement(doc, offset, region, body, isd_element, associated_region_id, contents[x], errorHandler, context);
479483

@@ -493,6 +497,7 @@
493497
/* remove styles that are not applicable */
494498

495499
for (var qnameb in isd_element.styleAttrs) {
500+
if (!isd_element.styleAttrs.hasOwnProperty(qnameb)) continue;
496501

497502
/* true if not applicable */
498503

@@ -529,7 +534,12 @@
529534
if (! na) {
530535

531536
var da = imscStyles.byQName[qnameb];
532-
na = da.applies.indexOf(isd_element.kind) === -1;
537+
538+
if ("applies" in da){
539+
540+
na = da.applies.indexOf(isd_element.kind) === -1;
541+
542+
}
533543

534544
}
535545

@@ -598,7 +608,7 @@
598608

599609
var element;
600610

601-
for(var i = 0; i < elist.length;) {
611+
for (var i = 0; i < elist.length;) {
602612

603613
element = elist[i];
604614

@@ -629,7 +639,7 @@
629639

630640
/* remove trailing LWSPs */
631641

632-
for(i = 0; i < elist.length; i++) {
642+
for (i = 0; i < elist.length; i++) {
633643

634644
element = elist[i];
635645

@@ -652,7 +662,11 @@
652662

653663
function constructSpanList(element, elist) {
654664

655-
for (var i in element.contents) {
665+
if (! ("contents" in element)) {
666+
return;
667+
}
668+
669+
for (var i = 0; i < element.contents.length; i++) {
656670

657671
var child = element.contents[i];
658672
var ruby = child.styleAttrs[imscStyles.byName.ruby.qname];
@@ -733,6 +747,8 @@
733747

734748
for (var sname in ttelem.styleAttrs) {
735749

750+
if (! ttelem.styleAttrs.hasOwnProperty(sname)) continue;
751+
736752
this.styleAttrs[sname] =
737753
ttelem.styleAttrs[sname];
738754
}

src/main/js/styles.js

Lines changed: 8 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -192,7 +192,7 @@
192192
var ffs = str.split(",");
193193
var rslt = [];
194194

195-
for (var i in ffs) {
195+
for (var i = 0; i < ffs.length; i++) {
196196

197197
if (ffs[i].charAt(0) !== "'" && ffs[i].charAt(0) !== '"') {
198198

@@ -460,7 +460,7 @@
460460
if (s.length > 4)
461461
return null;
462462
var r = [];
463-
for (var i in s) {
463+
for (var i = 0; i < s.length; i++) {
464464

465465
var l = imscUtils.parseLength(s[i]);
466466
if (!l)
@@ -538,7 +538,7 @@
538538

539539
var out = [];
540540

541-
for (var i in padding) {
541+
for (var i = 0 ; i < padding.length; i++) {
542542

543543
if (padding[i].value === 0) {
544544

@@ -550,9 +550,9 @@
550550
padding[i].value,
551551
padding[i].unit,
552552
element.styleAttrs[imscStyles.byName.fontSize.qname],
553-
i === "0" || i === "2" ? element.styleAttrs[imscStyles.byName.extent.qname].h : element.styleAttrs[imscStyles.byName.extent.qname].w,
554-
i === "0" || i === "2" ? doc.cellLength.h : doc.cellLength.w,
555-
i === "0" || i === "2" ? doc.pxLength.h: doc.pxLength.w
553+
i === 0 || i === 2 ? element.styleAttrs[imscStyles.byName.extent.qname].h : element.styleAttrs[imscStyles.byName.extent.qname].w,
554+
i === 0 || i === 2 ? doc.cellLength.h : doc.cellLength.w,
555+
i === 0 || i === 2 ? doc.pxLength.h: doc.pxLength.w
556556
);
557557

558558
if (out[i] === null) return null;
@@ -834,7 +834,7 @@
834834

835835
var rslt = {style: null, symbol: null, color: null, position: null};
836836

837-
for (var i in e) {
837+
for (var i = 0; i < e.length; i++) {
838838

839839
if (e[i] === "none" || e[i] === "auto") {
840840

@@ -989,7 +989,7 @@
989989

990990
var r = [];
991991

992-
for (var i in attr) {
992+
for (var i = 0; i < attr.length; i++) {
993993

994994
var shadow = {};
995995

0 commit comments

Comments
 (0)