|
|
'use strict'; $(document).ready(function() { var console = window.console || { log: function() {} }; var URL = window.URL || window.webkitURL; var $image = $('#image'); var $download = $('#download'); var $dataX = $('#dataX'); var $dataY = $('#dataY'); var $dataHeight = $('#dataHeight'); var $dataWidth = $('#dataWidth'); var $dataRotate = $('#dataRotate'); var $dataScaleX = $('#dataScaleX'); var $dataScaleY = $('#dataScaleY'); var options = { aspectRatio: 16 / 9, preview: '.img-preview', crop: function(e) { $dataX.val(Math.round(e.x)); $dataY.val(Math.round(e.y)); $dataHeight.val(Math.round(e.height)); $dataWidth.val(Math.round(e.width)); $dataRotate.val(e.rotate); $dataScaleX.val(e.scaleX); $dataScaleY.val(e.scaleY); } }; var originalImageURL = $image.attr('src'); var uploadedImageURL;
// Cropper
$image.on({ 'build.cropper': function(e) { /* console.log(e.type);*/ }, 'built.cropper': function(e) { /* console.log(e.type);*/ }, 'cropstart.cropper': function(e) { /* console.log(e.type, e.action);*/ }, 'cropmove.cropper': function(e) { /* console.log(e.type, e.action);*/ }, 'cropend.cropper': function(e) { /*console.log(e.type, e.action);*/ }, 'crop.cropper': function(e) { /* console.log(e.type, e.x, e.y, e.width, e.height, e.rotate, e.scaleX, e.scaleY);*/ }, 'zoom.cropper': function(e) { /* console.log(e.type, e.ratio);*/ } }).cropper(options);
// Buttons
if (!$.isFunction(document.createElement('canvas').getContext)) { $('button[data-method="getCroppedCanvas"]').prop('disabled', true); }
if (typeof document.createElement('cropper').style.transition === 'undefined') { $('button[data-method="rotate"]').prop('disabled', true); $('button[data-method="scale"]').prop('disabled', true); }
// Download
if (typeof $download[0].download === 'undefined') { $download.addClass('disabled'); }
// Options
$('.docs-toggles').on('change', 'input', function() { var $this = $(this); var name = $this.attr('name'); var type = $this.prop('type'); var cropBoxData; var canvasData;
if (!$image.data('cropper')) { return; }
if (type === 'checkbox') { options[name] = $this.prop('checked'); cropBoxData = $image.cropper('getCropBoxData'); canvasData = $image.cropper('getCanvasData');
options.built = function() { $image.cropper('setCropBoxData', cropBoxData); $image.cropper('setCanvasData', canvasData); }; } else if (type === 'radio') { options[name] = $this.val(); }
$image.cropper('destroy').cropper(options); });
// Methods
$('.docs-buttons').on('click', '[data-method]', function() { var $this = $(this); var data = $this.data(); var $target; var result;
if ($this.prop('disabled') || $this.hasClass('disabled')) { return; }
if ($image.data('cropper') && data.method) { data = $.extend({}, data); // Clone a new one
if (typeof data.target !== 'undefined') { $target = $(data.target);
if (typeof data.option === 'undefined') { try { data.option = JSON.parse($target.val()); } catch (e) { console.log(e.message); } } }
if (data.method === 'rotate') { $image.cropper('clear'); }
result = $image.cropper(data.method, data.option, data.secondOption);
if (data.method === 'rotate') { $image.cropper('crop'); }
switch (data.method) { case 'scaleX': case 'scaleY': $(this).data('option', -data.option); break;
case 'getCroppedCanvas': if (result) {
// Bootstrap's Modal
$('#getCroppedCanvasModal').modal().find('.modal-body').html(result);
if (!$download.hasClass('disabled')) { $download.attr('href', result.toDataURL('image/jpeg')); } }
break;
case 'destroy': if (uploadedImageURL) { URL.revokeObjectURL(uploadedImageURL); uploadedImageURL = ''; $image.attr('src', originalImageURL); }
break; }
if ($.isPlainObject(result) && $target) { try { $target.val(JSON.stringify(result)); } catch (e) { console.log(e.message); } }
} });
// Keyboard
$(document.body).on('keydown', function(e) {
if (!$image.data('cropper') || this.scrollTop > 300) { return; }
switch (e.which) { case 37: e.preventDefault(); $image.cropper('move', -1, 0); break;
case 38: e.preventDefault(); $image.cropper('move', 0, -1); break;
case 39: e.preventDefault(); $image.cropper('move', 1, 0); break;
case 40: e.preventDefault(); $image.cropper('move', 0, 1); break; }
});
// Import image
var $inputImage = $('#inputImage');
if (URL) { $inputImage.change(function() { var files = this.files; var file;
if (!$image.data('cropper')) { return; }
if (files && files.length) { file = files[0];
if (/^image\/\w+$/.test(file.type)) { if (uploadedImageURL) { URL.revokeObjectURL(uploadedImageURL); }
uploadedImageURL = URL.createObjectURL(file); $image.cropper('destroy').attr('src', uploadedImageURL).cropper(options); $inputImage.val(''); } else { window.alert('Please choose an image file.'); } } }); } else { $inputImage.prop('disabled', true).parent().addClass('disabled'); }
});
/* ------------------------------------------------------------------------------ * * # Image Cropper extension * * Specific JS code additions for extension_image_cropper.html page * * Version: 1.1 * Latest update: Jul 5, 2016 * * ---------------------------------------------------------------------------- */
$(function() {
// Basic setup
// ------------------------------
// Default initialization
$('.crop-basic').cropper();
// Hidden overlay
$('.crop-modal').cropper({ modal: false });
// Fixed position
$('.crop-not-movable').cropper({ cropBoxMovable: false, data: { x: 75, y: 50, width: 350, height: 250 } });
// Fixed size
$('.crop-not-resizable').cropper({ cropBoxResizable: false, data: { x: 10, y: 10, width: 300, height: 300 } });
// Disabled autocrop
$('.crop-auto').cropper({ autoCrop: false });
// Disabled drag
$('.crop-drag').cropper({ movable: false });
// 16:9 ratio
$('.crop-16-9').cropper({ aspectRatio: 16 / 9 });
// 4:3 ratio
$('.crop-4-3').cropper({ aspectRatio: 4 / 3 });
// Minimum zone size
$('.crop-min').cropper({ minCropBoxWidth: 150, minCropBoxHeight: 150 });
// Disabled zoom
$('.crop-zoomable').cropper({ zoomable: false });
// Demo cropper
// ------------------------------
// Define variables
/* var $cropper = $(".cropper"), $image = $('#demo-cropper-image'), $download = $('#download'), $dataX = $('#dataX'), $dataY = $('#dataY'), $dataHeight = $('#dataHeight'), $dataWidth = $('#dataWidth'), $dataScaleX = $('#dataScaleX'), $dataScaleY = $('#dataScaleY'), options = { aspectRatio: 1, preview: '.preview', crop: function (e) { $dataX.val(Math.round(e.x)); $dataY.val(Math.round(e.y)); $dataHeight.val(Math.round(e.height)); $dataWidth.val(Math.round(e.width)); $dataScaleX.val(e.scaleX); $dataScaleY.val(e.scaleY); } };
// Initialize cropper with options
$cropper.cropper(options);
//
// Toolbar
//
$('.demo-cropper-toolbar').on('click', '[data-method]', function () { var $this = $(this), data = $this.data(), $target, result;
if ($image.data('cropper') && data.method) { data = $.extend({}, data);
if (typeof data.target !== 'undefined') { $target = $(data.target);
if (typeof data.option === 'undefined') { data.option = JSON.parse($target.val()); } }
result = $image.cropper(data.method, data.option, data.secondOption);
switch (data.method) { case 'scaleX': case 'scaleY': $(this).data('option', -data.option); break;
case 'getCroppedCanvas': if (result) {
// Init modal
$('#getCroppedCanvasModal').modal().find('.modal-body').html(result);
// Download image
$download.attr('href', result.toDataURL('image/jpeg')); } break; } } });
//
// Aspect ratio
//
$('.demo-cropper-ratio').on('change', 'input[type=radio]', function () { options[$(this).attr('name')] = $(this).val(); $image.cropper('destroy').cropper(options); });
//
// Switching modes
//
// Crop and clear
// var cropClear = document.querySelector('.clear-crop-switch');
// var cropClearInit = new Switchery(cropClear);
// cropClear.onchange = function() {
// if(cropClear.checked) {
// // Crop mode
// $cropper.cropper('crop');
// // Enable other options
// enableDisableInit.enable();
// destroyCreateInit.enable();
// }
// else {
// // Clear move
// $cropper.cropper('clear');
// // Disable other options
// enableDisableInit.disable();
// destroyCreateInit.disable();
// }
// };
// // Enable and disable
// var enableDisable = document.querySelector('.enable-disable-switch');
// var enableDisableInit = new Switchery(enableDisable);
// enableDisable.onchange = function() {
// if(enableDisable.checked) {
// // Enable cropper
// $cropper.cropper('enable');
// // Enable other options
// cropClearInit.enable();
// destroyCreateInit.enable();
// }
// else {
// // Disable cropper
// $cropper.cropper('disable');
// // Disable other options
// cropClearInit.disable();
// destroyCreateInit.disable();
// }
// };
// // Destroy and create
// var destroyCreate = document.querySelector('.destroy-create-switch');
// var destroyCreateInit = new Switchery(destroyCreate);
// destroyCreate.onchange = function() {
// if(destroyCreate.checked) {
// // Initialize again
// $cropper.cropper({
// aspectRatio: 1,
// preview: ".preview",
// data: {
// x: 208,
// y: 22
// }
// });
// // Enable other options
// cropClearInit.enable();
// enableDisableInit.enable();
// }
// else {
// // Destroy cropper
// $cropper.cropper('destroy');
// // Disable other options
// cropClearInit.disable();
// enableDisableInit.disable();
// }
// };
//
// Methods
//
// Get data
$("#getData").on('click', function() { $("#showData1").val(JSON.stringify($cropper.cropper("getData"))); });
// Set data
$("#setData").on('click', function() { $cropper.cropper("setData", { x: 291, y: 86, width: 158, height: 158 });
$("#showData1").val('Image data has been changed'); });
// Get container data
$("#getContainerData").on('click', function() { $("#showData2").val(JSON.stringify($cropper.cropper("getContainerData"))); });
// Get image data
$("#getImageData").on('click', function() { $("#showData2").val(JSON.stringify($cropper.cropper("getImageData"))); });
// Get canvas data
$("#getCanvasData").on('click', function() { $("#showData3").val(JSON.stringify($cropper.cropper("getCanvasData"))); });
// Set canvas data
$("#setCanvasData").on('click', function() { $cropper.cropper("setCanvasData", { left: -50, top: 0, width: 750, height: 750 });
$("#showData3").val('Canvas data has been changed'); });
// Get crop box data
$("#getCropBoxData").on('click', function() { $("#showData4").val(JSON.stringify($cropper.cropper("getCropBoxData"))); });
// Set crop box data
$("#setCropBoxData").on('click', function() { $cropper.cropper("setCropBoxData", { left: 395, top: 68, width: 183, height: 183 });
$("#showData4").val('Crop box data has been changed'); });*/ });
|