/*! * FilePondPluginImageCrop 2.0.6 * Licensed under MIT, https://opensource.org/licenses/MIT/ * Please visit https://pqina.nl/filepond/ for details. */ /* eslint-disable */ (function(global, factory) { typeof exports === 'object' && typeof module !== 'undefined' ? (module.exports = factory()) : typeof define === 'function' && define.amd ? define(factory) : ((global = global || self), (global.FilePondPluginImageCrop = factory())); })(this, function() { 'use strict'; var isImage = function isImage(file) { return /^image/.test(file.type); }; /** * Image Auto Crop Plugin */ var plugin = function plugin(_ref) { var addFilter = _ref.addFilter, utils = _ref.utils; var Type = utils.Type, isFile = utils.isFile, getNumericAspectRatioFromString = utils.getNumericAspectRatioFromString; // tests if crop is allowed on this item var allowCrop = function allowCrop(item, query) { return !(!isImage(item.file) || !query('GET_ALLOW_IMAGE_CROP')); }; var isObject = function isObject(value) { return typeof value === 'object'; }; var isNumber = function isNumber(value) { return typeof value === 'number'; }; var updateCrop = function updateCrop(item, obj) { return item.setMetadata( 'crop', Object.assign({}, item.getMetadata('crop'), obj) ); }; // extend item methods addFilter('DID_CREATE_ITEM', function(item, _ref2) { var query = _ref2.query; item.extend('setImageCrop', function(crop) { if (!allowCrop(item, query) || !isObject(center)) return; item.setMetadata('crop', crop); return crop; }); item.extend('setImageCropCenter', function(center) { if (!allowCrop(item, query) || !isObject(center)) return; return updateCrop(item, { center: center }); }); item.extend('setImageCropZoom', function(zoom) { if (!allowCrop(item, query) || !isNumber(zoom)) return; return updateCrop(item, { zoom: Math.max(1, zoom) }); }); item.extend('setImageCropRotation', function(rotation) { if (!allowCrop(item, query) || !isNumber(rotation)) return; return updateCrop(item, { rotation: rotation }); }); item.extend('setImageCropFlip', function(flip) { if (!allowCrop(item, query) || !isObject(flip)) return; return updateCrop(item, { flip: flip }); }); item.extend('setImageCropAspectRatio', function(newAspectRatio) { if (!allowCrop(item, query) || typeof newAspectRatio === 'undefined') return; var currentCrop = item.getMetadata('crop'); var aspectRatio = getNumericAspectRatioFromString(newAspectRatio); var newCrop = { center: { x: 0.5, y: 0.5 }, flip: currentCrop ? Object.assign({}, currentCrop.flip) : { horizontal: false, vertical: false }, rotation: 0, zoom: 1, aspectRatio: aspectRatio }; item.setMetadata('crop', newCrop); return newCrop; }); }); // subscribe to file transformations addFilter('DID_LOAD_ITEM', function(item, _ref3) { var query = _ref3.query; return new Promise(function(resolve, reject) { // get file reference var file = item.file; // if this is not an image we do not have any business cropping it and we'll continue with the unaltered dataset if (!isFile(file) || !isImage(file) || !query('GET_ALLOW_IMAGE_CROP')) { return resolve(item); } // already has crop metadata set? var crop = item.getMetadata('crop'); if (crop) { return resolve(item); } // get the required aspect ratio and exit if it's not set var humanAspectRatio = query('GET_IMAGE_CROP_ASPECT_RATIO'); // set default crop rectangle item.setMetadata('crop', { center: { x: 0.5, y: 0.5 }, flip: { horizontal: false, vertical: false }, rotation: 0, zoom: 1, aspectRatio: humanAspectRatio ? getNumericAspectRatioFromString(humanAspectRatio) : null }); // we done! resolve(item); }); }); // Expose plugin options return { options: { // enable or disable image cropping allowImageCrop: [true, Type.BOOLEAN], // the aspect ratio of the crop ('1:1', '16:9', etc) imageCropAspectRatio: [null, Type.STRING] } }; }; // fire pluginloaded event if running in browser, this allows registering the plugin when using async script tags var isBrowser = typeof window !== 'undefined' && typeof window.document !== 'undefined'; if (isBrowser) { document.dispatchEvent( new CustomEvent('FilePond:pluginloaded', { detail: plugin }) ); } return plugin; });