From a63a40195947b10416dd52d3716d6312263a84f2 Mon Sep 17 00:00:00 2001 From: Borisov Dmitry Date: Tue, 30 Oct 2012 23:30:15 +0600 Subject: [PATCH 1/4] Event object with input data validation --- event.js | 119 +++++++++++++++++++++++++++++++++++++++++++++++++++++++ 1 file changed, 119 insertions(+) create mode 100644 event.js diff --git a/event.js b/event.js new file mode 100644 index 0000000..597109c --- /dev/null +++ b/event.js @@ -0,0 +1,119 @@ +/*jslint devel: true */ +function checkStartDate(date) { + 'use strict'; + if (date === null) { + date = new Date(); + } else if (!(date instanceof Date && isFinite(date))) { + throw new Error("Start date is invalid, check syntax"); + } + return date; +} + +function checkEndDate(endDate, startDate) { + 'use strict'; + var date; + if (endDate === null) { + date = startDate; + date.setHours(startDate.getHours() + 1); + } else if (endDate instanceof Date && isFinite(endDate)) { + date = endDate; + } else { + throw new Error("End date is invalid, check syntax"); + } + return date; +} + +var REPEAT = { + NEVER: {title: "None", value: "+ 0.0.0 0:0"}, + DAY: {title: "Every Day", value: "+ 1.0.0 0:0"}, + WEEK: {title: "Every Week", value: "+ 7.0.0 0:0"}, + TWOWEEK: {title: "Every 2 weeks", value: "+ 14.0.0 0:0"}, + MONTH: {title: "Every month", value: "+ 0.1.0 0:0"}, + YEAR: {title: "Every year", value: "+ 0.0.1 0:0"} +}; + +var ALERT = { + NONE: {title: "None", value: "+ 0.0.0 0:0"}, + B5MIN: {title: "5 minutes before", value: "- 0.0.0 0:5"}, + B15MIN: {title: "15 minutes before", value: "- 0.0.0 0:15"}, + B30MIN: {title: "30 minutes before", value: "- 0.0.0 0:30"}, + B1HOUR: {title: "1 hour before", value: "- 0.0.0 1:0"}, + B1DAY: {title: "1 day before", value: "- 0.0.0 24:0"} +}; + +function checkAddTime(addTime) { + 'use strict'; + var re, splitted; + re = "([+-]) (\\d?\\d.\\d?\\d.\\d?\\d) (\\d?\\d:\\d?\\d)"; + splitted = addTime.match(re); + return splitted.length === 4; +} + +function checkRepeat(repeat) { + 'use strict'; + if (repeat === null) { + repeat = REPEAT.NEVER; + } else if (!(repeat.title && repeat.value)) { + throw new Error("Unknown type of 'repeat' variable"); + } else if (!checkAddTime(repeat.value)) { + throw new Error("Add time in 'repeat' variable must have format '+ dd.MM.YY hh:mm'"); + } + return repeat; +} + +function checkAlert(alert) { + 'use strict'; + if (alert === null) { + alert = ALERT.NONE; + } else if (!(alert.title && alert.value)) { + throw new Error("Unknown type of 'alert' variable"); + } else if (!checkAddTime(alert.value)) { + throw new Error("Add time in 'alert' variable must have format '+ dd.MM.YY hh:mm'"); + } + return alert; +} + +/** + * Возвращает объект Event + * + * @param {String} [title="New Event"] Имя события + * @param {String} [location] Место события + * @param {Number|Date} [starts="new Date()"] Начало события + * @param {Number|Date} [ends="starts + 1"] Конец события + * @param {Object} [repeat="REPEAT.NEVER"] Периодичность события + * @param {Object} [alert="ALERT.NONE"] Предупреждение + * @param {String} [notes] Заметки + * + * @example + * Event("Лекция JavaScript", + * "УРГУ", + * new Date('2011-10-10T14:48:00'), + * new Date('2011-10-10T15:48:00'), + * REPEAT.WEEK, + * ALERT.B30MIN, + * "Вспомнить, что проходили на прошлом занятии") + * + * @return {Object} + */ +function Event(title, location, starts, ends, repeat, alert, notes) { + 'use strict'; + var startDate, endDate; + try { + startDate = checkStartDate(starts); + endDate = checkEndDate(ends, starts); + repeat = checkRepeat(repeat); + alert = checkAlert(alert); + } catch (e) { + console.log(e.message); + return; + } + return { + "title": title || "New Event", + "location": location, + "startDate": startDate, + "endDate": endDate, + "repeat": repeat, + "alert": alert, + "notes": notes + }; +} \ No newline at end of file From 006e59cbcb6343f171238bd1847aaa9ee0c36f48 Mon Sep 17 00:00:00 2001 From: Dmitry Borisov Date: Sat, 3 Nov 2012 11:57:42 +0600 Subject: [PATCH 2/4] got rid of the "try catch" --- event.js | 39 ++++++++++++++++++++++++++------------- 1 file changed, 26 insertions(+), 13 deletions(-) diff --git a/event.js b/event.js index 597109c..4508281 100644 --- a/event.js +++ b/event.js @@ -4,7 +4,8 @@ function checkStartDate(date) { if (date === null) { date = new Date(); } else if (!(date instanceof Date && isFinite(date))) { - throw new Error("Start date is invalid, check syntax"); + console.log("Start date is invalid, check syntax"); + date = null; } return date; } @@ -18,7 +19,8 @@ function checkEndDate(endDate, startDate) { } else if (endDate instanceof Date && isFinite(endDate)) { date = endDate; } else { - throw new Error("End date is invalid, check syntax"); + console.log("End date is invalid, check syntax"); + date = null; } return date; } @@ -54,9 +56,11 @@ function checkRepeat(repeat) { if (repeat === null) { repeat = REPEAT.NEVER; } else if (!(repeat.title && repeat.value)) { - throw new Error("Unknown type of 'repeat' variable"); + console.log("Unknown type of 'repeat' variable"); + repeat = null; } else if (!checkAddTime(repeat.value)) { - throw new Error("Add time in 'repeat' variable must have format '+ dd.MM.YY hh:mm'"); + console.log("Add time in 'repeat' variable must have format '+ dd.MM.YY hh:mm'"); + repeat = null; } return repeat; } @@ -66,9 +70,11 @@ function checkAlert(alert) { if (alert === null) { alert = ALERT.NONE; } else if (!(alert.title && alert.value)) { - throw new Error("Unknown type of 'alert' variable"); + console.log("Unknown type of 'alert' variable"); + alert = null; } else if (!checkAddTime(alert.value)) { - throw new Error("Add time in 'alert' variable must have format '+ dd.MM.YY hh:mm'"); + console.log("Add time in 'alert' variable must have format '+ dd.MM.YY hh:mm'"); + alert = null; } return alert; } @@ -98,13 +104,20 @@ function checkAlert(alert) { function Event(title, location, starts, ends, repeat, alert, notes) { 'use strict'; var startDate, endDate; - try { - startDate = checkStartDate(starts); - endDate = checkEndDate(ends, starts); - repeat = checkRepeat(repeat); - alert = checkAlert(alert); - } catch (e) { - console.log(e.message); + startDate = checkStartDate(starts); + if (startDate === null) { + return; + } + endDate = checkEndDate(ends, starts); + if (endDate === null) { + return; + } + repeat = checkRepeat(repeat); + if (repeat === null) { + return; + } + alert = checkAlert(alert); + if (alert === null) { return; } return { From 01689d67e46ec29a4928cf4b6ad579942a8e162a Mon Sep 17 00:00:00 2001 From: Borisov Dmitry Date: Sun, 4 Nov 2012 19:56:41 +0600 Subject: [PATCH 3/4] Small checkAddTime function fix For homework #3 --- event.js | 5 ++++- 1 file changed, 4 insertions(+), 1 deletion(-) diff --git a/event.js b/event.js index 4508281..71fbfcd 100644 --- a/event.js +++ b/event.js @@ -48,7 +48,10 @@ function checkAddTime(addTime) { var re, splitted; re = "([+-]) (\\d?\\d.\\d?\\d.\\d?\\d) (\\d?\\d:\\d?\\d)"; splitted = addTime.match(re); - return splitted.length === 4; + if (splitted !== null || splitted.length !== 4) { + splitted = null; + } + return splitted; } function checkRepeat(repeat) { From 178377c62bd267c824c2cac260ab0041134b67b0 Mon Sep 17 00:00:00 2001 From: Borisov Dmitry Date: Sun, 4 Nov 2012 20:07:36 +0600 Subject: [PATCH 4/4] fix of fix --- event.js | 2 +- 1 file changed, 1 insertion(+), 1 deletion(-) diff --git a/event.js b/event.js index 71fbfcd..c66f7f4 100644 --- a/event.js +++ b/event.js @@ -48,7 +48,7 @@ function checkAddTime(addTime) { var re, splitted; re = "([+-]) (\\d?\\d.\\d?\\d.\\d?\\d) (\\d?\\d:\\d?\\d)"; splitted = addTime.match(re); - if (splitted !== null || splitted.length !== 4) { + if (splitted === null || splitted.length !== 4) { splitted = null; } return splitted;