(function(){ "use strict"; angular.module('raz') .component('resourceCardPopout', { templateUrl: '/js/angular/resource-slider/resource-card-popout.html', controller: 'resourceCardPopout', bindings: { resource: '<', popoverCtrl: '<' } }) .controller('resourceCardPopout', ['constantValues','bookTipInfoService', '$sce', '$scope', '$element', '$q', 'MessageBox', 'popoutManagerService', 'fileCabinetRibbonService', 'folderService', 'assignTargetedResource', 'folderListItemAmbassador', function (constantValues, bookTipInfoService, $sce, $scope, $element, $q, MessageBox, popoutManagerService, fileCabinetRibbonService, folderService, assignTargetedResource, folderListItemAmbassador) { var ctrl = this; var selectedFolder = null; var _showAddToSection = false; ctrl.lastSavedFolderID = 0; ctrl.digitalResourcesAssignable = true; ctrl.currentResourceAdded = false; ctrl.site = 'raz'; ctrl.nonbook_popout_info = {}; ctrl.bookTipInfo = {}; ctrl.$onInit = function () { setResourceInfo(); if (fileCabinetRibbonService.ribbonActive()) { selectedFolder = fileCabinetRibbonService.currentFolder(); } folderListItemAmbassador.registerOnSelectedFolderListItemChanged($scope, onSelectedFolderListItemChanged); ctrl.getDisplayInfo(); }; var setResourceInfo = function () { ctrl.resourceId = ctrl.resource.resourceId; ctrl.languageId = ctrl.resource.languageId; ctrl.extraPopoutInfo = ctrl.resource.extraPopoutInfo; var resourceCard = ctrl.resource.metadata; ctrl.title = resourceCard.title; //ctrl.resourceType = resourceCard.resourceType; //ctrl.level = resourceCard.level; //ctrl.orientation = resourceCard.orientation; //ctrl.lexile = resourceCard.lexile; //ctrl.isMultiLevel = resourceCard.isMultiLevel; ctrl.isBook = ctrl.resource.deliverableType === 'book'; }; /* Functions for the popout */ ctrl.closePopout = function () { ctrl.popoverCtrl.close(); ctrl.showAddToSection(false); }; ctrl.getDisplayInfo = function() { if (fileCabinetRibbonService.ribbonActive()) { ctrl.currentResourceAdded = ctrl.isBook ? fileCabinetRibbonService.bookAddedToFileCabinetRibbon(ctrl.resourceId) : fileCabinetRibbonService.nonbookAddedToFileCabinetRibbon(ctrl.resourceId); } if (ctrl.isBook) { var queryString = "id="+ctrl.resourceId+"&language_id="+ctrl.languageId+"&is_primary=true"; return bookTipInfoService.fetchBookTipInfo(ctrl.site, queryString) .then(function success(response) { ctrl.bookTipInfo = response.data; ctrl.bookTipInfo.languageId = ctrl.languageId; ctrl.bookTipInfo.summary = $sce.trustAsHtml(ctrl.bookTipInfo.summary+''); ctrl.touchDeviceLinks = response.data.touchDeviceLinks; ctrl.digitalResourcesAssignable = !!response.data.digitalResourcesAssignable; ctrl.translations = ctrl.bookTipInfo.translationLanguages; ctrl.authorized = ctrl.bookTipInfo.authorized; return true; }); } else { var escapedHtml = ctrl.extraPopoutInfo; ctrl.nonbook_popout_info = JSON.parse(decodeEscapedHtml(escapedHtml)); if (!ctrl.nonbook_popout_info.language_name) { ctrl.nonbook_popout_info.language_name = 'English'; } ctrl.translations = [ctrl.nonbook_popout_info.language_name]; ctrl.authorized = ctrl.nonbook_popout_info.authorized; ctrl.digitalResourcesAssignable = ctrl.nonbook_popout_info.digitalResourcesAssignable; setExtraInfoVerbiage(); return $q.resolve(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.languageId == "1" && ctrl.bookTipInfo.lexile != null) { resourceLevel.push('Lexile ' + ctrl.bookTipInfo.lexile); } return $sce.trustAsHtml(resourceLevel.join('|')); }; ctrl.getMetadataString = function () { if (ctrl.isBook) { var stringElements = []; if (ctrl.bookTipInfo.bookTypeInfo) { stringElements.push(ctrl.bookTipInfo.bookTypeInfo); } return $sce.trustAsHtml(stringElements.join()); } else { return ctrl.nonbook_popout_info.extra_info; } }; function setExtraInfoVerbiage() { ctrl.nonbook_popout_info.extra_info_set = []; if (ctrl.nonbook_popout_info.genre) { ctrl.nonbook_popout_info.extra_info_set.push(ctrl.nonbook_popout_info.genre + ' (' + ctrl.nonbook_popout_info.genre_type + ')'); } if (ctrl.nonbook_popout_info.structure && ctrl.nonbook_popout_info.genre_type === 'nonfiction') { ctrl.nonbook_popout_info.extra_info_set.push(ctrl.nonbook_popout_info.structure); } if (ctrl.nonbook_popout_info.word_count) { ctrl.nonbook_popout_info.extra_info_set.push(ctrl.nonbook_popout_info.word_count + ' words'); } if (ctrl.nonbook_popout_info.raz_level) { ctrl.nonbook_popout_info.extra_info_set.push("Level " + ctrl.nonbook_popout_info.raz_level); } if (ctrl.nonbook_popout_info.lexile) { ctrl.nonbook_popout_info.extra_info_set.push("Lexile " + ctrl.nonbook_popout_info.lexile); } ctrl.nonbook_popout_info.extra_info = ctrl.nonbook_popout_info.extra_info_set.join(', '); } /* Functions for the file cabinet and adding to folders */ ctrl.initAddToSection = function () { ctrl.counter = 0; ctrl.popoverCtrl.targetCtrl.unregisterLeave(); ctrl.popoverCtrl.contentCtrl.unregisterLeave(); popoutManagerService.setWorker(ctrl.resourceId); 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 = null; var resourceType = null; if (ctrl.isBook) { resourceToAdd = { folderName : null, folderObj : selectedFolder, isRkBook : ctrl.bookTipInfo['rkBookId'] !== undefined, bookId : ctrl.bookTipInfo['bookId'] || ctrl.bookTipInfo['rkBookId'], materialId : ctrl.bookTipInfo['materialId'] || null, languageId : ctrl.languageId }; resourceType = parseInt(resourceToAdd.bookId) > 0 ? folderService.getResourceTypes().LANDINGPAGE : folderService.getResourceTypes().SAZ_MATERIAL; } else { resourceToAdd = { folderName: null, folderObj: selectedFolder, nonbookId: ctrl.nonbook_popout_info.image_id, languageId: ctrl.languageId }; resourceType = folderService.getResourceTypes().NON_BOOK; } fileCabinetRibbonService.addToFileCabinet(resourceToAdd, resourceType) .then(function success(response) { executeSuccessfulAdditionToFileCabinet(response, resourceToAdd); }).catch(function failure(reason) { executeUnsuccessfulAdditionToFileCabinet(reason, resourceToAdd); }); ctrl.closePopout(); }; ctrl.updateFileCabinetRibbon = function (resourceToAddInfo) { ctrl.currentResourceAdded = fileCabinetRibbonService.emitEventToFileCabinetRibbonScope("fileCabinetRibbon.update", resourceToAddInfo); if (ctrl.isBook) { ctrl.currentResourceAdded = fileCabinetRibbonService.bookAddedToFileCabinetRibbon(ctrl.resourceId); } ctrl.closePopout(); }; 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(); } }; function executeSuccessfulAdditionToFileCabinet(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; setLastPopoutFolderId(folderObj.id); ctrl.updateFileCabinetRibbon(resourceToAdd); } function executeUnsuccessfulAdditionToFileCabinet(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); } } function setLastPopoutFolderId(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); } ); } function onSelectedFolderListItemChanged() { var selectedFolderListItem = folderListItemAmbassador.getSelectedFolderListItem(); selectedFolder = selectedFolderListItem && !selectedFolderListItem.locked ? selectedFolderListItem : null; } /* Functions for assign button */ ctrl.showAssignButton = function () { if (ctrl.isBook) { return ctrl.digitalResourcesAssignable && ctrl.bookTipInfo && ctrl.bookTipInfo.authorized; } else { return ctrl.digitalResourcesAssignable && ctrl.nonbook_popout_info && ctrl.nonbook_popout_info.authorized; } }; ctrl.assign = function () { if (ctrl.isBook) { assignTargetedResource.show(ctrl.bookTipInfo.bookAssignInfo.assignAction, ctrl.bookTipInfo.bookAssignInfo.kids_book_id, ctrl.bookTipInfo.bookAssignInfo.languageId, ctrl.bookTipInfo.bookAssignInfo.bookroomCollectionId, ctrl.bookTipInfo.title) } else { assignTargetedResource.show(ctrl.nonbook_popout_info.assign_action, ctrl.nonbook_popout_info.resource_id, 1, 0, ctrl.nonbook_popout_info.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' ); }; var decodeEscapedHtml = function(data) { var map = { '&' : '&', '"' : '"', ''' : "'", '<' : '<', '>' : '>' }; return String(data).replace(/&|"|'|<|>/g, function (c) {return map[c];}); }; function displayAlertMsg(alertMsg) { MessageBox.show({ message: alertMsg, responses: [{ label: 'OK' }] }) } }]) })();