From 5011784f6c59fb325174a914e2a79a5f6d1768f2 Mon Sep 17 00:00:00 2001 From: Natalya Bronina Date: Thu, 22 Nov 2012 18:30:00 +0600 Subject: [PATCH 1/2] =?UTF-8?q?=D0=9E=D0=9E=D0=9F?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit сделана основа --- collection_and_events.js | 96 ++++++++++++++++++++++++++++++++++++++++ model_and_event.js | 65 +++++++++++++++++++++++++++ test.html | 31 +++++++++++++ test.js | 50 +++++++++++++++++++++ 4 files changed, 242 insertions(+) create mode 100644 collection_and_events.js create mode 100644 model_and_event.js create mode 100644 test.html create mode 100644 test.js diff --git a/collection_and_events.js b/collection_and_events.js new file mode 100644 index 0000000..954413f --- /dev/null +++ b/collection_and_events.js @@ -0,0 +1,96 @@ +//Cоздать абстрактную коллекцию Collection представляющую из себя набор объектов Model каждый вызов метода +//Collection должен создавать новую коллекцию, а не изменять текущую +var Collection = function (elem) { + 'use strict'; + this.elem = []; + var key; + for (key in elem) { + this.elem.push(elem[key]); + } + }; + +Collection.prototype.add = function (model) { + 'use strict'; + var key; + if (model.length > 0) { + for (key in model) { + if (model[key].validate() === true) { + this.elem.push(model[key]); + } + } + } else { + if (model.validate() === true) { + this.elem.push(model); + } + } +}; + +var Events = function (items) { + "use strict"; + Collection.apply(this, arguments); +}; +inherits(Events, Collection); + +Events.prototype.constructor = Events; + +var allEvents = new Events(); +var testEvent = new Event({"name": "Pewpe", "start": "11.12.2012", "end": "13.12.2012"}); +allEvents.add(testEvent); +allEvents.add([new Event({"start": "11.12.2012"}), new Event({"start": "11.12.2012"}), new Event({"start": "11.12.2012"})]); +allEvents.add(new Event({"name": "Two", "start": "11.12.2012"})); +console.log(allEvents.add(testEvent)); + +function str2date(s) { + "use strict"; + var dateParts = s.split('.'); + if (typeof dateParts[2] === 'string') { + return new Date(dateParts[2], dateParts[1], dateParts[0]); + } + if (typeof dateParts[2] === 'undefined') { + dateParts = s.split('-'); + return new Date(dateParts[0], dateParts[1], dateParts[2]); + } +} + +Events.prototype.filterToDate = function (flag) { + "use strict"; + var result, collection; + collection = this.elem; + if (flag === -1) { + result = collection.filter(function (collection) { + var s = str2date(collection.start); + return s < new Date(); + }); + } else { + result = collection.filter(function (collection) { + var s = str2date(collection.start); + return s >= new Date(); + }); + } + return result; +}; + +Events.prototype.FilterToParty = function (flag) { + "use strict"; + var result, collection; + collection = this.elem; + if (flag === -1) { + result = collection.filter(function (collection) { + return collection.party === "не участвую"; + }); + } else { + result = collection.filter(function (collection) { + return collection.party === "участвую"; + }); + } + return result; +}; + +Events.prototype.sortToDate = function () { + "use strict"; + var collection = this.elem; + collection.sort(function (a, b) { + return str2date(a.start) > str2date(b.start) ? 1 : -1; + }); + return collection; +}; \ No newline at end of file diff --git a/model_and_event.js b/model_and_event.js new file mode 100644 index 0000000..87efbb8 --- /dev/null +++ b/model_and_event.js @@ -0,0 +1,65 @@ +var Model = function (attributes) { + "use strict"; + var key; + for (key in attributes) { + if (attributes.hasOwnProperty(key)) { + this[key] = attributes[key]; + } + } + }; +//Сеттер - устанавливает аттрибуты и значения атрибутов, в соответсвии с принятым в качестве параметра объектом +Model.prototype.set = function (attributes) { + "use strict"; + var key; + for (key in attributes) { + if (attributes.hasOwnProperty(key)) { + this[key] = attributes[key]; + } + } +}; +//Геттер - возвращает запрашиваемое свойство у объекта +Model.prototype.get = function (attribute) { + "use strict"; + if (this.hasOwnProperty(attribute)) { + return this[attribute]; + } + return undefined; +}; + +Model.prototype.validate = function (attributes) { + "use strict"; + throw new Error('this is Abstract method'); +}; + +var Event = function (data) { + "use strict"; + Model.apply(this, arguments); + this.name = this.name || "Встреча"; + this.place = this.place || {}; + this.info = this.info || {}; + this.reminder = this.reminder || "За день до встречи"; + this.type = this.type || "Работа"; + this.party = this.party || "участвую"; + }; + +function inherits(Constructor, SuperConstructor) { + "use strict"; + var F = function () {}; + F.prototype = SuperConstructor.prototype; + Constructor.prototype = new F(); +} + +inherits(Event, Model); + +Event.prototype.validate = function () { + "use strict"; + if (this.start === "undefined") { + console.log("starts is can not be null"); + return "starts is can not be null"; + } + if (this.end !== "undefined" && this.end < this.start) { + console.log("can't end before it starts"); + return "can't end before it starts"; + } + return true; +}; diff --git a/test.html b/test.html new file mode 100644 index 0000000..6b2ee4e --- /dev/null +++ b/test.html @@ -0,0 +1,31 @@ + + + + Вывод информации о событиях + + + + + + + +
+ Тестирование вывода информации в консоль +
+ + + + \ No newline at end of file diff --git a/test.js b/test.js new file mode 100644 index 0000000..6864312 --- /dev/null +++ b/test.js @@ -0,0 +1,50 @@ +var allEvents = new Events(); +var testEvent= new Event({"name": "Pewpe", "start": "11.12.2012", "end": "13.12.2012"}); +var Work = new Event({ + "name": "Совещание", + "start": "2012-10-10", + "end": "2012-10-10", + "place": "Луначарского 92, кб.31", + "info": "Будут обсуждаться вопросы...", + "reminder": "За день до встречи", + "party": "участвую"}); +var NewYear = new Event({ + "name": "Праздник", + "start": "2012-12-10", + "end": "2012-12-10", + "place": "Луначарского 92, кб.31", + "info": "Всем быть в костюмах...", + "reminder": "За неделю", + "type": "Отдых", + "party": "участвую"}); +var study = new Event({ + "name": "Конференция", + "start": "2012-11-24", + "end": "2012-11-24", + "place": "Луначарского 92, кб.31", + "info": "Анализ биологических последовательностей", + "type": "Дела", + "party": "участвую"}); +var conf = new Event({ + "name": "Конференция", + "start": "2012-12-08", + "end": "2012-12-08", + "place": "Луначарского 92, кб.31", + "info": "Матроиды и графы", + "reminder": "За день", + "type": "Дела", + "party": "не участвую"}); +var Sport = new Event({ + "name": "Дополнительные тренировки", + "start": "2012-12-10", + "end": "2012-12-12", + "place": "Луначарского 92, кб.31", + "info": "Ура! У вас есть возможность посетить дополнительные тренировки", + "reminder": "За час", + "type": "Отдых", + "party": "участвую"}); + +allEvents.add([Sport, conf, study, NewYear, Work]); +console.log('Встречи, отсортированные по дате:', allEvents.sortToDate()); +console.log('Предстоящие события:', allEvents.filterToDate(1)); +console.log('События в которых я участвую:', allEvents.FilterToParty(1)); From e6167395785fe4651e26ac36e6e4765ce48c1ab3 Mon Sep 17 00:00:00 2001 From: Natalya Bronina Date: Thu, 22 Nov 2012 20:01:28 +0600 Subject: [PATCH 2/2] =?UTF-8?q?=D0=B4=D0=BE=D0=B1=D0=B0=D0=B2=D0=B8=D0=BB?= =?UTF-8?q?=D0=B0=20=D0=BA=D0=BE=D0=BC=D0=BC=D0=B5=D0=BD=D1=82=D0=B0=D1=80?= =?UTF-8?q?=D0=B8=D0=B8=20=D0=BA=D0=BE=20=D0=B2=D1=81=D0=B5=D0=BC=20=D1=84?= =?UTF-8?q?=D1=83=D0=BD=D0=BA=D1=86=D0=B8=D1=8F=D0=BC?= MIME-Version: 1.0 Content-Type: text/plain; charset=UTF-8 Content-Transfer-Encoding: 8bit --- collection_and_events.js | 22 +++++++++++++--------- model_and_event.js | 17 ++++++++++++++--- test.js | 7 ++++++- 3 files changed, 33 insertions(+), 13 deletions(-) diff --git a/collection_and_events.js b/collection_and_events.js index 954413f..4ac0b21 100644 --- a/collection_and_events.js +++ b/collection_and_events.js @@ -1,5 +1,16 @@ -//Cоздать абстрактную коллекцию Collection представляющую из себя набор объектов Model каждый вызов метода -//Collection должен создавать новую коллекцию, а не изменять текущую +/* +* Collection - абстрактная коллекция объектов +* Collection.prototype.add - добавление объекта в коллекцию +* +* Events - коллекция событий в календаре. Объект наследуется от Collection +* +* Event - объект события в календаре +* Event.prototype.validate - проверяет корректность полей объекта +* Events.prototype.filterToDate - возвращает предстоящие или прощедшие события в зависимости от входящего параметра flag +* Events.prototype.FilterToParty - возвращает события, в которых я принимаю/ не принимаю участие в зависимости от входящего параметра flag +* Events.prototype.sortToDate - сортирует события по дате +* function str2date(s) - преобразует строку в дату +*/ var Collection = function (elem) { 'use strict'; this.elem = []; @@ -33,13 +44,6 @@ inherits(Events, Collection); Events.prototype.constructor = Events; -var allEvents = new Events(); -var testEvent = new Event({"name": "Pewpe", "start": "11.12.2012", "end": "13.12.2012"}); -allEvents.add(testEvent); -allEvents.add([new Event({"start": "11.12.2012"}), new Event({"start": "11.12.2012"}), new Event({"start": "11.12.2012"})]); -allEvents.add(new Event({"name": "Two", "start": "11.12.2012"})); -console.log(allEvents.add(testEvent)); - function str2date(s) { "use strict"; var dateParts = s.split('.'); diff --git a/model_and_event.js b/model_and_event.js index 87efbb8..e9464df 100644 --- a/model_and_event.js +++ b/model_and_event.js @@ -1,4 +1,15 @@ -var Model = function (attributes) { +/* +* Model - абстрактный объект +* Model.prototype.set - устанавливает аттрибуты и значения атрибутов, в соответсвии с принятым в качестве параметра объектом +* Model.prototype.get - возвращает запрашиваемое свойство у объекта +* Model.prototype.validate - проверяет корректность полей объекта +* +* Event - объект события в календаре. Объект наследуется от Model +* Event.prototype.validate - проверяет корректность полей объекта +* +* function inherits(Constructor, SuperConstructor) - функция для чистого наследования +*/ +var Model = function (attributes) { "use strict"; var key; for (key in attributes) { @@ -7,7 +18,7 @@ } } }; -//Сеттер - устанавливает аттрибуты и значения атрибутов, в соответсвии с принятым в качестве параметра объектом + Model.prototype.set = function (attributes) { "use strict"; var key; @@ -17,7 +28,7 @@ Model.prototype.set = function (attributes) { } } }; -//Геттер - возвращает запрашиваемое свойство у объекта + Model.prototype.get = function (attribute) { "use strict"; if (this.hasOwnProperty(attribute)) { diff --git a/test.js b/test.js index 6864312..8c6cd75 100644 --- a/test.js +++ b/test.js @@ -1,4 +1,9 @@ -var allEvents = new Events(); +/* +* Создается коллекция типа Events из объектов типа Event. +* +* В консоль выводится всевозможная информация об объектах в коллекции +*/ +var allEvents = new Events(); var testEvent= new Event({"name": "Pewpe", "start": "11.12.2012", "end": "13.12.2012"}); var Work = new Event({ "name": "Совещание",