JavaScript-Ini, файл конфигурации для JavaScript
Сценарий загрузки и сохранения файла конфигурации JSON, который автоматически создает пользовательский интерфейс для настройки приложения.
Смысл этого сценария в том, что разработчику нужно только задать список параметров настройки приложения в таблице JSON. Сценарий отвечает за создание соответствующего интерфейса пользователя в HTML и обновление файла конфигурации для сохранения выбора пользователя.
- Параметры задаются в JSON-файле. Он содержит начальные значения, которые пользователь может изменить.
- Файл JSON загружается на веб-страницу, и этот сценарий создает форму в соответствии с ее содержимым.
- Пользователь может изменить параметры из этой интерактивной формы.
- Изменения сохраняются в том же JSON-файле.
Сценарий использует Ajax для сохранения конфигурационного файла, который может находиться на локальном компьютере или на сервере для онлайн-приложения.
На самом деле у вас есть выбор между
- Отправить данные на другую страницу или сценарий с помощью кнопки Submit.
В этом случае можно удалить включение фреймворка Ajax - Используйте Ajax для хранения данных непосредственно в файле.
В этом случае можно удалить строки генерации из тега form.
По умолчанию в демо используется Ajax.
Файл конфигурации и его загрузка
Чтобы загрузить его очень просто, достаточно включить INI-файл в качестве JavaScript-скрипта:
<script type="text/javascript" src="myapp.ini"></script>
Этот файл содержит таблицу с именем config, которая затем включена в страницу интерфейса и может использоваться кодом JavaScript страницы.
Пример файла конфигурации:
var config={ "Language": { "name": "lang", "initial": "es", "select": [ "en", "fr", "es"] }, "Url": { "name": "url", "input": "http://www.scriptol.com/", }, "Saving options": { "list": [ { "name": "save", "label": "Autosave", "checkbox": true }, { "name": "prompt", "label": "Prompt", "checkbox": false } ] } }
Этот файл содержит три примера разделов: «Language», «Url», «Saving options». Название разделов абсолютно свободно.
Они могут содержать один или несколько объектов формы, как и в третьем разделе. В таблицу конфигурации можно добавить столько разделов и объектов форм, сколько необходимо.
Ряд зарезервированных слов используется генератором:
- список: чтобы включить список объектов формы .
- name - имя и идентификатор объекта формы ;
- метка - текст, который должен отображаться напротив объекта.
- начальный - начальное значение. Он также может быть назначен непосредственно объекту, это тот случай для ввода, проверки.
- input: чтобы создать поле ввода текста .
- select: создает список параметров. Затем присваивается список вариантов, как указано выше.
- checkbox: для флажка. Для предустановленного флажка присваивается значение true, если нет .
Порядок важен внутри секции. Перед созданием объекта формы должны быть значения имени и начального значения.
Создание формы
Мы создаем маяки fieldset и form, а затем просматриваем список разделов:
form +="<fieldset><legend>Configuration</legend>\n"; form +="<form method='POST' action='myapp.php'>\n"; for(group in config) { form += "<p class='group'>" + group + "</p>"; parseGroup(config[group]); } form += "<p><input type='button' onclick='saveIni(\"myapp.ini\")' value='Update Configuration'></p>"; form += "</form>"; form += "</fieldset>";
Мы создали объект типа button, чтобы сохранить конфигурацию в Ajax. Если требуется отправить данные формы в сценарий с помощью POST, тип кнопки будет заменен на submit.
Для каждого раздела называется функция создания объекта формы parseGroup:
function parseGroup(innarr) { var initial = ''; var name = ''; for(option in innarr) { switch(option) { case 'list': var garr = innarr[option]; for(var i = 0; i < garr.length; i++) { parseGroup(garr[i]); form +="<br>"; } break; case 'label': addLabel(innarr[option]); break; case 'name': name = innarr[option]; break; case 'initial': initial = innarr[option]; break; case 'select': addSelect(name, initial, innarr[option]); break; case 'input': addInput(name, innarr[option]); break; case 'checkbox': addCheck(name, innarr['checkbox']); break; default: break; } } }
Затем для каждого типа тега вызывается функция. Полный сценарий см. в демонстрационном архиве.
Этот сценарий позволяет создать следующий интерфейс:
После выбора параметров приложения нажмите кнопку «Обновить» для сохранения конфигурации.
Резервное копирование конфигурации
Тот же алгоритм используется для обновления таблицы конфигурации перед ее резервированием в INI-файл.
Опять же, каждый раздел :
function update(config) { for(group in config) { updateEntry(config[group]); } }
И для каждого из них доступ к каждому объекту формы осуществляется в соответствии с его идентификатором. Это то, что было назначено атрибуту name в JSON-файле .
function updateEntry(innarr) { var initial = ''; var name = ''; var element = null; for(option in innarr) { switch(option) { case 'list': var garr = innarr[option]; for(var i = 0; i < garr.length; i++) { updateEntry(garr[i]); } break; case 'name': name = innarr[option]; element = document.getElementById(name); break; case 'initial': initial = innarr[option]; break; case 'select': var value = element.options[element.selectedIndex].value; innarr['initial'] = value; break; case 'input': innarr['input'] = element.value; break; case 'checkbox': innarr['checkbox'] = element.checked; break; default: break; } } }
Поэтому заданные пользователем значения присваиваются атрибутам таблицы, и это зависит от типа объекта формы. Остается сохранить таблицу конфигурации в файле myapp.ini. Функция saveInit связана с кнопкой update.
function done(content) { alert(content); } function saveIni(filename) { update(config); var data = 'url=' + filename + '&data=var config=' + JSON.stringify(config, null, 4); AAWrite('saveconfig.php', data, done); }
Функция AAWrite в легком фреймворке Ajax Anaa называется для выполнения сценария saveconfig.php, к которому отсылается содержимое JSON. Сценарий saveconfig.php сохраняет это содержимое в ini-файле. Вот этот сценарий:
<?php $data = $_POST['data']; $url = $_POST['url']; $f = fopen($url, 'w'); fputs($f, $data); fclose($f); echo "Saved."; ?>
Если использовать JavaScript-Ini для локального приложения с Node.js, вместо фреймворка Anaa вместо него нужно будет использовать WebSocket и включить в страницу интерфейса socket.io.
Загрузить полную демонстрацию Ajax
Список файлов:
- JavaScript-ini.html: страница настройки.
- javaScript-ini.js - сценарий для генерации интерфейса и сохранения параметров.
- anaa.js: фреймворк Ajax.
- myapp.ini - файл конфигурации, содержащий таблицу.
- saveconfig.php - сценарий резервного копирования конфигурационного файла .