Skip to content

Commit 1a391f5

Browse files
Generic-UI-list-editor: Implemented generic UI list editor, changed instances of labels, keywords and people in image to generic component
1 parent 76a85af commit 1a391f5

20 files changed

+418
-265
lines changed

kahuna/public/js/components/gr-add-label/gr-add-label.js

Lines changed: 6 additions & 3 deletions
Original file line numberDiff line numberDiff line change
@@ -15,8 +15,8 @@ export var addLabel = angular.module('gr.addLabel', [
1515
]);
1616

1717
addLabel.controller('GrAddLabelCtrl', [
18-
'$window', '$q', 'labelService', 'mediaApi',
19-
function ($window, $q, labelService, mediaApi) {
18+
'$scope', '$window', '$q', 'labelService', 'mediaApi',
19+
function ($scope, $window, $q, labelService, mediaApi) {
2020

2121
let ctrl = this;
2222

@@ -42,7 +42,10 @@ addLabel.controller('GrAddLabelCtrl', [
4242
reset();
4343
})
4444
.catch(saveFailed)
45-
.finally(() => ctrl.adding = false);
45+
.finally(() => {
46+
ctrl.adding = false;
47+
$scope.$apply();
48+
});
4649

4750
}
4851

kahuna/public/js/components/gr-image-metadata/gr-image-metadata.html

Lines changed: 24 additions & 32 deletions
Original file line numberDiff line numberDiff line change
@@ -358,8 +358,8 @@
358358
</span>
359359
</dd>
360360

361-
<dt ng-if="ctrl.singleImage && (ctrl.rawMetadata.peopleInImage || ctrl.userCanEdit)" class="image-info__wrap metadata-line metadata-line__key image-info__group--dl__key--panel">People</dt>
362-
<dd ng-if="ctrl.singleImage && (ctrl.rawMetadata.peopleInImage || ctrl.userCanEdit)" class="image-info__wrap metadata-line metadata-line__info image-info__group--dl__value--panel">
361+
<dt ng-if="(ctrl.rawMetadata.peopleInImage || ctrl.userCanEdit)" class="image-info__wrap metadata-line metadata-line__key image-info__group--dl__key--panel">People</dt>
362+
<dd ng-if="(ctrl.rawMetadata.peopleInImage || ctrl.userCanEdit)" class="image-info__wrap metadata-line metadata-line__info image-info__group--dl__value--panel">
363363
<button data-cy="it-edit-people-button"
364364
class="image-info__edit"
365365
ng-if="ctrl.userCanEdit"
@@ -375,14 +375,15 @@
375375
'image-info__editor--saving': peopleInImageEditForm.$waiting,
376376
'text-input': true}">
377377

378-
<span class="metadata-line__info">
379-
<span ng:repeat="person in ctrl.metadata.peopleInImage">
380-
<a ui:sref="search.results({query: (person | queryFilter:'person')})">{{person}}</a>
381-
<span ng-if="ctrl.metadata.peopleInImage.length > 1 && $index != ctrl.metadata.peopleInImage.length - 1"></span>
382-
</span>
383-
384-
<span class="editable-empty" ng-if="!ctrl.metadata.peopleInImage && ctrl.userCanEdit">Unknown (click ✎ to add)</span>
385-
</span>
378+
<span class="editable-empty" ng-if="!ctrl.metadata.peopleInImage && ctrl.userCanEdit">Unknown (click ✎ to add)</span>
379+
<ui-list-editor-info-panel
380+
images="ctrl.selectedImages"
381+
add-to-images="ctrl.addPersonToImages"
382+
remove-from-images="ctrl.removePersonFromImages"
383+
accessor="ctrl.peopleAccessor"
384+
query-filter="queryFilter:'person'"
385+
element-name="person">
386+
</ui-list-editor-info-panel>
386387
</span>
387388
</dd>
388389
</dl>
@@ -597,22 +598,14 @@
597598
</gr-add-label>
598599
</dt>
599600
<dd class="labels">
600-
<li class="label"
601-
ng-repeat="label in ctrl.selectedLabels | orderBy:'data'"
602-
ng-class="{'label--partial': label.count < ctrl.selectedImages.size}">
603-
<button ng-if="label.count < ctrl.selectedImages.size"
604-
class="label__add"
605-
title="Apply label to all"
606-
ng-click="ctrl.addLabel(label.data)">
607-
<gr-icon>library_add</gr-icon>
608-
</button>
609-
<span class="label__value">{{label.data}}</span>
610-
<button class="label__remove"
611-
title="Remove label from all"
612-
ng-click="ctrl.removeLabel(label.data)">
613-
<gr-icon>close</gr-icon>
614-
</button>
615-
</li>
601+
<ui-list-editor-info-panel
602+
images="ctrl.selectedImages"
603+
add-to-images="ctrl.addLabelToImages"
604+
remove-from-images="ctrl.removeLabelFromImages"
605+
accessor="ctrl.labelAccessor"
606+
query-filter="queryLabelFilter"
607+
element-name="label">
608+
</ui-list-editor-info-panel>
616609
</dd>
617610
</dl>
618611
</div>
@@ -642,12 +635,11 @@
642635
<dt class="image-info__heading image-info__wrap">Keywords</dt>
643636
<dd class="image-info__keywords">
644637
<ul>
645-
<li class="image-info__keyword"
646-
ng-repeat="keyword in ctrl.metadata.keywords track by $index">
647-
<a ui-sref="search.results({query: (keyword | queryFilter:'keyword')})">
648-
{{keyword}}
649-
</a>
650-
</li>
638+
<ui-list-editor-compact
639+
images="ctrl.selectedImages"
640+
accessor="ctrl.keywordAccessor"
641+
query-filter="queryFilter:'keyword'">
642+
</ui-list-editor-compact>
651643
</ul>
652644
</dd>
653645
</dl>

kahuna/public/js/components/gr-image-metadata/gr-image-metadata.js

Lines changed: 32 additions & 8 deletions
Original file line numberDiff line numberDiff line change
@@ -6,8 +6,8 @@ import template from './gr-image-metadata.html';
66
import '../../image/service';
77
import '../../edits/service';
88
import '../gr-description-warning/gr-description-warning';
9-
import { editOptions, overwrite } from '../../util/constants/editOptions';
109
import '../../util/storage';
10+
import { editOptions, overwrite } from '../../util/constants/editOptions';
1111
import '../../services/image-accessor';
1212
import '../../services/image-list';
1313
import '../../services/label';
@@ -146,16 +146,40 @@ module.controller('grImageMetadataCtrl', [
146146
});
147147
};
148148

149-
ctrl.addLabel = function (label) {
150-
var imageArray = Array.from(ctrl.selectedImages);
151-
labelService.batchAdd(imageArray, [label]);
149+
ctrl.addLabelToImages = labelService.batchAdd;
150+
ctrl.removeLabelFromImages = labelService.batchRemove;
151+
ctrl.labelAccessor = (image) => imageAccessor.readLabels(image).map(label => label.data);
152+
153+
ctrl.peopleAccessor = (image) => imageAccessor.readPeopleInImage(image);
154+
ctrl.removePersonFromImages = (images, removedPerson) => {
155+
images.map((image) => {
156+
const maybeNewPeopleInImage = ctrl.peopleAccessor(image)?.filter((person) => person !== removedPerson);
157+
const newPeopleInImage = maybeNewPeopleInImage ? maybeNewPeopleInImage : [];
158+
editsService.batchUpdateMetadataField(
159+
[image],
160+
'peopleInImage',
161+
newPeopleInImage,
162+
ctrl.descriptionOption
163+
);
164+
});
165+
return Promise.resolve(ctrl.selectedImages);
152166
};
153-
154-
ctrl.removeLabel = function (label) {
155-
var imageArray = Array.from(ctrl.selectedImages);
156-
labelService.batchRemove(imageArray, label);
167+
ctrl.addPersonToImages = (images, addedPerson) => {
168+
images.map((image) => {
169+
const currentPeopleInImage = ctrl.peopleAccessor(image);
170+
const newPeopleInImage = currentPeopleInImage ? [...currentPeopleInImage, addedPerson] : [addedPerson];
171+
editsService.batchUpdateMetadataField(
172+
[image],
173+
'peopleInImage',
174+
newPeopleInImage,
175+
ctrl.descriptionOption
176+
);
177+
});
178+
return Promise.resolve(ctrl.selectedImages);
157179
};
158180

181+
ctrl.keywordAccessor = (image) => imageAccessor.readMetadata(image).keywords;
182+
159183
const ignoredMetadata = [
160184
'title', 'description', 'copyright', 'keywords', 'byline',
161185
'credit', 'subLocation', 'city', 'state', 'country',

kahuna/public/js/edits/image-editor.html

Lines changed: 10 additions & 4 deletions
Original file line numberDiff line numberDiff line change
@@ -229,10 +229,16 @@ <h1>Organisation and Grouping</h1>
229229
active="ctrl.inputtingLabel"
230230
class="result-editor__field-container__add-button">
231231
</gr-add-label>
232-
<ui-labeller
233-
image="ctrl.image"
234-
with-batch="ctrl.withBatch">
235-
</ui-labeller>
232+
<ui-list-editor-upload
233+
images="ctrl.imageAsArray"
234+
with-batch="ctrl.withBatch"
235+
add-to-images="ctrl.addLabelToImages"
236+
remove-from-images="ctrl.removeLabelFromImages"
237+
accessor="ctrl.labelAccessor"
238+
query-filter="queryLabelFilter"
239+
element-name="label"
240+
element-name-plural="labels">
241+
</ui-list-editor-upload>
236242
</div>
237243
</div>
238244

kahuna/public/js/edits/image-editor.js

Lines changed: 15 additions & 1 deletion
Original file line numberDiff line numberDiff line change
@@ -4,16 +4,19 @@ import './image-editor.css';
44

55
import {service} from './service';
66
import {imageService} from '../image/service';
7+
import '../services/label';
8+
import {imageAccessor} from '../services/image-accessor';
79
import {usageRightsEditor} from '../usage-rights/usage-rights-editor';
810
import {leases} from '../leases/leases';
911
import {archiver} from '../components/gr-archiver-status/gr-archiver-status';
1012
import {collectionsApi} from '../services/api/collections-api';
1113
import {rememberScrollTop} from '../directives/gr-remember-scroll-top';
1214

13-
1415
export var imageEditor = angular.module('kahuna.edits.imageEditor', [
1516
service.name,
1617
imageService.name,
18+
"kahuna.services.label",
19+
imageAccessor.name,
1720
usageRightsEditor.name,
1821
archiver.name,
1922
collectionsApi.name,
@@ -28,6 +31,8 @@ imageEditor.controller('ImageEditorCtrl', [
2831
'editsService',
2932
'editsApi',
3033
'imageService',
34+
'labelService',
35+
'imageAccessor',
3136
'collections',
3237
'mediaApi',
3338

@@ -37,6 +42,8 @@ imageEditor.controller('ImageEditorCtrl', [
3742
editsService,
3843
editsApi,
3944
imageService,
45+
labelService,
46+
imageAccessor,
4047
collections,
4148
mediaApi) {
4249

@@ -67,6 +74,12 @@ imageEditor.controller('ImageEditorCtrl', [
6774

6875
ctrl.undelete = undelete;
6976

77+
ctrl.imageAsArray = [ctrl.image];
78+
79+
ctrl.addLabelToImages = labelService.batchAdd;
80+
ctrl.removeLabelFromImages = labelService.batchRemove;
81+
ctrl.labelAccessor = (image) => imageAccessor.readLabels(image).map(label => label.data);
82+
7083
//TODO put collections in their own directive
7184
ctrl.addCollection = false;
7285
ctrl.addToCollection = addToCollection;
@@ -135,6 +148,7 @@ imageEditor.controller('ImageEditorCtrl', [
135148
function onSave() {
136149
return ctrl.image.get().then(newImage => {
137150
ctrl.image = newImage;
151+
ctrl.imageAsArray = [newImage];
138152
ctrl.usageRights = imageService(ctrl.image).usageRights;
139153
updateUsageRightsCategory();
140154
ctrl.status = ctrl.image.data.valid ? 'ready' : 'invalid';

kahuna/public/js/edits/index.js

Lines changed: 2 additions & 2 deletions
Original file line numberDiff line numberDiff line change
@@ -1,7 +1,7 @@
11
import angular from 'angular';
22

3-
import './labeller';
3+
import './list-editor';
44

55
export var edits = angular.module('kahuna.edits', [
6-
'kahuna.edits.labeller'
6+
'kahuna.edits.listEditor'
77
]);

kahuna/public/js/edits/labeller-compact.html

Lines changed: 0 additions & 16 deletions
This file was deleted.

kahuna/public/js/edits/labeller.html

Lines changed: 0 additions & 33 deletions
This file was deleted.

0 commit comments

Comments
 (0)