Legend.js
6.58 KB
// All material copyright ESRI, All Rights Reserved, unless otherwise specified.
// See https://js.arcgis.com/4.5/esri/copyright.txt for details.
//>>built
define("require exports ../core/tsSupport/declareExtendsHelper ../core/tsSupport/decorateHelper ./Widget ../core/HandleRegistry ../core/watchUtils ./Legend/LegendViewModel dojo/i18n!./Legend/nls/Legend ../core/lang ./support/widgetUtils dojox/gfx ../core/accessorSupport/decorators ./support/widget".split(" "),function(z,A,r,k,t,u,n,v,p,w,x,y,h,f){return function(q){function c(a){a=q.call(this)||this;a._handleRegistry=new u;a.activeLayerInfos=null;a.basemapLegendVisible=!1;a.groundLegendVisible=!1;
a.layerInfos=null;a.view=null;a.viewModel=new v;return a}r(c,q);c.prototype.postInitialize=function(){var a=this;this.own(n.on(this,"activeLayerInfos","change",function(){return a._refreshActiveLayerInfos(a.activeLayerInfos)}))};c.prototype.destroy=function(){this._handleRegistry.destroy();this._handleRegistry=null};c.prototype.render=function(){var a=this,e=this.activeLayerInfos,b=x.join("esri-legend","esri-widget"),e=e&&e.toArray().map(function(b){return a._renderLegendForLayer(b)}).filter(function(a){return!!a});
return f.tsx("div",{class:b},f.tsx("div",{class:"esri-legend__top",style:"height: 42px;background-color:#F8F8F8"},f.tsx("span",{style:"width:30px;margin-left:10%;margin-top:15px;float:left;color:black;"},"图例"),f.tsx("span",{id:"esri-legend__close", class:"esri-popup__icon esri-icon-close",onclick:"legendClose()", style:"margin-right:10%;margin-top:13px;float:right;cursor: pointer;"},f.tsx("img",{src:"images/x.png"}))),f.tsx("div",{class:"esri-legend__coot"},e))};c.prototype._refreshActiveLayerInfos=function(a){var e=this;this._handleRegistry.removeAll();a.forEach(function(a){return e._renderOnActiveLayerInfoChange(a)});this.scheduleRender()};c.prototype._renderOnActiveLayerInfoChange=function(a){var e=this,b=n.init(a,"version",function(){return e.scheduleRender()});this._handleRegistry.add(b,"version_"+a.layer.uid);a.children.forEach(function(a){return e._renderOnActiveLayerInfoChange(a)})};
c.prototype._renderLegendForLayer=function(a){var e=this;if(!a.ready)return null;var b=!!a.children.length,c="esri-legend__"+a.layer.uid+"-version-"+a.version;if(b){var d=a.children.map(function(a){return e._renderLegendForLayer(a)}).toArray(),b=(g={},g["esri-legend__group-layer"]=b,g);return f.tsx("div",{key:c,class:"esri-legend__service",classes:b},d)}if((b=a.legendElements)&&!b.length)return null;g=b.map(function(b){return e._renderLegendForElement(b,
a.layer)}).filter(function(a){return!!a});if(!g.length)return null;b=(d={},d["esri-legend__group-layer-child"]=!!a.parent,d);return f.tsx("div",{key:c,class:"esri-legend__service",classes:b},f.tsx("div",{class:"esri-legend__layer"},g));var g};c.prototype._renderLegendForElement=function(a,e,b){var c=this,d="color-ramp"===a.type,g="opacity-ramp"===a.type,m="size-ramp"===a.type,h=null;if("symbol-table"===a.type||m){var l=a.infos.map(function(b){return c._renderLegendForElementInfo(b,
e,m,a.legendType)}).filter(function(a){return!!a});l.length&&(h=f.tsx("div",{class:"esri-legend__layer-body"},l))}else if(d||g)h=this._renderLegendForRamp(a.infos,a.overlayColor,g);if(!h)return null;var l=a.title,k=null;"string"===typeof l?k=l:l&&(d=this._getTitle(l,d||g),k=l.title?l.title+" ("+d+")":d);b=b?"esri-legend__layer-child-table":"esri-legend__layer-table";d=k?f.tsx("div",{class:"esri-legend__layer-caption"},k):null;return f.tsx("div",{class:b},d,h)};c.prototype._renderLegendForRamp=function(a,
e,b){var c=a.length-1,d=null,d=2<c?25*c:50,g=document.createElement("div");g.className="esri-legend__color-ramp "+(b?"esri-legend__opacity-ramp":"");g.style.height=d+"px";b=y.createSurface(g,"100%",d);try{a.forEach(function(a,b){a.offset=b/c}),b.createRect({x:0,y:0,width:"100%",height:d}).setFill({type:"linear",x1:0,y1:0,x2:0,y2:d,colors:a}).setStroke(null),e&&0<e.a&&b.createRect({x:0,y:0,width:"100%",height:d}).setFill(e).setStroke(null)}catch(m){b.clear(),b.destroy()}if(!b)return null;a=a.filter(function(a){return!!a.label}).map(function(a){return f.tsx("div",
{class:"esri-legend__ramp-label"},a.label)});d={height:d+"px"};return f.tsx("div",{class:"esri-legend__layer-row"},f.tsx("div",{class:"esri-legend__layer-cell esri-legend__layer-cell--symbols",styles:{width:"24px"}},f.tsx("div",{class:"esri-legend__ramps",bind:g,afterCreate:this._attachToNode})),f.tsx("div",{class:"esri-legend__layer-cell esri-legend__layer-cell--info"},f.tsx("div",{class:"esri-legend__ramp-labels",styles:d},a)))};c.prototype._renderLegendForElementInfo=function(a,e,b,c){if(a.type)return this._renderLegendForElement(a,
e,!0);var d=null;c=this._isImageryStretchedLegend(e,c);a.symbol&&a.preview?d=f.tsx("div",{class:"esri-legend__symbol",bind:a.preview,afterCreate:this._attachToNode}):a.src&&(d=this._renderImage(a,e,c));if(!d)return null;e=(g={},g["esri-legend__imagery-layer-info--stretched"]=c,g);b=(h={},h["esri-legend__imagery-layer-info--stretched"]=c,h["esri-legend__size-ramp"]=!c&&b,h);return f.tsx("div",{class:"esri-legend__layer-row"},f.tsx("div",{class:"esri-legend__layer-cell esri-legend__layer-cell--symbols",
classes:b},d),f.tsx("div",{class:"esri-legend__layer-cell esri-legend__layer-cell--info",classes:e},a.label||""));var g,h};c.prototype._attachToNode=function(a){a.appendChild(this)};c.prototype._renderImage=function(a,c,b){var e=a.src,d=a.opacity;b=(g={},g["esri-legend__imagery-layer-image--stretched"]=b,g["esri-legend__symbol"]=!b,g);return f.tsx("img",{src:e,border:0,width:a.width,height:a.height,classes:b,styles:{opacity:""+(null!=d?d:c.opacity)}});var g};c.prototype._isImageryStretchedLegend=
function(a,c){return!!(c&&"Stretched"===c&&10.3<=a.version&&"esri.layers.ImageryLayer"===a.declaredClass)};c.prototype._getTitle=function(a,c){var b=null;c?b=a.ratioPercentTotal?"showRatioPercentTotal":a.ratioPercent?"showRatioPercent":a.ratio?"showRatio":a.normField?"showNormField":a.field?"showField":null:c||(b=a.normField?"showNormField":a.normByPct?"showNormPct":a.field?"showField":null);return b?w.substitute({field:a.field,normField:a.normField},p[b]):null};k([h.aliasOf("viewModel.activeLayerInfos"),
f.renderable()],c.prototype,"activeLayerInfos",void 0);k([h.aliasOf("viewModel.basemapLegendVisible"),f.renderable()],c.prototype,"basemapLegendVisible",void 0);k([h.aliasOf("viewModel.groundLegendVisible"),f.renderable()],c.prototype,"groundLegendVisible",void 0);k([h.aliasOf("viewModel.layerInfos"),f.renderable()],c.prototype,"layerInfos",void 0);k([h.aliasOf("viewModel.view"),f.renderable()],c.prototype,"view",void 0);k([h.property(),f.renderable()],c.prototype,"viewModel",void 0);return c=k([h.subclass("esri.widgets.Legend")],
c)}(h.declared(t))});