(function () { "use strict"; angular .module('raz') .component('nonbookPopover', { templateUrl: '/js/angular/resource-slider/nonbook-popover.html', controller: 'NonbookPopoverController' }) .controller('NonbookPopoverController', NonbookPopoverController); NonbookPopoverController.$inject = [ '$scope', '$q', '$element', 'fileCabinetRibbonService', 'folderService', 'MessageBox', 'assignTargetedResource', 'folderListItemAmbassador', 'resourcePopoverService' ]; function NonbookPopoverController($scope, $q, $element, fileCabinetRibbonService, folderService, MessageBox, assignTargetedResource, folderListItemAmbassador, resourcePopoverService) { var ctrl = this; var selectedFolder = null; ctrl.lastSavedFolderID = 0; ctrl.nonbook_popover_info = {}; ctrl.digitalResourcesAssignable = true; ctrl.currentResourceAdded = false; var _showAddToSection = false; /* Lifecycle Hooks */ ctrl.$onInit = function() { if (fileCabinetRibbonService.ribbonActive()) { selectedFolder = fileCabinetRibbonService.currentFolder(); } $element.hide(); folderListItemAmbassador.registerOnSelectedFolderListItemChanged($scope, onSelectedFolderListItemChanged); resourcePopoverService.registerNonbookPopover(ctrl.getDisplayInfo, ctrl.closePopover, $element); }; ctrl.$postLink = function() { resourcePopoverService.enableEventTriggers(false); resourcePopoverService.closeIfClickedOutsidePopover(); }; /* Functions for the popover */ ctrl.closePopover = function() { $element.hide(); ctrl.showAddToSection(false); if (!resourcePopoverService.popoverState.eventsEnabled) { resourcePopoverService.enableEventTriggers(false); } }; ctrl.getDisplayInfo = function(fromTouch, resourceInfo){ var resourceId = resourceInfo.resourceId; var nonbookPopoverInfo = resourceInfo.nonbookPopoverInfo; if (fileCabinetRibbonService.ribbonActive()) { ctrl.currentResourceAdded = fileCabinetRibbonService.nonbookAddedToFileCabinetRibbon(resourceId); } ctrl.nonbook_popover_info = JSON.parse(decodeEscapedHtml(nonbookPopoverInfo)); if (!ctrl.nonbook_popover_info.language_name) { ctrl.nonbook_popover_info.language_name = 'English'; } ctrl.digitalResourcesAssignable = ctrl.nonbook_popover_info.digitalResourcesAssignable; setExtraInfoVerbiage(); return $q.resolve(true); }; var setExtraInfoVerbiage = function() { ctrl.nonbook_popover_info.extra_info_set = []; if (ctrl.nonbook_popover_info.genre) { ctrl.nonbook_popover_info.extra_info_set.push(ctrl.nonbook_popover_info.genre + ' (' + ctrl.nonbook_popover_info.genre_type + ')'); } if (ctrl.nonbook_popover_info.structure && ctrl.nonbook_popover_info.genre_type === 'nonfiction') { ctrl.nonbook_popover_info.extra_info_set.push(ctrl.nonbook_popover_info.structure); } if (ctrl.nonbook_popover_info.word_count) { ctrl.nonbook_popover_info.extra_info_set.push(ctrl.nonbook_popover_info.word_count + ' words'); } if (ctrl.nonbook_popover_info.raz_level) { ctrl.nonbook_popover_info.extra_info_set.push("Level " + ctrl.nonbook_popover_info.raz_level); } if (ctrl.nonbook_popover_info.lexile) { ctrl.nonbook_popover_info.extra_info_set.push("Lexile " + ctrl.nonbook_popover_info.lexile); } ctrl.nonbook_popover_info.extra_info = ctrl.nonbook_popover_info.extra_info_set.join(', '); $scope.$apply(); }; /* Functions for the file cabinet and adding to folders */ ctrl.initAddToSection = function() { ctrl.counter = 0; resourcePopoverService.disableEventTriggers(false); ctrl.showAddToSection(true); }; ctrl.showAddToSection = function(showSection) { if (showSection !== undefined) { _showAddToSection = showSection; } return _showAddToSection; }; ctrl.addResourceButtonEnabled = function() { return !!selectedFolder && selectedFolder.isChecked; }; ctrl.sendAddResourceRequest = function() { var resourceToAdd = { folderName: null, folderObj: selectedFolder, nonbookId: ctrl.nonbook_popover_info.image_id, languageId: 1 }; fileCabinetRibbonService.addToFileCabinet(resourceToAdd, folderService.getResourceTypes().NON_BOOK) .then(function success(response) { executeSuccessfulAdditionToFileCabinet(response, resourceToAdd); }) .catch(function failure(reason) { executeUnsuccessfulAdditionToFileCabinet(reason, resourceToAdd); }); ctrl.closePopover(); }; var executeSuccessfulAdditionToFileCabinet = function(response, resourceToAdd) { var folderObj = response.folder; var addedResource = response.resource; resourceToAdd.thumbnailInfo = { src: addedResource.imgSrc, alt: addedResource.titleText, orientation: addedResource.imageOrientation }; resourceToAdd.folderObj = resourceToAdd.folderObj || folderObj; resourceToAdd.groupId = addedResource.group_id; resourceToAdd.typeId = addedResource.rtype; resourceToAdd.id = addedResource.id; resourceToAdd.languageId = addedResource.book_language_id || addedResource.non_book_language_id; resourceToAdd.assignable = addedResource.assignable; setLastPopoverFolderId(folderObj.id); ctrl.updateFileCabinetRibbon(resourceToAdd); }; var executeUnsuccessfulAdditionToFileCabinet = function(reason, resourceToAdd) { console.error(reason); var failureMsg = "There was a problem. This resource may already be in this folder."; displayAlertMsg(failureMsg); if (resourceToAdd.folderObj) { ctrl.activateRibbonForFolder(resourceToAdd.folderObj); } }; ctrl.updateFileCabinetRibbon = function(resourceToAddInfo) { ctrl.currentResourceAdded = fileCabinetRibbonService.emitEventToFileCabinetRibbonScope("fileCabinetRibbon.update", resourceToAddInfo); ctrl.closePopover(); }; ctrl.activateRibbonForFolder = function(folderObj) { fileCabinetRibbonService.emitEventToFileCabinetRibbonScope("fileCabinetRibbon.activate", folderObj); }; ctrl.showAddButton = function() { if (fileCabinetRibbonService.ribbonActive()) { ctrl.showAddToSection(false); return true; } else { return false; } }; ctrl.onClickAddButton = function() { if (!ctrl.currentResourceAdded){ ctrl.sendAddResourceRequest(); } }; var setLastPopoverFolderId = function(folderId) { var id = folderId != null && folderId != null ? folderId : -1; if (id === ctrl.lastSavedFolderID) { return; } ctrl.lastSavedFolderID = id; folderService.setLastPopoutFolderID({folder_id:id}).then( function (response) { //console.log('Save last folder id ' + id); }, function (reason) { console.log('Could not set last folder id.'); console.log(reason); } ); }; var displayAlertMsg = function(alertMsg) { MessageBox.show({ message: alertMsg, responses: [{label: 'OK'}] }); }; var onSelectedFolderListItemChanged = function() { var selectedFolderListItem = folderListItemAmbassador.getSelectedFolderListItem(); selectedFolder = selectedFolderListItem && !selectedFolderListItem.locked ? selectedFolderListItem : null; }; ctrl.showAssignButton = function() { return ctrl.digitalResourcesAssignable && ctrl.nonbook_popover_info && ctrl.nonbook_popover_info.authorized; }; ctrl.assign = function() { assignTargetedResource.show(ctrl.nonbook_popover_info.assign_action, ctrl.nonbook_popover_info.resource_id, ctrl.nonbook_popover_info.language_id, 0, ctrl.nonbook_popover_info.title); }; ctrl.htmlToPlaintext = function(text) { return text ? String(text).replace(/<[^>]+>/gm, '') : ''; }; var decodeEscapedHtml = function(data) { var map = { '&' : '&', '"' : '"', ''' : "'", ''' : "'", '<' : '<', '>' : '>' }; return String(data).replace(/&|"|'|'|<|>/g, function (c) {return map[c];}); }; } })();