ИНСТРУКЦИЯ

Введение в программирование для плееров SpinetiX

Рассказываем о возможностях использования JavaScript для создания контента

Введение в программирование для плееров SpinetiX

Введение в программирование для плееров SpinetiX

У плееров SpinetiX есть одна привлекательная черта, которая незаслуженно остается в тени. Речь о возможности использования JavaScript для создания контента.

Введение в программирование для плееров SpinetiX
Введение в программирование для плееров SpinetiX

Благодаря архитектуре плееров при помощи JavaScript можно импортировать данные из других систем, управлять медиа-контентом, создавать на лету элементы, менять их свойства и многое другое.

Плееры SpinetiX поддерживают стандарт ECMAScript 5 (начиная с версии прошивки 3.0.0) — не самый современный, но и не очень старый. Жить можно.

Поддерживается ограниченное число библиотек и API — полноценные современные веб-приложения не сделать, но их достаточно для большинства задач, на которые рассчитан плеер.

Основная библиотека, которая есть в каждом проекте — это jSignage, включающая функции из jQuery (библиотека портирована для SpinetiX OS). Кроме того, можно использовать ограниченный набор модулей из Node API: buffer, events, net, stream и dgram.

Что потребуется для работы

Плеер SpinetiX HMP400
Подойдут и более ранние модели

Программа Elementi
Для создания больших проектов желательно использовать версию X, которая включает встроенные средства отладки. Но на начальном этапе для освоения и создания первых проектов можно обойтись версией S

Текстовый редактор для редактирования js файлов

Знание JavaScript и умение работать в графической оболочке Elementi для создания контента

Создаем Hello World!

Создадим проект, который выводит текст «Hello World». Это позволит понять базовые принципы добавления скриптов в проект и работы с ними.

Несмотря на достаточно большие возможности по программированию, процесс добавления скриптов не так очевиден. Elementi не предлагает функций управления скриптами через GUI и добавлять скрипты в проект придется вручную.

Хорошая новость
Делать это нужно только один раз, при добавлении нового скрипта.

Поехали!

Зайдите в Elementi и создайте проект Hello World. Сразу создайте в проекте папку «scripts», в которой будут храниться скрипты.

В каждом проекте есть index. svg файл, в котором хранится вся структура проекта — описание всех элементов и их атрибутов. В этот же файл мы будем добавлять информацию об используемых скриптах.
Проект SpinetiX — это папка, и мы можем посмотреть ее содержание, используя Проводник.

Решение на базе SpinetiX для сети гипермаркетов "Лента"
Решение на базе SpinetiX для сети гипермаркетов "Лента"

Мы видим созданную пустую папку scripts и файл index.svg. Svg — это текстовый файл. Откройте его в текстовом редакторе и увидите структуру проекта. Нас интересует только блок загрузки скриптов.

Введение в программирование для плееров SpinetiX
Введение в программирование для плееров SpinetiX

Скрипт 1: это загрузка основной библиотеки jSignage.
Скрипт 2: начальная инициализация слоев.

Тут стоит сказать пару слов о конструкции.

Она эквивалентна:

Так понятнее: $('svg') — получение корневого элемента структуры проекта, а. ready () вызывает наш callback, когда завершается строительство DOM.

Если не использовать эту обертку, то к моменту вызова нашего скрипта DOM — структура еще не будет готова и мы не сможем производить с ней операции. Иногда это не нужно, например, если скрипт делает внутреннюю инициализацию или обращается за внешними данными и не обращается к DOM.

Три способа добавления скриптов

  • Использовать xlink:href (можно загружать внешние и локальные скрипты). Так, например, загружается скрипт 1 в примере выше
  • Использовать inline-скрипты в svg. Пример 2
  • Использовать функцию .include в inline-скрипте

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

В первом случае скрипт не имеет обертки и поэтому в момент запуска мы не можем использовать обращения к DOM. Ничто не запрещает сделать обертку с .ready в нашем скрипте — речь об этом пойдет ниже.

При использовании .include в inline-скрипте можно сразу обернуть его вызов и дождаться окончания строительства DOM. Это упростит жизнь. Поэтому в первом примере мы будем использовать .include.

В папке scripts создаем файл hello.js:

Откройте в текстовом редакторе файл index.svg и добавьте импорт нашего файла внутри callback’а:

Должно получиться так:

Введение в программирование для плееров SpinetiX
Введение в программирование для плееров SpinetiX

Теперь, если вы перезагрузите проект в Elementi (двойное нажатие мышкой на index.svg), откроется сообщение Hello World. Наш скрипт загружается и запускается. Первая версия программы готова.

ВОПРОС

Мы добавили загрузку скрипта непосредственно в index.svg. Что будет, если редактировать проект в Elementi?

Если добавить элемент в GUI, то index.svg будет перезаписан. Что будет с добавленным скриптом?

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

Hello World с созданием слоя на лету

В предыдущем примере мы научились загружать скрипты. Теперь давайте добавим отображение надписи Hello World! рендером плеера, а не функцией alert. Для этого модифицируем наш hello.js:

Если вы все сделали правильно, получится:

Мы на лету создали текстовый элемент и вывели его на экран.

Hello World — меняем текст в элементе

Иногда удобнее не создавать элементы на лету, а менять свойства существующих элементов.

Пример, когда это удобно
Мы можем разместить элемент в нужном месте и задать его свойства в редакторе, а не указывать их при создании.

Давайте посмотрим в чем разница с загрузкой скрипта с использованием xlink:href. Удаляем строчки из index.svg:

И добавляем:

Наш пример продолжает работать. Добавьте новый текстовый слой в GUI — мы хотим изменить его текст в нашем коде. Задайте расположение и свойства, затем в разделе свойств Расширенные замените id на hello (этого можно не делать, но удобнее работать с понятным id).

Меняем наш hello.js:

Здесь $('#hello') возвращает нам наш элемент, а text ('Hello World!') меняет значение текста.
Запускаем проект и… ничего не происходит.

Напомним — при использовании метода загрузки через xlink:href, структура DOM не готова в момент запуска скрипта. Поэтому ничего не вышло.

Модифицируем наш hello.js:

Мы обернули вызов нашей инициализации в сразу два callback’а — первый дожидается, когда будет готова структура 'svg'. А второй дожидается, когда в нее будет добавлен наш элемент hello (для адресации по id элемента мы используем символ #).

Можно упростить код:

Для этого нам нужно переместить вызов нашего скрипта после скрипта инициализации 2 — скрипты вызываются последовательно и callback’и будут вызываться в той же очередности.

Запускаем проект... все работает.

Решение на базе SpinetiX для сети гипермаркетов "Лента"
Решение на базе SpinetiX для сети гипермаркетов "Лента"

Вместо заключения

Когда вы разобрались, как добавлять скрипты и понимаете базовые принципы, можно начинать экспериментировать и создавать классные решения. JavaScript дает колоссальную гибкость и открывает много возможностей. Фантазируйте!

Полезные ссылки:

Автор статьи:

Александр Пивоваров, pivovarov@gmail.com

Оборудование и сценарии
Следующий шаг

Посчитаем похожий проект для вас

Опишите задачу — подберем оборудование, покажем аналогичные внедрения, посчитаем смету. Без маркетинговых заходов.