- https://max-starling.github.io/EducationalPractice/public
- https://www.npmjs.com/package/myeducationalpractice
- localhost:7777
- mongodb://localhost/StarlingNews
- В папке private лежит ещё две папки.
- В одной из них 3 файла для mongoshell, в другой - 3 для mongoexport.
- Что Яне и Владу (а, возможно, и кому-то ещё) удобнее, то пусть и используют.
- mentions.json можно не загружать. т.к. на работоспособность сайта он никак не влияет: лишь получает мнения пользователей с сайта и заносит их в бд.
- Хочу сказать спасибо за этот курс. Я нашёл его весьма увлекательным и, возможно, даже определился, чем я хотел бы заниматься в будущем. В своём проекте я реализовал многие свои идеи, но не все. Многое ещё хотелось бы оптимизировать, дополнить. И всё же за эти многие часы, работая в своё удовольствие, я получил огромный опыт и не собираюсь на этом останавливаться. Спасибо за этот курс. И отдельное спасибо нашим куратором, которые всячески поддерживали нас в течение этого семестра.
- Учтён совет с событиями, но конфликт по-прежнему не исчерпан.
- Обновлены данные базы данных.
- Исправлены ошибки, возникающие при детальном просмотре новости незарегестрированным пользователем.
- Улучшена система прав пользователей.
- Найдена существенная проблема с отображением этой системы, связанная с event-ами.
- Добавлены права пользователей. В зависимости от них они могут удалять, редактировать новости или не могут. Guest < User < Moderator < Administrator < Сreator(такого ранга пока нет, но он может появиться).
- Валидация перенесена в newsModal и разделена на две части: для добавления и для редактирования новостей.
- Исправлен баг со стандартной картинкой. Вместо пути отправлялась пустая строка в базу данных, из-за чего после обновления страницы картинки не было.
- Исправлен баг со стандартной картинкой. Вместо пути отправлялась пустая строка в базу данных, из-за чего после обновления страницы картинки не было.
- Теперь поиск не зависит от регистра.
- Добавлены поиск и сортировка, которые сочетаются с пагинацией.
- Стандарный поиск в mongoDB искал полные вхождения, поэтому пришлось использовать регулярное выражение по типу : "^" + filter. Пример: Пусть есть новости: СHAPTER I, CHAPTER II, CHAPTER III. На данный момент при вводе CHAPTER выражение найдёт все новости (в то время как обычный find не нашёл бы ничего), при вводе Chapter - ни одной(впрочем, как и обычный find).
- Как и ранее, для того, чтобы искать что-то, нужно сперва выбрать критерий. Если выбрать критерий и ввести пустую строку, то отобразятся все новости.
- Сортировка по размеру текста была заменена на сортировку по дате (размеры текса каждой новости считать долго, а хранить не хочется).
- Сортировка по дате эквивалентна простому получению новостей (что вполне логично, так как новые новости добавляются в начало).
- Многие старые функции удалены. Теперь в них нет необходимости.
- Несколько небольших исправлений, касающихся внешнего вида сайта.
- Кнопка ADD NEW теперь не так бросается в глаза.
- Несколько исправлений, касающихся предзагрузки (некоторые элементы могли промелькнуть перед ней).
- Обводка полей для ввода данных в формах стала тоньше.
- Предзагрузка теперь длится произвольное время из промежутка [1,2] секунды.
- Добавлена предзагрузка страницы.
- Новый (возможно, не конечный) стиль кнопки добавления новости.
- Удалена лишняя часть функции checkUser из app.js.
- Добавлено уведомление с выбором при попытке выйти из профиля.
- Дописаны функции для изменения профиля. Теперь можно изменять имя пользователя и картинку (изменяется как в базе данных, так и в сессии).
- Одновременно изменить оба поля нельзя(пока что).
- Чуть меньше кода в usersModal.
- Написана функция noticeTrigger, упрощающая вызов окна с уведомлениев, а также убравшая дублирование кода.
- Добавлено уведомление для окна Contact Us.
- Добавлены уведомления в виде модальных окон.
- Уведомления работают пока в: авторизации, регистрации и профиле (сам профиль пока работает не очень).
- Данные MongoDB обновлены.
- Данные MongoDB записаны в две папки в двух форматах (для удобства проверяющих).
- Подсветка кнопок удаления, добавления и редактирования.
- Редактирование теперь так же работает за O(1).
- Исправлена ошибка, при которой после добавления новости не отображало картинку.
- Теперь есть стандартная, "пустая" картинка для каждой новости, которая не будет показываться в детальном просмотре.
- Переписана функция добавления новости так, чтобы можно было достать новый ID из базы данных.
- Благодаря этому теперь работает корректно как удаление, так и добавление новостей. Обе функции работают за O(1).
- Над редактированием новости ведутся работы (вскоре оно тоже будет работать за O(1)).
- Теперь функция CheckUser, которая временно не использовалась из-за своей синхронности, была переписана. Это функция может провести две проверки:
- Есть ли такой пользователь в базе данных.
- Есть ли такой пользователь с таким паролем в базе данных.
- Благодаря этой функции, теперь работает регистрация, которая основывается на внесение пользователя в базу данных, а для этого нужна предварительная проверка на существование пользователя с таким именем.
- Регистрания не работает как авторизация. После регистрации нужно авторизироваться. Ранг нового пользователя - User.
- Теперь, благодаря новой функции getCurrentUser, при обновлении страницы не нужно авторизироваться снова.
- Появилась проблема: Дело в том, что для удаления новости нужен ID, а после добавления новости он еще не появлялся. Он появлялся только перезагрузки страницы, когда новость загружалась из базы данных. Поэтому пришлось поступить следующим образом: сперва добавлять новость в базу данных, а затем сразу же доставать её оттуда и уже после этого отображать. В этом случае удаление работает корректно. ПОЭТОМУ новость можно полностью удалить только после перезагрузки страницы (пока что), когда она будет загружена из базы данных со своим ID.
- Удаление работает исправно, тоже за O(1).
- Пагинация теперь работает исправно благодаря тому, что была реализована фукция getNews(skip, limit).
- Новости погружаются по 4 штуки по мере прокрутки вниз. Изначально подгружается 8, если (ширина экрана:высота экрана) >= 4:3, иначе подружается сразу 20. Сделано это потому, что если высота экрана достаточно велика, а новостей мало, то прокрутить страницу не получится и новости подрузить, соответственно, не получится.
- После удаления новости подгружается одна новость, если она есть.
- Валидация новостей возвращала значения, противоположные действительным (вместо true - false, и наоборот). Исправлено.
- Изменены функции GetNew, GetNew. Теперь они реализованы c помощью Promises.
- Добавлена функция GetSize.
- Больше асинхронности в script.js.
- Многое сломалось из-за пункта 3. В основном потому, что нужно реализовать функцию getNews(skip, limit) через метод GET, чем я займусь в ближайшее время.
- Добавление новостей теперь не удаляет весь массив из n элементов, загружая затем массив из n+1 элементов (O(n) операций). Теперь оно происходит за константу времени = O(1).
- Добавление новостей теперь не сбивает "плавный рендеринг" новостей.
- Над удалением новостей ведутся работы, оно пока неисправно.
- Из базы данных экспортированы json файлы в папку '/private/jsonFromDB'.
- Немного подправлены отступы в детальном просмотре.
- Новый детальный просмотр! Элементы крупнее, окно больше, ну и конечно же... картинка!
- Небольшое исправление, благодаря которому в детальном просмотре новости так же выделяются(::selection) красивым цветом.
- Аналогично с полями textarea.
- Новости теперь подгружаются по мере того, как прокручивается скроллбар (теперь оптимальнее, т.к. не приходится каждый раз удалять новости из DOM и загружать их снова).
- Новости теперь подгружаются по мере того, как прокручивается скроллбар (пока не совсем оптимально, но это работает и я это пока ещё не сломал).
- Все 3 массива (users, news and mentions) перенесены на MongoDB.
- Все нужные фукнции, находившиеся в app.js, переписаны под MongoDB (кроме функций проверки существования юзера, изменения профиля и получения новости).
- Функция getUsers удалена.
- Исправлена функция logOut. Теперь сессиии УДАЛЯЮТСЯ (остаются только если закрыть(обновить) страницу, не выходя из профиля). Проблема была в функции 'logout'. В связи с тем, что: 'req.logout not working with "local strategy".', пришлось искать ей замену (спасибо stackoverflow).
- Добавлен backup для mentions.
- Теперь на сайте также отображается стартовый набор новостей (который и был раньше).
- Усстановнены MongoDB и драйвер Mongoose.
- Созданы модели для хранения информации в базе данных.
- Новости показываются корректно как в базе данных, так и на сайте.
- На данный момент работают корректно: детальный просмотр, добавление и удаление новостей.
- Добавлены функции logIn и logOut, соответствующие заданию 11, причём функция logIn заменила уже существующую функцию checkUser, написанную ранее, но не использующую passport и promises.
- Некоторые исправления, касающиеся других функций, использующих promises.
- Теперь все функции модальных окон, касающиеся пользователей, хранятся в библиотеке usersModal.
- Все функции модальных окон, касающиеся новостей, за исключением поиска и сортировки (пока что), хранятся в библиотеке newsModal.
- Добавлен backup-файл для users.json.
- Модернизирован профиль:
- Теперь можно имя пользователя и картинку профиля.
- Изменения вносятся в базу данных.
- Имя пользователя можно изменить лишь в том случае, если его длина >= 4 символов и такого имя пользователя нет в базе данных.
- Для того, чтобы изменения вступили в силу, нужно правильно ввести пароль.
- Теперь картинки разделяются на две категории : для юзеров(users) и для новостей(news).
- Модернизирована регистрация:
- Теперь поля Email заменено повторным вводом пароля.
- Зарегистрировать пользователя получится только в том случае, если такого пользователя нет в базе данных.
- Новый пользователь заносится в базу данных.
- Несколько маленьких исправлений.
- Изменена авторизация:
- Теперь у каждого пользователя из users после авторизации отображается своя картинка и своё звание (в дальнейшем от звания будут зависеть возможности пользователя).
- Теперь есть две библиотеки: newsService и usersService, которые работают с новостями и пользователями соответственно.
- Теперь авторизация происходит таким образом:
- После ввода данных вызывается функция проверки пользователя методом GET, которая проверяет наличие такое пользователя в массиве users и возвращает true/false.
- Если true, то пользователь успешно изменяется.
- Если false, то окно просто закрывается (скоро будет появляться окно с соответствующей ошибкой).
- Функция addMention перенесена в usersService.
- Добавлена функция, считывающая мнение пользователей в файл users_mention из модального окна Contact us.
- Небольшие исправления.
- Создана отдельная библиотека (newsModal), в которой будут храниться функции, работающие с модальными окнами. Добавление, детальный просмотр, удаление новостей, а также уведомления уже перенесены туда. Сделано это, чтобы уменьшить количество js файлов (страница станет загружаться быстрее).
- Добавлен файл(users_mention), в котором будут храниться мнения пользователей о сайте. Пока в него ничего не считывается, но уже есть пример хранения информации.
- Ошибок ESLint стало ещё меньше.
- Кода в script.js стало меньше.
- Изменения, касающиеся файла server_servise.js:
- server_servise.js переименован в news_servise. Соответствующий модуль serverService также переименован в newsService.
- Добавлены Promises для добавления, редактирования и удаления новостей.
- Изменения, касающиеся файла reset.css:
- reset.css переименован в default.css.
- Теперь файл подключается в index.html (а не через @import к styles.css).
- Удалено всё лишнее из этого файла.
- Изменения, касающиеся Profile:
- Теперь, чтобы изменения вступили в силу, нужно ввести пароль.
- Оптимизирован, как и ранее все остальные модальные окна.
- Изменения, касающиеся добавления и редактирования новостей:
- Теперь при редактировании новости можно видеть источник изображения. Это исправило проблему: после редактирования новости картинка пропадала.
- Теперь при добавлении новости пишет текущее имя пользователя вместо "You".
- Теперь после редактирования новости автор новости остаётся неизменным (нельзя присвоить чью-то новость себе просто отредактировав её).
- Теперь редактирование новостей тоже работает исправно.
- Несколько исправлений, касающиеся выделений(::selection) на сайте.
- Несколько улучшений, касающиеся обводки(border) элементов.
- Добавлен файл backup.json, в котором будут храниться изначальные 20 новостей. (для удобства)
- Новости снова добавляются в начало.
- Поиск и сортировка снова работают исправно.
- Цвета placeholder-ов стали прежними. (более светлыми, как текст)
- Удалены файлы, созданные программой Visual Code и добавлены в gitignore.
- Теперь почти ничего не подчёркивает.
- Было замечено, что после глобального рефакторинга почему-то сломалась сортировка, а новости добавляются в конец.
- В package.json добавлено всё, что нужно для работы с ESLint.
- С помощью плагина Prettier для Visual Code было исправлено большинство ошибок компиляции ESLint, за исключением:
- Подчёркивает document, event, window.
- Подчёркивает функции, которые используются в разных файлах и некоторые функции, которые явно не вызываются.
- Подчёркивает функции, где используется "=>".
- Подчеркивает переменные, которым присваивается require.
- Подчёркивает некоторые другие, уже более редкие ошибки.
- Исправлены жирные линии новостей.
- Реализованы методы GET, POST, PUT, DELETE.
- В LocalStorage больше ничего не хранится.
- Работают добавление, удаление, детальный просмотр и сортировка с помощью методов, указанных в пунте 2.
- Не работают поиск и редактирование новости.
- Авторизация и регистрация производятся так же, как и раньше.
!Сломался гит в понедельник, поэтому было залито: (Вторник 18, 13:30).
- Исправлены стили окна предупреждений.
- Теперь элементы левой панели расположены немного иначе(по одной линии).
- Исправлены проблемы с select(моргания цвета и мышки).
- Теперь картинки не вылазят за рамки новостей, если высота экрана намного больше ширины.
- Добавлен блок с категориями на левую панель (к новостям пока не привязан).
- Несколько маленьких исправлений.
- Поменялся цвет выделения на сайте.
- Некоторые исправления, касающиеся названий классов html.
- Кода в стилях модальных окон стало ещё меньше. Достаточно мало, чтобы они все стали храниться в одном файле.
- Обнаружились конфликты между добавлением и редактированием новости:
- Т.к. они строились по одному шаблону, после использования добавления новости, редактирование могло менять своё поведение: например, делать текст красным или вообще добавлять новости, а не редактировать их.
- В связи с этим пришлось их распараллелить. Теперь они не конфликтуют.
- Окно добавления новости не закрывалось при нажатии на внешнюю часть экрана, из-за того, что использовало параметры окна редактирования (а они находятся на разных слоях). Теперь оно закрывается.
- Добавлена ссылка на github. Переход осуществляется посредством нажатия на изображение.
- Уменьшение кода стилей.
- Теперь название окон добавления и редактирования новостей такого же цвета, как и названия всех остальных окон.
- Улучшение кода модальных окон добавления новости и настроек.
- Стили модальных окон теперь наследуются, кода становится меньше. И это ещё не предел.
- Изменён поиск:
- Теперь нет поиска по умолчанию(без критериев).
- Если попытаться нажать Enter, не выбрав ни один критерий, то в placeholder'e поиска появится надпись c просьбой выбрать критерий.
- Если поставить критерий, то надпись исчезает. Убрать - появится снова.
- Добавлено новое состояние окну уведомлений(notice):
- В нём нет выбора между Yes/No, а есть просто кнопка Sure.
- Таким образом, это просто модально окно с ознакомительной информацией.
- Пока нигде не используется.
- Так же есть много несколько исправлений.
- Изменён поиск:
- Теперь поиск рабоет визуально.
- Регистры не имеют значения.
- По умолчанию должен искать по дате(но пока что он это делает только в том случае, если уже до этого искали по какому-либо критерию).
- Поик по дате в таком формате:
- Feb 05 2017
- Ни одно из этих полей не является обязательным, но вводить именно в таком порядке(пока что), т.к. поиск осуществяется через index of.
- Пример: Если написать просто число 17, то может вывести всё, в чём присутствует цифра 17. Выведутся все даты, содержащие такой год, или день, или время, или ещё что-либо.
- Изменён поиск:
- Структура поиска полностью переделана. Теперь его основная функция находится в модуле newModel вместе со всеми другими функциями работы с новостями.
- Теперь поиск работает по любому критерию(ранее искал только по автору).
- Теперь поиск возвращает не первое вхождение, а массив всех вхождений.
- Нельзя искать сразу по двум критериям.
- Пока работает только в консоли(но правильно).
- Усовершенствован поиск:
- Теперь вместо for используется some.
- Поиск всё еще ищет только по автору.
- Усовершенствована сортировка:
- Теперь нажатие на один флажок(чекбокс) не блокирует другие чекбоксы. Т.е. теперь можно переключаться на другой флажок, не обязательно выключив первый.
- Другие небольшие исправления.
- Добавлено модальное окно "Contact us".
- Там вы можете оставить свой отзыв, жалобу или же предложить мне свежую идею.
- Теперь все элементы меню правой панели кликабельны.
- Несколько маленьких исправлений.
- Доработано окно редактирования новости. Теперь оно закрывается независимо от родителя и у него есть свой overlay. При отправке окно родителя закрывается вместе с окном редактирования.
- Доработано окно с предупреждением, появляющееся при удалении новости. Теперь оно закрывается независимо от родителя и у него есть свой overlay.
- Добавлено предупреждении при попытке удалить новость. При нажатии новость удаляется и закрывается как окно предупреждения, так и родителя (с родителем было не так просто).
- Оптимизирован детальный просмотр новости.
- Восстановлен поиск:
- Он не работал из-за того, что я в предыдущем коммите заменил фильтры на сортировку, а затем и вовсе сделал её отдельной функцией.
- Добавлены критерии поиска, но выбирать из них самостоятельно пока нельзя. Стандартный критерий: поиск по автору (напомню, что можно вводить часть слова).
- Сортировка и поиск пока взаимодействуют плохо, т.к. каждый раз обращаются к начальному массиву, а не к тому, который они изменяют.
- Изменения касаются сортировки:
- Теперь при нажатии на один из флажков(чекбоксов), остальные перестают быть активными до тех пор, пока на него не нажмут еще раз. Таким образом теперь нет конфликтов при нажатии на несколько флажков одновременно.
- Теперь есть функция, я в которую удобно передавать данные одного флажка (ранее каждый обрабатывался отдельно, из-за чего код дублировался).
- Ранее вызывалась функция получения новостей, из которой вызывалась сортировка новостей по фильтру(если он есть). Теперь эта функция независима.
- Мелкие доработки, касающиеся задания 7.
- Проект выложен на npmjs.com : https://www.npmjs.com/package/myeducationalpractice.
- Теперь в окне редактирования отображаются уже введённые данные(поля не пусты, как это было прежде).
- Добавлена сортировка (пока что фильтры сортировки не работают совместно).
- Добавлен localStorage (теперь изменения новостей сохраняются ((пока только новостей))).
- Много исправлений.
- Добавлена иконка сайта.
- Немного реструктуризирован css.
- Исправлен логотип.
- Добавлены настройки с очень забавной функцией, которая работает с цветами всего сайта. Рекомендую посмотреть :)
- Теперь новый пункт меню "Профиль" перенял все поля, которые ранее находились в "Настройках". В "Настройках" позднее будет находиться что-нибудь интересное, что доступно даже неавторизированным пользователям.
- Подправлены линии в правом меню (из-за того, что скрывались только внутренние элементы, бордеры оставались видимы).
- Ограничение символов поля "Email" увеличилось с 16 до 32 символов.
- Теперь регистрация работает так же, как раньше авторизация (скрываются одни элементы меню и появляются другие).
- Кнопки удаления и редактирования новости теперь фиксированного размера в vw (при масштабировании не увеличиваются).
- Функция выхода теперь в отдельном js файле, а не в авторизации.
- Обработки кнопок через querySelectorAll и forEach там, где это не нужно, теперь нет.
- В настройках теперь не обязательно каждый раз вводить новый логин и новый пароль. Можно изменять любое поле независимо от других и сохранять его.
- Теперь стоит ограничение на количество вводимых символов в авторизации, регистрации и настройках(везде кроме ссылок по 16). Эта функция берёт часть работы валидации на себя, а так же не позволяет вводить пользователям в поля сколько угодно символов.
- Код становится проще и доступнее, делаются блоки кода с пометками, в которых переменные упорядовиваются по алфавиту.
- Начал заменять все var на const (переменная не изменяется, только её параметры) / let (переменной присваиваются новые значения).
- Теперь при успешной авторизации(нажатие на Log in, заполнение полей) происходит следующее:
- Как и ранее, заменяются логин и звание пользователя.
- Как и ранее, появляются кнопки взаимодействия с новостями.
- Вместо регистрации появляется кнопка настроек.
- Кнопка Log in сменяется кнопкой Log out.
- Теперь при выходе (нажатие на Log out) происходит следующее:
- Звание пользователя возвращает значение "Guest".
- Имя пользователя заменяется на "Unknown".
- Картинка изменяется на стандартную.
- Пропадают кнопки взаимодействия с новостями.
- Log in заменяет Log out.
- Кнопка регистрации заменяет настройки.
- С регистрацией это всё пока не работает, но скоро будет.
- Добавлены настройки
- И ещё несколько маленьких исправлений
- Код реструктуризирован. Теперь один js и один css файл подразбиты на маленькие файлы.
- Добавлена регистрация.
- Редизайн авторизации.
- И еще несколько маленьких исправлений.
- Теперь формы закрываются автоматически после ввода данных.
- Теперь некоторые элементы на сайте выделить нельзя.
- И еще много маленьких исправлений.
- Добавлена часть Задания 7.
- Теперь работает авторизация:
- Форма авторизации открывается при нажатии кнопки Log in на правой панели.
- Имя пользователя должно быть в пределах (0,16] символов. Если введено неверно, но буквы окрасятся в цвет крови(бордовый цвет).
- Пароль - в пределах [4,16] символов. Окрашивается бордовым, если нарушен предел.
- Пароль отображается точками.
- Если логин и пароль введены верно, то:
- Цвета станут прежними.
- Имя юзера изменится на введённое.
- Должность юзера изменится на должность администратора и окрасится в соответствующий цвет.
- Появятся кнопки добавления, удаления и редактирования новости там, где они располагались до добавления авторизации.
- Форма авторизации не закроется, но ее можно закрыть, кликнув на внешнюю часть окна.
- Теперь работает функция редактирования новости:
- Редактировать новость можно в детальном просмотре новости.
- Кнопка редактирования - карандаш в верхнем правом углу.
- После редактирования новости, она изменяется в списке новостей, но её детальный просмотр всё еще открыт(старая его форма). Если вы его закроете, а потом откроете снова, то содержимое заменится.
- После редактирования дата остаётся прежней.
- После редактирование автор заменяется на ваш никнейм.
- Редактируя новость, можно заполнять не все поля.
- Пофикшен баг с удалением новостей (ранее они удалялись арифместической прогрессией(если и вовсе не последовательностью Фибоначчи)).
- При редактировании новости на данный момент поля нужно заполнять с нуля.
- После редактирования/добавления новости настройка поиска сбивается.
- Теперь работает функция удаления новости:
- Удалить новость можно в детальном просмотре новости.
- Кнопка удаления - крестик в верхнем правом углу.
- После удаления новости, она пропадает из списка новостей, но её детальный просмотр всё еще открыт(клик на внешнюю часть экрана закрывает его).
- Теперь работает функция добавления новости:
- При ошибке валидации выдает ее в консоль, закрывает окно добавления, новость не выводит.
- Если новость прошла валидацию, она появляется в списке новостей, окно добавления закрывается.
- Теперь поиск работает с любым регистром:
- Примеры: Le, le, lE => найдёт Lewis.
- Проблема с формами решена.
- Теперь работает поиск(отправить - Enter):
- Можно вводить полное имя.
- Можно часть имени.
- НО пока что регистр имеет значение (если имя начинается с большой буквы, то она должна присутствовать в слове из поискового запроса). примеры: Le, An, de, Ca.
- Если ничего не вводить, или же просто нажать Enter, то выводит все новости.
- Добавлен курсор
- Кнопку "Показать ещё" заменяет scrollbar
- Возникли некоторые проблемы с сохранением данных из форм. Принажатии на кнопку Enter данные устанавливаются, а затем сразу же стираются, на то, чтобы я потратил очень много времени (часов 6-7), но у меня так и не вышло, поэтому поиск, авторизация и регистрация работают не полностью.
- Добавление и удаление не успел, но это не сложно.