Пока список пуст, готовность не считается: делить на ноль нечего, в строке стоит прочерк. Фильтры, поиск и порядок на счётчики не влияют — они всегда про весь открытый список.
/tool/todo/ работает хранит браузер
Несколько списков, сроки и приоритеты, подзадачи и повторы, перетаскивание мышью и пальцем, напоминания браузера, отмена удаления. Всё лежит в хранилище вашего устройства: ни одна задача не уходит на сервер. Резервная копия — файлом, перенос на телефон — ссылкой, которую вы создаёте сами.
Сверху — вкладки списков и поле новой задачи. Дальше сам список во всю ширину: отметка слева переводит задачу в выполненные, щелчок по тексту правит его, кнопка «⋯» открывает срок, приоритет, повтор, подзадачу и перенос в другой список. Под списком — счётчики, выгрузка файлом и передача ссылкой.
Напишите задачу в поле и нажмите Enter. Если перед этим выбрали срок, время, приоритет или повтор — они уедут в задачу вместе с текстом, второй раз открывать строку не придётся.
Щелчок по тексту задачи (или Enter, когда на нём фокус) превращает строку в поле. Enter сохраняет, Esc отменяет, щелчок мимо тоже сохраняет.
Кнопка «⋯» в строке раскрывает срок, время, приоритет, повтор, поле подзадачи и перенос задачи в другой список. Подзадачи — один уровень: у подзадачи своих подзадач нет.
Порядок меняется перетаскиванием за рубчик слева — мышью и пальцем одинаково. С клавиатуры и с экранного диктора те же перестановки делают кнопки «выше» и «ниже». Порядок хранится в самой задаче, поэтому переживает фильтры и перезагрузку.
Списков может быть до двенадцати. Вкладки над полем ввода переключают их, соседние кнопки — создают, переименовывают и удаляют. Каждый список считается отдельно.
Удалили лишнее — под списком на десять секунд появится полоса «Вернуть». Она же работает после «убрать выполненные», «стереть задачи списка» и удаления списка целиком.
«Скачать все списки (JSON)» — это резервная копия: тот же файл принимает загрузка рядом. Перед чисткой данных браузера сохраните его, иначе списки пропадут без следа.
«Поделиться ссылкой» упаковывает открытый список в сам адрес. Отправьте ссылку себе на телефон — там она предложит забрать копию. Сервер в этом не участвует и содержимого ссылки не видит.
Готовность = Выполнено ÷ Всего × 100 %
Пока список пуст, готовность не считается: делить на ноль нечего, в строке стоит прочерк. Фильтры, поиск и порядок на счётчики не влияют — они всегда про весь открытый список.
Исходные данные — те же, что стоят в полях по умолчанию: их можно пересчитать в уме и убедиться, что инструмент не врёт.
Всего: 5.
Выполнено: 2.
Осталось: 5 − 2 = 3.
Просрочено: 1 — вчерашний срок и нет отметки.
Готовность: 2 ÷ 5 = 0,4, то есть 40 %.
Крупно показано «3 задачи», готовность 40 %, просрочено 1. Просроченная строка несёт красную метку срока. Переключите порядок на «по сроку» — она уедет в группу «Просрочено» первой, а отмеченные соберутся внизу под заголовком «Сделано». Счётчики при этом не изменятся.
В localStorage вашего браузера, под ключом vi-todo-v2. Это хранилище на вашем устройстве, привязанное к одному браузеру и одному домену. На сервер списки не уходят: сам инструмент в сеть не ходит. При открытии страница один раз забирает своё — разметку, стили, скрипты и шрифты, всё с этого же домена. Дальше запросов нет: откройте вкладку «Сеть» в панели разработчика и добавьте задачу, ни одной новой строки там не появится. Выгрузка файлом, ссылка и печать тоже считаются в браузере, никуда не отправляясь.
Нет. Прежняя запись лежала под ключом vi-todo-v1 одним плоским списком. При первом открытии новой версии она переносится в список «Мои задачи» целиком, вместе с отметками, и только после успешной записи старый ключ убирается. Порядок строк сохраняется тот же.
Да. Щёлкните по тексту — строка превратится в поле. Enter сохраняет, Esc отменяет правку и возвращает прежний текст, щелчок мимо поля сохраняет. С клавиатуры доберётесь табуляцией: текст задачи — это кнопка, Enter на ней открывает то же поле.
Да, но переносить надо руками, и это одно нажатие. Кнопка «Поделиться ссылкой» упаковывает открытый список прямо в адрес: текст сжимается и кодируется, всё помещается после решётки. Такая ссылка никуда не отправляется — то, что стоит после решётки, браузер серверу не передаёт. Откройте её на телефоне, подтвердите — и список ляжет туда копией. Дальше два списка живут врозь: это перенос, а не синхронизация. Для очень длинных списков ссылка выходит громоздкой, и мессенджеры её иногда режут — тогда надёжнее файл JSON.
Через уведомления браузера. Нажмите «Включить напоминания», разрешите — и задача со сроком напомнит о себе, когда срок наступит. У задачи без указанного времени напоминание приходит в девять утра. Важная оговорка: уведомление приходит, только пока эта вкладка открыта. Фонового сервиса здесь нет, а значит, закрытый браузер ничего не покажет. Если напоминание должно сработать наверняка, ставьте его там, где живёт будильник, — в телефоне.
Под списком появится полоса «Вернуть» и продержится десять секунд. Она возвращает состояние целиком, поэтому одинаково отменяет удаление одной задачи, «убрать выполненные», «стереть задачи списка» и удаление списка со всем содержимым. Через десять секунд полоса уходит, и вернуть уже нечем — на этот случай есть файл JSON.
Очистка данных сайта в настройках браузера, режим «удалять cookies и данные при выходе», а в режиме инкогнито списки исчезают вместе с окном. Раз в неделю нажимать «Скачать все списки (JSON)» дешевле, чем потом вспоминать, что там было.
Повтор ставится в строке через «⋯» и работает только вместе со сроком. Когда вы отмечаете такую задачу выполненной, она остаётся в списке отмеченной, а рядом появляется её копия со следующим сроком — на день, неделю или месяц вперёд. Месяц считается по календарю: 31 января плюс месяц даёт 28 февраля, а не 3 марта.
До двенадцати списков, в каждом до 500 строк по 200 знаков; подзадачи считаются наравне с задачами. Потолок взят с запасом: у localStorage есть предел объёма, разный в разных браузерах, и упираться в него списком дел не стоит. При попытке добавить пятьсот первую строку инструмент скажет об этом и ничего не добавит.