MCPcopy Create free account
hub / github.com/Fiddle-Digital/string-scroll / StringParse

Class StringParse

src/StringParse.ts:4–86  ·  view source on GitHub ↗

Source from the content-addressed store, hash-verified

2
3
4export class StringParse {
5 private static i: StringParse;
6 public static getInstance(): StringParse {
7 if (!StringParse.i) {
8 StringParse.i = new StringParse();
9 }
10 return StringParse.i;
11 }
12
13 public parseOffset(e: any, o: any = "0,0", wH: any, baseRem: number = 16) {
14 let ofs = o.split(',');
15 if (ofs.length === 1) {
16 ofs = [ofs[0], ofs[0]];
17 }
18 let oV = ofs.map((os: any) => {
19 os = os.trim();
20 if (os.startsWith('calc')) {
21 return this.parseCalc(os, e, wH, baseRem);
22 } else {
23 return this.parseSingle(os, e, wH, baseRem);
24 }
25 });
26 return oV;
27 }
28 public parseSingle(v: string, element: any, wH: any, baseRem: number): number {
29 let isNegative = v.startsWith('-');
30 if (isNegative) {
31 v = v.slice(1);
32 }
33 let pV;
34 if (v === 'selfHeight') {
35 pV = element.offsetHeight;
36 } else if (v.endsWith('px')) {
37 pV = parseFloat(v);
38 } else if (v.endsWith('%')) {
39 pV = parseFloat(v) * wH / 100;
40 } else if (v.endsWith('rem')) {
41 pV = parseFloat(v) * baseRem;
42 }
43 return isNegative ? -pV : pV;
44 }
45 public parseCalc(c: string, element: any, wH: any, baseRem: number): number {
46 c = c.slice(5, -1);
47 let ps = c.split(/([-+])/).filter(Boolean);
48 return ps.reduce((t, p, i) => {
49 if (p === '-' || p === '+') {
50 return t;
51 } else {
52 let value = this.parseSingle(p.trim(), element, wH, baseRem);
53 if (ps[i - 1] === '-') {
54 return t - value;
55 } else {
56 return t + value;
57 }
58 }
59 }, 0);
60 }
61 public parseOrigin(o: string) {

Callers

nothing calls this directly

Calls

no outgoing calls

Tested by

no test coverage detected