Skip to content
Open
Show file tree
Hide file tree
Changes from all commits
Commits
File filter

Filter by extension

Filter by extension

Conversations
Failed to load comments.
Loading
Jump to
Jump to file
Failed to load files.
Loading
Diff view
Diff view
138 changes: 138 additions & 0 deletions calendar.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,138 @@
/*global alert: true*/

function isDate(date) {
"use strict";

if (typeof date === 'undefined') {
return false;
}
if (typeof date.getMonth !== 'function') {
return false;
}
return true;
}

/**
* Возвращает объект event, либо undefined, если в объекте отсутвуют обязательные поля
* eventObject{
* name - название события
* start - начало
* end - окончание
* location - место
* remindTime - за сколько минут до события напомнить
* description - описание
* }

* @param {object} obj Объект
* @example
* Event({
* name: "Пара по веб-технологиям",
* start: new Date("2012-10-20 10:00:00"),
* end: new Date("2012-10-20 12:50:00"),
* location: "5 этаж",
* remindTime: 10,
* description: "Взять бумагу и ручку, не брать бук!"
* })
*
* @return {Object}
*/
function event(obj) {
"use strict";


var remindTime = obj.remindTime || 0;
obj.raiting = obj.raiting || 0;

if (!isDate(obj.start)) {
alert("Error! Not event object!");
return;
}

if (!isDate(obj.end)) {
obj.end = obj.start;
}

if (obj.end < obj.start) {
obj.end = obj.start;
}

return {
"name": obj.name || "(Нет темы)",
"start": obj.start,
"end": obj.end,
"location": obj.location || "",
"remindTime": remindTime,
"description": obj.description || "(отсутствует)",
"raiting": obj.raiting
};
}

/**
* Возвращает строковое представление объекта типа event
* @param {events} - объект типа event
* @return строковое представление event
*/
event.show = function (events) {
"use strict";

if (typeof events === "undefined") return;

return events.name + "\n" +" начало: " + events.start + "\n"
+ " конец: " + events.end + "\n"
+ " место события: " + events.location + " напомнить за " + events.remindTime + " минут" + "\n"
+ " описание: " + events.description + "\n";
}

function sortFactory(selector) {

return function (array) {
return array.sort(selector);
}
};

event.sortByStartTime = sortFactory(function (a, b) {
return a.start - b.start;
});

event.sortByEndTime = sortFactory(function (item) {
return a.end - b.end;
});

event.sortByRaiting = sortFactory(function (item) {
return a.raiting - b.raiting;
});

function test(obj) {
"use strict";

var result = event(obj);
if (typeof result !== 'undefined') {
alert(event.show(result));
}
}

