in kahuna/public/js/components/gr-add-keyword/gr-add-keyword.js [22:114]
function ($window, $scope, $q, imageAccessor, editsService) {
let ctrl = this;
ctrl.active = false;
ctrl.descriptionOption = overwrite.key;
const updateImages = (images, metadataFieldName, valueFn) => {
let uptodateImages = [];
images.map((image) => {
editsService.batchUpdateMetadataField(
[image],
metadataFieldName,
valueFn(image),
ctrl.descriptionOption
);
//-ensure metadata in image is up-to-date-
let tmpImages = $scope.$parent.ctrl.imageAsArray.filter(img => img.uri == image.uri);
if (tmpImages.length > 0) {
let uptodateImage = tmpImages[0];
uptodateImage.data.metadata.keywords = valueFn(image);
uptodateImages.push(uptodateImage);
}
});
return Promise.resolve(uptodateImages);
};
const addXToImages = (metadataFieldName, accessor) => (images, addedX) => {
return updateImages(
images,
metadataFieldName,
(image) => {
const currentXInImage = accessor(image);
return currentXInImage ? [...currentXInImage, ...addedX] : [...addedX];
}
);
};
ctrl.keywordAccessor = (image) => imageAccessor.readMetadata(image).keywords;
ctrl.addKeywordToImages = addXToImages('keywords', ctrl.keywordAccessor);
ctrl.save = () => {
let keywordList = ctrl.newKeyword.split(',').map(e => e.trim());
let imageArray = $scope.$parent.ctrl.imageAsArray;
if (keywordList) {
save(keywordList, imageArray);
}
};
ctrl.cancel = reset;
function save(keyword, imageArray) {
ctrl.adding = true;
ctrl.active = false;
ctrl.addKeywordToImages(imageArray, keyword)
.then(() => {
reset();
})
.catch(saveFailed)
.finally(() => ctrl.adding = false);
}
function saveFailed(e) {
console.error(e);
$window.alert('Something went wrong when saving, please try again!');
ctrl.active = true;
}
function reset() {
ctrl.newKeyword = '';
ctrl.active = false;
}
ctrl.keywordSearch = (q) => {
//-current search always resolves to empty but retained as possible extension point-
let a = q ? [] : [];
return $q.resolve(a);
};
ctrl.keywordAppend = (currentVal, selectedVal) => {
const beforeLastComma = currentVal.split(/, ?/).slice(0, -1);
const fullText = beforeLastComma.concat(selectedVal);
return fullText.join(', ');
};
ctrl.selectLastKeyword = (value) => {
const afterComma = value.split(',').slice(-1)[0].trim();
return afterComma;
};
}