Пазлы для опытных пользователей (Advanced) — Софт Эйт Софт
Description: Как использовать пазлы для реализации расширенных возможностей в ваших приложениях, таких как работа в сети, взаимодействие с «Ява Скрипт»-кодом, преобразование данных, сохранение/восстановление состояния и многое другое.

# Пазлы для опытных пользователей (Advanced)

Используйте эти пазлы для реализации расширенных возможностей в ваших приложениях, таких как работа в сети, взаимодействие с «Ява Скрипт»-кодом, преобразование данных, сохранение/восстановление состояния и многое другое.

## Содержание

- Перечень пазлов
  - comment
  - exec script
  - call external function
  - load data
  - send data
  - loaded data
  - stringify json
  - parse json
  - read CSV
  - connector
  - connector (слотовый)
  - save state
  - undo state
  - all variable names
  - variable value by name
  - JavaScript object
  - wait promise
  - promise value
  - get procedure
  - call procedure
  - add event listener
  - remove event listener
  - dispatch event

#

## Перечень пазлов

#

### comment

Этот пазл выполняет чисто визуальную функцию комментирования скрипта. Также он добавляет строку с комментарием на «Ява Скрипте» в файл visual_logic.js.

#

### exec script

Этот пазл выполняет указанный «Ява Скрипт»-код. Он использует редактор Ace для отображения и редактирования содержимого. Соответствующие сочетания клавиш можно посмотреть здесь. Поле редактора может быть растянуто под нужные размеры.

Вы можете использовать следующие встроенные переменные:

- app — экземпляр приложения, для получения подробной информации смотрите App
- v3d — пространство имен v3d, которое содержит все модули движка
- puzzles — объект содержащий объявленные в пазлах процедуры, API физического движка, и др.
- VARS — доступ к переменным пазлов
- PROC — доступ к процедурным пазлам

#### Особенности использования встроенных модулей для вкладки "Init" и других вкладок

- Встроенная переменная app недоступна для этого пазла, если она используется внутри вкладки Init, поскольку на этом этапе приложение еще не инициализировано должным образом.
- Переменные и процедуры, объявленные на вкладке Init, не могут быть доступны из других вкладок через VARS, PROC и наоборот.

#

### call external function

Выполняет функцию, указанную в «Ява Скрипт»-коде приложения. По желанию передает параметры для использования в качестве аргументов функции.

Для того, чтобы добавить функцию в код приложения на «Ява Скрипте», откройте .js-файл приложения (например, my_awesome_app.js, расположенный в подпапке my_awesome_app папки приложений) в любом текстовом редакторе. Найдите `prepareExternalInterface` и добавьте свою функцию внутрь этого объявления (между фигурными скобками), чтобы она выглядела следующим образом:

`function prepareExternalInterface(app) { app.ExternalInterface.myJSFunction = function(numericArg, textArg) { alert('Got some params from Puzzles: ' + numericArg + ' and ' + textArg); } }`

#

### load data

Загрузить данные из указанного места. Доступ к полученным данным можно получить с помощью пазла loaded data. JSON-объекты автоматически конвертируются в словари, а все остальные форматы данных возвращаются как текстовые строки.

По умолчанию результат запроса кешируется, поэтому все последующие вызовы этого пазла возвращают то же самое значение. Чтобы отключить кеширование, нажмите на значок шестерёнке и включите опцию disable caching. Настройка enable "on error" slot используется для обработки ошибок с помощью дополнительного слота on error do.

#

### send data

Отправляет указанные данные с помощью асинхронного POST HTTP-запроса. Доступ к полученным данным можно получить с помощью пазла loaded data. JSON-объекты (отправляемые и получаемые) автоматически конвертируются в словари, значения form data отправляются как есть, а все остальные форматы данных отправляются/принимаются как текстовые строки.

Слот enable "with headers " slot используется чтобы назначить дополнительные заголовки запроса с помощью объекта-словаря. Настройка enable "on error" slot используется для обработки ошибок с помощью дополнительного слота on error do.

Учитывайте, что браузеры могут сохранять локальные копии полученных данных для ускорения последующих загрузок. Чтобы предотвратить кеширование, вы можете добавить параметр, меняющий УРЛ-адрес каждый раз когда делается новый запрос. Чтобы добавить такой параметр, используйте пазлы set URL param и elapsed total:

#

### loaded data

Возвращает данные, полученные с помощью пазлов load data и send data.

#

### stringify json

Преобразует любые данные (в большинстве случаев словари и списки) в JSON-строку.

Пазл полезен для сохранения данных в виде атрибутов HTML-элементов и в локальном хранилище браузера, отправки по сети, хранения в базе данных, использования в виде параметры страницы и т.д.

Пример:

#

### parse json

