Summary: mainly, this adds the image cropper - yay! - also removes the file image from the handle stuff I added in V1. now we do all this crazy photo stuff. Test Plan: - uploaded a photo by dragging to header and noted 120 x 80 showed up on reload - uploaded a photo by dragging to edit dialogue spot and noted 120 x 80 showed up on reload - cropped a photo - noted it cropped right - cropped a photo again and again and again - seems like it crops okay Reviewers: epriestley, chad Reviewed By: epriestley CC: aran, Korvin Maniphest Tasks: T2418, T2399 Differential Revision: https://secure.phabricator.com/D4790
100 lines
2.0 KiB
PHP
100 lines
2.0 KiB
PHP
<?php
|
|
|
|
final class AphrontFormCropControl extends AphrontFormControl {
|
|
|
|
private $width = 50;
|
|
private $height = 50;
|
|
|
|
public function setHeight($height) {
|
|
$this->height = $height;
|
|
return $this;
|
|
}
|
|
public function getHeight() {
|
|
return $this->height;
|
|
}
|
|
|
|
public function setWidth($width) {
|
|
$this->width = $width;
|
|
return $this;
|
|
}
|
|
public function getWidth() {
|
|
return $this->width;
|
|
}
|
|
|
|
protected function getCustomControlClass() {
|
|
return 'aphront-form-crop';
|
|
}
|
|
|
|
protected function renderInput() {
|
|
$file = $this->getValue();
|
|
|
|
if ($file === null) {
|
|
return phutil_render_tag(
|
|
'img',
|
|
array(
|
|
'src' => PhabricatorUser::getDefaultProfileImageURI()
|
|
),
|
|
''
|
|
);
|
|
}
|
|
|
|
$c_id = celerity_generate_unique_node_id();
|
|
$metadata = $file->getMetadata();
|
|
$scale = PhabricatorImageTransformer::getScaleForCrop(
|
|
$file,
|
|
$this->getWidth(),
|
|
$this->getHeight()
|
|
);
|
|
|
|
Javelin::initBehavior(
|
|
'aphront-crop',
|
|
array(
|
|
'cropBoxID' => $c_id,
|
|
'width' => $this->getWidth(),
|
|
'height' => $this->getHeight(),
|
|
'scale' => $scale,
|
|
'imageH' => $metadata[PhabricatorFile::METADATA_IMAGE_HEIGHT],
|
|
'imageW' => $metadata[PhabricatorFile::METADATA_IMAGE_WIDTH],
|
|
)
|
|
);
|
|
|
|
return javelin_render_tag(
|
|
'div',
|
|
array(
|
|
'id' => $c_id,
|
|
'sigil' => 'crop-box',
|
|
'mustcapture' => true,
|
|
'class' => 'crop-box'
|
|
),
|
|
javelin_render_tag(
|
|
'img',
|
|
array(
|
|
'src' => $file->getBestURI(),
|
|
'class' => 'crop-image',
|
|
'sigil' => 'crop-image'
|
|
),
|
|
''
|
|
).
|
|
javelin_render_tag(
|
|
'input',
|
|
array(
|
|
'type' => 'hidden',
|
|
'name' => 'image_x',
|
|
'sigil' => 'crop-x',
|
|
),
|
|
''
|
|
).
|
|
javelin_render_tag(
|
|
'input',
|
|
array(
|
|
'type' => 'hidden',
|
|
'name' => 'image_y',
|
|
'sigil' => 'crop-y',
|
|
),
|
|
''
|
|
)
|
|
);
|
|
}
|
|
|
|
}
|