function runTestsCalendar() {
"use strict";

test({});

test({
name: "hello",
start: new Date("2012-10-20 10:00:00")
});

test({
name: "hello",
start: new Date("2012-10-20 10:00:00"),
end: new Date("2012-10-20 12:50:00")
});

test({
name: "Пара по веб-технологиям",
start: new Date("2012-10-20 10:00:00"),
end: new Date("2012-10-20 12:50:00"),
location: "5 этаж",
remindTime: 10,
description: "Взять бумагу и ручку, не брать бук!"
});
}
23 changes: 23 additions & 0 deletions examples.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,23 @@
var collection = [
{ name: "Пара по веб-технологиям", start: new Date("2012-10-20 10:00:00"), end: new Date("2012-10-20 12:50:00"), location: "5 этаж", remindTime: 10, description: "Взять бумагу и ручку, не брать бук!" },
{ name: "День зимы", start: new Date("2012-10-27 06:00:00"), end: new Date("2012-10-27 12:00:00"), location: "Скандинавия", description: "Кататься ^_^" },
{ name: "День инженера механика", start: new Date("2012-10-29 10:00:00"), end: new Date("2012-10-29 15:00:00"), location: "9 этаж", remindTime: 10 },
{ name: "День вегана", start: new Date("2012-11-1 10:00:00"), end: new Date("2012-10-1 23:00"), location: "Дома", description: "Be vegan =)" },
{ name: "День журналисты", start: new Date("2012-11-8 10:00:00"), location: "Китай", remindTime: 10, description: "Поздравить Олежу" },
{ name: "Всемирный день борьбы с диабетом", start: new Date("2012-11-14 12:00") },
{ name: "Международный день отказа от курения", start: new Date("2012-11-15 12:00"), description: "Поздравить Сашку)" },
{ name: "День защиты черных котов", start: new Date("2012-11-17 14:00:00"), location: "Италия", remindTime: 50, description: "Котэ" },
{ name: "Всемирный день туалетов", start: new Date("2012-11-19 15:00:00"), location: "МИр", description: "о_О" },
{ name: "День революции", start: new Date("2012-11-20 12:00:00"), location: "Мексика"},
{ name: "День сладостей", start: new Date("2012-10-20 15:00:00"), location: "США", remindTime: 10, description: "Приготовить вкусняшки" },
{ name: "Ерофеев день", start: new Date("2012-10-17 16:00:00"), location: "Россия", description: "Лисики" },
{ name: "Утиный фестиваль", start: new Date("2012-10-13 12:00:00"), location: "Италия", description: "Все в Италию!" },
{ name: "Дент ребенка", start: new Date("2012-10-12 14:00:00"), location: "Бразилия" },
{ name: "День физкультуры", start: new Date("2012-10-8 12:00:00"), location: "Япония"},
{ name: "Всемирный день животных", start: new Date("2012-10-4 12:00:00 ")},
{ name: "День сакэ в Японии", start: new Date("2012-10-1 14:00:00") },
{ name: "День моря", start: new Date("2012-09-27 15:00:00") },
{ name: "День комиксов", start: new Date("2012-09-25 15:00:00"), location: "США"},
{ name: "День почитания пожилых людей", start: new Date("2012-09-17 16:00:00")},
{ name: "Международный жень демократии", start: new Date("2012-09-15 17:00:00")}
];
84 changes: 84 additions & 0 deletions funcs.js
Original file line number Diff line number Diff line change
@@ -0,0 +1,84 @@
/**
* Возвращает прошедшие события, отсортированные по дате начала
* @param {events} - коллекция объектов типа event
* @return коллекция объектов типа event
*/
function Past(events) {
"use strict";

return events
.filter(function (events) {
return events.start < new Date();
});
}

/**
* Возвращает предстоящие события, отсортированные по дате начала
* @param {events} - коллекция объектов типа event
* @return коллекция объектов типа event
*/
function Coming(events) {
"use strict";

return events.filter(function (events) {
return events.start > new Date();
});
}

/**
* Возвращает события, которые произойдут через опр переиод времени,отсортированные по дате начала
* @param {events} - коллекция объектов типа event
* @param {days} - период (в днях) времени
* @return коллекция объектов типа event
*/
function ComeThrough(events, days) {
"use strict";

var now = new Date();
now.setDate(now.getDate() + days);

return new Coming(events)
.filter(function (events) {
return events.start < now;
});
}

/**
* Возвращает события, отсортированные по дате начала по возр/убыв
* от старых к новым / наоборот. По умолчанию сортирует в порядке возрастания
* @param {events} - коллекция объектов типа event
* @param {isAscending} - необязательный параметр - указывает порядок сортировки.
* при отсутсвии сортируется по возрастанию.
* @return коллекция объектов типа event
*/
function SortByTime(events, isAscending) {
"use strict";

if (isAscending || typeof isAscending === "undefined") {
return event
.sortByStartTime(events)
}
return events
.sortByStartTime(events)
.reverse();
}

/**
* Возвращает события, отсортированные по рейтингу по убыв/возрастанию
* от с более высоким рейтингом к самому низко приоритетному / наоборот. По умолчанию сортирует в порядке убывания
* @param {events} - коллекция объектов типа event
* @param {isAscending} - необязательный параметр - указывает порядок сортировки.
* при отсутсвии сортируется по убыванию.
* @return коллекция объектов типа event
*/
function SortByRaiting(events, isAscending) {
"use strict";

if (isAscending || typeof isAscending === "undefined") {
return event
.sortByRaiting(events);
}
return events
.sortByRaiting(events)
.reverse();
}
16 changes: 16 additions & 0 deletions mainpage.html
Original file line number Diff line number Diff line change
@@ -0,0 +1,16 @@
<!DOCTYPE html>
<html>
<head>
<meta charset="utf-8">
<title>QUnit Example</title>
<link rel="stylesheet" href="qunit.css">
<script type="text/javascript" src="calendar.js"></script>
<script type="text/javascript" src="examples.js"></script>
<script type="text/javascript" src="funcs.js"></script>
<script type="text/javascript" src="qunit.js"></script>
<script type="text/javascript" src="tests.js"></script>
</head>
<body >
<div id="qunit"></div>
</body>
</html>
Loading