diff --git a/wire/core/ImageSizerEngine.php b/wire/core/ImageSizerEngine.php
index 9d593e25..e38d8445 100755
--- a/wire/core/ImageSizerEngine.php
+++ b/wire/core/ImageSizerEngine.php
@@ -1704,27 +1704,29 @@ abstract class ImageSizerEngine extends WireData implements Module, Configurable
* @param string $focus (focus point in percent, like: 54.7%)
* @param int $sourceDimension (source image width or height)
* @param int $cropDimension (target crop-image width or height)
+ * @param int $zoom
*
* @return int $position (crop position x or y in pixel)
*
*/
- protected function getFocusZoomPosition($focus, $sourceDimension, $cropDimension) {
+ protected function getFocusZoomPosition($focus, $sourceDimension, $cropDimension, $zoom) {
$focus = intval($focus); // string with float value and percent char, (needs to be converted to integer)
- $source = 100; // the source-dimensions percent-value (100)
- $target = ($cropDimension / $sourceDimension * 100); // the crop-dimensions percent-value
- $rest = $source - $target; // the unused dimension-part-value in percent
- $tmp = $focus + ($target / 2); // temp value
+ $scale = 1 + (($zoom / 100) * 2);
+ $focusPX = ($sourceDimension / 100 * $focus);
+ $posMinPX = $cropDimension / 2 / $scale;
+ $posMaxPX = $sourceDimension - ($cropDimension / 2);
// calculate the position in pixel !
- if($tmp >= 100) {
- $position = $sourceDimension - $cropDimension;
- } else if($tmp <= floor($rest / 2)) {
- $position = 0;
+ if($focusPX >= $posMaxPX) {
+ $posPX = $sourceDimension - $cropDimension;
+ } else if($focusPX <= $posMinPX) {
+ $posPX = 0;
} else {
- $position = ceil(($sourceDimension - $cropDimension) / 100 * $focus);
+ $posPX = $focusPX - ($cropDimension / 2);
+ if(0 > $posPX) $posPX = 0;
}
- return $position;
+ return $posPX;
}
/**
@@ -1752,7 +1754,6 @@ abstract class ImageSizerEngine extends WireData implements Module, Configurable
if($percentW >= $percentH) { // check wich one is greater
$maxW = $fullWidth; // if percentW is greater, maxW becomes the original Width
$maxH = $fullWidth / $ratioFinal; // ... and maxH gets calculated via the ratio
-
} else {
$maxH = $fullHeight; // if percentH is greater, maxH becomes the original Height
$maxW = $fullHeight * $ratioFinal; // ... and maxW gets calculated via the ratio
@@ -1775,12 +1776,12 @@ abstract class ImageSizerEngine extends WireData implements Module, Configurable
}
// calculate the crop positions
- $tmpX = $this->getFocusZoomPosition($this->cropping[0], $fullWidth, $cropW); // calculate the x-position
- $tmpY = $this->getFocusZoomPosition($this->cropping[1], $fullHeight, $cropH); // calculate the y-position
+ $posX = $this->getFocusZoomPosition($this->cropping[0], $fullWidth, $cropW, $zoom); // calculate the x-position
+ $posY = $this->getFocusZoomPosition($this->cropping[1], $fullHeight, $cropH, $zoom); // calculate the y-position
return array(
- 0 => (int) $tmpX,
- 1 => (int) $tmpY,
+ 0 => (int) $posX,
+ 1 => (int) $posY,
2 => (int) $cropW,
3 => (int) $cropH
);
diff --git a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.css b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.css
index fc1743a8..073e4bd0 100755
--- a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.css
+++ b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.css
@@ -378,9 +378,13 @@
cursor: move;
width: 40px;
height: 40px;
- border: 3px solid #fff;
+ margin: -20px !important;
+ border: 3px solid #EB1D61;
border-radius: 50%;
- background-color: rgba(255, 255, 255, 0.3); }
+ background-color: rgba(255, 255, 255, 0.6);
+ background-image: url(data:image/gif;base64,R0lGODlhBAAEAIAAAOsdYQAAACH5BAAAAAAALAAAAAAEAAQAAAIEhI8JBQA7);
+ background-position: 15px 15px;
+ background-repeat: no-repeat; }
.InputfieldImage .ImageData {
display: none; }
diff --git a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.js b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.js
index 97bec46a..f6e7b885 100755
--- a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.js
+++ b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.js
@@ -30,6 +30,9 @@ function InputfieldImage($) {
// grid items to retry for sizing by setGridSize() methods
var retryGridItems = [];
+ // true when the grid is being resized with the slider
+ var gridSliding = false;
+
/**
* Whether or not AJAX drag/drop upload is allowed?
*
@@ -390,19 +393,25 @@ function InputfieldImage($) {
// get the focus object, optionally for a specific focusStr
function getFocus(focusStr) {
+
if(typeof focusStr == "undefined") {
if(focusData !== null) return focusData;
var $input = $edit.find('.InputfieldImageFocus');
var focusStr = $input.val();
}
+
var a = focusStr.split(' ');
- var data = {
- 'top': (typeof a[0] == "undefined" ? 50.0 : parseFloat(a[0])),
- 'left': (typeof a[1] == "undefined" ? 50.0 : parseFloat(a[1])),
- 'zoom': (typeof a[2] == "undefined" ? 0 : parseInt(a[2]))
+ var top = (typeof a[0] == "undefined" ? 50.0 : parseFloat(a[0]));
+ var left = (typeof a[1] == "undefined" ? 50.0 : parseFloat(a[1]));
+ var zoom = (typeof a[2] == "undefined" ? 0 : parseInt(a[2]));
+
+ focusData = {
+ 'top': top > 100 ? 100 : top,
+ 'left': left > 100 ? 100 : left,
+ 'zoom': zoom > 100 ? 0 : zoom
};
- focusData = data;
- return data;
+
+ return focusData;
}
// get focus string
@@ -441,10 +450,14 @@ function InputfieldImage($) {
var $overlay = $focusCircle.parent();
var w = $overlay.width();
var h = $overlay.height();
- var x = Math.round(((focus.left / 100) * w) - ($focusCircle.width() / 2)); // 1.7
- var y = Math.round(((focus.top / 100) * h) - ($focusCircle.height() / 2)); // 2.3
+ var x = Math.round((focus.left / 100) * w);
+ var y = Math.round((focus.top / 100) * h);
+
if(x < 0) x = 0;
if(y < 0) y = 0;
+ if(x > w) x = w; // horst: just to be on the safe side with following or actual code changes
+ if(y > h) y = h;
+
$focusCircle.css({
'top': y + 'px',
'left': x + 'px'
@@ -459,7 +472,8 @@ function InputfieldImage($) {
}
$focusArea.css({
'height': $img.height() + 'px',
- 'width': $img.width() + 'px'
+ 'width': $img.width() + 'px',
+ 'background-color': 'rgba(0,0,0,0.7)'
}).addClass('focusActive');
// set the draggable circle for focus
@@ -477,15 +491,16 @@ function InputfieldImage($) {
// function called whenever the slider is moved or circle is dragged with zoom active
var zoomSlide = function(zoomPercent) {
-
- var zoomBoxSize, focusCircleSize, focus, top, left, scale, faWidth, faHeight;
-
+
+ //var zoomBoxSize, focusCircleSize, focus, top, left, scale, faWidth, faHeight;
+ var zoomBoxSize, focus, faWidth, faHeight;
+
// if no zoomPercent argument provided, use the last one
if(typeof zoomPercent == "undefined") zoomPercent = lastZoomPercent;
lastZoomPercent = zoomPercent;
faWidth = $focusArea.width();
faHeight = $focusArea.height();
-
+
if(faWidth > faHeight) {
$zoomBox.height((100 - zoomPercent) + '%'); // set width in percent
zoomBoxSize = $zoomBox.height(); // get width in pixels
@@ -498,19 +513,21 @@ function InputfieldImage($) {
// apply the zoom box position
focus = getFocus();
- var crop = getFocusZoomCropDimensions(focus.left, focus.top, zoomPercent, faWidth, faHeight, zoomBoxSize, zoomBoxSize);
- $zoomBox.css({
- top: crop.top + 'px',
- left: crop.left + 'px',
+ var crop = getFocusZoomCropDimensions(focus.left, focus.top, zoomPercent, faWidth, faHeight, zoomBoxSize);
+ $zoomBox.css({
+ 'top': crop.top + 'px',
+ 'left': crop.left + 'px',
+ 'background-position': '-' + crop.left + 'px -' + crop.top + 'px',
+ 'background-size': faWidth + 'px ' + faHeight + 'px'
});
// save zoom percent
- focus.zoom = crop.zoom; // crop.zoom may have been adjusted to prevent upscaling
- setFocusProperty('zoom', crop.zoom);
-
+ focus.zoom = zoomPercent;
+ setFocusProperty('zoom', focus.zoom);
+
// update the preview if in gride mode
if(mode == 'grid') setGridSizeItem($thumb.parent(), gridSize, false, focus);
-
+
}; // zoomSlide
// function called when the focus item is dragged
@@ -519,11 +536,13 @@ function InputfieldImage($) {
var circleSize = $this.outerHeight();
var w = $this.parent().width();
var h = $this.parent().height();
- var t = ui.position.top > 0 ? ui.position.top + (circleSize / 2) : 0;
- var l = ui.position.left > 0 ? ui.position.left + (circleSize / 2) : 0;
+ var top = ui.position.top > 0 ? ui.position.top : 0;
+ var left = ui.position.left > 0 ? ui.position.left : 0;
+ top = top > 0 ? ((top / h) * 100) : 0;
+ left = left > 0 ? ((left / w) * 100) : 0;
var newFocus = {
- 'top': t > 0 ? ((t / h) * 100) : 0,
- 'left': l > 0 ? ((l / w) * 100) : 0,
+ 'top': top,
+ 'left': left,
'zoom': getFocusProperty('zoom')
};
setFocus(newFocus);
@@ -547,11 +566,13 @@ function InputfieldImage($) {
$zoomSlider = $("
").addClass('focusZoomSlider').css({
'margin-top': '5px'
});
+
$zoomBox = $("").addClass('focusZoomBox').css({
'position': 'absolute',
- 'background': 'rgba(0,0,0,0.5)'
- //'box-shadow': '0 0 20px rgba(0,0,0,.9)'
+ 'background': 'transparent',
+ 'background-image': 'url(' + $img.attr('src') + ')'
});
+
$focusArea.prepend($zoomBox);
$img.after($zoomSlider);
$thumb.attr('src', $img.attr('src'));
@@ -590,91 +611,125 @@ function InputfieldImage($) {
}
/**
- * Get focus zoom position for either X or Y (duplicated from Horst’s PHP version in ImageSizerEngine)
+ * Get focus zoom position for either X or Y
*
- * @param focus Left or Top percentage
+ * A variation from Horst's PHP version in ImageSizerEngine, here simplified for square preview areas.
+ *
+ * @param focusPercent Left or Top percentage
* @param sourceDimension Width or Height of source image
* @param cropDimension Width or Height of cropped image
* @returns {number}
- *
+ *
*/
- function getFocusZoomPosition(focus, sourceDimension, cropDimension) {
- focus = parseInt(focus); // string with float value and percent char, (needs to be converted to integer)
- var source = 100; // the source-dimensions percent-value (100)
- var target = (cropDimension / sourceDimension * 100); // the crop-dimensions percent-value
- var rest = source - target; // the unused dimension-part-value in percent
- var tmp = focus + (target / 2); // temp value
- var position = 0;
-
- // calculate the position in pixel !
- if(tmp >= 100) {
- position = sourceDimension - cropDimension;
- } else if(tmp <= Math.floor(rest / 2)) {
- position = 0;
- } else {
- position = Math.ceil((sourceDimension - cropDimension) / 100 * focus);
- }
+ function getFocusZoomPosition(focusPercent, sourceDimension, cropDimension) {
+ var focusPX = parseInt(sourceDimension * focusPercent / 100);
+ var position = parseInt(focusPX - (cropDimension / 2));
+ var maxPosition = parseInt(sourceDimension - cropDimension);
+
+ if(0 > position) position = 0;
+ if(maxPosition < position) position = maxPosition;
return position;
}
/**
- * Get focus zoom crop dimensions (duplicated from Horst’s PHP version in ImageSizerEngine)
- *
- * @param left Left percent
- * @param top Top percent
- * @param zoom Zoom percent
- * @param fullWidth Width of full size image
- * @param fullHeight Height of full size image
- * @param finalWidth Width of target cropped image
- * @param finalHeight Height of target cropped image
+ * Get focus zoom crop dimensions (a variation from Horst's PHP version in ImageSizerEngine, here simplified for square preview areas)
+ *
+ * @param focusLeft Left percent
+ * @param focusTop Top percent
+ * @param zoomPercent Zoom percent
+ * @param faWidth Width of the thumbnail image
+ * @param faHeight Height of the thumbnail image
+ * @param zoomBoxSize Width and Height of the ZoomArea
* @returns {{left: number, top: number, width: number, height: number}}
- *
+ *
*/
- function getFocusZoomCropDimensions(left, top, zoom, fullWidth, fullHeight, finalWidth, finalHeight) {
- // calculate the max crop dimensions
- var ratioFinal = finalWidth / finalHeight; // get the ratio of the requested crop
- var percentW = finalWidth / fullWidth * 100; // calculate percentage of the crop width in regard of the original width
- var percentH = finalHeight / fullHeight * 100; // calculate percentage of the crop height in regard of the original height
-
- if(percentW >= percentH) { // check wich one is greater
- var maxW = fullWidth; // if percentW is greater, maxW becomes the original Width
- var maxH = fullWidth / ratioFinal; // ... and maxH gets calculated via the ratio
- } else {
- var maxH = fullHeight; // if percentH is greater, maxH becomes the original Height
- var maxW = fullHeight * ratioFinal; // ... and maxW gets calculated via the ratio
- }
+ function getFocusZoomCropDimensions(focusLeft, focusTop, zoomPercent, faWidth, faHeight, zoomBoxSize) {
+
+ // calculate the max crop dimensions in percent
+ var percentW = zoomBoxSize / faWidth * 100; // calculate percentage of the crop width in regard of the original width
+ var percentH = zoomBoxSize / faHeight * 100; // calculate percentage of the crop height in regard of the original height
+
+ // use the smaller crop dimension
+ var maxDimension = percentW >= percentH ? faWidth : faHeight;
// calculate the zoomed dimensions
- var cropW = maxW - (maxW * zoom / 100); // to get the final crop Width and Height, the amount for zoom-in
- var cropH = maxH - (maxH * zoom / 100); // needs to get stripped out
-
- // validate against the minimal dimensions
- var upscaling = true;
- if(!upscaling) { // if upscaling isn't allowed, we decrease the zoom, so that we get a crop with the min-Dimensions
- if(cropW < finalWidth) {
- cropW = finalWidth;
- cropH = finalWidth / ratioFinal;
- }
- if(cropH < finalHeight) {
- cropH = finalHeight;
- cropW = finalHeight * ratioFinal;
- }
- }
+ var cropDimension = maxDimension - (maxDimension * zoomPercent / 100); // to get the final crop Width and Height, the amount for zoom-in needs to get stripped out
// calculate the crop positions
- var tmpX = getFocusZoomPosition(left, fullWidth, cropW); // calculate the x-position
- var tmpY = getFocusZoomPosition(top, fullHeight, cropH); // calculate the y-position
-
+ var posLeft = getFocusZoomPosition(focusLeft, faWidth, cropDimension); // calculate the x-position
+ var posTop = getFocusZoomPosition(focusTop, faHeight, cropDimension); // calculate the y-position
+ // var percentLeft = posLeft / faWidth * 100;
+ // var percentTop = posTop / faHeight * 100;
+
return {
- 'left': tmpX,
- 'top': tmpY,
- 'width': cropW,
- 'height': cropH,
- 'zoom': zoom // adjusted zoom
+ 'left': posLeft,
+ 'top': posTop,
+ 'width': cropDimension,
+ 'height': cropDimension
};
}
-
+
+ /**
+ * Get focus zoom position for either X or Y, intended for use with getFocusZoomCropDimensions4GridviewSquare()
+ *
+ * via Horst
+ *
+ * @param focusPercent Left or Top percentage
+ * @param sourceDimPX Width or Height from the full image
+ * @param gridViewPX Width and Height from the square GridView-Thumbnail
+ * @param zoomPercent Zoom percent
+ * @param scale
+ * @param smallestSidePX the smallest Dimension from the full image
+ * @returns {number}
+ *
+ */
+ function getFocusZoomPosition4GridviewSquare(focusPercent, sourceDimPX, gridViewPX, zoomPercent, scale, smallestSidePX) {
+ var sourceDimPX = sourceDimPX * scale; // is used to later get the position in pixel
+ var gridViewPercent = gridViewPX / sourceDimPX * 100; // get percent of the gridViewBox in regard to the current image side size (width|height)
+ var adjustPercent = gridViewPercent / 2; // is used to calculate position from the circle center point to [left|top] percent
+ var posPercent = focusPercent - adjustPercent; // get adjusted position in percent
+
+ var posMinVal = 0;
+ var posMaxVal = 100 - gridViewPercent;
+ if(posPercent <= posMinVal) posPercent = 0;
+ if(posPercent >= posMaxVal) posPercent = posMaxVal;
+
+ var posPX = sourceDimPX / 100 * posPercent / scale;
+ posPX = -1 * parseInt(posPX);
+
+ //console.log(['gridView1:', 'sourceDimPX='+sourceDimPX, 'gridViewPX='+gridViewPX, 'gridViewPercent='+gridViewPercent, 'adjustPercent='+adjustPercent, 'minVal='+posMinVal, 'maxVal='+posMaxVal, 'posPercent='+posPercent, 'posPX='+posPX]);
+ return posPX;
+ }
+
+ /**
+ * Get focus zoom clip rect for the square GridView-Thumbnails
+ *
+ * via Horst
+ *
+ * @param focusLeft Left percent
+ * @param focusTop Top percent
+ * @param zoomPercent Zoom percent
+ * @param w Width of the thumbnail image
+ * @param h Height of the thumbnail image
+ * @param gridViewSize Dimension of the GridView-Thumbnail
+ * @param scale
+ * @returns {{transformLeft: number, transformTop: number, scale: number}}
+ *
+ */
+ function getFocusZoomCropDimensions4GridviewSquare(focusLeft, focusTop, zoomPercent, w, h, gridViewSize, scale) {
+ var smallestSidePX = w >= h ? h : w;
+ var posLeft = getFocusZoomPosition4GridviewSquare(focusLeft, w, gridViewSize, zoomPercent, scale, smallestSidePX);
+ var posTop = getFocusZoomPosition4GridviewSquare(focusTop, h, gridViewSize, zoomPercent, scale, smallestSidePX);
+ var transformLeft = parseInt(posLeft);
+ var transformTop = parseInt(posTop);
+ return {
+ 'transformLeft': transformLeft,
+ 'transformTop': transformTop,
+ 'scale': scale
+ };
+ }
+
/**
* Tear down the InputfieldImageEdit panel
*
@@ -1113,33 +1168,36 @@ function InputfieldImage($) {
'transform': 'translate3d(-50%, -50%, 0)'
});
- } else if(zoom > 0 && $item.closest('.InputfieldImageFocusZoom').length) {
- // focus with zoom
+ } else if(zoom > 0 && $item.closest('.InputfieldImageFocusZoom').length && !gridSliding) {
+ // focus with zoom
if(w >= h) {
var maxHeight = '100%';
var maxWidth = 'none';
+ if(w == dataW) {
+ // scale full dimensions proportionally to gridSize
+ h = gridSize;
+ w = (h / dataH) * dataW
+ }
} else {
var maxHeight = 'none';
var maxWidth = '100%';
+ if(h == dataH) {
+ // scale full dimensions proportionally to gridSize
+ w = gridSize;
+ h = (w / dataW) * dataH;
+ }
}
+
var scale = 1 + ((zoom / 100) * 2);
- var top = focus.top;
- var left = focus.left;
- if(top > 92 || top > 100) top = 100;
- if(left > 92 || left > 100) left = 100;
- if(top < 0) top = 0;
- if(left < 0) left = 0;
- var crop = getFocusZoomCropDimensions(left, top, zoom, w, h, gridSize, gridSize);
-
+ var crop = getFocusZoomCropDimensions4GridviewSquare(focus.left, focus.top, zoom, w, h, gridSize, scale);
$img.css({
- 'top': top + '%',
- 'left': left + '%',
- 'transform-origin': 'top left',
- 'transform': 'scale(' + scale + ') translate3d(-' + left + '%, -' + top + '%, 0)',
+ 'left': '0px',
+ 'top': '0px',
+ 'transform-origin': '0px 0px',
+ 'transform': 'scale(' + crop.scale + ') translate3d(' + crop.transformLeft + 'px, ' + crop.transformTop + 'px, 0)',
'max-width': maxWidth,
'max-height': maxHeight
});
- // console.log("top=" + top + "%, left=" + left + "%, zoom=" + zoom + ", scale=" + scale);
} else if(w >= h) {
// image width greater than height
@@ -1310,33 +1368,37 @@ function InputfieldImage($) {
$header.append($slider);
+ var sizeSlide = function(event, ui) {
+ var value = ui.value;
+ var minPct = 15;
+ var divisor = Math.floor(gridSize / minPct);
+ var v = value - min;
+ var listSize = Math.floor(minPct + (v / divisor));
+
+ if($inputfield.hasClass('InputfieldImageEditAll')) {
+ setCookieData($inputfield, 'size', value);
+ setListSize($inputfield, listSize);
+ } else {
+ setCookieData($inputfield, 'listSize', listSize);
+ setGridSize($inputfield, value);
+ }
+ };
+
$slider.slider({
'min': min,
'max': max,
'value': getCookieData($inputfield, 'size'),
'range': 'min',
- 'slide': function(event, ui) {
-
- var value = ui.value;
- var minPct = 15;
- var divisor = Math.floor(gridSize / minPct);
- var v = value - min;
- var listSize = Math.floor(minPct + (v / divisor));
-
- if($inputfield.hasClass('InputfieldImageEditAll')) {
- setCookieData($inputfield, 'size', value);
- setListSize($inputfield, listSize);
- } else {
- setCookieData($inputfield, 'listSize', listSize);
- setGridSize($inputfield, value);
- }
- },
+ 'slide': sizeSlide,
'start': function(event, ui) {
+ gridSliding = true;
if($inputfield.find(".InputfieldImageEdit:visible").length) {
$inputfield.find(".InputfieldImageEdit__close").click();
}
},
'stop': function(event, ui) {
+ gridSliding = false;
+ sizeSlide(event, ui);
updateGrid($inputfield);
}
});
diff --git a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.min.js b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.min.js
index 8751c04e..e731ac5a 100644
--- a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.min.js
+++ b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.min.js
@@ -1 +1 @@
-function InputfieldImage(x){var l=null;var c={file:"",item:null,edit:null};var J={type:"image",closeOnContentClick:true,closeBtnInside:true};var d=null;var s=[];function u(){var Q=window.File&&window.FileList&&window.FileReader;var P=x(".InputfieldAllowAjaxUpload").length>0;var R=x("#PageIDIndicator").length>0;return(Q&&(R||P))}function B(R,P,Q){P||(P=250);var S,T;return function(){var W=Q||this;var V=+new Date(),U=arguments;if(S&&V .gridImage",start:function(U,T){var S=I(Q.closest(".Inputfield"),"size");T.placeholder.append(x("").css({display:"block",height:S+"px",width:S+"px"}));R=window.setTimeout(function(){K(Q,null)},100);Q.addClass("InputfieldImageSorting")},stop:function(U,S){var T=x(this);if(R!==null){S.item.find(".InputfieldImageEdit__edit").click();clearTimeout(R)}T.children("li").each(function(W){var V=x(this).find(".InputfieldFileSort");if(V.val()!=W){V.val(W).change()}});Q.removeClass("InputfieldImageSorting")},cancel:".InputfieldImageEdit,.focusArea,input,textarea,button,select,option"};Q.sortable(P)}function q(Q){var P=x.extend(true,{},J);P.callbacks={elementParse:function(R){var S=x(R.el).attr("data-original");if(typeof S=="undefined"||!S){S=x(R.el).attr("src")}R.src=S}};P.gallery={enabled:true};Q.find("img").magnificPopup(P)}function v(Q){var P=x.extend(true,{},J);P.callbacks={elementParse:function(R){R.src=x(R.el).attr("src")}};P.gallery={enabled:false};Q.find("img").magnificPopup(P)}function G(P){return P.find(".InputfieldImageEdit--active")}function w(P){return x("#"+P.find(".InputfieldImageEdit__edit").attr("data-current"))}function H(R){var P=R.is(":checked");var Q=R.parents(".gridImages").find(".gridImage__deletebox");if(P){Q.prop("checked","checked").change()}else{Q.removeAttr("checked").change()}}function N(Q){if(typeof Q=="undefined"){var P=x(".gridImages")}else{var P=Q.find(".gridImages")}P.each(function(){var R=x(this),S=G(R);if(S.length){j(w(S),S)}})}function y(P){var S=[];var X=[];var U=[];var R=0,W=0,Q=0;var V;if(typeof P=="undefined"){V=x(".InputfieldImage.Inputfield")}else{V=P}V.removeClass("InputfieldImageNarrow InputfieldImageMedium InputfieldImageWide");V.each(function(){var Z=x(this);var aa=Z.width();if(aa<1){return}if(aa<=500){S[R]=Z;R++}else{if(aa<=900){X[W]=Z;W++}else{U[Q]=Z;Q++}}});for(var T=0;T").addClass("focusArea");X.after(aj)}aj.css({height:X.height()+"px",width:X.width()+"px"}).addClass("focusActive");Z=aj.find(".focusCircle");if(!Z.length){Z=x("").addClass("focusCircle");aj.append(Z)}X.parent().addClass("focusWrap");ae();var af=function(ar){var av,au,ax,at,ao,ap,aw,an;if(typeof ar=="undefined"){ar=R}R=ar;aw=aj.width();an=aj.height();if(aw>an){W.height((100-ar)+"%");av=W.height();W.width(av)}else{W.width((100-ar)+"%");av=W.width();W.height(av)}ax=S();var aq=b(ax.left,ax.top,ar,aw,an,av,av);W.css({top:aq.top+"px",left:aq.left+"px"});ax.zoom=aq.zoom;aa("zoom",aq.zoom);if(ad=="grid"){i(ab.parent(),ac,false,ax)}};var Y=function(ao,au){var at=x(this);var an=at.outerHeight();var av=at.parent().width();var ar=at.parent().height();var aw=au.position.top>0?au.position.top+(an/2):0;var aq=au.position.left>0?au.position.left+(an/2):0;var ap={top:aw>0?((aw/ar)*100):0,left:aq>0?((aq/av)*100):0,zoom:V("zoom")};Q(ap);if(ah){af(ap.zoom)}else{if(ad=="grid"){i(ab.parent(),ac,false,ap)}}};Z.draggable({containment:"parent",drag:Y,stop:Y});if(ah){var P=V("zoom");al=x("").addClass("focusZoomSlider").css({"margin-top":"5px"});W=x("").addClass("focusZoomBox").css({position:"absolute",background:"rgba(0,0,0,0.5)"});aj.prepend(W);X.after(al);ab.attr("src",X.attr("src"));al.slider({min:0,max:50,value:P,range:"max",slide:function(an,ao){af(ao.value)}});af(P)}else{aj.css("background-color","rgba(0,0,0,0.5)")}}function D(P){$focusCircle=P.find(".focusCircle");if($focusCircle.length){var Q=$focusCircle.closest(".focusWrap");Q.find(".focusZoomSlider").slider("destroy").remove();Q.find(".focusZoomBox").remove();Q.removeClass("focusWrap");$focusCircle.draggable("destroy");$focusCircle.parent().removeClass("focusActive");$focusCircle.remove();var R=P.find(".InputfieldImageButtonFocus");if(R.length){$icon=R.find("i");$icon.removeClass("focusIconActive").toggleClass($icon.attr("data-toggle"))}}}function z(R,Q,W){R=parseInt(R);var U=100;var V=(W/Q*100);var T=U-V;var S=R+(V/2);var P=0;if(S>=100){P=Q-W}else{if(S<=Math.floor(T/2)){P=0}else{P=Math.ceil((Q-W)/100*R)}}return P}function b(T,Z,af,ad,ac,U,R){var ae=U/R;var V=U/ad*100;var S=R/ac*100;if(V>=S){var Q=ad;var ab=ad/ae}else{var ab=ac;var Q=ac*ae}var P=Q-(Q*af/100);var Y=ab-(ab*af/100);var aa=true;if(!aa){if(P0&&Q.closest(".InputfieldImageFocusZoom").length){if(W>=ae){var ac="100%";var ag="none"}else{var ac="none";var ag="100%"}var ah=1+((P/100)*2);var Z=aa.top;var S=aa.left;if(Z>92||Z>100){Z=100}if(S>92||S>100){S=100}if(Z<0){Z=0}if(S<0){S=0}var R=b(S,Z,P,W,ae,V,V);T.css({top:Z+"%",left:S+"%","transform-origin":"top left",transform:"scale("+ah+") translate3d(-"+S+"%, -"+Z+"%, 0)","max-width":ag,"max-height":ac})}else{if(W>=ae){T.attr("height",V).removeAttr("width");if(aa.left<1){aa.left=0.001}T.css({"max-height":"100%","max-width":"none",top:"50%",left:aa.left+"%",transform:"translate3d(-"+aa.left+"%, -50%, 0)"})}else{if(ae>W){T.attr("width",V).removeAttr("height");if(aa.top<1){aa.top=0.001}T.css({"max-height":"none","max-width":"100%",top:aa.top+"%",left:"50%",transform:"translate3d(-50%, -"+aa.top+"%, 0)"})}else{T.css({"max-height":"100%","max-width":"none",top:"50%",left:"50%",transform:"translate3d(-50%, -50%, 0)"});T.removeAttr("width").attr("height",V)}}}}var W=T.width();if(W){Q.css({width:(U?W+"px":V+"px"),height:V+"px"})}else{var Y=Q.attr("data-tries");if(!Y){Y=0}if(typeof Y=="undefined"){Y=0}Y=parseInt(Y);if(Y>3){Q.css({width:V+"px",height:V+"px"})}else{s.push(Q);Q.attr("data-tries",Y+1)}}}function E(Q){if(Q.find(".InputfieldImageListToggle").length){return}var T=x("").append("");var V=x("").append("");var P=x("").append("");var U="InputfieldImageListToggle--active";var S="";var R=function(ab){var aa=x(this);var Y=aa.closest(".Inputfield");var W=aa.attr("href");var X;var ac=aa.parent().children("."+U);var Z=ac.attr("href");ac.removeClass(U);aa.addClass(U);D(Y);if(W=="list"){if(!Y.hasClass("InputfieldImageEditAll")){Y.find(".InputfieldImageEdit--active .InputfieldImageEdit__close").click();Y.addClass("InputfieldImageEditAll")}X=I(Y,"listSize");m(Y,X);f(Y,"mode","list")}else{if(W=="left"){Y.removeClass("InputfieldImageEditAll");X=I(Y,"size");k(Y,X,true);f(Y,"mode","left");N()}else{if(W=="grid"){Y.removeClass("InputfieldImageEditAll");X=I(Y,"size");k(Y,X,false);f(Y,"mode","grid");if(Z=="left"){setTimeout(function(){k(Y,X,false)},100)}}}}F(Y.find(".gridImages"));aa.blur();return false};T.click(R);V.click(R);P.click(R);if(Q.hasClass("InputfieldImage")){Q.find(".InputfieldHeader").append(T).append(V).append(P);S=I(Q,"mode")}else{x(".InputfieldImage .InputfieldHeader",Q).append(T).append(V).append(P)}if(S=="list"){T.click()}else{if(S=="left"){V.click()}else{}}}function C(U){var R=U.children(".InputfieldHeader");if(R.children(".InputfieldImageSizeSlider").length){return}var T=U.find(".gridImages");var Q=T.attr("data-gridsize");var S=Q/2;var P=Q*2;var V=x('');R.append(V);V.slider({min:S,max:P,value:I(U,"size"),range:"min",slide:function(Y,aa){var Z=aa.value;var ab=15;var ac=Math.floor(Q/ab);var W=Z-S;var X=Math.floor(ab+(W/ac));if(U.hasClass("InputfieldImageEditAll")){f(U,"size",Z);m(U,X)}else{f(U,"listSize",X);k(U,Z)}},start:function(W,X){if(U.find(".InputfieldImageEdit:visible").length){U.find(".InputfieldImageEdit__close").click()}},stop:function(W,X){N(U)}})}function f(Q,T,S){var R=I(Q);var U=Q.attr("id");var P=U?U.replace("wrap_Inputfield_",""):"";if(!P.length||typeof S=="undefined"){return}if(R[P][T]==S){return}R[P][T]=S;x.cookie("InputfieldImage",R);d=R}function I(Q,T){if(d&&typeof T=="undefined"){return d}var U=Q.attr("id");var P=U?U.replace("wrap_Inputfield_",""):"na";var S=d?d:x.cookie("InputfieldImage");var R=null;if(!S){var S={}}if(typeof S[P]=="undefined"){S[P]={}}if(typeof S[P].size=="undefined"){S[P].size=parseInt(Q.find(".gridImages").attr("data-size"))}if(typeof S[P].listSize=="undefined"){S[P].listSize=23}if(typeof S[P].mode=="undefined"){S[P].mode=Q.find(".gridImages").attr("data-gridMode")}if(d==null){d=S}if(typeof T=="undefined"){R=S}else{if(T===true){R=S[P]}else{if(typeof S[P][T]!="undefined"){R=S[P][T]}}}return R}function a(T){if(T.hasClass("InputfieldStateCollapsed")){return}var U=parseInt(T.find(".InputfieldImageMaxFiles").val());var S=T.find(".gridImages");var R=I(T,"size");var V=I(T,"mode");var Q=V=="left"?true:false;if(!R){R=S.attr("data-gridsize")}R=parseInt(R);if(T.hasClass("InputfieldImageEditAll")||V=="list"){var P=I(T,"listSize");m(T,P)}else{k(T,R,Q)}if(!T.hasClass("InputfieldImageInit")){T.addClass("InputfieldImageInit");if(T.hasClass("InputfieldRenderValueMode")){return q(T)}else{if(U==1){T.addClass("InputfieldImageMax1");v(T)}else{F(S)}}E(T);C(T)}y(T);T.on("change",".InputfieldFileActionSelect",function(){var W=x(this).next(".InputfieldFileActionNote");if(x(this).val().length){W.fadeIn()}else{W.hide()}})}function M(){x("body").addClass("ie-no-drop");x(".InputfieldImage.InputfieldFileMultiple").each(function(){var Q=x(this),S=parseInt(Q.find(".InputfieldFileMaxFiles").val()),P=Q.find(".gridImages"),R=Q.find(".InputfieldImageUpload");R.on("change","input[type=file]",function(){var W=x(this),U=W.parent(".InputMask");if(W.val().length>1){U.addClass("ui-state-disabled")}else{U.removeClass("ui-state-disabled")}if(W.next("input.InputfieldFile").length>0){return}var T=P.children("li").length+R.find("input[type=file]").length+1;if(S>0&&T>=S){return}R.find(".InputMask").not(":last").each(function(){var X=x(this);if(X.find("input[type=file]").val()<1){X.remove()}});var V=U.clone().removeClass("ui-state-disabled");V.children("input[type=file]").val("");V.insertAfter(U)})})}function O(R){var Q;if(R.length>0){Q=R.find(".InputfieldImageUpload")}else{Q=x(".InputfieldImageUpload")}Q.each(function(U){var V=x(this);var T=V.closest(".InputfieldContent");if(V.hasClass("InputfieldImageInitUpload")){return}S(T,U);V.addClass("InputfieldImageInitUpload")});function S(ac,ao){var ab=ac.parents("form");var T=ac.closest(".InputfieldRepeaterItem");var X=T.length?T.attr("data-editUrl"):ab.attr("action");X+=(X.indexOf("?")>-1?"&":"?")+"InputfieldFileAjax=1";var au=ab.find("input._post_token");var aa=au.attr("name");var af=au.val();var ae=ac.find(".InputfieldImageErrors").first();var W=ac.find(".InputfieldImageUpload").data("fieldname");W=W.slice(0,-2);var am=ac.closest(".Inputfield.InputfieldImage");var at=ac.find(".InputfieldImageUpload").data("extensions").toLowerCase();var al=ac.find(".InputfieldImageUpload").data("maxfilesize");var ad=ac.find("input[type=file]").get(0);var V=ac.find(".gridImages");var ap=V.get(0);var ah=V.data("gridsize");var ai=null;var ag=parseInt(ac.find(".InputfieldImageMaxFiles").val());var ar=o(am);var an=ar.maxWidth>0||ar.maxHeight>0||ar.maxSize>0;aq(ac);if(ag!=1){ak(V)}V.children().addClass("InputfieldFileItemExisting");am.on("pwimageupload",function(av,aw){aj([aw.file],aw.xhr)});function Z(aw,av){if(typeof av!=="undefined"){aw=""+av+": "+aw}return""+aw+""}function U(aw){var av=new String(aw).substring(aw.lastIndexOf("/")+1);if(av.lastIndexOf(".")!=-1){av=av.substring(0,av.lastIndexOf("."))}return av}function aq(aw){if(aw.hasClass("InputfieldImageDropzoneInit")){return}var az=aw.get(0);var ay=aw.closest(".Inputfield");function av(){if(ay.hasClass("pw-drag-in-file")){return}aw.addClass("ui-state-hover");ay.addClass("pw-drag-in-file")}function ax(){if(!ay.hasClass("pw-drag-in-file")){return}aw.removeClass("ui-state-hover");ay.removeClass("pw-drag-in-file")}az.addEventListener("dragleave",function(){ax()},false);az.addEventListener("dragenter",function(aA){aA.preventDefault();av()},false);az.addEventListener("dragover",function(aA){if(!aw.is("ui-state-hover")){av()}aA.preventDefault();aA.stopPropagation();return false},false);az.addEventListener("drop",function(aA){aj(aA.dataTransfer.files);ax();aA.preventDefault();aA.stopPropagation();return false},false);aw.addClass("InputfieldImageDropzoneInit")}function ak(aD){var aH=null;var aF=false;var aw=null;var av=aD.closest(".Inputfield");function aA(){av.addClass("pw-drag-in-file")}function aG(){av.removeClass("pw-drag-in-file")}function az(aJ){var aN=aJ.offset();var aK=aJ.width();var aI=aJ.height();var aM=aN.left+aK/2;var aL=aN.top+aI/2;return{clientX:aM,clientY:aL}}function aC(){return aD.find(".InputfieldImageEdit--active").length>0}function aB(aJ){if(aC()){return}aJ.preventDefault();aJ.stopPropagation();aA();aF=false;if(aH==null){var aI=aD.attr("data-size")+"px";var aK=x("").addClass("gridImage__overflow");if(aD.closest(".InputfieldImageEditAll").length){aK.css({width:"100%",height:aI})}else{aK.css({width:aI,height:aI})}aH=x("").addClass("ImageOuter gridImage gridImagePlaceholder").append(aK);aD.append(aH)}var aL=az(aH);aH.simulate("mousedown",aL)}function aE(aI){if(aC()){return}aI.preventDefault();aI.stopPropagation();aA();aF=false;if(aH==null){return}var aJ={clientX:aI.originalEvent.clientX,clientY:aI.originalEvent.clientY};aH.simulate("mousemove",aJ)}function ay(aI){if(aC()){return}aI.preventDefault();aI.stopPropagation();if(aH==null){return false}aF=true;if(aw){clearTimeout(aw)}aw=setTimeout(function(){if(!aF||aH==null){return}aH.remove();aH=null;aG()},1000)}function ax(aI){if(aC()){return}aG();aF=false;var aJ={clientX:aI.clientX,clientY:aI.clientY};aH.simulate("mouseup",aJ);l=aH.next(".gridImage");aH.remove();aH=null}if(aD.length&&!aD.hasClass("gridImagesInitDropInPlace")){aD.on("dragenter",aB);aD.on("dragover",aE);aD.on("dragleave",ay);aD.on("drop",ax);aD.addClass("gridImagesInitDropInPlace")}}function Y(aU,aI,aE){var aR=ProcessWire.config.InputfieldImage.labels;var aB=parseInt(aU.size/1024,10)+" kB";var aT='";var aW=x(''),aO=x(aT),aC=x(''),av=x(''),aL=x(""),aN=x(""),aQ=x(' '),aP=x('
'),aw,aG,aV,aJ=URL.createObjectURL(aU),ax=am.find(".gridImages"),az=ag==1,aM=I(am,"size"),aA=I(am,"listSize"),ay=am.hasClass("InputfieldImageEditAll"),aF=x('
');aC.append(aF);aL.find(".gridImage__inner").append(aQ);aL.find(".gridImage__inner").append(aP.css("display","none"));aL.find(".gridImage__inner").append(aN);av.append(x(''+aB+""));if(ay){aC.css("width",aA+"%");av.css("width",(100-aA)+"%")}else{aC.css({width:aM+"px",height:aM+"px"})}aW.append(aO).append(aC).append(aL).append(av);aF.attr({src:aJ,"data-original":aJ});img=new Image();img.addEventListener("load",function(){aO.find(".dimensions").html(this.width+" × "+this.height);var aX=Math.min(this.width,this.height)/aM;aF.attr({width:this.width/aX,height:this.height/aX})},false);img.src=aJ;if(typeof aE!="undefined"){aG=aE}else{aG=new XMLHttpRequest()}function aH(aX){if(typeof aX!="undefined"){if(!aX.lengthComputable){return}aN.attr("value",parseInt((aX.loaded/aX.total)*100))}x("body").addClass("pw-uploading");aP.css("display","block")}aG.upload.addEventListener("progress",aH,false);aG.addEventListener("load",function(){aG.getAllResponseHeaders();var a0=x.parseJSON(aG.responseText);if(typeof a0.ajaxResponse!="undefined"){a0=a0.ajaxResponse}var aY=a0.length>1;if(a0.error!==undefined){a0=[a0]}for(var aZ=0;aZ-1){a3=a3.substring(0,a3.indexOf("?"))}var a1=a3.substring(a3.lastIndexOf(".")+1).toLowerCase();a3=a3.substring(0,a3.lastIndexOf("."));if(a1==a7){a8.children("span").text(a3).removeAttr("contenteditable")}a2.find(".gridImage__edit").click()}c.file="";c.item=null;c.edit=null}if(ai){clearTimeout(ai)}l=null;ai=setTimeout(function(){if(ag!=1){F(ax)}else{v(am)}x("body").removeClass("pw-uploading");ax.trigger("AjaxUploadDone")},500);am.trigger("change").removeClass("InputfieldFileEmpty")},false);if(c.edit){c.edit.find(".InputfieldImageEdit__close").click()}else{if(am.find(".InputfieldImageEdit:visible").length){am.find(".InputfieldImageEdit__close").click()}}if(c.item){c.item.replaceWith(aW);c.item=aW}else{if(l&&l.length){l.before(aW)}else{ax.append(aW)}}function aS(aX,aZ){if(typeof aE=="undefined"){aG.open("POST",X,true)}aG.setRequestHeader("X-FILENAME",encodeURIComponent(aX.name));aG.setRequestHeader("X-FIELDNAME",W);if(c.item){aG.setRequestHeader("X-REPLACENAME",c.file)}aG.setRequestHeader("Content-Type","application/octet-stream");aG.setRequestHeader("X-"+aa,af);aG.setRequestHeader("X-REQUESTED-WITH","XMLHttpRequest");if(typeof aZ!="undefined"&&aZ!=false){aG.send(aZ)}else{aG.send(aX)}N();am.trigger("change");var aY=am.find(".InputfieldFileItem").length;if(aY==1){am.removeClass("InputfieldFileEmpty").removeClass("InputfieldFileMultiple").addClass("InputfieldFileSingle")}else{if(aY>1){am.removeClass("InputfieldFileEmpty").removeClass("InputfieldFileSingle").addClass("InputfieldFileMultiple")}}}aH();var aD=aU.name.substring(aU.name.lastIndexOf(".")+1).toLowerCase();if(an&&(aD=="jpg"||aD=="jpeg"||aD=="png"||aD=="gif")){var aK=new PWImageResizer(ar);aP.addClass("pw-resizing");aK.resize(aU,function(aX){aP.removeClass("pw-resizing");aS(aU,aX)})}else{aS(aU)}}function aj(av,aC){var aA=function(aE){return parseInt(aE/1024,10)};if(typeof av==="undefined"){ap.innerHTML="No support for the File API in this web browser";return}for(var ay=0,ax=av.length;ayal&&al>2000000){var aw=aA(av[ay].size),az=aA(al);aD="Filesize "+aw+" kb is too big. Maximum allowed is "+az+" kb";ae.append(Z(aD,av[ay].name))}else{if(typeof aC!="undefined"){Y(av[ay],aB,aC)}else{Y(av[ay],aB)}}}if(ag==1){break}}}ad.addEventListener("change",function(av){aj(this.files);av.preventDefault();av.stopPropagation();this.value=""},false)}function P(){var T=".InputfieldImageEdit__imagewrapper img";x(document).on("dragenter",T,function(){var W=x(this);if(W.closest(".InputfieldImageMax1").length){return}var X=W.attr("src");var U=W.closest(".InputfieldImageEdit");var V=W.closest(".InputfieldImageEdit__imagewrapper");V.addClass("InputfieldImageEdit__replace");c.file=new String(X).substring(X.lastIndexOf("/")+1);c.item=x("#"+U.attr("data-for"));c.edit=U}).on("dragleave",T,function(){var V=x(this);if(V.closest(".InputfieldImageMax1").length){return}var U=V.closest(".InputfieldImageEdit__imagewrapper");U.removeClass("InputfieldImageEdit__replace");c.file="";c.item=null;c.edit=null})}P()}function o(Q){var P={maxWidth:0,maxHeight:0,maxSize:0,quality:1,autoRotate:true,debug:ProcessWire.config.debug};var R=Q.attr("data-resize");if(typeof R!="undefined"&&R.length){R=R.split(";");P.maxWidth=parseInt(R[0]);P.maxHeight=parseInt(R[1]);P.maxSize=parseFloat(R[2]);P.quality=parseFloat(R[3])}return P}function L(){x(".InputfieldImage.Inputfield").each(function(){a(x(this))});A();if(u()){O("")}else{M()}x(document).on("reloaded",".InputfieldImage",function(){var P=x(this);a(P);O(P)}).on("wiretabclick",function(R,Q,P){Q.find(".InputfieldImage").each(function(){a(x(this))})}).on("opened",".InputfieldImage",function(){a(x(this))})}L()}jQuery(document).ready(function(a){InputfieldImage(a)});
\ No newline at end of file
+function InputfieldImage(A){var m=null;var c={file:"",item:null,edit:null};var M={type:"image",closeOnContentClick:true,closeBtnInside:true};var d=null;var v=[];var k=false;function x(){var T=window.File&&window.FileList&&window.FileReader;var S=A(".InputfieldAllowAjaxUpload").length>0;var U=A("#PageIDIndicator").length>0;return(T&&(U||S))}function E(U,S,T){S||(S=250);var V,W;return function(){var Z=T||this;var Y=+new Date(),X=arguments;if(V&&Y .gridImage",start:function(X,W){var V=L(T.closest(".Inputfield"),"size");W.placeholder.append(A("").css({display:"block",height:V+"px",width:V+"px"}));U=window.setTimeout(function(){N(T,null)},100);T.addClass("InputfieldImageSorting")},stop:function(X,V){var W=A(this);if(U!==null){V.item.find(".InputfieldImageEdit__edit").click();clearTimeout(U)}W.children("li").each(function(Z){var Y=A(this).find(".InputfieldFileSort");if(Y.val()!=Z){Y.val(Z).change()}});T.removeClass("InputfieldImageSorting")},cancel:".InputfieldImageEdit,.focusArea,input,textarea,button,select,option"};T.sortable(S)}function t(T){var S=A.extend(true,{},M);S.callbacks={elementParse:function(U){var V=A(U.el).attr("data-original");if(typeof V=="undefined"||!V){V=A(U.el).attr("src")}U.src=V}};S.gallery={enabled:true};T.find("img").magnificPopup(S)}function y(T){var S=A.extend(true,{},M);S.callbacks={elementParse:function(U){U.src=A(U.el).attr("src")}};S.gallery={enabled:false};T.find("img").magnificPopup(S)}function J(S){return S.find(".InputfieldImageEdit--active")}function z(S){return A("#"+S.find(".InputfieldImageEdit__edit").attr("data-current"))}function K(U){var S=U.is(":checked");var T=U.parents(".gridImages").find(".gridImage__deletebox");if(S){T.prop("checked","checked").change()}else{T.removeAttr("checked").change()}}function Q(T){if(typeof T=="undefined"){var S=A(".gridImages")}else{var S=T.find(".gridImages")}S.each(function(){var U=A(this),V=J(U);if(V.length){j(z(V),V)}})}function B(S){var V=[];var aa=[];var X=[];var U=0,Z=0,T=0;var Y;if(typeof S=="undefined"){Y=A(".InputfieldImage.Inputfield")}else{Y=S}Y.removeClass("InputfieldImageNarrow InputfieldImageMedium InputfieldImageWide");Y.each(function(){var ac=A(this);var ad=ac.width();if(ad<1){return}if(ad<=500){V[U]=ac;U++}else{if(ad<=900){aa[Z]=ac;Z++}else{X[T]=ac;T++}}});for(var W=0;W100?100:av,left:au>100?100:au,zoom:at>100?0:at};return aj}function X(aq){if(typeof aq=="undefined"){aq=V()}return aq.top+" "+aq.left+" "+aq.zoom}function Y(ar){var aq=V();return aq[ar]}function T(aq){aj=aq;var ar=aq.top+" "+aq.left+" "+aq.zoom;ae.attr("data-focus",ar);W=an.find(".InputfieldImageFocus");if(ar!=W.val()){W.val(ar).trigger("change")}}function ad(at,ar){var aq=V();aq[at]=ar;T(aq)}function ah(){var au=V();var ar=ac.parent();var at=ar.width();var av=ar.height();var aq=Math.round((au.left/100)*at);var aw=Math.round((au.top/100)*av);if(aq<0){aq=0}if(aw<0){aw=0}if(aq>at){aq=at}if(aw>av){aw=av}ac.css({top:aw+"px",left:aq+"px"})}am=aa.siblings(".focusArea");if(!am.length){am=A("").addClass("focusArea");aa.after(am)}am.css({height:aa.height()+"px",width:aa.width()+"px","background-color":"rgba(0,0,0,0.7)"}).addClass("focusActive");ac=am.find(".focusCircle");if(!ac.length){ac=A("").addClass("focusCircle");am.append(ac)}aa.parent().addClass("focusWrap");ah();var ai=function(aw){var ar,aq,av,at;if(typeof aw=="undefined"){aw=U}U=aw;av=am.width();at=am.height();if(av>at){Z.height((100-aw)+"%");ar=Z.height();Z.width(ar)}else{Z.width((100-aw)+"%");ar=Z.width();Z.height(ar)}aq=V();var au=b(aq.left,aq.top,aw,av,at,ar);Z.css({top:au.top+"px",left:au.left+"px","background-position":"-"+au.left+"px -"+au.top+"px","background-size":av+"px "+at+"px"});aq.zoom=aw;ad("zoom",aq.zoom);if(ag=="grid"){i(ae.parent(),af,false,aq)}};var ab=function(ar,ay){var aw=A(this);var aq=aw.outerHeight();var az=aw.parent().width();var av=aw.parent().height();var ax=ay.position.top>0?ay.position.top:0;var at=ay.position.left>0?ay.position.left:0;ax=ax>0?((ax/av)*100):0;at=at>0?((at/az)*100):0;var au={top:ax,left:at,zoom:Y("zoom")};T(au);if(ak){ai(au.zoom)}else{if(ag=="grid"){i(ae.parent(),af,false,au)}}};ac.draggable({containment:"parent",drag:ab,stop:ab});if(ak){var S=Y("zoom");ao=A("").addClass("focusZoomSlider").css({"margin-top":"5px"});Z=A("").addClass("focusZoomBox").css({position:"absolute",background:"transparent","background-image":"url("+aa.attr("src")+")"});am.prepend(Z);aa.after(ao);ae.attr("src",aa.attr("src"));ao.slider({min:0,max:50,value:S,range:"max",slide:function(aq,ar){ai(ar.value)}});ai(S)}else{am.css("background-color","rgba(0,0,0,0.5)")}}function G(S){$focusCircle=S.find(".focusCircle");if($focusCircle.length){var T=$focusCircle.closest(".focusWrap");T.find(".focusZoomSlider").slider("destroy").remove();T.find(".focusZoomBox").remove();T.removeClass("focusWrap");$focusCircle.draggable("destroy");$focusCircle.parent().removeClass("focusActive");$focusCircle.remove();var U=S.find(".InputfieldImageButtonFocus");if(U.length){$icon=U.find("i");$icon.removeClass("focusIconActive").toggleClass($icon.attr("data-toggle"))}}}function C(V,U,X){var T=parseInt(U*V/100);var S=parseInt(T-(X/2));var W=parseInt(U-X);if(0>S){S=0}if(W=T?ac:U;var S=aa-(aa*Y/100);var V=C(W,ac,S);var X=C(ad,U,S);return{left:V,top:X,width:S,height:S}}function n(V,ad,U,Y,X,ab){var ad=ad*X;var W=U/ad*100;var T=W/2;var aa=V-T;var ac=0;var S=100-W;if(aa<=ac){aa=0}if(aa>=S){aa=S}var Z=ad/100*aa/X;Z=-1*parseInt(Z);return Z}function p(V,ad,X,ab,Y,S,T){var aa=ab>=Y?Y:ab;var U=n(V,ab,S,X,T,aa);var W=n(ad,Y,S,X,T,aa);var ac=parseInt(U);var Z=parseInt(W);return{transformLeft:ac,transformTop:Z,scale:T}}function q(S){G(S);S.off("click",".InputfieldImageButtonFocus");$inputArea=S.find(".InputfieldImageEdit__edit");if($inputArea.children().not(".InputfieldFileSort").length){var T=$inputArea.children();A("#"+$inputArea.attr("data-current")).find(".ImageData").append(T)}}function N(U,T){var S;if(U){S=U.find(".InputfieldImageEdit--active")}else{if(T){S=A(".InputfieldImageEdit--active").not(T.find(".InputfieldImageEdit--active"))}else{S=A(".InputfieldImageEdit--active")}}if(S.length){q(S);S.removeClass("InputfieldImageEdit--active").removeAttr("id");A("#"+S.attr("data-for")).removeClass("gridImageEditing")}A(".InputfieldImageEdit__replace").removeClass("InputfieldImageEdit__replace")}function j(V,T){if(!V||!V.length){return}var S=V.parent().children().not(".InputfieldImageEdit");var W=0;var X=false;var Y=null;S.each(function(){if(Y){return}var Z=A(this);var aa=Z.offset().top;if(X&&aa!=W){Y=Z}else{if(Z.attr("id")==V.attr("id")){X=true}}W=aa});if(Y){T.insertBefore(Y)}else{T.insertAfter(S.eq(S.length-1))}var U=T.find(".InputfieldImageEdit__arrow");if(U.length){U.css("left",V.position().left+(V.outerWidth()/2)+"px")}}function D(){A(window).resize(E(h,200));A(document).on("click dblclick",".gridImage__trash",function(S){var T=A(this).find("input");T.prop("checked",g).change();if(S.type=="dblclick"){K(T);S.preventDefault();S.stopPropagation()}});A(document).on("change",".gridImage__deletebox",function(){s(A(this))});A(document).on("click",".gridImage__edit",function(V){var T=A(this).closest(".gridImage");if(!T.length){return}if(T.closest(".InputfieldImageEditAll").length){return false}var U=T.closest(".gridImages");var S=U.find(".InputfieldImageEdit");if(T.hasClass("gridImageEditing")){S.find(".InputfieldImageEdit__close").click()}else{j(T,S);q(S);e(T,S);S.addClass("InputfieldImageEdit--active").attr("data-for",T.attr("id"));U.find(".gridImageEditing").removeClass("gridImageEditing");T.addClass("gridImageEditing")}}).on("click",".InputfieldImageEditAll img",function(U){U.stopPropagation();U.preventDefault();A.magnificPopup.close();var S=A.extend(true,{},M);var T=A(this);S.items={src:T.attr("data-original"),title:T.attr("alt")};A.magnificPopup.open(S);return true}).on("click",".InputfieldImageButtonFocus",function(){var V=A(this);var S=V.find("i");var T=V.closest(".InputfieldImageEdit, .gridImage");var U=T.find(".focusCircle");if(U.length){G(T)}else{w(T);S.addClass("focusIconActive");S.toggleClass(S.attr("data-toggle"))}});A(document).on("click",function(T){var S=A(T.target);if(S.closest(".InputfieldImageEdit").length){N(null,S.parents(".gridImages"))}else{if(S.is("input, textarea")&&S.closest(".InputfieldImageEditAll").length){S.focus().one("blur",function(){S.closest(".gridImages").sortable("enable")});S.closest(".gridImages").sortable("disable")}else{if(S.closest(".gridImage__inner").length){N(null,S.parents(".gridImages"))}else{if(S.closest(".mfp-container").length){return}else{if(S.closest(".ui-dialog").length){return}else{if(S.is(".mfp-close")){return}else{if(S.is("a.remove")){return}else{N(null,null)}}}}}}}});A(document).on("click",".InputfieldImageEdit__close",function(S){N(A(this).parents(".gridImages"),null)});A(document).on("change",".InputfieldImage",function(){A(this).find(".InputfieldImageButtonCrop:not(.pw-modal-dblclick)").addClass("pw-modal-dblclick ui-state-disabled")}).on("click",".InputfieldImageButtonCrop.ui-state-disabled",function(U){var T=A(this);var S=T.closest(".gridImages");if(!S.hasClass("gridImagesAlerted")){ProcessWire.alert(ProcessWire.config.InputfieldImage.labels.changes);S.addClass("gridImagesAlerted")}setTimeout(function(){T.removeClass("ui-state-active")},500);return false});A(".ImagesGrid").on("click","button.pw-modal",function(S){S.preventDefault()});u();B()}function u(){A(document).on("click",".InputfieldImageEdit__name",function(U){var S=A(this).children("span");var V=S.closest(".gridImage, .InputfieldImageEdit").find(".InputfieldFileRename");var T=S.closest(".gridImages");T.sortable("disable");V.val(S.text());S.on("keypress",function(W){if(W.which==13){S.blur();return false}return true});S.attr("autocomplete","off").attr("autocorrect","off").attr("autocapitalize","off").attr("spellcheck","false");S.focus().on("blur",function(){var W=A(this).text();if(A.trim(W).length<1){S.text(V.val())}else{if(W!=V.val()){V.val(W).change();T.closest(".Inputfield").trigger("change")}}S.off("keypress");T.sortable("enable")})})}function o(S,T){T=Math.floor(T);S.find(".gridImage__overflow").each(function(){var U=100-T;var V=A(this);V.css("width",T+"%");V.siblings(".ImageData").css("width",U+"%");V.find("img").css({top:0,left:0,transform:"none"})});f(S,"listSize",T)}function l(W,S,U){if(!S){return}var T=S+"px";var V=W.find(".gridImages");if(typeof U=="undefined"||U==null){U=V.attr("data-ragged")?true:false}if(U){V.attr("data-ragged",1)}else{V.removeAttr("data-ragged")}V.find(".gridImage__overflow").each(function(){i(A(this),S,U)});V.find(".gridImage__edit, .gridImage__resize").css("line-height",T);V.attr("data-size",S);f(W,"size",S);if(v.length){setTimeout(function(){while(v.length){var X=v.pop();i(X,S,U)}},150)}}function i(ab,V,Z,ai){if(ab.hasClass("gridImage__overflow")){var S=ab.children("img")}else{if(ab.is("img")){var S=ab;ab=S.closest(".gridImage__overflow")}else{return}}if(!V){S.removeAttr("width").removeAttr("height");ab.width("auto").height("auto");return}var ah=0;var ac=S.width();var Y=S.height();var aa=parseInt(S.attr("data-w"));var W=parseInt(S.attr("data-h"));if(!ac){ac=aa}if(!Y){Y=W}if(!Z&&typeof ai=="undefined"){var ag=S.attr("data-focus");if(typeof ag=="undefined"){ag="50.0 50.0 0"}var U=ag.split(" ");ai={top:parseFloat(U[0]),left:parseFloat(U[1]),zoom:parseInt(U[2])}}if(!Z){ah=ai.zoom}if(Z){S.attr("height",V).removeAttr("width");S.css({"max-height":"100%","max-width":"none",top:"50%",left:"50%",transform:"translate3d(-50%, -50%, 0)"})}else{if(ah>0&&ab.closest(".InputfieldImageFocusZoom").length&&!k){if(ac>=Y){var af="100%";var ae="none";if(ac==aa){Y=V;ac=(Y/W)*aa}}else{var af="none";var ae="100%";if(Y==W){ac=V;Y=(ac/aa)*W}}var T=1+((ah/100)*2);var X=p(ai.left,ai.top,ah,ac,Y,V,T);S.css({left:"0px",top:"0px","transform-origin":"0px 0px",transform:"scale("+X.scale+") translate3d("+X.transformLeft+"px, "+X.transformTop+"px, 0)","max-width":ae,"max-height":af})}else{if(ac>=Y){S.attr("height",V).removeAttr("width");if(ai.left<1){ai.left=0.001}S.css({"max-height":"100%","max-width":"none",top:"50%",left:ai.left+"%",transform:"translate3d(-"+ai.left+"%, -50%, 0)"})}else{if(Y>ac){S.attr("width",V).removeAttr("height");if(ai.top<1){ai.top=0.001}S.css({"max-height":"none","max-width":"100%",top:ai.top+"%",left:"50%",transform:"translate3d(-50%, -"+ai.top+"%, 0)"})}else{S.css({"max-height":"100%","max-width":"none",top:"50%",left:"50%",transform:"translate3d(-50%, -50%, 0)"});S.removeAttr("width").attr("height",V)}}}}var ac=S.width();if(ac){ab.css({width:(Z?ac+"px":V+"px"),height:V+"px"})}else{var ad=ab.attr("data-tries");if(!ad){ad=0}if(typeof ad=="undefined"){ad=0}ad=parseInt(ad);if(ad>3){ab.css({width:V+"px",height:V+"px"})}else{v.push(ab);ab.attr("data-tries",ad+1)}}}function H(T){if(T.find(".InputfieldImageListToggle").length){return}var W=A("").append("");var Y=A("").append("");var S=A("").append("");var X="InputfieldImageListToggle--active";var V="";var U=function(ae){var ad=A(this);var ab=ad.closest(".Inputfield");var Z=ad.attr("href");var aa;var af=ad.parent().children("."+X);var ac=af.attr("href");af.removeClass(X);ad.addClass(X);G(ab);if(Z=="list"){if(!ab.hasClass("InputfieldImageEditAll")){ab.find(".InputfieldImageEdit--active .InputfieldImageEdit__close").click();ab.addClass("InputfieldImageEditAll")}aa=L(ab,"listSize");o(ab,aa);f(ab,"mode","list")}else{if(Z=="left"){ab.removeClass("InputfieldImageEditAll");aa=L(ab,"size");l(ab,aa,true);f(ab,"mode","left");Q()}else{if(Z=="grid"){ab.removeClass("InputfieldImageEditAll");aa=L(ab,"size");l(ab,aa,false);f(ab,"mode","grid");if(ac=="left"){setTimeout(function(){l(ab,aa,false)},100)}}}}I(ab.find(".gridImages"));ad.blur();return false};W.click(U);Y.click(U);S.click(U);if(T.hasClass("InputfieldImage")){T.find(".InputfieldHeader").append(W).append(Y).append(S);V=L(T,"mode")}else{A(".InputfieldImage .InputfieldHeader",T).append(W).append(Y).append(S)}if(V=="list"){W.click()}else{if(V=="left"){Y.click()}else{}}}function F(Y){var V=Y.children(".InputfieldHeader");if(V.children(".InputfieldImageSizeSlider").length){return}var X=Y.find(".gridImages");var T=X.attr("data-gridsize");var W=T/2;var S=T*2;var Z=A('');V.append(Z);var U=function(ac,ae){var ad=ae.value;var af=15;var ag=Math.floor(T/af);var aa=ad-W;var ab=Math.floor(af+(aa/ag));if(Y.hasClass("InputfieldImageEditAll")){f(Y,"size",ad);o(Y,ab)}else{f(Y,"listSize",ab);l(Y,ad)}};Z.slider({min:W,max:S,value:L(Y,"size"),range:"min",slide:U,start:function(aa,ab){k=true;if(Y.find(".InputfieldImageEdit:visible").length){Y.find(".InputfieldImageEdit__close").click()}},stop:function(aa,ab){k=false;U(aa,ab);Q(Y)}})}function f(T,W,V){var U=L(T);var X=T.attr("id");var S=X?X.replace("wrap_Inputfield_",""):"";if(!S.length||typeof V=="undefined"){return}if(U[S][W]==V){return}U[S][W]=V;A.cookie("InputfieldImage",U);d=U}function L(T,W){if(d&&typeof W=="undefined"){return d}var X=T.attr("id");var S=X?X.replace("wrap_Inputfield_",""):"na";var V=d?d:A.cookie("InputfieldImage");var U=null;if(!V){var V={}}if(typeof V[S]=="undefined"){V[S]={}}if(typeof V[S].size=="undefined"){V[S].size=parseInt(T.find(".gridImages").attr("data-size"))}if(typeof V[S].listSize=="undefined"){V[S].listSize=23}if(typeof V[S].mode=="undefined"){V[S].mode=T.find(".gridImages").attr("data-gridMode")}if(d==null){d=V}if(typeof W=="undefined"){U=V}else{if(W===true){U=V[S]}else{if(typeof V[S][W]!="undefined"){U=V[S][W]}}}return U}function a(W){if(W.hasClass("InputfieldStateCollapsed")){return}var X=parseInt(W.find(".InputfieldImageMaxFiles").val());var V=W.find(".gridImages");var U=L(W,"size");var Y=L(W,"mode");var T=Y=="left"?true:false;if(!U){U=V.attr("data-gridsize")}U=parseInt(U);if(W.hasClass("InputfieldImageEditAll")||Y=="list"){var S=L(W,"listSize");o(W,S)}else{l(W,U,T)}if(!W.hasClass("InputfieldImageInit")){W.addClass("InputfieldImageInit");if(W.hasClass("InputfieldRenderValueMode")){return t(W)}else{if(X==1){W.addClass("InputfieldImageMax1");y(W)}else{I(V)}}H(W);F(W)}B(W);W.on("change",".InputfieldFileActionSelect",function(){var Z=A(this).next(".InputfieldFileActionNote");if(A(this).val().length){Z.fadeIn()}else{Z.hide()}})}function P(){A("body").addClass("ie-no-drop");A(".InputfieldImage.InputfieldFileMultiple").each(function(){var T=A(this),V=parseInt(T.find(".InputfieldFileMaxFiles").val()),S=T.find(".gridImages"),U=T.find(".InputfieldImageUpload");U.on("change","input[type=file]",function(){var Z=A(this),X=Z.parent(".InputMask");if(Z.val().length>1){X.addClass("ui-state-disabled")}else{X.removeClass("ui-state-disabled")}if(Z.next("input.InputfieldFile").length>0){return}var W=S.children("li").length+U.find("input[type=file]").length+1;if(V>0&&W>=V){return}U.find(".InputMask").not(":last").each(function(){var aa=A(this);if(aa.find("input[type=file]").val()<1){aa.remove()}});var Y=X.clone().removeClass("ui-state-disabled");Y.children("input[type=file]").val("");Y.insertAfter(X)})})}function R(U){var T;if(U.length>0){T=U.find(".InputfieldImageUpload")}else{T=A(".InputfieldImageUpload")}T.each(function(X){var Y=A(this);var W=Y.closest(".InputfieldContent");if(Y.hasClass("InputfieldImageInitUpload")){return}V(W,X);Y.addClass("InputfieldImageInitUpload")});function V(af,ar){var ae=af.parents("form");var W=af.closest(".InputfieldRepeaterItem");var aa=W.length?W.attr("data-editUrl"):ae.attr("action");aa+=(aa.indexOf("?")>-1?"&":"?")+"InputfieldFileAjax=1";var ax=ae.find("input._post_token");var ad=ax.attr("name");var ai=ax.val();var ah=af.find(".InputfieldImageErrors").first();var Z=af.find(".InputfieldImageUpload").data("fieldname");Z=Z.slice(0,-2);var ap=af.closest(".Inputfield.InputfieldImage");var aw=af.find(".InputfieldImageUpload").data("extensions").toLowerCase();var ao=af.find(".InputfieldImageUpload").data("maxfilesize");var ag=af.find("input[type=file]").get(0);var Y=af.find(".gridImages");var at=Y.get(0);var ak=Y.data("gridsize");var al=null;var aj=parseInt(af.find(".InputfieldImageMaxFiles").val());var av=r(ap);var aq=av.maxWidth>0||av.maxHeight>0||av.maxSize>0;au(af);if(aj!=1){an(Y)}Y.children().addClass("InputfieldFileItemExisting");ap.on("pwimageupload",function(ay,az){am([az.file],az.xhr)});function ac(az,ay){if(typeof ay!=="undefined"){az=""+ay+": "+az}return""+az+""}function X(az){var ay=new String(az).substring(az.lastIndexOf("/")+1);if(ay.lastIndexOf(".")!=-1){ay=ay.substring(0,ay.lastIndexOf("."))}return ay}function au(az){if(az.hasClass("InputfieldImageDropzoneInit")){return}var aC=az.get(0);var aB=az.closest(".Inputfield");function ay(){if(aB.hasClass("pw-drag-in-file")){return}az.addClass("ui-state-hover");aB.addClass("pw-drag-in-file")}function aA(){if(!aB.hasClass("pw-drag-in-file")){return}az.removeClass("ui-state-hover");aB.removeClass("pw-drag-in-file")}aC.addEventListener("dragleave",function(){aA()},false);aC.addEventListener("dragenter",function(aD){aD.preventDefault();ay()},false);aC.addEventListener("dragover",function(aD){if(!az.is("ui-state-hover")){ay()}aD.preventDefault();aD.stopPropagation();return false},false);aC.addEventListener("drop",function(aD){am(aD.dataTransfer.files);aA();aD.preventDefault();aD.stopPropagation();return false},false);az.addClass("InputfieldImageDropzoneInit")}function an(aG){var aK=null;var aI=false;var az=null;var ay=aG.closest(".Inputfield");function aD(){ay.addClass("pw-drag-in-file")}function aJ(){ay.removeClass("pw-drag-in-file")}function aC(aM){var aQ=aM.offset();var aN=aM.width();var aL=aM.height();var aP=aQ.left+aN/2;var aO=aQ.top+aL/2;return{clientX:aP,clientY:aO}}function aF(){return aG.find(".InputfieldImageEdit--active").length>0}function aE(aM){if(aF()){return}aM.preventDefault();aM.stopPropagation();aD();aI=false;if(aK==null){var aL=aG.attr("data-size")+"px";var aN=A("").addClass("gridImage__overflow");if(aG.closest(".InputfieldImageEditAll").length){aN.css({width:"100%",height:aL})}else{aN.css({width:aL,height:aL})}aK=A("").addClass("ImageOuter gridImage gridImagePlaceholder").append(aN);aG.append(aK)}var aO=aC(aK);aK.simulate("mousedown",aO)}function aH(aL){if(aF()){return}aL.preventDefault();aL.stopPropagation();aD();aI=false;if(aK==null){return}var aM={clientX:aL.originalEvent.clientX,clientY:aL.originalEvent.clientY};aK.simulate("mousemove",aM)}function aB(aL){if(aF()){return}aL.preventDefault();aL.stopPropagation();if(aK==null){return false}aI=true;if(az){clearTimeout(az)}az=setTimeout(function(){if(!aI||aK==null){return}aK.remove();aK=null;aJ()},1000)}function aA(aL){if(aF()){return}aJ();aI=false;var aM={clientX:aL.clientX,clientY:aL.clientY};aK.simulate("mouseup",aM);m=aK.next(".gridImage");aK.remove();aK=null}if(aG.length&&!aG.hasClass("gridImagesInitDropInPlace")){aG.on("dragenter",aE);aG.on("dragover",aH);aG.on("dragleave",aB);aG.on("drop",aA);aG.addClass("gridImagesInitDropInPlace")}}function ab(aX,aL,aH){var aU=ProcessWire.config.InputfieldImage.labels;var aE=parseInt(aX.size/1024,10)+" kB";var aW='";var aZ=A(''),aR=A(aW),aF=A(''),ay=A(''),aO=A(""),aQ=A(""),aT=A(' '),aS=A('
'),az,aJ,aY,aM=URL.createObjectURL(aX),aA=ap.find(".gridImages"),aC=aj==1,aP=L(ap,"size"),aD=L(ap,"listSize"),aB=ap.hasClass("InputfieldImageEditAll"),aI=A('
');aF.append(aI);aO.find(".gridImage__inner").append(aT);aO.find(".gridImage__inner").append(aS.css("display","none"));aO.find(".gridImage__inner").append(aQ);ay.append(A(''+aE+""));if(aB){aF.css("width",aD+"%");ay.css("width",(100-aD)+"%")}else{aF.css({width:aP+"px",height:aP+"px"})}aZ.append(aR).append(aF).append(aO).append(ay);aI.attr({src:aM,"data-original":aM});img=new Image();img.addEventListener("load",function(){aR.find(".dimensions").html(this.width+" × "+this.height);var a0=Math.min(this.width,this.height)/aP;aI.attr({width:this.width/a0,height:this.height/a0})},false);img.src=aM;if(typeof aH!="undefined"){aJ=aH}else{aJ=new XMLHttpRequest()}function aK(a0){if(typeof a0!="undefined"){if(!a0.lengthComputable){return}aQ.attr("value",parseInt((a0.loaded/a0.total)*100))}A("body").addClass("pw-uploading");aS.css("display","block")}aJ.upload.addEventListener("progress",aK,false);aJ.addEventListener("load",function(){aJ.getAllResponseHeaders();var a3=A.parseJSON(aJ.responseText);if(typeof a3.ajaxResponse!="undefined"){a3=a3.ajaxResponse}var a1=a3.length>1;if(a3.error!==undefined){a3=[a3]}for(var a2=0;a2-1){a6=a6.substring(0,a6.indexOf("?"))}var a4=a6.substring(a6.lastIndexOf(".")+1).toLowerCase();a6=a6.substring(0,a6.lastIndexOf("."));if(a4==ba){bb.children("span").text(a6).removeAttr("contenteditable")}a5.find(".gridImage__edit").click()}c.file="";c.item=null;c.edit=null}if(al){clearTimeout(al)}m=null;al=setTimeout(function(){if(aj!=1){I(aA)}else{y(ap)}A("body").removeClass("pw-uploading");aA.trigger("AjaxUploadDone")},500);ap.trigger("change").removeClass("InputfieldFileEmpty")},false);if(c.edit){c.edit.find(".InputfieldImageEdit__close").click()}else{if(ap.find(".InputfieldImageEdit:visible").length){ap.find(".InputfieldImageEdit__close").click()}}if(c.item){c.item.replaceWith(aZ);c.item=aZ}else{if(m&&m.length){m.before(aZ)}else{aA.append(aZ)}}function aV(a0,a2){if(typeof aH=="undefined"){aJ.open("POST",aa,true)}aJ.setRequestHeader("X-FILENAME",encodeURIComponent(a0.name));aJ.setRequestHeader("X-FIELDNAME",Z);if(c.item){aJ.setRequestHeader("X-REPLACENAME",c.file)}aJ.setRequestHeader("Content-Type","application/octet-stream");aJ.setRequestHeader("X-"+ad,ai);aJ.setRequestHeader("X-REQUESTED-WITH","XMLHttpRequest");if(typeof a2!="undefined"&&a2!=false){aJ.send(a2)}else{aJ.send(a0)}Q();ap.trigger("change");var a1=ap.find(".InputfieldFileItem").length;if(a1==1){ap.removeClass("InputfieldFileEmpty").removeClass("InputfieldFileMultiple").addClass("InputfieldFileSingle")}else{if(a1>1){ap.removeClass("InputfieldFileEmpty").removeClass("InputfieldFileSingle").addClass("InputfieldFileMultiple")}}}aK();var aG=aX.name.substring(aX.name.lastIndexOf(".")+1).toLowerCase();if(aq&&(aG=="jpg"||aG=="jpeg"||aG=="png"||aG=="gif")){var aN=new PWImageResizer(av);aS.addClass("pw-resizing");aN.resize(aX,function(a0){aS.removeClass("pw-resizing");aV(aX,a0)})}else{aV(aX)}}function am(ay,aF){var aD=function(aH){return parseInt(aH/1024,10)};if(typeof ay==="undefined"){at.innerHTML="No support for the File API in this web browser";return}for(var aB=0,aA=ay.length;aBao&&ao>2000000){var az=aD(ay[aB].size),aC=aD(ao);aG="Filesize "+az+" kb is too big. Maximum allowed is "+aC+" kb";ah.append(ac(aG,ay[aB].name))}else{if(typeof aF!="undefined"){ab(ay[aB],aE,aF)}else{ab(ay[aB],aE)}}}if(aj==1){break}}}ag.addEventListener("change",function(ay){am(this.files);ay.preventDefault();ay.stopPropagation();this.value=""},false)}function S(){var W=".InputfieldImageEdit__imagewrapper img";A(document).on("dragenter",W,function(){var Z=A(this);if(Z.closest(".InputfieldImageMax1").length){return}var aa=Z.attr("src");var X=Z.closest(".InputfieldImageEdit");var Y=Z.closest(".InputfieldImageEdit__imagewrapper");Y.addClass("InputfieldImageEdit__replace");c.file=new String(aa).substring(aa.lastIndexOf("/")+1);c.item=A("#"+X.attr("data-for"));c.edit=X}).on("dragleave",W,function(){var Y=A(this);if(Y.closest(".InputfieldImageMax1").length){return}var X=Y.closest(".InputfieldImageEdit__imagewrapper");X.removeClass("InputfieldImageEdit__replace");c.file="";c.item=null;c.edit=null})}S()}function r(T){var S={maxWidth:0,maxHeight:0,maxSize:0,quality:1,autoRotate:true,debug:ProcessWire.config.debug};var U=T.attr("data-resize");if(typeof U!="undefined"&&U.length){U=U.split(";");S.maxWidth=parseInt(U[0]);S.maxHeight=parseInt(U[1]);S.maxSize=parseFloat(U[2]);S.quality=parseFloat(U[3])}return S}function O(){A(".InputfieldImage.Inputfield").each(function(){a(A(this))});D();if(x()){R("")}else{P()}A(document).on("reloaded",".InputfieldImage",function(){var S=A(this);a(S);R(S)}).on("wiretabclick",function(U,T,S){T.find(".InputfieldImage").each(function(){a(A(this))})}).on("opened",".InputfieldImage",function(){a(A(this))})}O()}jQuery(document).ready(function(a){InputfieldImage(a)});
\ No newline at end of file
diff --git a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.scss b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.scss
index e7ac2de8..f8822164 100755
--- a/wire/modules/Inputfield/InputfieldImage/InputfieldImage.scss
+++ b/wire/modules/Inputfield/InputfieldImage/InputfieldImage.scss
@@ -3,6 +3,7 @@ $deleteColor: #e83561;
$errorColor: #FC3A3F;
$gridMargin: 0 0.6em 0.6em 0;
$itemPadding: 0.4em;
+$focusPointCircleSize: 40px;
.InputfieldImage {
@@ -577,11 +578,17 @@ $itemPadding: 0.4em;
.focusCircle {
cursor: move;
- width: 40px;
- height: 40px;
- border: 3px solid #fff;
+ width: $focusPointCircleSize;
+ height: $focusPointCircleSize;
+ margin: ($focusPointCircleSize * -1 / 2 + 0px) !important;
+ // border: 3px solid #fff;
+ // background-color: rgba(255,255,255,0.3);
+ border: 3px solid #EB1D61;
border-radius: 50%;
- background-color: rgba(255,255,255,0.3);
+ background-color: rgba(255, 255, 255, 0.6);
+ background-image: url(data:image/gif;base64,R0lGODlhBAAEAIAAAOsdYQAAACH5BAAAAAAALAAAAAAEAAQAAAIEhI8JBQA7); // 4x4 px magenta
+ background-position: 15px 15px;
+ background-repeat: no-repeat;
}
}