@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.32/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"),l=/\[([^[\]]+)\]/gi;function n(e,o,t){return e?e.map((e=>{const n=new r;if(n.read(e,t),n.labelExpression){const e=o.fields||o.layerDefinition?.fields||this.fields;n.labelExpression=n.labelExpression.replaceAll(l,((o,r)=>`[${s(r,e)}]`))}return n})):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={esriGeometryPoint:["above-right","above-center","above-left","center-center","center-left","center-right","below-center","below-left","below-right"],esriGeometryMultiPatch:["always-horizontal"],esriGeometryPolygon:["always-horizontal"],esriGeometryPolyline:["center-along","above-along","below-along"],esriGeometryMultipoint:null,esriGeometryEnvelope:null};function a(o,r){const l=[];for(const n of o){const o=n.labelPlacement,s=i[r];if(!n.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))l.push(n);else{const e=s[0];o&&t().warn(`Found invalid label placement type ${o} for ${r}. Defaulting to ${e}`);const i=n.clone();i.labelPlacement=e,l.push(i)}}return l}export{n as reader,a as validateLabelingInfo};