liuyg
2021-07-02 25ce610f6ecca7325e7a743dc032c4a76559c63d
1
2
3
4
5
6
7
8
9
10
11
12
13
14
15
16
17
18
19
20
21
22
23
24
25
26
27
28
29
30
31
32
33
34
35
36
37
38
39
40
41
42
43
44
45
46
47
48
49
50
51
52
53
54
55
56
57
58
59
60
61
62
63
64
65
66
67
68
69
70
71
72
73
74
75
76
77
78
79
80
81
82
83
84
85
86
87
88
89
90
91
92
93
94
95
96
97
98
99
100
101
102
103
104
105
106
107
108
109
110
111
112
113
114
115
116
117
///////////////////////////////////////////////////////////////////////////
// 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/Evented',
  'dojo/_base/declare',
  'dojo/_base/html',
  'dojo/_base/lang',
  'dojo/on',
  //'dojo/query',
  'jimu/utils',
  'dijit/_WidgetBase',
  'dijit/_TemplatedMixin',
  'dojo/text!./templates/_CropImage.html',
  //'jimu/dijit/Message',
  'dojo/NodeList-dom'
],
  function (/*Evented, */declare, html, lang, on, /*query, */ utils,
    _widgetBase, _TemplatedMixin, template/* Message,*/) {
    var Cropper = window.Cropper;
    return declare([_widgetBase, _TemplatedMixin], {
      templateString: template,
 
      imageSrc: null,
      type: null,
      goldenWidth: 4,
      goldenHeight: 3,
 
      postCreate: function () {
        if (!this.type) {
          this.type = 'image/jpeg';
        }
        this.setImageSrc(this.imageSrc);
 
        this.loadingImg.src = require.toUrl('jimu') + '/images/loading.gif';
        this.own(on(this.baseImage, 'load', lang.hitch(this, function () {
          html.setStyle(this.loadingImg, 'display', 'none');
          this._initCropper();
        })));
      },
 
      _initCropper: function () {
        // Restart
        if (this.cropper && this.cropper.destroy) {
          this.cropper.destroy();
        }
        var options = {
          aspectRatio: this.goldenWidth / this.goldenHeight,
          preview: '.img-preview'
          // ready: lang.hitch(this, function (e) {
          //   console.log(e.type);
          // }),
          // cropstart: lang.hitch(this, function (e) {
          //   console.log(e.type, e.detail.action);
          //   //this.saveBookMarkersBySortable();
          //   //this.emit("sort", this.bookmarks);
          // }),
          // cropmove: function (e) {
          //   console.log(e.type, e.detail.action);
          // },
          // cropend: lang.hitch(this, function (e) {
          //   console.log(e.type, e.detail.action);
          //   //var data = this.getData();
          //   //this.emit("crop", data);
          // }),
          // crop: function (e) {
          //   var data = e.detail;
          //   console.log(e.type);
          //   // dataX.value = Math.round(data.x);
          //   // dataY.value = Math.round(data.y);
          //   // dataHeight.value = Math.round(data.height);
          //   // dataWidth.value = Math.round(data.width);
          //   // dataRotate.value = typeof data.rotate !== 'undefined' ? data.rotate : '';
          //   // dataScaleX.value = typeof data.scaleX !== 'undefined' ? data.scaleX : '';
          //   // dataScaleY.value = typeof data.scaleY !== 'undefined' ? data.scaleY : '';
          // },
          // zoom: function (e) {
          //   console.log(e.type, e.detail.ratio);
          // }
        };
        this.cropper = new Cropper(this.baseImage, options);
      },
 
      setImageSrc: function (src) {
        html.setAttr(this.baseImage, 'src', src);
      },
 
      getData: function () {
        var imgData = this.cropper.getCroppedCanvas();
        var uploadedImageType = this.type || 'image/jpeg';
        var data = imgData.toDataURL(uploadedImageType);
 
        return data;
      },
 
      destroy: function () {
        if (this.cropper && this.cropper.destroy) {
          this.cropper.destroy();
        }
 
        this.inherited(arguments);
      }
    });
  });