/////////////////////////////////////////////////////////////////////////// // Copyright © 2014 - 2018 Esri. All Rights Reserved. // // Licensed under the Apache License Version 2.0 (the "License"); // you may not use this file except in compliance with the License. // You may obtain a copy of the License at // // http://www.apache.org/licenses/LICENSE-2.0 // // Unless required by applicable law or agreed to in writing, software // distributed under the License is distributed on an "AS IS" BASIS, // WITHOUT WARRANTIES OR CONDITIONS OF ANY KIND, either express or implied. // See the License for the specific language governing permissions and // limitations under the License. /////////////////////////////////////////////////////////////////////////// define([ 'dojo/_base/declare', 'dijit/_WidgetBase', 'dijit/_TemplatedMixin', 'dijit/_WidgetsInTemplateMixin', 'dojo/text!./templates/ExportChooser.html', 'dojo/_base/lang', 'dojo/_base/array', 'dojo/dom-construct', 'dojo/dom-class', 'dojo/dom-style', 'dojo/dom-geometry', 'dojo/on', 'dojo/Evented' ], function(declare, _WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, template, lang, array, domConstruct, domClass, domStyle, domGeom, on, Evented) { return declare([_WidgetBase, _TemplatedMixin, _WidgetsInTemplateMixin, Evented], { templateString: template, baseClass: 'jimu-export-chooser', declaredClass: 'jimu.dijit.ExportChooser', dataSource: null, nls: null, postMixInProperties: function(){ this.nls = window.jimuNls.exportTo; }, postCreate: function(){ this.inherited(arguments); if(this.dataSource){ var supportedFormats = this.dataSource.getSupportExportFormats(); if(supportedFormats.length > 0){ this.initFormats(supportedFormats); this.own(on(this.exportFormats, 'click', lang.hitch(this, this._onFormatClick))); this.own(on(this.exportMask, 'click', lang.hitch(this, this.hide))); } } }, initFormats: function(supportedFormats){ array.forEach(supportedFormats, function(format){ var formatNode = domConstruct.create('div', { 'class': 'export-item jimu-ellipsis', 'data-value': format.value, innerHTML: format.label }); domConstruct.place(formatNode, this.exportFormats); }, this); }, _onFormatClick: function(event){ event.preventDefault(); event.stopPropagation(); var target = event.target || event.srcElement; if(domClass.contains(target, 'export-item')){ this.hide(); var format = target.getAttribute('data-value'); this.dataSource.setFormat(format); this.dataSource.download(); this.emit('start-downloading', format); } }, show: function(anchorX, anchorY){ var left, top, size, offset = 5; domStyle.set(this.domNode, { left: '-1000px', top: '0px', display: 'block' }); size = domGeom.getMarginSize(this.domNode); if(window.isRTL) { if(anchorX + size.w > window.innerWidth){ // beyond right side of the browser left = window.innerWidth - size.w; }else if(anchorX < 0){// beyond left side of the browser left = 0; }else{ left = anchorX; } } else { if(anchorX - size.w < 0){ // beyond left side of the browser left = 0; }else if(anchorX > window.innerWidth){ // beyond right side of the browser left = window.innerWidth - size.w; }else{ left = anchorX - size.w; } } if(size.h > window.innerHeight) { top = 0; }else if(anchorY + size.h > window.innerHeight){ top = window.innerHeight - size.h; }else if(anchorY + size.h + offset < window.innerHeight){ top = anchorY + offset; }else { top = anchorY; } domStyle.set(this.domNode, { left: left + 'px', top: top + 'px' }); }, hide: function(){ domStyle.set(this.domNode, 'display', 'none'); } }); });