package.src.style.format_section_override.js Maven / Gradle / Ivy
Go to download
Show more of this group Show more artifacts with this name
Show all versions of mapbox-gl Show documentation
Show all versions of mapbox-gl Show documentation
A WebGL interactive maps library
The newest version!
// @flow
import assert from 'assert';
import type {Expression} from '../style-spec/expression/expression';
import type EvaluationContext from '../style-spec/expression/evaluation_context';
import type {Type} from '../style-spec/expression/types';
import type {ZoomConstantExpression} from '../style-spec/expression';
import {NullType} from '../style-spec/expression/types';
import {PossiblyEvaluatedPropertyValue} from './properties';
import {register} from '../util/web_worker_transfer';
// This is an internal expression class. It is only used in GL JS and
// has GL JS dependencies which can break the standalone style-spec module
export default class FormatSectionOverride implements Expression {
type: Type;
defaultValue: PossiblyEvaluatedPropertyValue;
constructor(defaultValue: PossiblyEvaluatedPropertyValue) {
assert(defaultValue.property.overrides !== undefined);
this.type = defaultValue.property.overrides ? defaultValue.property.overrides.runtimeType : NullType;
this.defaultValue = defaultValue;
}
evaluate(ctx: EvaluationContext) {
if (ctx.formattedSection) {
const overrides = this.defaultValue.property.overrides;
if (overrides && overrides.hasOverride(ctx.formattedSection)) {
return overrides.getOverride(ctx.formattedSection);
}
}
if (ctx.feature && ctx.featureState) {
return this.defaultValue.evaluate(ctx.feature, ctx.featureState);
}
return this.defaultValue.property.specification.default;
}
eachChild(fn: (_: Expression) => void) {
if (!this.defaultValue.isConstant()) {
const expr: ZoomConstantExpression<'source'> = ((this.defaultValue.value): any);
fn(expr._styleExpression.expression);
}
}
// Cannot be statically evaluated, as the output depends on the evaluation context.
outputDefined() {
return false;
}
serialize() {
return null;
}
}
register('FormatSectionOverride', FormatSectionOverride, {omit: ['defaultValue']});