// Använd fb-action.ts för Angular
fbDeprecatedFile('fbAction');
angular.module('fasit')
.directive('fbAction', ['instaellningarService', '$compile', '$uibPosition','commonService','sideDrawerService', '$filter', '$timeout', function (
instaellningarService: fb.IInstaellningarService,
$compile: ng.ICompileService,
$uibposition: any,
commonService: fb.ICommonService,
sideDrawerService: fb.ISideDrawerService,
$filter: ng.IFilterService,
$timeout: ng.ITimeoutService
) {
var template =
'
' +
'
' +
'
' +
'
' +
'- Spärra nummer
' +
'En spärr förhindrar reklamutskick. Eventurella tjänster avslutas inte.
' +
'- Kontakten har valt att inte få sms. Ta bort spärr
' +
'- Felaktig e-postadress
' +
'Ett eller flera e-post har inte kunnat levereras till denna adress. Har tryckfelsnisse varit framme? Om adressen är korrekt, kontakta support.
' +
'- Spärra e-post
' +
'En spärr förhindrar reklamutskick. Eventurella tjänster avslutas inte.
' +
'- Kontakten har valt att inte få e-post. Ta bort spärr
' +
'' +
'- Ring
' +
'- Ring
' +
'- Skicka sms
' +
'- Skicka Epost
' +
'- Hitta.se
' +
'
' +
'
';
var tooltipLinker: ng.ITemplateLinkingFunction;
var compile = function (elem, attr) {
tooltipLinker = $compile(template);
return link;
}
var link = function (scope, element: ng.IAugmentedJQuery, attrs: any) {
fbDeprecated('fbAction');
var tooltipLinkedScope = scope.$new();
scope.isEmailChangeTrack = commonService.changeTrack.isChangeTrackObject(scope.email);
scope.isNumberChangeTrack = commonService.changeTrack.isChangeTrackObject(scope.number);
var tooltip: ng.IAugmentedJQuery = tooltipLinker(tooltipLinkedScope, angular.noop);
scope.open = function () {
element.after(tooltip);
tooltip.css({ top: 0, left: 0, display: 'block' });
var ttPosition = $uibposition.positionElements(element, tooltip, 'top', false);
ttPosition.top += 'px';
ttPosition.left += 'px';
tooltip.css(ttPosition);
}
scope.close = function () {
tooltip.css({ display: 'none' });
};
element.parent().mouseenter(scope.open);
element.parent().mouseleave(scope.close);
scope.$on('$destroy', function () {
tooltipLinkedScope.$destroy();
element.parent().unbind('mouseenter');
element.parent().unbind('mouseleave');
//element.parent().remove();
//tooltipLinkedScope = null;
tooltip.remove();
});
var instaellningar = instaellningarService.instaellningar.instaellningar;
scope.anvaenderRingLaenkar = instaellningar[fb.InstaellningTyp.AnvaenderRingLaenkar.id].InstaellningVaerde;
scope.anvaenderRingLaenkarCallTo = instaellningar[fb.InstaellningTyp.AnvaenderRingLaenkarCallTo.id].InstaellningVaerde;
scope.isVisible = false;
scope.sendSMS = function () {
var recipient = [new fb.PersonMottagare({
TelefonnummerMobil: $filter("phoneNumber")(scope.number.value),
PersonNamn: scope.personNamn ? scope.personNamn.value : 'Person',
PersonId: undefined,
EjReklam: scope.aerSpaerrad
})];
sideDrawerService.setSideDrawer('SMSUtskick', { recipients: recipient, maeklarObjektId: scope.maeklarObjektId });
}
scope.visaContactMedHittaSe = function () {
var params = { searchTelefonnummer: scope.number.value, kontakt: scope.kontaktMedHittaSeGet(), callback: scope.kontaktMedHittaSeCallback };
if (sideDrawerService.currentSideDrawer()) {
sideDrawerService.stack('KontaktMedHittaSe', params);
} else {
sideDrawerService.setSideDrawer('KontaktMedHittaSe', params);
}
}
scope.sendEmail = function () {
var recipient = [new fb.PersonMottagare({
PersonNamn: scope.personNamn ? scope.personNamn.value : '',
MejlAdress: scope.email ? scope.email.value : '',
PersonId: null,
EjReklam: null,
})];
sideDrawerService.setSideDrawer('EpostUtskick', {
recipients: recipient,
sender: null,
body: null,
maeklarObjektId: scope.maeklarObjektId,
subject: null
});
}
var timer;
var offsetHeight = 0;
var updatePosition = function () {
if (tooltip[0].offsetHeight !== offsetHeight) {
offsetHeight = tooltip[0].offsetHeight;
}
if (tooltip && offsetHeight > 0) {
var ttPosition = $uibposition.positionElements(element, tooltip, 'top', false);
ttPosition.top += 'px';
ttPosition.left += 'px';
tooltip.css(ttPosition);
}
};
scope.$watch(function () {
//Istället för att watcha offsetHeight och potentiellt få digestloop-problem
//så kör vi istället en timeout som sätter om värdet om det har ändrats.
//Vi slipper därmed i standardfallet reflow varje digest (då denna körs efter digesten)
//Se https://gist.github.com/paulirish/5d52fb081b3570c81e3a
timer = timer || $timeout(updatePosition, 50, false);
});
var timer2;
scope.$watch('email.value', function (newVal, oldVal) {
if (newVal !== oldVal && !oldVal) {
if (timer2) {
$timeout.cancel(timer2);
}
timer2 = $timeout(updatePosition, 10, false);
}
});
var timer3;
scope.$watch('number.value', function (newVal, oldVal) {
if (newVal !== oldVal && !oldVal) {
if (timer3) {
$timeout.cancel(timer3);
}
timer3 = $timeout(updatePosition, 10, false);
}
});
}
return {
compile: compile,
restrict: 'EA',
replace: true,
scope: {
number: '=?',
email: '=?',
personNamn: '=?',
aerSpaerrad: '=?',
spaerraMobil: '=?',
spaerraEpost: '=?',
fungerarEj: '=?',
maeklarObjektId: '=?',
kontaktMedHittaSe: '=?',
kontaktMedHittaSeGet: '&',
kontaktMedHittaSeCallback: '&'
},
};
}]);