in kahuna/public/js/edits/list-editor.js [26:155]
function($rootScope,
$scope,
$window,
$timeout,
imageLogic,
imageList,
storage,
searchWithModifiers) {
var ctrl = this;
ctrl.$onInit = () => {
const retrieveElementsWithOccurrences = (images) => imageList.getOccurrences(images.flatMap(img => ctrl.accessor(img)));
$scope.$watchCollection('ctrl.images', updatedImages => updateHandler(updatedImages));
const updateHandler = (maybeUpdatedImages) => {
ctrl.images.forEach((img, index) => {
const updatedImage = maybeUpdatedImages.find(x => imageLogic.isSameImage(x, img));
if (updatedImage) {
ctrl.images[index] = updatedImage;
}
});
ctrl.listWithOccurrences = retrieveElementsWithOccurrences(ctrl.images);
ctrl.plainList = ctrl.listWithOccurrences.map(x => x.data);
};
const updateListener = $rootScope.$on('images-updated', (e, updatedImages) => {
updateHandler(updatedImages);
});
ctrl.listWithOccurrences = retrieveElementsWithOccurrences(ctrl.images);
ctrl.plainList = ctrl.listWithOccurrences.map(x => x.data);
ctrl.imageRemovedElements = [];
function saveFailed(e) {
console.error(e);
$window.alert('Something went wrong when saving, please try again!');
}
ctrl.addElements = (elements, elementName, removedElements, originatingImage) => {
ctrl.adding = true;
//-clear removed list-
let ctrlElementName = ctrl.elementNamePlural ? ctrl.elementNamePlural : ctrl.elementName;
if (removedElements && removedElements.length > 0 && ctrlElementName === elementName) {
ctrl.images.forEach(img => {
if (img.uri === originatingImage) {
ctrl.imageRemovedElements = [];
}
});
}
ctrl.addToImages(ctrl.images, elements, elementName, removedElements)
.then(imgs => {
updateHandler(imgs);
})
.catch(saveFailed)
.finally(() => {
ctrl.adding = false;
});
};
ctrl.elementsBeingRemoved = new Set();
ctrl.removeElement = element => {
ctrl.elementsBeingRemoved.add(element);
//-track removed elements from list-
ctrl.imageRemovedElements.push(element);
ctrl.removeFromImages(ctrl.images, element, "")
.then(imgs => {
updateHandler(imgs);
})
.catch(saveFailed)
.finally(() => {
ctrl.elementsBeingRemoved.delete(element);
});
};
ctrl.removeAll = (elementName) => {
if (ctrl.removeAsArray || ctrl.removeAsArray === "true") {
if (ctrl.plainList.length > 0) {
ctrl.removeFromImages(ctrl.images, ctrl.plainList, elementName);
}
} else {
ctrl.plainList.forEach(element => ctrl.removeFromImages(ctrl.images, element, elementName));
}
};
ctrl.srefNonfree = () => storage.getJs("isNonFree", true) ? true : undefined;
const batchAddEvent = 'events:batch-apply:add-all';
const batchRemoveEvent = 'events:batch-apply:remove-all';
if (Boolean(ctrl.withBatch)) {
$scope.$on(batchAddEvent, (e, elements, elementName, removedElements, originatingImage) =>
ctrl.addElements(elements, elementName, removedElements, originatingImage));
$scope.$on(batchRemoveEvent, (e, elementName) => ctrl.removeAll(elementName));
ctrl.batchApply = (elementName = '') => {
var elements = ctrl.plainList;
var removedElements = ctrl.imageRemovedElements;
var imageUri = ctrl.images[0].uri;
if (elements.length > 0) {
$rootScope.$broadcast(batchAddEvent, elements, elementName, removedElements, imageUri);
} else {
ctrl.confirmDelete = true;
$timeout(() => {
ctrl.confirmDelete = false;
}, 5000);
}
};
ctrl.batchRemove = (elementName = '') => {
ctrl.confirmDelete = false;
$rootScope.$broadcast(batchRemoveEvent, elementName);
};
}
$scope.$on('$destroy', function() {
updateListener();
});
ctrl.searchWithModifiers = searchWithModifiers;
};
}]);