Feature.js 14 KB

123456789101112131415161718192021222324252627282930
  1. // All material copyright ESRI, All Rights Reserved, unless otherwise specified.
  2. // See https://js.arcgis.com/4.7/esri/copyright.txt for details.
  3. //>>built
  4. define("require exports ../core/tsSupport/declareExtendsHelper ../core/tsSupport/decorateHelper dojo/i18n!./Feature/nls/Feature dojo/keys ../core/promiseUtils ../core/watchUtils ../core/accessorSupport/decorators ./Widget ./Feature/FeatureViewModel ./Feature/support/attachmentUtils ./support/uriUtils ./support/widget".split(" "),function(x,D,y,l,p,r,z,A,m,B,t,u,C,b){function e(b,d){return void 0===d?"esri-feature__"+b:"esri-feature__"+b+"-"+d}return function(v){function d(a){a=v.call(this)||this;
  5. a._chartMap=new Map;a._activeMediaMap=new Map;a._chartRequirePromise=null;a._refreshTimers=new Map;a._mediaInfo=new Map;a.contentEnabled=null;a.graphic=null;a.title=null;a.view=null;a.viewModel=new t;return a}y(d,v);d.prototype.postInitialize=function(){var a=this;this.own(A.init(this,"viewModel.content",function(){return a._setupMediaRefreshTimers()}))};d.prototype.destroy=function(){this._clearMediaRefreshTimers();this._activeMediaMap.clear();this._activeMediaMap=null;this._cancelChartModules();
  6. this._destroyCharts()};d.prototype.render=function(){var a=b.tsx("div",{key:e("loading-container"),class:"esri-feature__loading-container"},b.tsx("span",{class:b.join("esri-icon-loading-indicator esri-rotating","esri-feature__loading-spinner")})),a=this.viewModel.waitingForContent?a:this._renderContent();return b.tsx("div",{class:"esri-feature"},b.tsx("div",{class:"esri-feature__size-container"},b.tsx("div",{class:"esri-feature__main-container"},a)))};d.prototype.goToMedia=function(a,c){this._setContentElementMedia(a,
  7. c)};d.prototype.nextMedia=function(a){this._pageContentElementMedia(a,"next")};d.prototype.previousMedia=function(a){this._pageContentElementMedia(a,"previous")};d.prototype._cancelChartModules=function(){this._chartRequirePromise&&this._chartRequirePromise.cancel()};d.prototype._destroyChart=function(a){var c=this._chartMap.get(a);c&&(c.chart.destroy(),c.tooltip.destroy());this._chartMap.delete(a)};d.prototype._destroyCharts=function(){this._chartMap.forEach(function(a){a.chart.destroy();a.tooltip.destroy()});
  8. this._chartMap.clear()};d.prototype._renderContent=function(){this._destroyCharts();var a=this.viewModel.content;if("string"===typeof a)return b.tsx("div",{key:e("content-string"),innerHTML:a});if(b.isWidget(a))return b.tsx("div",{key:e("content-widget")},a.render());if(a instanceof HTMLElement)return b.tsx("div",{key:e("content-html-element"),bind:a,afterCreate:this._attachToNode});if(b.isWidgetBase(a))return b.tsx("div",{key:e("content-dijit"),bind:a.domNode,afterCreate:this._attachToNode});if(Array.isArray(a))return a.length?
  9. b.tsx("div",{key:e("content-content-elements")},a.map(this._renderContentElement,this)):null};d.prototype._renderContentElement=function(a,c){switch(a.type){case "attachments":return this._renderAttachments(a,c);case "fields":return this._renderFields(a,c);case "media":return this._renderMedia(a,c);case "text":return this._renderText(a,c);default:return null}};d.prototype._renderAttachmentInfo=function(a){var c=a.attachmentInfo,k=a.supportsResizeAttachments,f=c.contentType;a=c.name;var d=c.url,g=
  10. k&&u.isSupportedImage(f),e=-1===d.indexOf("?")?"?":"\x26",f=g?""+d+e+"w\x3d48":u.getIconPath(f),g=(n={},n["esri-feature__attachment-item-mask--icon"]=!g,n),n=(q={},q["esri-feature__attachments-image--resizable"]=k,q);return b.tsx("li",{class:"esri-feature__attachments-item",key:c},b.tsx("a",{class:"esri-feature__attachments-item-link",href:d,target:"_blank"},b.tsx("div",{classes:g,class:"esri-feature__attachment-item-mask"},b.tsx("img",{alt:a,classes:n,class:"esri-feature__attachments-image",title:a,
  11. src:f}),b.tsx("span",{class:"esri-feature__attachments-image-overlay"},b.tsx("span",{"aria-hidden":"true",class:"esri-feature__attachments-link-icon esri-icon-link-external"}))),b.tsx("span",{class:"esri-feature__attachments-filename"},a||p.noTitle)));var n,q};d.prototype._renderAttachments=function(a,c){var k=this,f=a.displayType,d=(c=a.attachmentInfos)&&c.length,g=this.get("graphic.layer.capabilities.operations.supportsResizeAttachments"),f=(h={},h["esri-feature__attachments--list"]="preview"!==
  12. f,h["esri-feature__attachments--preview"]="preview"===f,h);return d?b.tsx("div",{key:e("attachments-element"),class:b.join("esri-feature__attachments","esri-feature__content-element"),classes:f},b.tsx("div",{class:"esri-feature__attachments-title"},p.attach),b.tsx("ul",{class:"esri-feature__attachments-items"},c.map(function(c,b){return k._renderAttachmentInfo({attachmentInfo:c,attachmentInfoIndex:b,supportsResizeAttachments:g,contentElement:a})}))):null;var h};d.prototype._forceLTR=function(a){return"\x26lrm;"+
  13. a};d.prototype._renderFieldInfo=function(a,c){var k=this.viewModel.formattedAttributes,f=k?k.content[c]||k.global:null,d=a.fieldName,k=a.label||d,f=f?null==f[d]?"":f[d]:"";a=!(!a.format||!a.format.dateFormat);f="number"!==typeof f||a?C.autoLink(f):this._forceLTR(f);a=(g={},g["esri-feature__field-data--date"]=a,g);return b.tsx("tr",{key:e("fields-element-info-row",c)},b.tsx("th",{key:e("fields-element-info-row-header",c),class:"esri-feature__field-header",innerHTML:k}),b.tsx("td",{key:e("fields-element-info-row-data",
  14. c),class:"esri-feature__field-data",classes:a,innerHTML:f}));var g};d.prototype._renderFields=function(a,c){var k=this;return(a=a.fieldInfos)?b.tsx("div",{key:e("fields-element",c),class:b.join("esri-feature__fields","esri-feature__content-element")},b.tsx("table",{class:"esri-table",summary:p.fieldsSummary,key:e("fields-element-table",c)},b.tsx("tbody",{key:e("fields-element-table-body",c)},a.map(function(a){return k._renderFieldInfo(a,c)})))):null};d.prototype._shouldOpenInNewTab=function(a){void 0===
  15. a&&(a="");return!/^(?:mailto:|tel:)/.test(a.trim().toLowerCase())};d.prototype._clearMediaRefreshTimers=function(){this._refreshTimers.forEach(function(a){return clearTimeout(a)});this._refreshTimers.clear()};d.prototype._clearMediaRefreshTimer=function(a){var c=this._refreshTimers.get(a);c&&(clearTimeout(c),this._refreshTimers.delete(a))};d.prototype._getImageSource=function(a,c){var k=-1!==a.indexOf("?")?"\x26":"?";a=a.split("#");var b=a[1],b=void 0===b?"":b;return""+a[0]+k+"timestamp\x3d"+c+(b?
  16. "#":"")+b};d.prototype._setupMediaRefreshTimer=function(a){var c=this.get("viewModel.content");if(Array.isArray(c)&&(c=c[a])&&"media"===c.type){var b=this._activeMediaMap.get(a);isNaN(b)&&(b=0);(c=c.mediaInfos[b])&&"image"===c.type&&c.refreshInterval&&this._setRefreshTimeout(a,c)}};d.prototype._setupMediaRefreshTimers=function(){var a=this;this._clearMediaRefreshTimers();var c=this.get("viewModel.content");Array.isArray(c)&&c.forEach(function(c,b){return a._setupMediaRefreshTimer(b)})};d.prototype._updateMediaInfoTimestamp=
  17. function(a,c){var b=Date.now();this._mediaInfo.set(c,{timestamp:b,sourceURL:this._getImageSource(a,b)});this.scheduleRender()};d.prototype._setRefreshTimeout=function(a,c){var b=this,d=c.refreshInterval,e=c.value;d&&(c=6E4*d,this._updateMediaInfoTimestamp(e.sourceURL,a),c=setInterval(function(){b._updateMediaInfoTimestamp(e.sourceURL,a)},c),this._refreshTimers.set(a,c))};d.prototype._renderMediaInfoType=function(a,c){var d=a.value,f=a.title,f=void 0===f?"":f,w=a.type,g=a.refreshInterval,h=d.sourceURL,
  18. d=d.linkURL;if("image"===w)return a=this._shouldOpenInNewTab(d)?"_self":"_blank",h=(g=g?this._mediaInfo.get(c):null)?g.sourceURL:h,c=b.tsx("img",{alt:f,key:e("media-image-"+(g?g.timestamp:0),c),src:h}),(f=d?b.tsx("a",{title:f,href:d,target:a},c):null)?f:c;if(-1!==w.indexOf("chart"))return b.tsx("div",{key:e("chart",c),bind:this,"data-media-info":a,"data-content-element-index":c,class:"esri-feature__media-chart",afterCreate:this._getChartDependencies,afterUpdate:this._getChartDependencies})};d.prototype._getChartDependencies=
  19. function(a){var c=this,b=a["data-media-info"],d=a["data-content-element-index"],e=b.value,g=e.theme||"Claro",h=b.type,n=g;"string"===typeof g&&(n=g.replace(/\./g,"/"));this._cancelChartModules();this._chartRequirePromise=z.create(function(a){return x(["dojox/charting/Chart2D","dojox/charting/action2d/Tooltip","dojox/charting/themes/"+n],function(){for(var c=[],b=0;b<arguments.length;b++)c[b]=arguments[b];return a(c)})}).then(function(b){c._renderChart(a,d,h,e,b[0],b[1],b[2]);c._chartRequirePromise=
  20. null})};d.prototype._renderChart=function(a,c,b,d,e,g,h){a=new e(a,{margins:{l:4,t:4,r:4,b:4}});h&&a.setTheme(h);switch(b){case "pie-chart":a.addPlot("default",{type:"Pie",labels:!1});a.addSeries("Series A",d.chartOptions);break;case "line-chart":a.addPlot("default",{type:"Markers"});a.addAxis("x",{min:0,majorTicks:!1,minorTicks:!1,majorLabels:!1,minorLabels:!1});a.addAxis("y",{includeZero:!0,vertical:!0,fixUpper:"minor"});d.chartOptions.forEach(function(a,c){a.x=c+1});a.addSeries("Series A",d.chartOptions);
  21. break;case "column-chart":a.addPlot("default",{type:"Columns",gap:3});a.addAxis("y",{includeZero:!0,vertical:!0,fixUpper:"minor"});a.addSeries("Series A",d.chartOptions);break;case "bar-chart":a.addPlot("default",{type:"Bars",gap:3}),a.addAxis("x",{includeZero:!0,fixUpper:"minor",minorLabels:!1}),a.addAxis("y",{vertical:!0,majorTicks:!1,minorTicks:!1,majorLabels:!1,minorLabels:!1}),a.addSeries("Series A",d.chartOptions)}b=new g(a);a.render();this._chartMap.set(c,{chart:a,tooltip:b})};d.prototype._renderMediaInfo=
  22. function(a,c){this._destroyChart(c);var d=this._renderMediaInfoType(a,c),f=a.title?b.tsx("div",{key:e("media-title",c),class:"esri-feature__media-item-title",innerHTML:a.title}):null;a=a.caption?b.tsx("div",{key:e("media-caption",c),class:"esri-feature__media-item-caption",innerHTML:a.caption}):null;return b.tsx("div",{key:e("media-container",c),class:"esri-feature__media-item-container"},b.tsx("div",{key:e("media-item-container",c),class:"esri-feature__media-item"},d),f,a)};d.prototype._renderMediaStatsItem=
  23. function(a,c,d){d="chart"===d?b.join("esri-feature__media-chart-icon","esri-icon-chart"):b.join("esri-feature__media-image-icon","esri-icon-media");return b.tsx("li",{class:"esri-feature__media-image-summary"},b.tsx("span",{"aria-hidden":"true",class:d}),b.tsx("span",{class:"esri-feature__media-count","aria-label":a},"("+c+")"))};d.prototype._renderMediaPageButton=function(a,c){var d=(a="previous"===a)?p.previous:p.next,f=a?b.join("esri-feature__button","esri-feature__media-previous"):b.join("esri-feature__button",
  24. "esri-feature__media-next"),l=a?b.join("esri-feature__icon","esri-feature__media-previous-icon","esri-icon-left-triangle-arrow"):b.join("esri-feature__icon","esri-feature__media-next-icon","esri-icon-right-triangle-arrow"),g=a?b.join("esri-feature__icon","esri-feature__media-previous-icon--rtl","esri-icon-right-triangle-arrow"):b.join("esri-feature__icon","esri-feature__media-next-icon--rtl","esri-icon-left-triangle-arrow"),h=a?this._previousClick:this._nextClick;return b.tsx("div",{key:e(a?"previous":
  25. "next",c),title:d,tabIndex:0,role:"button",class:f,"data-content-element-index":c,bind:this,onkeydown:h,onclick:h},b.tsx("span",{"aria-hidden":"true",class:l}),b.tsx("span",{"aria-hidden":"true",class:g}),b.tsx("span",{class:"esri-icon-font-fallback-text"},d))};d.prototype._handleMediaKeyup=function(a){var c=a.currentTarget["data-content-element-index"],b=a.keyCode;b===r.LEFT_ARROW&&(a.stopPropagation(),this.previousMedia(c));b===r.RIGHT_ARROW&&(a.stopPropagation(),this.nextMedia(c))};d.prototype._renderMedia=
  26. function(a,c){a=a.mediaInfos;var d=this._getMediaStats(a),f=d.total,l=(g={},g["esri-feature--media-pagination-visible"]=1<d.total,g),g=this._renderMediaStatsItem(p.numImages,d.images,"image"),d=this._renderMediaStatsItem(p.numCharts,d.charts,"chart"),h=this._renderMediaPageButton("previous",c),n=this._renderMediaPageButton("next",c),m=this._activeMediaMap.get(c);isNaN(m)&&(this._activeMediaMap.set(c,0),m=0);return f?b.tsx("div",{key:e("media-element",c),"data-content-element-index":c,bind:this,onkeyup:this._handleMediaKeyup,
  27. class:b.join("esri-feature__media","esri-feature__content-element"),classes:l},b.tsx("ul",{class:"esri-feature__media-summary"},g,d),b.tsx("div",{key:e("media-element-container",c),class:"esri-feature__media-container"},h,this._renderMediaInfo(a[m],c),n)):null;var g};d.prototype._renderText=function(a,c){return a.text?b.tsx("div",{key:e("text-element",c),innerHTML:a.text,class:b.join("esri-feature__text","esri-feature__content-element")}):null};d.prototype._attachToNode=function(a){a.appendChild(this)};
  28. d.prototype._getMediaStats=function(a){var c=0,b=0;a.forEach(function(a){a=a.type;"image"===a?c++:-1!==a.indexOf("chart")&&b++});return{total:b+c,images:c,charts:b}};d.prototype._setContentElementMedia=function(a,c){this._clearMediaRefreshTimer(a);var b=this.viewModel.content;(b=(b=b&&b[a])&&b.mediaInfos)&&b.length&&(this._activeMediaMap.set(a,(c+b.length)%b.length),this._setupMediaRefreshTimer(a),this.scheduleRender())};d.prototype._pageContentElementMedia=function(a,b){b="previous"===b?-1:1;b=this._activeMediaMap.get(a)+
  29. b;this._setContentElementMedia(a,b)};d.prototype._previousClick=function(a){this.previousMedia(a.currentTarget["data-content-element-index"])};d.prototype._nextClick=function(a){this.nextMedia(a.currentTarget["data-content-element-index"])};l([m.aliasOf("viewModel.contentEnabled")],d.prototype,"contentEnabled",void 0);l([m.aliasOf("viewModel.graphic")],d.prototype,"graphic",void 0);l([m.aliasOf("viewModel.title")],d.prototype,"title",void 0);l([m.aliasOf("viewModel.view")],d.prototype,"view",void 0);
  30. l([m.property({type:t}),b.renderable(["viewModel.waitingForContent","viewModel.content"])],d.prototype,"viewModel",void 0);l([b.accessibleHandler()],d.prototype,"_previousClick",null);l([b.accessibleHandler()],d.prototype,"_nextClick",null);return d=l([m.subclass("esri.widgets.Feature")],d)}(m.declared(B))});