@arcgis/core
Version:
ArcGIS Maps SDK for JavaScript: A complete 2D and 3D mapping and data visualization API
6 lines (5 loc) • 1.59 kB
JavaScript
/*
All material copyright ESRI, All Rights Reserved, unless otherwise specified.
See https://js.arcgis.com/4.33/esri/copyright.txt for details.
*/
import e from"../../core/Error.js";import o from"../../core/Logger.js";import r from"./LabelClass.js";const t=()=>o.getLogger("esri.layers.support.labelingInfo"),n=/\[([^[\]]+)\]/gi;function l(e,o,t){return e?e.map((e=>{const l=new r;if(l.read(e,t),l.labelExpression){const e=o.fields||o.layerDefinition?.fields||this.fields;l.labelExpression=l.labelExpression.replaceAll(n,((o,r)=>`[${s(r,e)}]`))}return l})):null}function s(e,o){if(!o)return e;const r=e.toLowerCase();for(let t=0;t<o.length;t++){const e=o[t].name;if(e.toLowerCase()===r)return e}return e}const i=["above-right","above-center","above-left","center-center","center-left","center-right","below-center","below-left","below-right"],a={esriGeometryPoint:i,esriGeometryMultiPatch:["always-horizontal"],esriGeometryPolygon:["always-horizontal"],esriGeometryPolyline:["center-along","above-along","below-along"],esriGeometryMultipoint:i,esriGeometryEnvelope:null};function c(o,r){const n=[];for(const l of o){const o=l.labelPlacement,s=a[r];if(!l.symbol)return t().warn("No ILabelClass symbol specified."),[];if(!s)return t().error(new e("labeling:unsupported-geometry-type",`Unable to create labels for layer, geometry type '${r}' is not supported`)),[];if(s.includes(o))n.push(l);else{const e=s[0];o&&t().warn(`Found invalid label placement type ${o} for ${r}. Defaulting to ${e}`);const i=l.clone();i.labelPlacement=e,n.push(i)}}return n}export{l as reader,c as validateLabelingInfo};