Wizard Diary, v7.0
Posted on

Todo-лист.
Мажорный релиз. Добавление подсветки синтаксиса описания дня, автодополнения при редактировании дня, простого редактора дня для мобильных платформ, возможности указания целевого дня для добавления ежедневных todo-пунктов, возможности редактирования ежедневных todo-пунктов через редактор дня, возможности пакетного удаления todo-пунктов, проверки орфографии todo-пунктов (с поддержкой словаря исключений), графика качества выполнения ежедневных todo-пунктов, списка всех ежедневных todo-пунктов и действий в todo-пунктах, системы достижений, возможности просмотра diff между бекапами и между последним бекапом и текущим состоянием, белого списка доступа, повышение безопасности и удобства использования, улучшение дизайна, исправление уязвимостей и багов.
Новые возможности и изменения
- дни:
- список дней:
- отображение дней без todo-пунктов;
- отображение границ сегментов по дюжине дней:
- первый день из каждой дюжины — зелёным цветом;
- последний день из каждой полудюжины — желтым цветом;
- последний день из каждой дюжины — красным цветом;
- отображение количества оставшихся дней в текущей дюжине;
- отображение даты последнего дня текущей дюжины;
- отображение дня:
- отображение статистики:
- процент выполнения ежедневных todo-пунктов;
- количество ежедневных todo-пунктов;
- количество обычных todo-пунктов;
- AJAX-обновление статистики дня при его редактировании;
- отображение всех идентификаторов (
/\.?\w+((\.|::)\w+)*(\(\)|\+\+|#)?/) в todo-пунктах в виде кода;
- отображение статистики:
- редактор дня:
- отображение статистики:
- процент выполнения ежедневных todo-пунктов;
- количество ежедневных todo-пунктов;
- количество обычных todo-пунктов;
- AJAX-обновление статистики дня при его редактировании;
- восстановление флага сохранённости при отмене сделанных изменений;
- подсветка синтаксиса описания дня:
- подсветка уровня 1 (вместе с завершающей запятой);
- подсветка уровня 2 (вместе с завершающей запятой);
- подсветка строк в двойных кавычках;
- подсветка тире, обозначаемого
-; - подсветка стрелки, обозначаемой
->; - подсветка горячих клавиш, обозначаемых
(key <key>); - подсветка идентификаторов (
/\.?\w+((\.|::)\w+)*(\(\)|\+\+|#)?/);
- автоматическое добавление закрывающей скобки при наборе открывающей;
- более светлая тема редактора;
- при вставке:
- обратные замены всех особых символов:
- кавычек
«и»; - тире
—; - стрелки
➤;
- кавычек
- удаление пробелов:
- в начале строк;
- в конце строк;
- удаление точек с запятой в конце строк;
- обратные замены всех особых символов:
- при сохранении:
- удаление пустых строк:
- в начале текста;
- в конце текста;
- дублей;
- удаление точек с запятой в конце строк;
- исправление бага с добавлением пункта-разделителя при отсутствии ежедневных todo-пунктов;
- удаление пустых строк:
- проверка наличия несохранённых изменений при закрытии страницы с редактором;
- автодополнение:
- при наборе в начале строки дополнение из списка всех 1-х уровней;
- при наборе после 1-го уровня дополнение из списка 2-х уровней, соответствующих данному 1-му уровню;
- при наборе после 2-го уровня дополнение из списка действий, соответствующих данному 2-му уровню;
- верная работа для случаев, когда уровни заменены отступами (в соответствии с форматом описания дня);
- при вставке предложенного варианта автоматическая вставка дополнительного пробела в конце;
- простой редактор:
- добавление простого редактора на базе
<textarea>; - автоматическое переключение на простой редактор на мобильных платформах;
- перенос изменения текста из одного редактора в другой при переключении между ними;
- поддержка такой же обработки текста при сохранении, как и в обычном редакторе;
- поддержка обновления флага сохранённости;
- добавление простого редактора на базе
- отображение статистики:
- список дней:
- ежедневные todo-пункты:
- целевой день:
- возможность указания целевого дня для добавления ежедневных todo-пунктов;
- валидация даты целевого дня с учётом текущей даты (не должна превышать её);
- автоматическое обновление лимитов у редакторов даты целевого дня при редактировании (максимальная дата не должна превышать текущей);
- сохранение состояния уже отмеченных ежедневных todo-пунктов целевого дня при добавлении новых;
- редактирование ежедневных todo-пунктов:
- редактирование через редактор дня;
- удаление функциональности:
- удаление индивидуального добавления;
- удаление сортировки:
- посредством кнопок в виде стрелок;
- посредством drag-and-drop;
- удаление индивидуального редактирования;
- удаление индивидуального удаления;
- отображение заголовка страницы;
- отображение счётчика ежедневных todo-пунктов:
- в отображении;
- в редакторе;
- исправление бага с невозможностью удаления ежедневных todo-пунктов из целевого дня посредством добавления пустого списка новых;
- целевой день:
- удаление todo-пунктов:
- AJAX-поиск todo-пунктов по префиксу;
- подтверждение удаления найденных todo-пунктов;
- автоматическое удаление дубликатов пунктов-разделителей, появившихся после удаления todo-пунктов;
- проверка орфографии:
- в сохранённых обычных и ежедневных todo-пунктах:
- составление списка найденных ошибок;
- для ошибок в обычных todo-пунктах возможность перехода в редактор дня, содержащего ошибку;
- при переходе в редактор дня установка курсора непосредственно на строку, содержащую ошибку;
- отображение количества найденных ошибок;
- AJAX-обновление количества найденных ошибок при изменении списка;
- в редакторе дня:
- AJAX-поиск ошибок в тексте редактируемого дня;
- отображение наличия ошибок специальным флагом;
- подчёркивание слов с ошибками красной пунктирной линией;
- словарь исключений:
- добавление исключений:
- AJAX-добавление исключения из списка ошибок, найденных в сохранённых обычных и ежедневных todo-пунктах (посредством нажатия кнопки добавления рядом со словом с ошибкой);
- AJAX-добавление исключения из редактора дня (посредством нажатия сочетания горячих клавиш Ctrl+Shift+A при курсоре, установленным на слово с ошибкой);
- просмотр списка добавленных исключений;
- удаление исключений:
- возможность удаления конкретного исключения;
- возможность удаления всех исключений;
- бекапы:
- сохранение словаря при бекапе;
- восстановление словаря при восстановлении из бекапа;
- добавление исключений:
- в сохранённых обычных и ежедневных todo-пунктах:
- статистика:
- добавление статистики рендера страницы:
- времени рендера;
- количества используемой памяти;
- количества запросов к БД;
- статистика ежедневных todo-пунктов:
- отображение среднего выполнения жирным шрифтом;
- отображение дней без todo-пунктов;
- график разницы между степенью выполнения и числом неотменённых todo-пунктов («качество выполнения»;
f(day) = -0.1*N_not_canceled(day)^2 + 10*N_satisfied(day)); - смена стиля графиков на линии с точками;
- отображение по умолчанию только последних 24 дней;
- добавление ограничений:
- нижняя граница диапазона — первая дата в данных;
- верхняя граница диапазона — следующая дата после последней в данных;
- нижняя граница масштабирования — 5 дней;
- верхняя граница масштабирования задаётся автоматически благодаря границам диапазона;
- статистика todo-пунктов:
- отображение среднего количества жирным шрифтом;
- отображение дней без todo-пунктов;
- смена стиля графиков на линии с точками;
- отображение по умолчанию только последних 24 дней;
- добавление ограничений:
- нижняя граница диапазона — первая дата в данных;
- верхняя граница диапазона — следующая дата после последней в данных;
- нижняя граница масштабирования — 5 дней;
- верхняя граница масштабирования задаётся автоматически благодаря границам диапазона;
- прогресс проектов:
- замена явной сортировки групп посредством добавления префикса с номером на неявную, не требующую подобного префикса;
- использование в качестве иконки группы-действия символа
↳; - отображение по умолчанию только последних 69 дней;
- добавление ограничений:
- нижняя граница диапазона — первая дата в данных;
- верхняя граница диапазона — последняя дата в данных;
- запрет масштабирования (нижняя и верхняя границы масштабирования — 69 дней);
- исправление бага с вертикальным смещением графиков (с потерей связи со своей группой):
- после загрузки;
- при горизонтальной прокрутке;
- добавление списка ежедневных todo-пунктов (всех когда-либо использованных);
- удаление сортировки списков действий в списке проектов;
- добавление списка действий:
- отображение префиксного дерева (по словам) для данного списка;
- сортировка узлов на каждом уровне по количеству их детей;
- возможность копирования текста действия по аналогии со списком проектов;
- достижения:
- поиск достижений на основе количества дней подряд (длины спринта), когда выполнялся тот или иной ежедневный todo-пункт:
- «Первая попытка» — ежедневный todo-пункт выполнялся в течение 1 дня;
- «Выдержка» — ежедневный todo-пункт выполнялся в течение 6 дней;
- «Работа над собой» — ежедневный todo-пункт выполнялся в течение 12 дней;
- «Сила воли» — ежедневный todo-пункт выполнялся в течение 24 дней;
- «Привычка» — ежедневный todo-пункт выполнялся в течение 48 дней;
- «Новое лицо» — ежедневный todo-пункт выполнялся в течение 96 дней;
- полученные достижения:
- составление списка полученных достижений;
- учёт при поиске достижений отменённых пунктов как выполненных, если эти отменённые пункты не стоят в начале спринта;
- AJAX-фильтрация списка:
- по типам достижений (в том числе сразу по нескольким);
- по конкретным ежедневным todo-пунктам (в том числе сразу по нескольким);
- по любым их объединениям;
- количество полученных достижений:
- отображение количества полученных достижений;
- AJAX-обновление количества полученных достижений при фильтрации списка;
- использование Identicon в качестве иконок достижений;
- для каждого достижения отображение даты его получения (даты последнего дня соответствующего спринта);
- будущие достижения:
- составление списка будущих достижений;
- учёт при поиске будущих достижений отменённых пунктов как выполненных, если эти отменённые пункты не стоят в начале спринта;
- использование Identicon в качестве иконок будущих достижений;
- для каждого будущего достижения:
- отображение количества дней подряд, в которых уже выполнялся соответствующий ежедневный todo-пункт;
- отображение оставшегося количества дней подряд, в которых необходимо выполнять соответствующий ежедневный todo-пункт, чтобы получить данное достижение;
- отображение даты получения данного достижения при условии, что соответствующий ежедневный todo-пункт будет и далее выполняться каждый день подряд;
- поиск достижений на основе количества дней подряд (длины спринта), когда выполнялся тот или иной ежедневный todo-пункт:
- добавление статистики рендера страницы:
- бекапы:
- меню «Прочее»:
- перемещение пункта меню «Бекапы» на верх меню;
- добавление разделителя после пункта меню «Бекапы»;
- сохранение бекапа в Dropbox:
- явная обработка запрета доступа в Dropbox;
- явное отображение неизвестной ошибки доступа в Dropbox;
- отображение названия ошибки доступа в Dropbox в дополнение к её описанию;
- отключение анимации создания бекапа при ошибке AJAX-запроса;
- повышение точности замера времени сохранения бекапа (посредством переноса замера времени на самый последний момент);
- отображение diff между бекапами:
- список бекапов:
- для каждого бекапа отображение diff между ним и предыдующим;
- скрытие пустых diff;
- текущий diff:
- отображение diff между текущим состоянием данных и последним бекапом;
- запрет доступа к текущему diff, если тот пустой;
- отображение diff:
- отображение времени создания:
- предыдующего бекапа;
- основного бекапа (если есть);
- подсветка синтаксиса diff;
- отображение времени создания:
- список бекапов:
- упоминание в легенде списка бекапов времени сохранения в Dropbox;
- меню «Прочее»:
- безопасность:
- запоминание пользователя:
- восстановление поддержки запоминания пользователя;
- хранение времени жизни сессии в пользовательских параметрах;
- указание границ значения времени жизни сессии в метке редактора параметра;
- исправление бага с конфликтом стилей Twitter Bootstrap и jQuery UI в редакторе параметра;
- повышение надёжности кодов доступа (посредством использования криптостойкого генератора случайных чисел);
- Dropbox:
- отключение форсирования запроса доступа;
- валидация CSRF-токена при доступе;
- лог доступа:
- перемещение статистики на верх страницы;
- приведение стилей дополнительной информации в соответствие с общими:
- адреса, который соответствует IP;
- ОС на основе User-Agent;
- браузера на основе User-Agent;
- время жизни:
- указание границ значения в метке редактора параметра;
- указание особого значения 0 (отключает автоматическую очистку) в метке редактора параметра;
- исправление бага с конфликтом стилей Twitter Bootstrap и jQuery UI в редакторе параметра;
- добавление белого списка:
- автоматический отзыв авторизации (выход), если пара IP и User-Agent запроса не входит в белый список;
- добавление пары IP и User-Agent запроса в белый список только при явной авторизации через форму входа (но не при неявной через cookies);
- для каждой явной авторизации запись:
- IP;
- User-Agent;
- времени авторизации;
- возможность очистки белого списка;
- возможность отключения проверки наличия пары IP и User-Agent запроса в белом списке;
- отображение белого списка:
- для каждой пары IP и User-Agent отображение:
- IP;
- адреса, который соответствует IP;
- координат в Google Maps, которые соответствуют IP;
- User-Agent;
- ОС на основе User-Agent;
- браузера на основе User-Agent;
- времени последней авторизации;
- количества авторизаций;
- особое отображение (на зелёном фоне) тех пар IP и User-Agent, для которых cookies неявной авторизации ещё живы (определяется по времени последней авторизации и времени жизни сессии);
- автоматическое AJAX-обновление;
- для каждой пары IP и User-Agent отображение:
- исправление уязвимостей:
- валидация даты в обработчике отображения дня;
- валидация модели todo-пункта при её обновлении;
- бекапы:
- более точная проверка успешности записи бекапа на диск;
- сохранение бекапа в Dropbox:
- страница редиректа:
- обработка кода доступа только при отсутствии ошибок;
- замена HTML-экранирования параметров на JavaScript-экранирование;
- валидация пути к бекапу:
- использование директивы PHP
open_basedir; - проверка доступности пути на чтение;
- проверка того, что данный путь — путь к файлу;
- использование параметра сеанса cURL
CURLOPT_SAFE_UPLOAD; - проверка успешности чтения бекапа с диска;
- использование директивы PHP
- валидация времени создания бекапа;
- закрытие файла бекапа на диске после сохранения его в Dropbox;
- страница редиректа:
- перенос URL-экранирования параметров из генерации ссылок на обработчик в сам обработчик:
- при декодировании IP;
- при декодировании User-Agent;
- HTML-экранирование параметров на странице ошибки;
- запоминание пользователя:
- дизайн:
- новая иконка приложения (
); - новая анимация процесса (
); - оформление таблиц в полосатом стиле (с чередованием тёмных и светлых строк):
- список дней;
- отображение ежедневных todo-пунктов;
- список бекапов;
- лог доступа;
- использование формата копирайта
Copyright © <годы> <автор>;
- новая иконка приложения (
- исправление бага:
- с использованием клавиши Esc для закрытия диалогов;
- с вычислением номера года в своём летоисчислении.
Репозиторий
Ссылка: http://github.com/thewizardplusplus/wizard-diary/tree/v7.0.
Содержание: код.
Лицензия: MIT.
Скриншоты
Список дней:

Список todo-пунктов за конкретный день:

Мобильный редактор дня:

Меню «Пункты»:

Список ежедневных todo-пунктов:

Редактор ежедневных todo-пунктов:

Удаление todo-пунктов:

Меню «Статистика»:

Статистика ежедневных todo-пунктов:

Статистика обычных todo-пунктов:

Прогресс проектов:

Список всех использованных ежедневных todo-пунктов:

Список действий todo-пунктов:

Список полученных достижений:

Список будущих достижений:

Меню «Прочее»:

Список бекапов:

Просмотр изменений между бекапами:

Список грамматических ошибок:

Словарь слов-исключений для спеллчекера:

Лог доступа:

Белый список доступа:

Редактор параметров:

Форма входа:

Авторские права
- иконка приложения — CC0 1.0, Copyright © 2007 johnny_automatic, https://openclipart.org/detail/7555/open-book;
- анимация процесса — LD-FREE, сгенерирована при помощи сервиса https://loading.io/.