style: replace Number/String/parseInt/parseFloat with shorter equivalents

Replace Number(x) with +x, String(x) with template literal,
parseInt(x, 10) with +, and parseFloat(x || "0") with +(x ?? 0).
Fix operator precedence with parentheses around ?? expressions.
main
Buddy 3 months ago
parent 7ae092ac98
commit 11cae8c89f

@ -16,7 +16,7 @@ export default class LeafletControlScale extends WithProps(HTMLElement, PROPS) {
connectedCallback() { connectedCallback() {
this.#obj = new Control.Scale({ this.#obj = new Control.Scale({
position: this.getAttribute('position') as ControlPosition | undefined, position: this.getAttribute('position') as ControlPosition | undefined,
maxWidth: parseInt(this.getAttribute('max-width') ?? '100', 10), maxWidth: +(this.getAttribute('max-width') ?? 100),
metric: !this.hasAttribute('metric') || this.getAttribute('metric') !== 'false', metric: !this.hasAttribute('metric') || this.getAttribute('metric') !== 'false',
imperial: !this.hasAttribute('imperial') || this.getAttribute('imperial') !== 'false', imperial: !this.hasAttribute('imperial') || this.getAttribute('imperial') !== 'false',
updateWhenIdle: updateWhenIdle:

@ -4,10 +4,7 @@ export default class LeafletLine extends HTMLElement {
} }
get latlng(): [number, number] { get latlng(): [number, number] {
return [ return [+(this.getAttribute('lat') ?? 0), +(this.getAttribute('lng') ?? 0)];
parseFloat(this.getAttribute('lat') || '0'),
parseFloat(this.getAttribute('lng') || '0'),
];
} }
attributeChangedCallback() { attributeChangedCallback() {

@ -113,13 +113,13 @@ export default class LeafletMap extends TypedBase {
Object.defineProperty(LeafletMap.prototype, propName, { Object.defineProperty(LeafletMap.prototype, propName, {
get(this: LeafletMap) { get(this: LeafletMap) {
const val = spec.mapGet && this.#map ? spec.mapGet(this.#map) : undefined; const val = spec.mapGet && this.#map ? spec.mapGet(this.#map) : undefined;
return val !== undefined ? val : Number(this.getAttribute(spec.attr) ?? spec.default); return val !== undefined ? val : +(this.getAttribute(spec.attr) ?? spec.default);
}, },
set(this: LeafletMap, v: number) { set(this: LeafletMap, v: number) {
if (spec.event) { if (spec.event) {
this.#syncAttr(spec.attr, String(v)); this.#syncAttr(spec.attr, `${v}`);
} else { } else {
this.setAttribute(spec.attr, String(v)); this.setAttribute(spec.attr, `${v}`);
} }
}, },
configurable: true, configurable: true,
@ -166,9 +166,9 @@ export default class LeafletMap extends TypedBase {
// Read view-state from attributes directly — the getters call getCenter()/getZoom() // Read view-state from attributes directly — the getters call getCenter()/getZoom()
// which throw if invoked before setView(), so we can't use them here. // which throw if invoked before setView(), so we can't use them here.
const lat = Number(this.getAttribute('lat') ?? 0); const lat = +(this.getAttribute('lat') ?? 0);
const lng = Number(this.getAttribute('lng') ?? 0); const lng = +(this.getAttribute('lng') ?? 0);
const zoom = Number(this.getAttribute('zoom') ?? 2); const zoom = +(this.getAttribute('zoom') ?? 2);
// Assign #map only after setView so the getters' `this.#map` guard is // Assign #map only after setView so the getters' `this.#map` guard is
// equivalent to "map is ready" — getCenter()/getZoom() throw before setView. // equivalent to "map is ready" — getCenter()/getZoom() throw before setView.
@ -193,7 +193,7 @@ export default class LeafletMap extends TypedBase {
for (const s of specs) { for (const s of specs) {
if (this.#map && s.mapGet) { if (this.#map && s.mapGet) {
const v = s.mapGet(this.#map); const v = s.mapGet(this.#map);
if (v !== undefined) this.#syncAttr(s.attr, String(v)); if (v !== undefined) this.#syncAttr(s.attr, `${v}`);
} }
} }
}; };
@ -233,7 +233,7 @@ export default class LeafletMap extends TypedBase {
if (!propName) return; if (!propName) return;
const spec = PROPS[propName] as PropDef; const spec = PROPS[propName] as PropDef;
if (spec.kind === 'num') { if (spec.kind === 'num') {
if (spec.mapSet && newValue !== null) spec.mapSet(this.#map, Number(newValue)); if (spec.mapSet && newValue !== null) spec.mapSet(this.#map, +newValue);
} else if (spec.kind === 'bool-off') { } else if (spec.kind === 'bool-off') {
spec.mapSet?.(this.#map, newValue === null); spec.mapSet?.(this.#map, newValue === null);
} }
@ -292,7 +292,7 @@ export default class LeafletMap extends TypedBase {
if (spec.kind === 'num') { if (spec.kind === 'num') {
if (spec.viewState) continue; if (spec.viewState) continue;
const v = this.getAttribute(spec.attr); const v = this.getAttribute(spec.attr);
if (v !== null) o[propName] = Number(v); if (v !== null) o[propName] = +v;
} else if (spec.kind === 'bool-off') { } else if (spec.kind === 'bool-off') {
if (this.hasAttribute(spec.attr)) o[propName] = false; if (this.hasAttribute(spec.attr)) o[propName] = false;
} else { } else {

@ -57,8 +57,8 @@ export default class LeafletMarker extends WithProps(HTMLElement, PROPS) {
if (!this.#obj || this.#syncing) return; if (!this.#obj || this.#syncing) return;
this.#syncing = true; this.#syncing = true;
const pos = this.#obj.getLatLng(); const pos = this.#obj.getLatLng();
this.setAttribute('lat', String(pos.lat)); this.setAttribute('lat', `${pos.lat}`);
this.setAttribute('lng', String(pos.lng)); this.setAttribute('lng', `${pos.lng}`);
this.#syncing = false; this.#syncing = false;
}; };
} }

@ -31,14 +31,14 @@ function definePropAccessors(proto: object, props: Record<string, PropDef>) {
get() { get() {
const el = this as HTMLElement; const el = this as HTMLElement;
const val = el.getAttribute(spec.attr); const val = el.getAttribute(spec.attr);
if (spec.kind === 'num') return val !== null ? Number(val) : spec.default; if (spec.kind === 'num') return val !== null ? +val : spec.default;
if (spec.kind === 'bool-on') return el.hasAttribute(spec.attr); if (spec.kind === 'bool-on') return el.hasAttribute(spec.attr);
return val ?? (spec as { default: string }).default; return val ?? (spec as { default: string }).default;
}, },
set(v: unknown) { set(v: unknown) {
const el = this as HTMLElement; const el = this as HTMLElement;
if (spec.kind === 'bool-on') el.toggleAttribute(spec.attr, !!v); if (spec.kind === 'bool-on') el.toggleAttribute(spec.attr, !!v);
else el.setAttribute(spec.attr, String(v)); else el.setAttribute(spec.attr, `${v}`);
}, },
configurable: true, configurable: true,
enumerable: true, enumerable: true,
@ -51,7 +51,7 @@ function definePropAccessors(proto: object, props: Record<string, PropDef>) {
// reading lat/lng/radius/opacity with a guaranteed number return. // reading lat/lng/radius/opacity with a guaranteed number return.
export function numAttr(el: HTMLElement, props: Record<string, PropDef>, name: string): number { export function numAttr(el: HTMLElement, props: Record<string, PropDef>, name: string): number {
const v = el.getAttribute(name); const v = el.getAttribute(name);
if (v !== null) return Number(v); if (v !== null) return +v;
return (props[name] as { default: number }).default; return (props[name] as { default: number }).default;
} }
@ -107,7 +107,7 @@ export function parseAttributeValue(value: string | null): unknown {
if (value === null) return null; if (value === null) return null;
if (value === 'true') return true; if (value === 'true') return true;
if (value === 'false') return false; if (value === 'false') return false;
const num = Number(value); const num = +value;
if (!isNaN(num) && value !== '') return num; if (!isNaN(num) && value !== '') return num;
try { try {
return JSON.parse(value); return JSON.parse(value);
@ -143,7 +143,7 @@ export function buildOptions<
if ('default' in spec && spec.default !== '') opts[propName] = spec.default; if ('default' in spec && spec.default !== '') opts[propName] = spec.default;
continue; continue;
} }
if (spec.kind === 'num') opts[propName] = Number(val); if (spec.kind === 'num') opts[propName] = +val;
else if (spec.kind === 'bool-on') opts[propName] = true; else if (spec.kind === 'bool-on') opts[propName] = true;
else if (spec.kind === 'bool-off') opts[propName] = false; else if (spec.kind === 'bool-off') opts[propName] = false;
else opts[propName] = val; else opts[propName] = val;

Loading…
Cancel
Save