(function () { "use strict"; angular .module('raz') .component('bookPopover', { templateUrl: '/js/angular/resource-slider/book-popover.html', controller: 'BookPopoverCtrl', bindings: { site : '@' } }) .controller('BookPopoverCtrl', BookPopoverCtrl); BookPopoverCtrl.$inject = [ '$scope', '$sce', '$element', 'MessageBox', 'bookTipInfoService', 'fileCabinetRibbonService', 'folderService', 'assignTargetedResource', 'folderListItemAmbassador', 'resourcePopoverService' ]; function BookPopoverCtrl($scope, $sce, $element, MessageBox, bookTipInfoService, fileCabinetRibbonService, folderService, assignTargetedResource, folderListItemAmbassador, resourcePopoverService) { var ctrl = this; var selectedFolder = null; ctrl.lastSavedFolderID = 0; ctrl.bookTipInfo = {}; 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.registerBookPopover(ctrl.getDisplayInfo, ctrl.closePopover, $element); }; ctrl.$postLink = function() { resourcePopoverService.enableEventTriggers(true); resourcePopoverService.closeIfClickedOutsidePopover(); }; /* Functions for the popover */ ctrl.closePopover = function() { $element.hide(); ctrl.showAddToSection(false); if (!resourcePopoverService.popoverState.eventsEnabled) { resourcePopoverService.enableEventTriggers(true); } }; ctrl.getDisplayInfo = function(fromTouch, resourceInfo) { var resourceId = resourceInfo.resourceId; var languageId = resourceInfo.languageId; var lessonId = resourceInfo.lessonId; if (fileCabinetRibbonService.ribbonActive()) { ctrl.currentResourceAdded = fileCabinetRibbonService.bookAddedToFileCabinetRibbon(resourceId); } var fromTouchParameter = fromTouch ? '&fromTouchDevice=y' : ''; var queryString = "id="+resourceId+"&language_id="+languageId+"&is_primary=true"+fromTouchParameter; return bookTipInfoService.fetchBookTipInfo(ctrl.site, queryString) .then(function success(response) { ctrl.bookTipInfo = response.data; ctrl.bookTipInfo.lessonId = lessonId; ctrl.touchDeviceLinks = response.data.touchDeviceLinks; ctrl.digitalResourcesAssignable = !!response.data.digitalResourcesAssignable; if (ctrl.isRazSite()) { ctrl.bookTipInfo.languageId = languageId || 1; } else { ctrl.bookTipInfo.languageId = null; } ctrl.bookTipInfo.summary = $sce.trustAsHtml(ctrl.bookTipInfo.summary+''); return true; }) }; ctrl.getResourceType = function() { var resourceType = []; if (ctrl.bookTipInfo.categoryDisplayName) { resourceType.push(ctrl.bookTipInfo.categoryDisplayName); } return $sce.trustAsHtml(resourceType.join()); }; ctrl.getResourceLevel = function() { var resourceLevel = []; if (ctrl.bookTipInfo.levelIndicatorMsg) { resourceLevel.push(ctrl.bookTipInfo.levelIndicatorMsg); } if (ctrl.bookTipInfo.multilevelBookMsg) { resourceLevel.push(ctrl.bookTipInfo.multilevelBookMsg); } if (ctrl.bookTipInfo.lexile != null) { resourceLevel.push('Lexile ' + ctrl.bookTipInfo.lexile); } return $sce.trustAsHtml(resourceLevel.join('|')); }; ctrl.getTouchGoToLink = function () { var href; if (ctrl.touchDeviceLinks) { href = ctrl.touchDeviceLinks.href; if (ctrl.bookTipInfo.categoryDisplayName == 'Decodable') { href += "?id=" + ctrl.bookTipInfo.lessonId; } else { href += "?id=" + ctrl.touchDeviceLinks.bookId } if (ctrl.bookTipInfo.languageId != 1) { href += "&langId=" + ctrl.bookTipInfo.languageId; } if (ctrl.touchDeviceLinks.scrollTo) { href += "&scrollTo=" + ctrl.touchDeviceLinks.scrollTo; } } return href; }; ctrl.getMetadataString = function() { var stringElements = []; if (ctrl.bookTipInfo.bookTypeInfo) { stringElements.push(ctrl.bookTipInfo.bookTypeInfo); } return $sce.trustAsHtml(stringElements.join()); }; ctrl.getTitle = function() { return $sce.trustAsHtml(ctrl.bookTipInfo.title); }; /* Functions for the file cabinet and adding to folders */ ctrl.initAddToSection = function() { ctrl.counter = 0; resourcePopoverService.disableEventTriggers(true); 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, isRkBook : ctrl.bookTipInfo['rkBookId'] !== undefined, bookId : ctrl.bookTipInfo['bookId'] || ctrl.bookTipInfo['rkBookId'], materialId : ctrl.bookTipInfo['materialId'] || null, languageId : ctrl.bookTipInfo.languageId }; var resourceType = parseInt(resourceToAdd.bookId) > 0 ? folderService.getResourceTypes().LANDINGPAGE : folderService.getResourceTypes().SAZ_MATERIAL; fileCabinetRibbonService.addToFileCabinet(resourceToAdd, resourceType) .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(response, resourceToAdd) { console.log(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) { fileCabinetRibbonService.emitEventToFileCabinetRibbonScope("fileCabinetRibbon.update", resourceToAddInfo); ctrl.currentResourceAdded = fileCabinetRibbonService.bookAddedToFileCabinetRibbon(resourcePopoverService.currentPopoverTarget.id); }; 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.bookTipInfo && ctrl.bookTipInfo.authorized; }; ctrl.assign = function() { assignTargetedResource.show(ctrl.bookTipInfo.bookAssignInfo.assignAction, ctrl.bookTipInfo.bookAssignInfo.kids_book_id, ctrl.bookTipInfo.bookAssignInfo.languageId, ctrl.bookTipInfo.bookAssignInfo.bookroomCollectionId, ctrl.bookTipInfo.title) }; ctrl.htmlToPlaintext = function(text) { return text ? String(text).replace(/<[^>]+>/gm, '') : ''; }; ctrl.isRazSite = function() { return ( typeof ctrl.site === 'undefined' || ctrl.site === '' || ctrl.site === null || ctrl.site === 'raz' ); }; } })();