From e47964f0d2e8e470f41b3e18a8237e9ffb93fb20 Mon Sep 17 00:00:00 2001 From: Tim Otten Date: Mon, 15 Dec 2014 01:16:20 -0800 Subject: [PATCH] crmMailing2 - Convert controller EditScheduleCtrl to directive crmMailingRadioDate --- css/angular-crmMailing2.css | 9 +++++ js/angular-crmMailing2-directives.js | 53 ++++++++++++++++++++++++++++ js/angular-crmMailing2.js | 52 --------------------------- partials/crmMailing2/schedule.html | 4 +-- 4 files changed, 64 insertions(+), 54 deletions(-) diff --git a/css/angular-crmMailing2.css b/css/angular-crmMailing2.css index 98155449d6..fa2822b750 100644 --- a/css/angular-crmMailing2.css +++ b/css/angular-crmMailing2.css @@ -45,6 +45,15 @@ span.crmMailing2-exclude { .crmMailing2 .preview-group, .crmMailing2 .preview-contact { } +.crmMailing2 .crmMailing2-schedule-outer { + width: 98% +} +.crmMailing2 .crmMailing2-schedule-inner { + width: 40em; + text-align: left; + margin: auto; +} + /* Odd: These placeholder directives break if combined */ input[name=preview_test_email]:-moz-placeholder { text-align: center; diff --git a/js/angular-crmMailing2-directives.js b/js/angular-crmMailing2-directives.js index cd11e3e30e..4f79ab75a8 100644 --- a/js/angular-crmMailing2-directives.js +++ b/js/angular-crmMailing2-directives.js @@ -60,6 +60,59 @@ }; }); + // Represent a datetime field as if it were a radio ('schedule.mode') and a datetime ('schedule.datetime'). + // example:
...
+ // FIXME: use ngModel instead of adhoc crmModel + crmMailing2.directive('crmMailingRadioDate', function ($parse) { + return { + link: function ($scope, element, attrs) { + var schedModel = $parse(attrs.crmModel); + + var schedule = $scope[attrs.crmMailingRadioDate] = { + mode: 'now', + datetime: '' + }; + var updateChildren = (function () { + var sched = schedModel($scope); + if (sched) { + schedule.mode = 'at'; + schedule.datetime = sched; + } + else { + schedule.mode = 'now'; + } + }); + var updateParent = (function () { + switch (schedule.mode) { + case 'now': + schedModel.assign($scope, null); + break; + case 'at': + schedModel.assign($scope, schedule.datetime); + break; + default: + throw 'Unrecognized schedule mode: ' + schedule.mode; + } + }); + + $scope.$watch(attrs.crmModel, updateChildren); + $scope.$watch(attrs.crmMailingRadioDate + '.mode', updateParent); + $scope.$watch(attrs.crmMailingRadioDate + '.datetime', function (newValue, oldValue) { + // automatically switch mode based on datetime entry + if (oldValue != newValue) { + if (!newValue || newValue == " ") { + schedule.mode = 'now'; + } + else { + schedule.mode = 'at'; + } + } + updateParent(); + }); + } + }; + }); + crmMailing2.directive('crmMailingReviewBool', function () { return { scope: { diff --git a/js/angular-crmMailing2.js b/js/angular-crmMailing2.js index 0edf9ecd45..70d4419cc8 100644 --- a/js/angular-crmMailing2.js +++ b/js/angular-crmMailing2.js @@ -444,56 +444,4 @@ crmMailing2.controller('EmailAddrCtrl', function EmailAddrCtrl($scope, crmFromAddresses){ $scope.crmFromAddresses = crmFromAddresses; }); - - // Controller for schedule-editing widget. - // Scope members: - // - [input] mailing: object - // - scheduled_date: null|string(YYYY-MM-DD hh:mm) - crmMailing2.controller('EditScheduleCtrl', function EditScheduleCtrl($scope, $parse) { - var schedModelExpr = 'mailing.scheduled_date'; - var schedModel = $parse(schedModelExpr); - - $scope.schedule = { - mode: 'now', - datetime: '' - }; - var updateChildren = (function () { - var sched = schedModel($scope); - if (sched) { - $scope.schedule.mode = 'at'; - $scope.schedule.datetime = sched; - } - else { - $scope.schedule.mode = 'now'; - } - }); - var updateParent = (function () { - switch ($scope.schedule.mode) { - case 'now': - schedModel.assign($scope, null); - break; - case 'at': - schedModel.assign($scope, $scope.schedule.datetime); - break; - default: - throw 'Unrecognized schedule mode: ' + $scope.schedule.mode; - } - }); - - $scope.$watch(schedModelExpr, updateChildren); - $scope.$watch('schedule.mode', updateParent); - $scope.$watch('schedule.datetime', function (newValue, oldValue) { - // automatically switch mode based on datetime entry - if (oldValue != newValue) { - if (!newValue || newValue == " ") { - $scope.schedule.mode = 'now'; - } - else { - $scope.schedule.mode = 'at'; - } - } - updateParent(); - }); - }); - })(angular, CRM.$, CRM._); diff --git a/partials/crmMailing2/schedule.html b/partials/crmMailing2/schedule.html index 445e8bd473..92c9039822 100644 --- a/partials/crmMailing2/schedule.html +++ b/partials/crmMailing2/schedule.html @@ -1,5 +1,5 @@ -
-
+
+
-- 2.25.1