Skip to content

Commit 9baacf4

Browse files
committed
Configurable width/hight/aspect ratio
1 parent 8baaf63 commit 9baacf4

File tree

3 files changed

+22
-124
lines changed

3 files changed

+22
-124
lines changed

js/cropper/cropper-ui.js

Lines changed: 2 additions & 99 deletions
Original file line numberDiff line numberDiff line change
@@ -1,102 +1,4 @@
11

2-
// Methods
3-
/*
4-
case 'getCroppedCanvas':
5-
try {
6-
data.option = JSON.parse(data.option);
7-
} catch (e) {
8-
console.log(e.message);
9-
}
10-
11-
if (image.data('uploadedImageType') === 'image/jpeg') {
12-
if (!data.option) {
13-
data.option = {};
14-
}
15-
16-
data.option.fillColor = '#fff';
17-
}
18-
19-
break;
20-
}
21-
22-
result = cropper[data.method](data.option, data.secondOption);
23-
24-
switch (data.method) {
25-
case 'getCroppedCanvas':
26-
if (result) {
27-
// Bootstrap's Modal
28-
$('#getCroppedCanvasModal').modal().find('.modal-body').html(result);
29-
30-
if (!download.disabled) {
31-
download.download = image.data('uploadedImageName');
32-
download.href = result.toDataURL(image.data('uploadedImageType'));
33-
}
34-
}
35-
36-
break;
37-
38-
case 'destroy':
39-
cropper = null;
40-
41-
if (image.data('uploadedImageURL')) {
42-
URL.revokeObjectURL(image.data('uploadedImageURL'));
43-
image.data('uploadedImageURL', '');
44-
image.attr('src') = image.data('originalImageURL');
45-
}
46-
47-
break;
48-
}
49-
50-
if (typeof result === 'object' && result !== cropper && input) {
51-
try {
52-
input.value = JSON.stringify(result);
53-
} catch (e) {
54-
console.log(e.message);
55-
}
56-
}
57-
}
58-
});
59-
60-
jQuery('.cropper .docs-toggles').on('change', function() {
61-
var e = event || window.event;
62-
var target = e.target || e.srcElement;
63-
var cropBoxData;
64-
var canvasData;
65-
var isCheckbox;
66-
var isRadio;
67-
68-
if (target.tagName.toLowerCase() === 'label') {
69-
target = target.querySelector('input');
70-
}
71-
72-
isCheckbox = target.type === 'checkbox';
73-
isRadio = target.type === 'radio';
74-
75-
if (isCheckbox || isRadio) {
76-
if (isCheckbox) {
77-
options[target.name] = target.checked;
78-
cropBoxData = cropper.getCropBoxData();
79-
canvasData = cropper.getCanvasData();
80-
81-
options.ready = function () {
82-
console.log('ready');
83-
cropper.setCropBoxData(cropBoxData).setCanvasData(canvasData);
84-
};
85-
} else {
86-
options[target.name] = target.value;
87-
options.ready = function () {
88-
console.log('ready');
89-
};
90-
}
91-
92-
// Restart
93-
cropper.destroy();
94-
cropper = new Cropper(image, options);
95-
}
96-
}
97-
);
98-
*/
99-
1002
jQuery('.cropper input[type="file"]').on('change', function() {
1013
var files = this.files;
1024
var file;
@@ -245,7 +147,8 @@ class CropperUI {
245147
var elem = jQuery(domElement);
246148
options.destroyed = false;
247149
if (!cropperOptions) cropperOptions = {};
248-
cropperOptions.aspectRatio= 1;
150+
var mainElem = elem.closest('.cropper');
151+
cropperOptions.aspectRatio = mainElem.data('aspect-ratio');
249152
options.cropper = new Cropper(domElement, cropperOptions);
250153
elem.data('upload', options);
251154
this.registerEvents(domElement);

src/WebApp/BootstrapTheme/NewImageUploadRenderer.php

Lines changed: 8 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -8,7 +8,10 @@ class NewImageUploadRenderer extends \WebApp\DefaultTheme\DivRenderer {
88

99
public function __construct($theme, $component) {
1010
parent::__construct($theme, $component);
11-
$this->addClass('cropper');
11+
$this->addClass('cropper')
12+
->setData('width', $component->getWidth())
13+
->setData('height', $component->getHeight())
14+
->setData('aspect-ratio', $component->getAspectRatio());
1215
$this->theme->addFeature(\WebApp\BootstrapTheme\BootstrapTheme::CROPPERJS);
1316
}
1417

@@ -41,8 +44,10 @@ public function renderEditor() {
4144
$did = $id;
4245
break;
4346
}
44-
$rc = '<div class="cropper-editor" style="max-width: 400px; max-height: 400px; margin: 20px;">'.
45-
'<img data-imgid="'.$did.'" class="cropper-image" style="background-image: url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC\'); width: 400px; height: 400px;" src="'.$src.'">'.
47+
$width = $this->component->getWidth();
48+
$height = $this->component->getHeight();
49+
$rc = '<div class="cropper-editor" style="max-width: '.$width.'px; max-height: '.$height.'px; margin: 20px;">'.
50+
'<img data-imgid="'.$did.'" class="cropper-image" style="background-image: url(\'data:image/png;base64,iVBORw0KGgoAAAANSUhEUgAAABAAAAAQAQMAAAAlPW0iAAAAA3NCSVQICAjb4U/gAAAABlBMVEXMzMz////TjRV2AAAACXBIWXMAAArrAAAK6wGCiw1aAAAAHHRFWHRTb2Z0d2FyZQBBZG9iZSBGaXJld29ya3MgQ1M26LyyjAAAABFJREFUCJlj+M/AgBVhF/0PAH6/D/HkDxOGAAAAAElFTkSuQmCC\'); width: '.$width.'px; height: '.$height.'px;" src="'.$src.'">'.
4651
$this->renderActions().
4752
//$this->renderDocToggles().
4853
'</div>';

src/WebApp/Component/NewImageUpload.php

Lines changed: 12 additions & 22 deletions
Original file line numberDiff line numberDiff line change
@@ -32,29 +32,19 @@ public function getImages() {
3232
return $this->config->images;
3333
}
3434

35-
36-
/*
37-
public static function isImageRemoved($name) {
38-
$ind = intval(\TgUtils\Request::getRequest()->getPostParam('iu-remove-'.$name, 0)) == 1;
39-
$newFile = isset($_FILES['iu-'.$name]) && ($_FILES['iu-'.$name]['error'] == 0);
40-
return $newFile || $ind;
41-
}
42-
43-
public static function getImage($name) {
44-
return FileInput::getFile('iu-'.$name);
45-
}
46-
47-
public static function handleImageUpload($name, $targetDir) {
48-
$rc = FileInput::handleFileUpload('iu-'.$name, $targetDir);
49-
if (($rc != NULL) && ($rc['filename'] != NULL)) {
50-
$info = getimagesize($targetDir.'/'.$rc['filename']);
51-
$rc['mime'] = $info['mime'];
52-
$rc['width'] = $info[0];
53-
$rc['height'] = $info[1];
54-
$rc['ratio'] = $info[0] / $info[1];
35+
public function getWidth() {
36+
return $this->config->width;
37+
}
38+
39+
public function getHeight() {
40+
return $this->config->height;
41+
}
42+
43+
public function getAspectRatio() {
44+
if (!isset($this->config->aspectRatio)) {
45+
$this->config->aspectRatio = round($this->config->width / $this->config->height, 2);
5546
}
56-
return $rc;
47+
return $this->config->aspectRatio;
5748
}
58-
*/
5949
}
6050

0 commit comments

Comments
 (0)