World Conquest Chronicles

World Conquest Chronicles

Wizard Diary, v7.0

Редактор дня

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-пунктов («качество выполнения»; 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-пункт будет и далее выполняться каждый день подряд;
  • бекапы:
    • меню «Прочее»:
      • перемещение пункта меню «Бекапы» на верх меню;
      • добавление разделителя после пункта меню «Бекапы»;
    • сохранение бекапа в 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-обновление;
    • исправление уязвимостей:
      • валидация даты в обработчике отображения дня;
      • валидация модели todo-пункта при её обновлении;
      • бекапы:
        • более точная проверка успешности записи бекапа на диск;
        • сохранение бекапа в Dropbox:
          • страница редиректа:
            • обработка кода доступа только при отсутствии ошибок;
            • замена HTML-экранирования параметров на JavaScript-экранирование;
          • валидация пути к бекапу:
            • использование директивы PHP open_basedir;
            • проверка доступности пути на чтение;
            • проверка того, что данный путь — путь к файлу;
            • использование параметра сеанса cURL CURLOPT_SAFE_UPLOAD;
            • проверка успешности чтения бекапа с диска;
          • валидация времени создания бекапа;
          • закрытие файла бекапа на диске после сохранения его в 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-пунктов

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

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

Лог доступа:

Лог доступа

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

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

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

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

Форма входа:

Форма входа

Авторские права