«Виола» и организация закладок

«Виола», конечно, глубже любой кроличьей норы — со временем всё больше и больше похороненных идей удаётся находить в её внутренностях. Вчера ночью, просматривая код незавершённых и закомментированных пунктов меню, я заметил интересное место — недописанный интерфейс каталога закладок.

Степень готовности там оказалась очень высокой, поэтому я решил оживить этот фрагмент. В «Виоле» уже есть его конкурент — «Hot List», позволяющий хранить закладки плоским списком. Но «Hot List» куда проще и примитивнее. В отличие от него, каталог позволяет создавать папки и перетаскивать закладки, визуально организуя их так, как больше нравится пользователю.

Несмотря на то, что кажется логичным перетаскивать закладку в папку, чтобы туда её перенести, такого автор, к сожалению, не задумывал — в комментариях к незавершённым кускам достаточно подробно описана логика перетаскивания. Чтобы не нарушать аутентичность, я тоже это не реализовывал.

Я вообще стараюсь придерживаться авторского замысла, но есть тут два места, где мне пришлось придумывать что-то самостоятельно.

Скриншот окна программы Personal URL Catalog с меню File, Edit, Organize, Help; в папке Root отображены файлы Demos, The World Wide Web project и Viola Central.

Во-первых, иконки — автор хоть и оставил для них место, но не нарисовал, поэтому пришлось натащить их из других мест. Иконку документа я взял из интерфейса браузера, из кнопки клонирования. А в качестве папки приспособил иконку раскрываемых списков.

Во-вторых, формат сохранения списка каталога закладок. Этой части тоже не было, поэтому пришлось придумывать свой.

12 комментариев

Звуки в «Виоле»

Как я уже писал, анимацию в «Виоле» можно получить, задействовав скриптовый язык, а что же со звуком?

Из скриптового языка доступны только две функции — bell() издаёт системный «бип» и bellVolume(), позволяющая задавать или получать громкость этого «бипа» в процентах. Функций немного, но и их пришлось чинить — они обе используют вызов XBell(), который на «МакОСи» не работает испокон веков.

Пришлось примотать небольшой код на Objective-C, который вызывает фреймворк AVFoundation, через который я теперь проигрываю системный звук Tink.aiff с заданной громкостью.

Что касается HTML, отдельного тега нет, но небольшими ухищрениями можно заставить проиграть браузер любой файл, имя которого кончается на .au — этот файл передаётся маковской утилите afplay, а она умеет играть файл в целой куче аудиоформатов.

Каноничнее, конечно, использовать именно формат au, тем более, что в него аудио можно преобразовать большинством современных утилит, той же ffmpeg, например.

Так как же проиграть звук из HTML?

Самый простой способ — поставить на аудиофайл ссылку. При переходе на неё файл проигрывается, а не скачивается. Способ позанятнее — использование тега INSERT, аналога современного IFRAME. Он проиграет файл при открытии страницы, а если использовать атрибут AFTER, то ещё и зациклит его с указанной в миллисекундах задержкой.

Скриншот окна браузера Viola WWW с заголовком «Audio Player» и HTML-кодом, содержащим тег `` для вставки аудиофайла.

Так как звук играется асинхронно, в теории, можно было писать игры или делать сайты с фоновой музыкой, для этого уже всё было готово. А если учесть, что скриптовый язык позволяет запускать что угодно (с безопасностью у этого браузера явные проблемы), то можно, запуская ту же утилиту afplay, организовать звуковые эффекты.

Оставить комментарий