From a2e0ade2f848f35f71dba72d9a8b4e60814bd06a Mon Sep 17 00:00:00 2001 From: Andrew Nowak Date: Tue, 8 Nov 2022 09:54:19 +0000 Subject: [PATCH 1/9] disable the batch crop button when all images uncroppable --- .../gr-batch-export-original-images.html | 30 +++++++---- .../gr-batch-export-original-images.js | 16 +++++- .../js/components/gr-tooltip/gr-tooltip.js | 50 ++++++++++++------- 3 files changed, 67 insertions(+), 29 deletions(-) diff --git a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html index 048e31e2f6..46ea9c1ed3 100644 --- a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html +++ b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html @@ -1,16 +1,28 @@
- Cropping full frame - Confirm full frame + ng-if="!ctrl.allHaveFullCrops && !ctrl.noneCroppable && !ctrl.cropping" + class="inner-clickable clickable" +> + Crop full frame + warning + + Confirm full frame +
+ +
+ Cropping full frame…
+
- Crop full frame + ng-if="!ctrl.allHaveFullCrops && !ctrl.cropping && ctrl.noneCroppable" + gr-tooltip="{{ctrl.allHaveFullCrops ? 'Selected images have full frames' : 'Selected images cannot be cropped'}}" + gr-tooltip-updates + class="inner-clickable inner-clickable--disabled" +> + Crop full frame
diff --git a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js index 68bdaafa5f..d0d56521b1 100644 --- a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js +++ b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js @@ -16,8 +16,19 @@ batchExportOriginalImages.controller('grBatchExportOriginalImagesCtrl', [ ) ); + const croppable = () => ctrl.images.filter( + image => image.data.valid && image.data.softDeletedMetadata === undefined && + image.data.exports.every( + crop => crop.specification.type !== 'full' + ) + ); + $scope.$watch('ctrl.images', () => { ctrl.allHaveFullCrops = checkForFullCrops(); + const croppableImages = croppable(); + + ctrl.allCroppable = croppableImages.size === ctrl.images.size; + ctrl.noneCroppable = croppableImages.size === 0; }, true); ctrl.callBatchCrop = function() { @@ -68,7 +79,10 @@ batchExportOriginalImages.directive('grBatchExportOriginalImages', [function() { images: '=', cropping: '=', needsConfirmation: '=', - confirmed: '=' + confirmed: '=', + allCroppable: '=', + noneCroppable: '=', + allHaveFullCrops: '=' }, template: template }; diff --git a/kahuna/public/js/components/gr-tooltip/gr-tooltip.js b/kahuna/public/js/components/gr-tooltip/gr-tooltip.js index 92f3b92048..cb181bbe8b 100644 --- a/kahuna/public/js/components/gr-tooltip/gr-tooltip.js +++ b/kahuna/public/js/components/gr-tooltip/gr-tooltip.js @@ -4,27 +4,39 @@ import 'titip/dist/css/titip.css'; export const tooltip = angular.module('grTooltip', []); tooltip.directive('grTooltip', [ - 'onValChange', - function (onValChange) { - return { - restrict: 'A', - link: function ($scope, element, attrs) { - if (!attrs.grTooltip) { - return; - } + 'onValChange', + function (onValChange) { + return { + restrict: 'A', + link: function ($scope, element, attrs) { - const position = attrs.grTooltipPosition || 'bottom'; - element.attr('data-title', attrs.grTooltip) - .addClass(`titip-default`) - .addClass(`titip-${position}`); + const position = attrs.grTooltipPosition || 'bottom'; + if (attrs.grTooltip) { + element.attr('data-title', attrs.grTooltip) + .addClass(`titip-default`) + .addClass(`titip-${position}`); + } - const autoUpdates = angular.isDefined(attrs.grTooltipUpdates); + const autoUpdates = angular.isDefined(attrs.grTooltipUpdates); - if (autoUpdates) { - $scope.$watch(() => attrs.grTooltip, onValChange(newTooltip => { - element.attr('data-title', newTooltip); - })); - } + if (autoUpdates) { + $scope.$watch(() => attrs.grTooltip, onValChange(newTooltip => { + const hasTooltip = angular.isDefined(element.attr('data-title')); + const shouldHaveTooltip = angular.isDefined(newTooltip) && newTooltip !== ''; + + if (!hasTooltip && shouldHaveTooltip) { + element.addClass('titip-default') + .addClass(`titip-${position}`) + .attr('data-title', newTooltip); + } else if (hasTooltip && !shouldHaveTooltip) { + element.removeAttr('data-title'); + element.removeClass('titip-default') + .removeClass(`titip-${position}`); + } else if (hasTooltip) { + element.attr('data-title', newTooltip); } + })); + } + } }; -}]); + }]); From 501bcc682b288c265316d316847f7198b5947acf Mon Sep 17 00:00:00 2001 From: Andrew Nowak Date: Thu, 10 Nov 2022 10:30:02 +0000 Subject: [PATCH 2/9] warning triangle at end even on confirm --- .../gr-batch-export-original-images.html | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html index 46ea9c1ed3..b23ed28f24 100644 --- a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html +++ b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html @@ -9,9 +9,9 @@ class="inner-clickable clickable" > Crop full frame - warning Confirm full frame + warning
From bb163b367a75cfe1cdbc4504e93e6cec59b23c3e Mon Sep 17 00:00:00 2001 From: Andrew Nowak Date: Thu, 10 Nov 2022 10:44:46 +0000 Subject: [PATCH 3/9] slightly simpler tolltip update logic --- kahuna/public/js/components/gr-tooltip/gr-tooltip.js | 12 +++++++----- 1 file changed, 7 insertions(+), 5 deletions(-) diff --git a/kahuna/public/js/components/gr-tooltip/gr-tooltip.js b/kahuna/public/js/components/gr-tooltip/gr-tooltip.js index cb181bbe8b..50fa954129 100644 --- a/kahuna/public/js/components/gr-tooltip/gr-tooltip.js +++ b/kahuna/public/js/components/gr-tooltip/gr-tooltip.js @@ -24,16 +24,18 @@ tooltip.directive('grTooltip', [ const hasTooltip = angular.isDefined(element.attr('data-title')); const shouldHaveTooltip = angular.isDefined(newTooltip) && newTooltip !== ''; + if (shouldHaveTooltip) { + element.attr('data-title', newTooltip); + } else if (hasTooltip) { + element.removeAttr('data-title'); + } + if (!hasTooltip && shouldHaveTooltip) { element.addClass('titip-default') - .addClass(`titip-${position}`) - .attr('data-title', newTooltip); + .addClass(`titip-${position}`); } else if (hasTooltip && !shouldHaveTooltip) { - element.removeAttr('data-title'); element.removeClass('titip-default') .removeClass(`titip-${position}`); - } else if (hasTooltip) { - element.attr('data-title', newTooltip); } })); } From f1e6097f07ddc9afc06f9214b856c91aad6ff51e Mon Sep 17 00:00:00 2001 From: Andrew Nowak Date: Thu, 10 Nov 2022 16:01:58 +0000 Subject: [PATCH 4/9] also allow users to select full frames when embedded in other tool --- .../gr-batch-export-original-images.html | 12 ++++++++++-- .../gr-batch-export-original-images.js | 4 +++- 2 files changed, 13 insertions(+), 3 deletions(-) diff --git a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html index b23ed28f24..18195228cf 100644 --- a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html +++ b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html @@ -20,9 +20,17 @@
Crop full frame
+ +
+ Select full frame crops +
diff --git a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js index d0d56521b1..50627e1bf3 100644 --- a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js +++ b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js @@ -49,12 +49,14 @@ batchExportOriginalImages.controller('grBatchExportOriginalImagesCtrl', [ } }; + ctrl.pageIsEmbedded = window.parent !== window; + function cropImages() { ctrl.cropping = true; ctrl.needsConfirmation = false; const cropImages = trackAll($q, $rootScope, "crop", ctrl.images, async (image) => { - const crop = await mediaCropper.createFullCrop(image); + const crop = image.data.exports.find(crop => crop.specification.type === 'full') || await mediaCropper.createFullCrop(image); return { image, crop From 3f83e60c59fd8a12026e2273bf902398089dec56 Mon Sep 17 00:00:00 2001 From: Andrew Nowak Date: Fri, 18 Nov 2022 18:07:46 +0000 Subject: [PATCH 5/9] make padding behave sensibly --- .../gr-batch-export-original-images.html | 66 ++++++++++--------- .../gr-batch-export-original-images.js | 1 + .../gr-downloader/gr-downloader.css | 1 + .../gr-downloader/gr-downloader.html | 8 +-- kahuna/public/stylesheets/main.css | 8 ++- 5 files changed, 47 insertions(+), 37 deletions(-) diff --git a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html index 18195228cf..4cd8fa93be 100644 --- a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html +++ b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.html @@ -1,36 +1,38 @@ -
- Crop full frame + +
+ Crop full frame - Confirm full frame - warning -
+ Confirm full frame + warning +
-
- Cropping full frame… -
+
+ Cropping full frame… +
-
- Crop full frame -
+
+ Crop full frame +
-
- Select full frame crops -
+
+ Select full frame crops +
+ diff --git a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js index 50627e1bf3..d41a42a15d 100644 --- a/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js +++ b/kahuna/public/js/components/gr-batch-export-original-images/gr-batch-export-original-images.js @@ -46,6 +46,7 @@ batchExportOriginalImages.controller('grBatchExportOriginalImagesCtrl', [ if (!ctrl.cropping) { cropImages(); } + } }; diff --git a/kahuna/public/js/components/gr-downloader/gr-downloader.css b/kahuna/public/js/components/gr-downloader/gr-downloader.css index 0daed8ef13..1e842e395c 100644 --- a/kahuna/public/js/components/gr-downloader/gr-downloader.css +++ b/kahuna/public/js/components/gr-downloader/gr-downloader.css @@ -1,6 +1,7 @@ gr-downloader .download { display: inline-flex; height: 100%; + padding: 0 10px; } button .download:hover { diff --git a/kahuna/public/js/components/gr-downloader/gr-downloader.html b/kahuna/public/js/components/gr-downloader/gr-downloader.html index dd4a277554..112eb7788c 100644 --- a/kahuna/public/js/components/gr-downloader/gr-downloader.html +++ b/kahuna/public/js/components/gr-downloader/gr-downloader.html @@ -1,7 +1,7 @@