Интерпретирует текст (или Data URL) как данные в формате JSON и возвращает их в виде словаря.

Пазл производит обратную операцию к пазлу stringify json:

#

### read CSV

Интерпретирует текст (или ссылку Data URL) как CSV-файл. Возвращает список строк таблицы, причем каждая строка представлена в виде списка значений. Разделитель может быть выбран с помощью выпадающего списка, чтобы соответствовать настройкам экспорта CSV-файла. Значение from row указывает, сколько строк будет пропущено, начиная с верхней.

Доступ к строкам и значениям таблицы осуществляется по их числовым индексам, начиная с `0`.

#

### connector

Этот пазл позволяет соединять другие пазлы между собой, чтобы их было удобнее перемещать, удалять и использовать в других пазлах. Одно из применений — объединение пазлов load sound или load video в одну группу для организации предварительной загрузки медиаресурсов в вашем приложении.

#

### connector (слотовый)

Этот пазл позволяет объединять несколько пазлов между собой, чтобы их было удобнее перемещать, удалять, комментировать и использовать в составе библиотеки.

#

### save state

Сохраняет состояние указанных объектов и/или значения переменных, заданных их именами. Объекты клонируются и сохраняются в памяти. Значения переменных извлекаются и сохраняются в памяти для каждого указанного имени переменной.

Если этот пазл вызывается несколько раз, состояния сохраняются в последовательности, чтобы можно было вернуться к любому предыдущему состоянию с помощью пазла undo state.

#

### undo state

Восстанавливает состояние объектов и/или переменных, сохраненных с помощью пазла save state.

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

#

### all variable names

Возвращает список с именами всех переменных, используемых в пазлах.

#

### variable value by name

Возвращает значение переменной, заданной её именем. Этот пазл работает аналогично стандартному пазлу значение переменной, но не требует выбора переменной из предопределенного выпадающего меню.

#

### JavaScript object

Возвращает заданный «Ява Скрипт»-объект.

С помощью этого пазла можно получить следующие объекты «Ява Скрипт»:

arguments

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

  Например, при использовании пазла when clicked можно получить внутреннее событие «Ява Скрипт», которое запускает логику пазла, используя первый аргумент обработчика, выполняемого за слотом do. В примере ниже мы используем это событие для получения координат X и Y указателя мыши:

  Следующие пазлы поддерживают расширенные опции:

  - when clicked, when hovered, when dragged — mouse или touch события, которые запускают пазлы в слотах do.
  - after, set timer — идентификатор таймера, возвращаемый внутренним вызовом этих пазлов setInterval().
  - every frame — разница и общее прошедшее время.
  - on event of — объект события.
  - on session event — объект WebXR-события.
html element

  Возвращает словарь с DOM-объектом для указанного HTML-элемента. Эта возможность может быть полезна для доступа к свойствам элементов, которые пока не поддерживаются пазлами set property и get property.

form data
  Возвращает объект FormData для заданного элемента-формы `<form>`. В частности, используется для отправки пользовательских форм на почту.
this
  Значение `this` «Ява Скрипта».
window

  Возвращает объект верхнего уровня `window` в виде словаря.

#

### wait promise

Дожидается разрешения или отклонения промиса и возвращает его значение (или причину отклонения) в пазле promise value.

Этот пазл может потребоваться для получения значения пазлов export to gltf и generate normal map. Будучи по своей природе асинхронными, эти пазлы не возвращают значение сразу. Вместо этого они возвращают промисы, которые неявно разрешаются внутри пазлов, на вход которых приходят. В некоторых редких случаях это разрешение не происходит. В этих случаях для разрешения промисов следует использовать wait promise.

#

### promise value

Значение разрешенного промиса (в случае разрешённого промиса) или строка ошибки (в случае отклоненного промиса).

#

### get procedure

Этот пазл используется чтобы получить процедуру, определённую где-то в пазлах. Возвращаемое значение может быть сохранено в переменную или подано в другую процедуру в качестве параметра и вызвано позже с помощью пазла call procedure.

#

### call procedure

Вызывает процедуру, полученную ранее с помощью пазла get procedure. Также может передавать параметры в указанную процедуру. Существует 2 варианта пазла "call procedure" — с и без возвращаемого значения.

#

### add event listener

Добавляет обработчик события указанного типа, то есть данный пазл вызовет процедуру, полученную с помощью пазла get procedure в момент отправки события определённого типа.

#

### remove event listener

Удаляет обработчик события, то есть удаляет процедуру-обработчик событий данного типа.

#

### dispatch event

Отправляет событие указанного типа. Также может передавать параметры в процедуру-обработчик (одни и те же для каждой).

## Проблемы с пазлами?

Обращайтесь за помощью на наш форум!