"use strict"; (function () { 'use strict'; angular.module('myitsmApp') .directive('userAvailability', ['personModel', 'chatModel', '$timeout', function (personModel, chatModel, $timeout) { return { restrict: 'A', scope: { userInfo: '=userAvailability' }, priority: 99, replace: true, template: "
", link: function (scope, $element, attr) { scope.currentProfile = {}; var outerHeight = parseInt($element.css('height')), outerWidth = parseInt($element.css('width')), commonSize = (outerHeight >= outerWidth) ? outerHeight : outerWidth; /*if(commonSize == 0){ commonSize = defaultSize; }*/ $element.height(commonSize).width(commonSize); attr.$observe('src', function (value) { if (value) { $element.css({ 'background-image': 'url(' + attr.src + ')', 'background-size': 'contain' }); } }); var unbinder = scope.$watch(function () { return !!chatModel.connected && scope.userInfo; }, function (newVal) { if (newVal) { var personData = scope.userInfo, jid = personData.jid, personId = personData.loginId || personData.elementId, generatedJID = jid || chatModel.generateUserJID(personId), currentUserIdMatch = personId ? (chatModel.currentUser.elementId === personId || chatModel.currentUser.loginId === personId) : false, currentUserJidMatch = jid ? (chatModel.currentUser === jid) : false; if (currentUserIdMatch || currentUserJidMatch) { scope.currentProfile = chatModel.currentUser; return; } if (jid) { chatModel.cachedProfiles[jid] ? angular.extend(chatModel.cachedProfiles[jid], personData) : chatModel.cachedProfiles[jid] = personData; scope.currentProfile = chatModel.cachedProfiles[jid]; chatModel.checkUserAvailability(jid); return; } else if (personId) { var cachedProfile; if (chatModel.cachedProfiles[generatedJID]) { personData.jid = generatedJID; personData.available = chatModel.cachedProfiles[generatedJID].available; cachedProfile = chatModel.cachedProfiles[generatedJID]; angular.extend(chatModel.cachedProfiles[generatedJID], personData); } else { cachedProfile = _.find(chatModel.cachedProfiles, function (profile) { return _.contains(profile, personId); }); } if (cachedProfile) { scope.currentProfile = cachedProfile; chatModel.checkUserAvailability(scope.currentProfile.jid); return; } var promise = personModel.getPersonDetailsByID(personId) .then(function (personDetails) { jid = personDetails ? personDetails.jid : _.noop(); if (jid) { personDetails.available = personDetails.available.toLowerCase(); chatModel.cachedProfiles[jid] ? angular.extend(chatModel.cachedProfiles[jid], personModel.personDetails) : chatModel.cachedProfiles[jid] = personModel.personDetails; $timeout(function () { scope.currentProfile = chatModel.cachedProfiles[jid]; if (!scope.currentProfile.available) { chatModel.checkUserAvailability(scope.currentProfile.jid); } }); } else { chatModel.cachedProfiles.notFound = personDetails; scope.currentProfile = personDetails; } }); chatModel.pendingProfileRequests[personId] = promise; return; } } }); scope.$on('destroy', function () { unbinder(); }); /* function removeAvailability() { $element.removeClass('chat-availability__holder'); }*/ } }; }]); })();