-
Notifications
You must be signed in to change notification settings - Fork 3
Последняя =) дз-8 #2
New issue
Have a question about this project? Sign up for a free GitHub account to open an issue and contact its maintainers and the community.
By clicking “Sign up for GitHub”, you agree to our terms of service and privacy statement. We’ll occasionally send you account related emails.
Already on GitHub? Sign in to your account
base: master
Are you sure you want to change the base?
Changes from 5 commits
3b0f2ca
a16c3b7
7547b88
5cef675
6f60e32
815d32e
81dd5ce
File filter
Filter by extension
Conversations
Jump to
Diff view
Diff view
There are no files selected for viewing
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
Some generated files are not rendered by default. Learn more about how customized files appear on GitHub.
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,91 @@ | ||
| (function (exports) { | ||
| "use strict"; | ||
|
|
||
| var Collection = function (items) { | ||
|
|
||
| this.items = []; | ||
| var key; | ||
|
|
||
| for (key in items) { | ||
| if (items.hasOwnProperty(key)) { | ||
| this.items.push(items[key]); | ||
| } | ||
| } | ||
| }; | ||
|
|
||
| exports.Collection = Collection; | ||
|
|
||
| Collection.prototype.constructor = Collection; | ||
|
|
||
| /** | ||
| * Сериализует коллекцию | ||
| * | ||
| * @return {JSON object} | ||
| * | ||
| */ | ||
| Collection.prototype.serialise = function () { | ||
| return JSON.stringify(this.items, null, ' '); | ||
| } | ||
|
|
||
| /** | ||
| * Добавляет в коллекцию объект | ||
| * | ||
| * @param {object} model | ||
| * | ||
| * @return {Collection} * @example | ||
| * | ||
| */ | ||
| Collection.prototype.add = function (model) { | ||
|
|
||
| var temp = new this.constructor(this.items); | ||
| temp.items.push(model); | ||
| return temp; | ||
| }; | ||
|
|
||
| /** | ||
| * @param {Function} selector | ||
| * | ||
| * @see https://developer.mozilla.org/en-US/docs/JavaScript/Reference/Global_Objects/Array/filter | ||
| * | ||
| * @example | ||
| * new Collection().filter(function (item) { | ||
| * return item.get('attendee').indexOf("me") !== -1; | ||
| * }); | ||
| * @return {Collection} | ||
| */ | ||
| Collection.prototype.filter = function (selector) { | ||
|
|
||
| if (typeof selector !== "function") { | ||
| throw new Error('Argument must be function'); | ||
| } | ||
|
|
||
| return new this.constructor(this.items.filter(selector)); | ||
| }; | ||
|
|
||
| /** | ||
| * Принимает функцию сортировки и сортирует на основе ее | ||
| * | ||
| * @param {function} selector | ||
| * | ||
| * @return {Collection} * @example | ||
| * | ||
| */ | ||
| Collection.prototype.sort = function (selector) { | ||
|
|
||
| if (typeof selector !== "function") { | ||
| throw new Error('Argument must be function'); | ||
| } | ||
|
|
||
| return new this.constructor(this.items.sort(selector)); | ||
| }; | ||
|
|
||
| Collection.prototype.reverse = function () { | ||
|
|
||
| return new this.constructor(this.items.reverse()); | ||
| }; | ||
|
|
||
| Collection.prototype.length = function (selector) { | ||
|
|
||
| return this.items.length; | ||
| }; | ||
| }(window)); |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,46 @@ | ||
| { | ||
| "name": "pewpew", | ||
| "start": "2012-11-07T04:18:00.000Z", | ||
| "end": "2012-11-07T04:18:00.000Z", | ||
| "location": "", | ||
| "remindTime": 0, | ||
| "description": "(отсутствует)", | ||
| "raiting": 0 | ||
| }, | ||
| { | ||
| "name": "Пара по веб-технологиям", | ||
| "start": "2012-11-20T06:50:00.000Z", | ||
| "end": "2012-11-20T06:50:00.000Z", | ||
| "location": "5 этаж", | ||
| "remindTime": 10, | ||
| "description": "Взять бумагу и ручку, не брать бук!", | ||
| "raiting": 0 | ||
| }, | ||
| { | ||
| "name": "Событие", | ||
| "start": "2012-11-28T18:00:00.000Z", | ||
| "end": "2012-11-28T18:00:00.000Z", | ||
| "location": "", | ||
| "remindTime": 0, | ||
| "description": "(отсутствует)", | ||
| "raiting": "0" | ||
| }, | ||
| { | ||
| "name": "Событие5", | ||
| "start": "2012-11-29T18:00:00.000Z", | ||
| "end": "2012-11-29T18:00:00.000Z", | ||
| "location": "", | ||
| "remindTime": 0, | ||
| "description": "(отсутствует)", | ||
| "raiting": "0" | ||
| } | ||
| , | ||
| { | ||
| "name": "tretr", | ||
| "start": "2012-11-28T18:00:00.000Z", | ||
| "end": "2012-11-28T18:00:00.000Z", | ||
| "location": "", | ||
| "remindTime": 0, | ||
| "description": "(отсутствует)", | ||
| "raiting": "0" | ||
| } |
| Original file line number | Diff line number | Diff line change |
|---|---|---|
| @@ -0,0 +1,177 @@ | ||
| $(function (exports) { | ||
| "use strict"; | ||
|
|
||
| var ListOfEvents = new Events(), | ||
| sortedList = new Events(), | ||
| queue = new Events, | ||
| filterOption = "all", | ||
| sortOption = "without"; | ||
|
|
||
| var template = "<div>Название: <%= name %></div>" + | ||
| "<div>Начало: <%= start %></div>" + | ||
| "<div>Окончание: <%= end %></div>" + | ||
| "<div>Местоположение: <%= location %></div>" + | ||
| "<div>Напомнить за: <%= remindTime %></div>" + | ||
| "<div>Описание: <%= description %></div>" + | ||
| "<div>Рейтинг: <%= raiting %></div>"; | ||
| $(document).ready(initialise); | ||
|
|
||
| /** | ||
| * Загружает свое состояние с сервера | ||
| * при отсутствии соединения/страницы на сервере пытается подключиться через 5 минут снова | ||
| * | ||
| */ | ||
| function initialise() { | ||
|
|
||
| $('.date').datepicker(); | ||
|
|
||
| $.getJSON('current-event.json') | ||
| .complete(function () { $("#notify").hide(); }) | ||
| .error(function () { $('#notifyError').show(); }) | ||
| .success(function (result) { | ||
| var i, newEvent; | ||
|
|
||
| for (i = 0; i < result.length; i++) { | ||
| newEvent = new Event(result[i]).validate(); | ||
| ListOfEvents = ListOfEvents.add(newEvent); | ||
| } | ||
| changeDocument("sort"); | ||
| addListener(); | ||
| }); | ||
| } | ||
| /** | ||
| * Добавляет новое событие в список. Если установлены опции фильтрации и сортировки | ||
| * - то располагает элементы на странице, в с-ии с ними | ||
| * | ||
| */ | ||
| function preventDefault() { | ||
|
|
||
| var name = $("#title").val().trim(), | ||
| start = $("#from").val(), | ||
| end = $("#to").val(), | ||
| location = $("#location").val().trim(), | ||
| raiting = $("#raiting").val(), | ||
| description = $("#description").val().trim(), | ||
| remindTime = $("#remindTime").val(); | ||
|
|
||
| if (!validateTitle(name, $('#title_help'))) { alert("Событие не было добавлено. Ошибка"); return; } | ||
| if (!validateDate(start, $('#from_help'))) { alert("Событие не было добавлено. Ошибка"); return; } | ||
| if (!validateNumber(remindTime, $('#remindTime_help'))) { alert("Событие не было добавлено. Ошибка"); return; } | ||
|
|
||
| var element = new Event({ | ||
| name: name, | ||
| start: start, | ||
| end: end, | ||
| location: location, | ||
| raiting: raiting, | ||
| description: description, | ||
| remindTime: remindTime | ||
| }).validate(); | ||
|
|
||
| ListOfEvents = ListOfEvents.add(element); | ||
| queue = queue.add(element); | ||
|
|
||
| $.post('current-event.json', queue.serialise()) | ||
| .success(function () { | ||
| queue = new Events(); | ||
| changeDocument("sort"); | ||
| document.forms["form"].reset(); | ||
| //alert("Все события были успешно отправлены."); | ||
| }) | ||
| .error( function () { | ||
| alert("Отсутсвует подключение к серверу."); | ||
| }); | ||
| } | ||
|
|
||
| function filterEvents(listEvents) { | ||
| switch (filterOption) { | ||
| case "future": | ||
| return listEvents.coming(); | ||
| case "past": | ||
| return listEvents.past(); | ||
| default: | ||
| return listEvents; | ||
| } | ||
| } | ||
|
|
||
| function sortEvents() { | ||
| switch (sortOption) { | ||
| case "byName": | ||
| return ListOfEvents.sortByName(); | ||
| case "byStart": | ||
| return ListOfEvents.sortByTime(); | ||
| case "byRaiting": | ||
| return ListOfEvents.sortByRaiting(); | ||
| default: | ||
| return ListOfEvents; | ||
| } | ||
| } | ||
|
|
||
| /** | ||
| * Сортирует и фильтрует события в соответствии с указанными опциями. | ||
| * | ||
| * @param {string} changeType - если указана строка "sort", то события также будут отсортированы, | ||
| * инчае - только отфильтрованы | ||
| * @return коллекция объектов типа event | ||
| */ | ||
|
|
||
| function changeDocument(changeType) { | ||
| var $removeList = $(".events"); | ||
| $removeList.remove(); | ||
|
|
||
| if (changeType === "sort") { | ||
| sortedList = sortEvents(); | ||
| } | ||
| var filterList = filterEvents(sortedList), | ||
| length = filterList.length(), | ||
| i; | ||
|
|
||
| var html = "<ul class='events'>"; | ||
| for (i = 0; i < length; i++) | ||
| { | ||
| html += "<li class='event_item'>" + | ||
| tmpl(template, filterList.items[i]) + | ||
| "</li>"; | ||
| } | ||
|
|
||
| html += "</ul>"; | ||
| document.getElementById("collection").innerHTML = html; | ||
| } | ||
|
|
||
| /** | ||
| * Навешивает обработчики событий на страницу | ||
| */ | ||
| function addListener() { | ||
|
|
||
| $("#title").on('blur', function($event) { | ||
| var cur = $event.currentTarget; | ||
| validateTitle(cur.value, $('#title_help')); | ||
| }); | ||
|
|
||
| $("#from").on('blur', function ($event) { | ||
| var cur = $event.currentTarget; | ||
| validateDate(cur.value, $('#from_help')); | ||
| }); | ||
|
|
||
| $("#remindTime").on('blur', function ($event) { | ||
| var cur = $event.currentTarget; | ||
| validateNumber(cur.value, $('#remindTime_help')); | ||
| }); | ||
|
|
||
| $('.filter').each(function() { | ||
| $(this).on('change', function () { | ||
| filterOption = $('input[name="filter"]:checked').val(); | ||
| changeDocument("filter"); | ||
| })}); | ||
|
|
||
| $('.sort').each(function() { | ||
| $(this).on('change', function () { | ||
| sortOption = $('input[name="sort"]:checked').val(); | ||
| changeDocument("sort"); | ||
| })}); | ||
|
|
||
|
|
||
| $("#addButton").on('click', preventDefault); | ||
| } | ||
|
|
||
| }(window)); | ||
There was a problem hiding this comment.
Choose a reason for hiding this comment
The reason will be displayed to describe this comment to others. Learn more.
Смотри, у тебя и кодогенерация и шаблоны - используй что-нибудь одно ;-)