From b0e40b8764eab7c40b3f5e6f994af3c423b92dfc Mon Sep 17 00:00:00 2001 From: Kevin Chabowski Date: Thu, 12 Sep 2013 22:40:35 +0200 Subject: Improved Job editor. Jobs that will never be executed can not be saved now. --- jobedit.go | 14 +++++++++++--- static/mailremind.js | 42 ++++++++++++++++++++---------------------- 2 files changed, 31 insertions(+), 25 deletions(-) diff --git a/jobedit.go b/jobedit.go index 5519551..f2f086f 100644 --- a/jobedit.go +++ b/jobedit.go @@ -169,7 +169,14 @@ func (jt *jobeditTpldata) interpretForm(form url.Values, u model.User) (subject if !ok { jt.Error = "Some schedules were wrong (wrong time format, negative repetition counts)" + return } + + if len(mc) == 0 { + jt.Error = "No schedule." + ok = false + } + return } @@ -221,7 +228,9 @@ func jobedit(user model.User, sess *sessions.Session, req *http.Request) (interf subject, content, mc, ok := outdata.interpretForm(req.Form, user) if ok { next := mc.NextAfter(time.Now()) - if job != nil { + if next.IsZero() { + outdata.Error = "The schedule would not send any mail." + } else if job != nil { if logfail("setting subject", job.SetSubject(subject)) && logfail("setting content", job.SetContent(content)) && logfail("setting chronos", job.SetChronos(mc)) && @@ -231,8 +240,7 @@ func jobedit(user model.User, sess *sessions.Session, req *http.Request) (interf outdata.Error = "Could not save everything." } } else { - var err error - if job, err = user.AddJob(subject, content, mc, next); logfail("creating new job", err) { + if job, err := user.AddJob(subject, content, mc, next); logfail("creating new job", err) { outdata.fillFromJob(job, user) outdata.Success = "Job created" } else { diff --git a/static/mailremind.js b/static/mailremind.js index 8f3079f..0e3725a 100644 --- a/static/mailremind.js +++ b/static/mailremind.js @@ -1,15 +1,15 @@ $(function() { var mkRow = function() { var row = $(""); - + row.append($("")); - + var yn = mkYNCheckbox("RepetitionEnabled", false); var cell = $(""); cell.append(yn.hidden); cell.append(yn.checkbox); row.append(cell); - + cell = $(""); cell.append($(" ")); var unitsel = $("")); - + attachFocusHandler($("input, select", row)); return row; }; - + var mkYNCheckbox = function(name, b) { var hidden = $(""); hidden.prop("value", b ? "yes" : "no"); hidden.prop("name", name); - + var checkbox = $(""); checkbox.prop("checked", b); checkbox.change(function() { hidden.prop("value", checkbox.prop("checked") ? "yes" : "no"); }); - + return {"hidden": hidden, "checkbox": checkbox}; }; - + $("select.enabler").each(function(i) { var self = $(this); var yn = mkYNCheckbox(self.prop("name"), self.val() == "yes"); - + self.before(yn.hidden); self.before(yn.checkbox); self.remove(); }); - + var maxSchedules = $("table.schedules tbody tr").length; var checkInsRow = function() { if($("table.schedules tbody tr").length >= maxSchedules) { return; } - + $("table.schedules tbody").append(mkRow()); }; - + var attachFocusHandler = function(q) { q.focus(function() { var myrow = $(this).parent().parent(); $("table.schedules tbody tr").not(myrow).each(function(i) { checkRemoveRow($(this)); }); - + checkInsRow(); }); }; - - - + var checkRemoveRow = function(row) { if($("input[name=\"Start\"]", row).val() == "") { row.remove(); } }; - + var updateSchedulesTab = function() { $("table.schedules tbody tr").each(function(i) { checkRemoveRow($(this)); }); - + checkInsRow(); }; - + attachFocusHandler($("table.schedules input, table.schedules select")); - + updateSchedulesTab(); }); \ No newline at end of file -- cgit v1.2.3-54-g00ecf